如何使用 IPTables 来保持往返于单个 IP 的数据总量的运行?

如何使用 IPTables 来保持往返于单个 IP 的数据总量的运行?

我需要记录我的服务器和远程服务器(端口不特定)之间传递的字节总数。我想将这个总数写入一个文件。我对 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

相关内容