無法向 iptables 添加大量規則
我製作了一個非常簡單的 bash 腳本(開始時回顯,執行命令,結束時回顯)向 iptables 添加大約 7300 條規則,阻止了中國和俄羅斯的大部分地區,但是它通過添加大約 400 條規則,然後為每次後續嘗試提供以下錯誤向該鏈添加規則:
iptables: Unknown error 18446744073709551615
之後我什至嘗試手動添加規則,但它不允許我添加它們(它給出了相同的錯誤)。
添加每個規則的命令如下所示:
/sbin/iptables -A sshguard -s x.x.x.0/x -j DROP
sshguard
是我為與sshguard守護程序一起使用而創建的鏈,我想在其中添加規則,以免混淆INPUT
鏈。我提供的 ip 範圍不應該歸咎於此,因為我提供了有效的範圍進行測試,並且它們遇到了相同的錯誤。刷新規則鏈並添加單個規則是可行的,但同樣,在約 400 個條目之後就不行了。我事先做了一些Google搜尋,但其他有這個問題的人似乎並沒有因為與我相同的原因。
iptables 每個鍊是否有某種規則限制?此外,這是阻止這些範圍的正確方法(除了錯誤)嗎?
# iptables -V iptables v1.3.5 # cat /etc/issue CentOS release 5.8 (Final) # uname -a Linux domain.com 2.6.18-028stab101.1 #1 SMP Sun Jun 24 19:50:48 MSD 2012 x86_64 x86_64 x86_64 GNU/Linux
**編輯:**為了澄清,bash 腳本單獨執行每個 iptables 命令,而不是循環通過文件或 IP 列表。
此外,我阻止這些範圍的目的是預防性的——我試圖限制在我的一些網站上抓取、抓取或嘗試創建垃圾郵件帳戶的機器人數量。我已經在使用sshguard來阻止我的伺服器上的暴力破解嘗試,但這顯然對其他機器人沒有幫助。
好的,我想通了。
我應該提到我的 VPS 有一個 Virtuozzo 容器。http://kb.parallels.com/en/746提到以下內容:
此外,可能需要增加 numiptent 屏障值才能添加更多 iptables 規則:
~# vzctl set 101 --save --numiptent 400
僅供參考:容器必須重新啟動才能生效。
這就解釋了為什麼我在 400 左右達到了限制。如果我有 CentOS 6,我會安裝
ipset
模組(EPEL)iptables
而不是添加所有這些規則(因為ipset
速度很快)。就目前而言,在 CentOS 5.9 上,我必須編譯
iptables
>1.4.4
和我的核心才能獲得ipset
. 由於這是一個 VPS,而我的主機最終可能會升級到 CentOS 6,我不打算這樣做。