无法向iptables添加大量规则

Bre*_*dan 5 linux firewall iptables limit

我制作了一个非常简单的 bash 脚本(开始时回声,运行命令,最后回声)向 iptables 添加大约 7300 条规则,阻止了中国和俄罗斯的大部分地区,但是它通过添加大约 400 条规则在每次后续尝试给出以下错误之前向该链添加规则:

iptables: Unknown error 18446744073709551615
Run Code Online (Sandbox Code Playgroud)

之后我什至尝试手动添加规则,但它不会让我添加它们(它给出了相同的错误)。

添加每个规则的命令如下所示:

/sbin/iptables -A sshguard -s x.x.x.0/x -j DROP
Run Code Online (Sandbox Code Playgroud)

sshguard是我为与sshguard守护程序一起使用而创建的链,我想在那里添加规则,这样我就不会弄乱INPUT链。我提供的 ip 范围不应归咎于此,因为我提供了有效的范围进行测试,但它们遇到了相同的错误。刷新规则链并添加单独的规则链是可行的,但同样,不是在大约 400 个条目之后。

我事先做了一些谷歌搜索,但其他有这个问题的人似乎没有和我一样的原因。

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
Run Code Online (Sandbox Code Playgroud)

编辑:澄清一下,bash 脚本单独运行每个 iptables 命令,而不是遍历文件或 IP 列表。

此外,我阻止这些范围的目的是预防性的——我试图限制在我的一些网站上抓取、抓取或尝试创建垃圾邮件帐户的机器人数量。我已经在使用sshguard来阻止我的服务器上的蛮力尝试,但这显然对其他机器人没有帮助。

Bre*_*dan 2

好吧,我明白了。

我应该提到我的 VPS 有一个 Virtuozzo 容器。http://kb.parallels.com/en/746提到以下内容:

此外,可能需要增加 numptent 屏障值才能添加更多 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,因此我不会追求这一点。