![使用 iptables 进行阻止会很慢吗?](https://linux22.com/image/1522179/%E4%BD%BF%E7%94%A8%20iptables%20%E8%BF%9B%E8%A1%8C%E9%98%BB%E6%AD%A2%E4%BC%9A%E5%BE%88%E6%85%A2%E5%90%97%EF%BC%9F.png)
我已经使用以下命令阻止了所有 Tor 节点:
sudo iptables -A INPUT -s $ip -j DROP
我认为有大约 1,700 个 IP 像这样被封锁。
我读到过,使用此命令进行阻止可能会很慢。这是真的吗?如果是,有什么更好的替代方案吗?
答案1
根据致 Jan Engelhardt (OpenSUSE 社区内核打包领域的活跃人士之一):
32 位环境的最大规则数量的理论上限约为 3800 万条
但规则繁多的真正瓶颈是内存。应用此类规则时,您需要监控内存,/proc/vmalloc
以避免交换,因为交换会大大降低计算机速度。
正如前面提到的IP设置为了管理这种过多的阻止规则,您可以分配新规则并以有效的方式删除以前分配的规则,例如:
# Create the new set and add the entries to it
ipset -N new-set ....
ipset -A new-set ....
...
# Swap the old and new sets
ipset -W old-set new-set
# Get rid of the old set, which is now under new-set
ipset -X new-set
答案2
它比较慢,但您的硬件可能支持您的规则集。更好的替代方案是使用 ipset 和引用该集的 iptables 规则。 信息集将地址和网络存储在高效的数据结构中,与基本 netfilter 处理相比,该数据结构可以更快地搜索匹配项。