Com uma regra de log padrão "ct state new" obtemos os detalhes sobre uma nova sessão, no entanto, obtemos apenas o tamanho dos dados do primeiro pacote olhando em LEN, ou seja
2024-06-15T10:11:31.829667+00:00 deepu kernel: ALLOW INPUT: IN=ens33 OUT= MAC=ff:ff:ff:ff:ff:ff:3a:f9:d3:87:89:65:08:cc SRC=172.16.0.1 DST=172.16.0.255 LEN=72 TOS=0x00 PREC=0x00 TTL=64 ID=32643 PROTO=UDP SPT=57621 DPT=57621
Neste, vemos 72 bytes.
Como podemos registrar o volume total de dados transferidos naquela sessão? Por exemplo, se este fosse um download de arquivo de 100 MB, eu gostaria de ver um download de 100 MB, além de alguns pequenos pacotes de estabelecimento TCP, etc.
Os contadores
iptables
/ básicosnftables
rastreiam apenas o número de bytes/pacotes que correspondem a uma regra específica, independentemente da conexão a que pertencem.Para estatísticas por sessão, você precisaria rastrear conexões individuais e registrar estatísticas de conexão sempre que uma conexão terminasse. Parece um trabalho para o subsistema de rastreamento de conexão!
Pelo menos no Debian, existe um
conntrackd
pacote, que inclui um exemplo de configuração em/usr/share/doc/conntrackd/examples/stats/conntrackd.conf
, para escrever estatísticas sobre o término de conexões/var/log/conntrackd-stats.log
por padrão. Isso pode ser exatamente o que você está pedindo.