如果 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 邮件列表上进一步讨论,因为他们是该主题的专家。
如果这没有回答您的问题,请随时澄清,我会很乐意修改它。
答案2
在不对内核造成太大压力的情况下阻止大量 IP 地址的最佳方法是使用命令对它们进行空路由:
root@machine# ip route add blackhole 192.168.1.1/32
iptables 并不适合很多规则。
答案3
我认为他提到的错误是在 netfilter 代码中,特别是 ipt_recent 模块。我似乎限制在 4k(32 位)和 8k(64 位)。
看:
答案4
5000 条规则不是问题,但是http://www.hipac.org/它在处理大量规则方面确实表现得相当好。