使用 iptables 限制传入连接

使用 iptables 限制传入连接

在某些情况下,我遇到了轻微的自我攻击,我正在尝试弄清楚是否可以使用 iptables 来帮助缓解这种情况。简而言之,“如何使用 iptables 规则将传入到服务器的连接速率限制为每 5 秒不超过 2 个?”我读过类似的问题并且尽管有关联,但是那里的答案(我已经尝试过 - 见下文)并没有实现我想要的效果。

长版本是我们的客户端/服务器应用程序保持活动连接,并且我们的一个客户的网络不断断开连接,这意味着大量(15+)客户端同时断开连接。当它们的网络连接恢复时,它们都会尝试同时重新连接,从而导致一种 DoS。长期解决方案是我们在客户端重新连接代码中实现随机退避,我们正在努力做到这一点。与此同时,到目前为止,我尝试的方法是基于上述 SF 答案等资源。从那里,我创建了这 2 条规则:

-A INPUT -p tcp -s 54.208.46.226 --match state --state NEW --match recent --set
-A INPUT -p tcp -s 54.208.46.226 --match state --state NEW --match recent --update --seconds 5 --hitcount 3 -j DROP

注意:我指定了一个我们自己的 IP 地址进行测试,这样我就可以尝试从该 IP 进行连接,看看连接是否被阻止或允许。这有点奏效,因为第一次连接尝试被接受,第二次也是如此。但是当在 5 秒内进行第三次尝试时,它会被阻止 - 到目前为止一切顺利。

问题是,如果客户端继续尝试连接(正如我们的客户端代码当前所做的那样),它将继续被阻止 - 我猜是因为第二个--update规则更新了时间戳,并且该规则有效表示必须有5秒差距每次连接尝试之间间隔 1000 毫秒。但我的目标是每 5 秒允许最多 2 次连接成功,无论它们的频率如何尝试连接。我推测可能是标志--update保留了最近尝试的时间戳(而不是最近成功的时间戳,而这才是我真正想要测试的)。我切换到--rcheck,但它似乎表现出相同的行为,这意味着我不理解这个级别的 iptable-fu。

因此,总结一下这个问题,如果进行了重复的连接尝试(每秒几次),是否有一个 iptable 规则集可以允许它们以较低的速率进入(例如平均间隔 2.5 秒),而不是在前 2 秒之后完全阻止它们?

答案1

查看速率限制。它可以将连接限制到指定的速率。您可能需要按分钟进行限制,因为我相信速率是整数。每分钟 24 次的速率应该可以。

您必须进行测试才能知道连接的突发性如何。

相关内容