Linux

無法向 iptables 添加大量規則

  • March 30, 2015

我製作了一個非常簡單的 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,我不打算這樣做。

引用自:https://unix.stackexchange.com/questions/53857