iptables,阻止大量 IP 地址

iptables,阻止大量 IP 地址

如果 IP 地址看起来是从我们托管的网站上“截取屏幕”内容,我希望以相对自动化的方式阻止它们。过去,这是通过一些巧妙的 perl 脚本和 OpenBSD 的 pf 实现的。pf 的出色之处在于,您可以为其提供漂亮的 IP 地址表,它会根据这些表有效地处理阻止。然而,由于各种原因(在我之前),他们决定改用 CentOS。iptables 本身不提供阻止大量地址的能力(我听说阻止 5000 多个地址并不罕见),我对在 iptable 中添加那么多规则有点谨慎。

ipt_recent 非常适合做这个,而且它提供了很多灵活性,但严重减慢了访问速度,但 CentOS 内核中有一个错误阻止我无法使用它(已报告,但正在等待修复)。

使用 ipset 需要编译比 CentOS 自带的更新版本的 iptables,虽然我完全有能力做到这一点,但从修补、安全性和一致性的角度来看,我宁愿不这样做。

除了这两个之外,nfblock 似乎是一个合理的替代方案。有人知道实现此目的的其他方法吗?我对 iptables 中数千个 IP 地址作为单独规则的担忧是否毫无根据?

答案1

iptables是用于操作 netfilter 的用户空间工具。netfilter 是内核中处理数据包过滤的代码。从上下文来看,更改用户空间工具只会改变您的体验,而不会改变过滤的运行方式。

我从未遇到过 Linux 中规则数量的限制,自从 userland 工具出现以来,我一直使用 Linux 进行防火墙ipfwadm。值得注意的是,Netfilter 直到 2.4.x 内核才被引入 Linux,并且ipfwadm是 ipfw 而不是 netfilter 的接口。如果您可以继续在您的环境中使用 OpenBSD,那么它非常适合用作防火墙。

该限制可能是基于系统资源的物理限制,重点是可用 RAM 的数量。如果遇到问题,您可能需要在内核中调整 Linux 的最大 IP 连接设置。在使用现代 Linux 发行版的现代硬件上,您不太可能遇到这两种情况。

如果您想讨论 netfilter 的更详细信息,您最好在 netfilter 邮件列表上进一步讨论,因为他们是该主题的专家。

如果这没有回答您的问题,请随时澄清,我会很乐意修改它。

Netfilter 用户遇到内存限制,测试 netfilter 限制

答案2

在不对内核造成太大压力的情况下阻止大量 IP 地址的最佳方法是使用命令对它们进行空路由:

root@machine# ip route add blackhole 192.168.1.1/32

iptables 并不适合很多规则。

http://en.wikipedia.org/wiki/Null_route

答案3

我认为他提到的错误是在 netfilter 代码中,特别是 ipt_recent 模块。我似乎限制在 4k(32 位)和 8k(64 位)。

看:

https://bugzilla.redhat.com/show_bug.cgi?id=571322

答案4

5000 条规则不是问题,但是http://www.hipac.org/它在处理大量规则方面确实表现得相当好。

相关内容