使用 nftables 屏蔽大量 IP
内容提要
本文介绍了作者使用nftables屏蔽恶意IP地址的经历,通过调整规则定义成功实现了IP屏蔽功能。
延伸解读
从 iptables 迁移到 nftables 的性能考量
文章指出 iptables 规则匹配是 O(n) 时间复杂度,当规则数达到一万条时,下载速率被限制在 12MiB/s 左右,CPU 时间大量消耗在 softirq 上。作者通过添加跳过已建立连接的规则临时缓解,但最终转向 nftables。这提醒读者,在需要处理大量 IP 屏蔽的场景下,传统 iptables 可能成为性能瓶颈,而 nftables 的集合机制能更高效地管理大量条目。
nftables 动态集合与超时机制的实际应用
作者利用 nftables 集合的 timeout 和 dynamic 标志,创建了 IPv4 和 IPv6 两个集合,默认超时两天。规则中仅对访问 HTTP/HTTPS 端口的流量进行匹配和更新超时,避免误屏蔽自身。这种设计适合屏蔽动态 IP,因为两天无请求的 IP 会自动解除屏蔽。文章提到被屏蔽 IP 数量稳定在 26k 到 28k,softirq 占用低于 10%,说明该方案在性能和自动化之间取得了平衡。
运维自动化与监控的实践
作者编写了 Python 脚本,通过 nftables 的 JSON API 统计集合中 IP 的剩余超时时间,并生成直方图。这有助于了解屏蔽 IP 的分布和变化趋势。文章也提到 nftables 手册页难懂,但熟悉后可用。对于需要长期维护屏蔽列表的读者,可以借鉴这种结合脚本进行监控和自动清理的思路,减少手动操作。
Q&A
为什么作者选择使用nftables而不是继续使用iptables?
作者选择nftables是因为iptables在处理大量规则时性能下降,导致下载速度受限,而nftables支持超时的动态集合,适合临时屏蔽恶意IP。
nftables如何处理恶意IP的屏蔽?
nftables通过创建支持超时的动态集合来屏蔽恶意IP,自动解除在设定时间内未再请求的IP。
使用nftables屏蔽IP的性能表现如何?
被屏蔽的IP数量稳定在26k到28k之间,性能良好,softirq占用低于10%。
作者在使用nftables时遇到了什么困难?
作者觉得nftables的手册页难懂,但通过多次阅读后逐渐理解其结构。
作者是如何统计被屏蔽IP的流量的?
作者编写了一个Python脚本,通过nftables的API统计被屏蔽IP的流量。
作者对运营商的看法是什么?
作者谴责运营商不负责任的行为,认为其将压力转嫁给无辜群众。