情况迫使我们打开一个互联网端口,我们希望建立一个允许访问该端口的 IP 范围“白名单”。我已经对解决方案进行了原型设计,因此我了解其实现。人们担心拥有大量白名单(5000 个范围)的影响。有什么方法可以描述这样的规则集对性能的影响吗?如何从 iptables 中获取指标?
答案1
最近的 Core cpu 应该能够很好地处理这个问题。
不过,看看规则能否优化也无妨。根据 IP 地址的分布,可以提供帮助的一件事是将规则分为 8 个部分:
iptables -N ourtable
iptables -N ourtable-000
iptables -N ourtable-032
iptables -N ourtable-064
iptables -N ourtable-096
iptables -N ourtable-128
iptables -N ourtable-160
iptables -N ourtable-192
iptables -N ourtable-224
iptables -A INPUT -p tcp --dport 12345 -j ourtable
iptables -A ourtable -s 0.0.0.0/3 -j ourtable-000
iptables -A ourtable -s 32.0.0.0/3 -j ourtable-032
iptables -A ourtable -s 64.0.0.0/3 -j ourtable-064
iptables -A ourtable -s 96.0.0.0/3 -j ourtable-096
iptables -A ourtable -s 128.0.0.0/3 -j ourtable-128
iptables -A ourtable -s 160.0.0.0/3 -j ourtable-160
iptables -A ourtable -s 192.0.0.0/3 -j ourtable-192
iptables -A ourtable -s 224.0.0.0/3 -j ourtable-224
iptables -A ourtable-000 -s 1.2.3.4 -j ACCEPT
...
iptables -A ourtable-000 -j DROP
iptables -A ourtable-032 -s 32.1.2.3 -j ACCEPT
...
iptables -A ourtable-032 -j DROP
# etc...
这样,将根据 625 个规则而不是 5000 个规则检查数据包(当然假设地址分布均匀,但情况可能并非如此;您可以相应地调整整个地址空间的划分)。
我还假设您的列表中已经有子网(即,如果您需要允许 172.18.0.0 到 172.18.0.7,请将其替换为 172.18.0.0/29)。如果不是,请检查此类范围。在 Debian 上,我使用该netmask
实用程序来查看给定的网络掩码涵盖的内容:
$ $ netmask -r 172.18.0.0/29
172.18.0.0-172.18.0.7 (8)