我想知道 iptables 中的长链是否可能导致性能问题。在这里,一个长链可能是超过 2,500 个单独的 IP 禁令。
我担心的是,我对 iptables 的有限了解表明这将导致服务器收到的每个数据包都检查 2,500 条规则。
我的用例是这样的:
我正在使用 iptables 来阻止 IP 以不应该的方式反复戳我的服务器(例如,重复的 SSH 登录失败)。我正在使用类似于fail2ban的 python 脚本。
最近,通过减慢攻击速度,这些“攻击”开始变得更加聪明。 我怀疑他们已经将 IP/用户名的嵌套循环反转为用户名/IP。因此,为了解决这个问题,我不得不大幅延长禁令时间。我对此持非常强硬的态度,所以如果他们在两个月的试用期内再次尝试,我的新禁令时间是 1 年或两倍。
我发现此类禁令导致大约 2,500 条禁令的轶事证据。如果我以目前新禁令的比率计算,它会更像是 8,000,但我希望随着服务器开始更准确地阻止恶意流量,这个比率会减慢。
如果影响每个包,总共 2500 条规则对于 CPU/带宽来说将是一个很大的努力。例如,如果您发送 10000 个包裹,您将分析 25.000.000 条规则,这假设需要大量工作。阻止所有传入流量(已建立的和相关的除外),然后开始打开需要与您建立新连接的服务会更加准确和安全。
如果要添加 IP 黑名单,您可以使用ipset,它可以在单个规则中创建此类列表,还可以更新规则,而不会对您的性能造成很大影响。例如,如果您要阻止 2200 个单独的 IP,您可以将它们存储在一个列表中并从单个规则中检查它们,这会假设在 CPU 方面的工作量要少得多。