Centos
添加新規則時 iptables 超出配額
我有 iptables 在 Centos 7 上工作,使用版本 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
這似乎是一個錯誤,也許與這個有關。
有任何想法嗎?我的一種解決方法是自己擷取字節並將它們添加到新規則的配額中。當它已經超過時效果很好,但如果沒有,我可能會因為讀取、計算、刪除和添加之間的差距而錯過字節。
閱讀您連結和測試的另一個問題,我只能得出結論,配額模組不是很有用:每當發生變化時重置。
這就是為什麼還有一個名為 quota2 的模組的原因!它不是 iptables 的一部分,而是 xtables-addons 的一部分。在 Debian 中,它可以使用 xtables-addons-dkms 安裝並編譯。我認為您必須在 CentOS7 中自己編譯它。
手冊頁的三個摘錄(可以在這裡找到:xtables-addons.8)
通過procfs可以讀取和重置計數器的值,從而使這個匹配成為一個極簡的記賬工具。
.
–name name
為計數器指定一個特定的名稱。此選項必須存在,
配額出現在 /proc/net/xt_quota/名稱中並且是讀/寫的
–quota iq
指定此計數器的初始配額。如果計數器已經存在,則不會重置。
這意味著必須使用 iptables 本身之外的一些邏輯(例如,如果您必須重新啟動伺服器,則保存剩餘配額並在啟動時恢復),但這肯定會解決您的問題。