我需要记录我的服务器和远程服务器(端口不特定)之间传递的字节总数。我想将这个总数写入一个文件。我对 IPtables 有点陌生,但我不确定是否需要将所有匹配的数据包排队以供脚本处理(不懂 Python,但读取总字节数可能不太难)。IPtables 似乎可以使用日志开箱即用地做到这一点,但文档有点让我不知所措。
iptables -I INPUT 1 -s <remote ip>/8 -j QUEUE ???
iptables -I OUTPUT 1 -d <remote ip>/8 -j QUEUE ???
任何关于将其指向一个 python 文件或一个 iptables 链以便可以立即处理这个问题的帮助都会非常有用。
答案1
您不需要指定跳转目标。选择您要计数的数据包,完成。
-j, --jump 目标
这指定了规则的目标;即,如果数据包匹配该规则该做什么。 [...]
如果在规则中省略此选项(并且未使用 -g),则匹配该规则将不会影响数据包的命运,但规则上的计数器将会增加。
要记住的事情:
- 为将来查看这些规则的人添加一些解释
- 很少有自己的 /8 ipv4 块,请尝试更具体一些,这样您就不会计算邻近的流量
- 添加类似的 ipv6 规则
- 在其他表中对数据包进行 NAT 或 DROP 可能会导致计数过高或过低,具体取决于您实际想要测量的内容
- 根据您的操作系统,iptables 中的计数器在重启或配置更改后可能无法可靠地恢复
例子:
iptables -I INPUT 1 -s 192.0.2.1/32 -m comment --comment "billing: example company"
ip6tables -I INPUT 1 -s 2001:db8::1/128 -m comment --comment "billing: example company"
iptables -I OUTPUT 1 -d 192.0.2.1/32 -m comment --comment "billing: example company"
ip6tables -I OUTPUT 1 -d 2001:db8::1/128 -m comment --comment "billing: example company"
验证iptables -L | grep example ; ip6tables -L | grep example