使用标准日志规则“ct state new”,我们可以获得有关新会话的详细信息,但是,我们只能获得 LEN 中第一个数据包的数据大小,即
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
其中,我们看到 72 个字节。
我们如何记录该会话中传输的数据总量?例如,如果这是 100MB 的文件下载,我希望看到 100MB 的下载,加上 TCP 建立的几个小数据包等。
基本
iptables
/nftables
计数器仅跟踪与特定规则匹配的字节数/包数,而不管它们属于哪个连接。对于每个会话的统计数据,您需要跟踪单个连接,并在连接结束时记录连接统计数据。这听起来像是连接跟踪子系统的工作!
至少在 Debian 上,有一个
conntrackd
软件包,其中包含一个配置示例/usr/share/doc/conntrackd/examples/stats/conntrackd.conf
,用于默认写入有关结束连接的统计信息/var/log/conntrackd-stats.log
。这可能正是您所要求的。