用于防止python中的DOS攻击的代码

时间:2014-04-26 13:55:34

标签: python

我有一个多客户端服务器代码,其中多个客户端连接到服务器。 现在所有客户端都在向服务器发送文本消息,并从服务器接收回复。现在,如果一个客户端尝试使用客户端在不同终端中运行的syn flood来泛洪服务器,那么我希望服务器关闭客户端的连接,并且服务器仍然继续与其他客户端进行消息传递。 总之它如何防止DOS攻击?

1 个答案:

答案 0 :(得分:2)

在处理syn flood时,你不能在Python中这样做。 syn flood是一台向您的服务器发送大量syn包的计算机,导致内核资源耗尽

攻击利用了内核完全处理连接尝试的事实。因此,只有在完全创建新连接后才会通知您的应用程序(在syn-flood中不会发生这种情况)。相反,您的套接字的待办事项将很快填满,并且在半开连接超时之前将不再有连接尝试。

因此,您必须在内核中处理此问题,例如:通过增加套接字的积压(注意,即使是半开连接也需要一些内存,除非你使用syn-cookies或类似的)或限制允许接收的syn-packet的数量,例如使用iptables或其他防火墙。

通常,如果套接字的待办事项已满,则不会接受任何新连接。现有连接不会受此影响,并将继续提供。通常,当收到syn-flood时,还有其他内核资源严重紧张,这意味着,根据实际情况,您可能仍然会遇到问题。

再次说清楚:处理syn-floods不是你能够在Python中处理的事情,而是必须通过正确配置内核来处理。