如何使用 iptables 计算来自外部的数据包?

如何使用 iptables 计算来自外部的数据包?

如果您没有为 iptables 指定目标,它只会计算与规则匹配的字节数和数据包数。我想计算来自外部的所有数据包,即不匹配 10.0.0.0/8 和不匹配 192.168.0.0/16 的数据包。

我的第一直觉是:

iptables -A INPUT ! -s 10.0.0.0/8,192.168.0.0/16

但是这增加了两条规则,每条规则单独计数,无法识别外部数据包的数量。那么如何计数外部数据包呢?

答案1

我很想通过创建一个链来做类似的事情。然后向链中添加规则以返回您不想要的东西。持续到链的最后一条规则的东西将是您想要的东西。

# untested
# create a new input counter chain
/sbin/iptables -t filter -N inputcounter
# redirect all traffic to chain
/sbin/iptables -t filter -A INPUT -j inputcounter
# return stuff we don't want to count
/sbin/iptables -t filter -A inputcounter -s 10.0.0.0/8 -j RETURN
/sbin/iptables -t filter -A inputcounter -s 192.168.0.0/16 -j RETURN
# Final rule will return everything else.  This should be a count of 
# everything that wasn't not previously excluded
/sbin/iptables -t filter -A inputcounter -j RETURN

相关内容