添加新规则时 iptables 超出配额

添加新规则时 iptables 超出配额

我在 Centos 7 上运行了 iptables,使用版本 v1.4.21,但也在 v1.6.0 上进行了测试(请注意,我没有重建内核,因为它说我不再需要进行扩展)。

我设置了一个配额并且使用它:

# iptables -nvx -L 192.168.2.5
Chain 192.168.2.5 (2 references)
    pkts      bytes target     prot opt in     out     source               destination
    3639  3999378 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            quota: 4000000 bytes
     142   175468 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0
#

然后,当我向该链中添加任何其他规则时,现有规则会“重置”字节使用情况并再次用完配额:

# iptables -I 192.168.2.5 -m quota --quota 1000 -j ACCEPT
# iptables -nvx -L 192.168.2.5
Chain 192.168.2.5 (2 references)
    pkts      bytes target     prot opt in     out     source               destination
       2      168 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            quota: 1000 bytes
    7239  7998334 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            quota: 4000000 bytes
     890   387931 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0

即使没有超出,此行为也总是将配额数量添加到规则中,即使我正在影响不同的规则:

# iptables -nvx -L 192.168.2.5
Chain 192.168.2.5 (2 references)
    pkts      bytes target     prot opt in     out     source               destination
     379    67755 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            quota: 4000000 bytes
       0        0 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0
# iptables -I 192.168.2.5 -m quota --quota 1000 -j ACCEPT
# iptables -nvx -L 192.168.2.5
Chain 192.168.2.5 (2 references)
    pkts      bytes target     prot opt in     out     source               destination
       2      168 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            quota: 1000 bytes
     379    67755 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            quota: 4000000 bytes
       0        0 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0
# iptables -nvx -L 192.168.2.5
Chain 192.168.2.5 (2 references)
    pkts      bytes target     prot opt in     out     source               destination
      11      924 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            quota: 1000 bytes
    4159  4066453 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            quota: 4000000 bytes
     315   190056 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0

这似乎是一个错误,也许与这个

有什么想法吗?我的一个解决方法是自己捕获字节并将它们添加到新规则的配额中。当已经超出时,这种方法很有效,但如果没有,我可能会因为读取、计算、删除和添加之间的差距而错过字节。

答案1

阅读您链接并测试的其他问题后,我只能得出结论:配额模块不是很有用:只要发生变化就会重置。

这就是为什么还有一个名为quota2的模块!它不是iptables的一部分,而是xtables-addons的一部分。在Debian中,它是可用的,并且在安装时使用xtables-addons-dkms进行编译。我认为你必须在CentOS7中自己编译它。

手册页中的三个摘录(可以在这里找到:xtables-插件.8

计数器的值可以通过procfs读取和重置,从而使该匹配成为一个极简的会计工具。

--name name
为计数器指定一个特定名称。必须存在此选项,

配额出现在 /proc/net/xt_quota/ 中姓名并且可读/写

--quota iq
指定此计数器的初始配额。如果计数器已存在,则不会重置。

这意味着必须使用 iptables 本身之外的一些逻辑(例如,如果必须重新启动服务器,则保存剩余配额并在启动时恢复),但这肯定能解决您的问题。

相关内容