我们有一台配备四核 AMD Opteron 处理器 2378 的服务器。它充当我们多台服务器的防火墙。我被要求屏蔽来自中国的所有 IP。
在单独的网络中,我们有一些小型 VPS 机器(256MB 和 512MB)。我还被要求在这些 VPS 上屏蔽中国。
我在网上查找并发现需要 4500 条阻止规则的列表。我的问题是放入所有 4500 条规则会不会有问题?我知道 iptables 可以处理的规则远不止这些,我担心的是,由于这些是我不想访问任何端口的阻止,我需要将这些规则放在任何允许之前。这意味着所有合法流量在通过之前都需要与所有这些规则进行比较。实施此操作后,流量会明显变慢吗?这些小型 VPS 是否能够处理每个新数据包的那么多规则(我会在阻止之前放置一个已建立的允许)?
我的问题不是iptables 可以支持多少条规则?,它是关于这些规则对负载和速度的影响。
谢谢。
答案1
它将支持那么多规则,但您确实不想遍历 4500 条规则链。
正如 @Zoredache 指出的那样,您也可以对链进行二分。如果您做得完美,您可以将链遍历次数降低到 13。
最简单的方式是使用 ipset。
我正在使用 EL6,它提供了对此的支持。显然,我不了解所有的中国网络块,所以我只是用垃圾填充它。
ipset create china hash:net
ipset add china 1.2.3.0/24
ipset add china 2.4.0.0/16
ipset add china 123.0.0.0/8
ipset add china 145.12.5.0/24
然后向 IPtables 添加一条规则来匹配该集合并丢弃流量..
iptables -I INPUT -m set --match-set china src -j DROP
这比标准规则链更加高效、快速。