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