我一直在使用自己制作的“iptables规则”来阻止游戏服务器上所有主要types的DDOS攻击,因为这些攻击是针对应用程序/游戏服务器的,而不是一般的DDOS攻击。 我花了差不多3年的时间研究这些攻击,并以这些规则作出回应。 直到现在,我在iptables上使用一个速率限制,如果它达到每秒250次计数,客户端速率远远低于这个速度(最大值就是500kb / s),那么它会自动丢弃IP。 这是因为攻击者通常会发送大量长度为15:30的数据包,因为这是游戏服务器响应良好的通用数据包长度。 这个工作真的很好,直到有人用今天不同的东西来攻击这个规则。
-A INPUT -p udp -m udp --dport 16000:29000 -m recent --set -A INPUT -p udp -m udp --dport 16000:29000 -m recent --update --seconds 1 --hitcount 250 -j DROP
最近,我观察到攻击很容易使1-3mb /秒的input,通过“iftop”看到我的服务器和上述规则没有阻止他们,因为我的游戏服务器响应“….断开”数据包到所有传入的连接。 当游戏服务器不能识别inputstring或数据包的长度时,会发生这种情况。 这是数据包的内容:
http://paste.ubuntu.com/6000381/
现在你也可以看到这个包有很大的长度。 根据Wireshark我抓包的数据包的长度是700和数据大小/长度大约是5000字节。 而我之前也看到过,如果数据包的数据长度/数据量较大,即使数量较less,仍然可以获得更高的速率 。 所以这就解释了为什么它的input是3mb / s左右,而且没有被计数器阻塞,因为它从来没有超过250的计数。
现在我需要一些比带宽更具体的数据包/秒。 我需要一个iptables规则,可以自动阻止大于1mb / s的input,如果需要的话,它可以使用数据包的长度。 公平的游戏服务器客户端的一般数据大小/长度通常具有小于500字节的分组长度和数据大小,但是在某些情况下它可能会更高,但永远不会超过500kb / s的带宽。
这个问题与之前回答的其他问题不同,因为它首先是特定于应用程序的。 其次,我问一个iptables解决scheme,否认任何input> 1mb / s?
更新:
我做了一些理论上的工作来解释为什么一个3 Mb / s的input带宽不超过250次/秒,这里是工作:
3 Mb = 3x1024x1024 = 3,145,728比特/秒= 393,216字节/秒
因此,
如果一个数据包的大小为5000字节,那么每秒的最大数据包数应该是:
393216/5000 = 78.6包/秒
这意味着如果iptables规则必须工作,数据包应该小于393216/250 = 1516字节 。
你看过fail2ban吗? 它可以帮助您通过在防火墙丢弃源IP来应对传入的攻击。