iptables 屏蔽规则的数量太多了

mho*_*ost 6 iptables

我们有一台带有四核 AMD Opteron 处理器 2378 的服务器。它充当我们多台服务器的防火墙。我被要求阻止所有来自中国的 IP。

在一个单独的网络中,我们有一些小型 VPS 机器(256MB 和 512MB)。我也被要求在那些 VPS 上屏蔽中国。

我在网上查看并找到了需要 4500 条阻止规则的列表。我的问题是将所有 4500 条规则都放入会不会有问题?我知道 iptables 可以处理的规则远不止这些,我担心的是因为这些是我不想访问任何端口的块,所以我需要将这些规则放在任何允许之前。这意味着在通过之前,所有合法流量都需要与所有这些规则进行比较。执行此操作后,流量会明显变慢吗?那些小型 VPS 是否能够为每个新数据包处理那么多规则(我将在块之前放置一个既定的允许)?

我的问题不是iptables可以支持多少条规则?,它是关于这些规则对负载和速度的影响。

谢谢。

Mat*_*Ife 13

它将支持那么多规则,但您真的不想遍历 4500 条规则链。

正如@Zoredache 指出的那样,您也可以对链进行二进制拆分。如果你做得很好,你可以将链遍历的次数减少到 13 次。

最简单的方法是使用 ipsets。

我正在使用 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
Run Code Online (Sandbox Code Playgroud)

然后向 IPtables 添加规则以匹配该集合并丢弃流量..

iptables -I INPUT -m set --match-set china src -j DROP
Run Code Online (Sandbox Code Playgroud)

这比标准规则链效率更高、速度更快。

  • 您需要在中间分割处按其二进制 IP 对每个网络块进行排序。然后在左半部分,转到中间,拆分,右半部分,转到中间,拆分并继续减半并拆分新的一半,直到您没有任何可拆分的部分。老实说,如果没有自动化,这有点不可行。 (2认同)