我一直使用我自己自制的"iptables规则“来阻止游戏服务器上所有主要类型的DDOS攻击,因为这些攻击是特定于应用程序/游戏服务器的攻击,而不是一般的DDOS攻击。我花了近3年的时间来研究这些袭击事件,并对这些规则做出了回应。到目前为止,我在iptables上使用了一个利率限制,如果它发出250次点击次数/秒,它就会自动丢弃IP,因为客户端的速率比这个低得多(最大的速率大约是500 as /S)。这是因为攻击者通常会用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-3 3mb/秒的输入,就像通过"iftop“访问我的服务器所看到的那样,上面的规则并没有阻止它们,因为我的游戏服务器对所有传入的连接都使用"....disconnect”数据包进行响应。当游戏服务器不识别数据包的输入字符串或长度时,就会发生这种情况。这是包裹的内容:
http://paste.ubuntu.com/6000381/
现在,正如你可能会看到的,包有一个巨大的长度。根据我抓取数据包的Wireshark,数据包的长度为700,数据大小/长度约为5000字节。我以前见过,如果数据包的数据长度/大小更高,即使命中次数较少,您仍然可以拥有更高的速率。因此,这可能解释了为什么它的输入约为3mb/s,并且没有通过命中数被阻塞,因为它的命中数从未超过250。
现在,我需要比数据包/秒的数量更特定于带宽的东西。我需要一个iptables规则,它将自动阻止一个输入>1mb/S,如果需要的话,它可以使用数据包的长度。一个公平的游戏服务器客户端的一般数据大小/长度通常小于500个字节,但在某些情况下可能会更高,但不会占用超过500 it /S的带宽。
这个问题不同于以前回答的其他问题,因为它首先是特定于应用程序的。第二,我要求的iptables解决方案将拒绝任何输入>1mb/s?
我做了一些理论工作来解释为什么3Mb/S输入带宽不超过250次/秒,下面是工作:
3 Mb = 3x1024x1024 = 3,145,728位/秒= 393,216字节/秒
因此,
如果一个数据包的大小为5000字节,那么每秒的最大数据包数应该是:
393216/5000 = 78.6包/秒
这意味着如果iptable规则必须工作,数据包应该小于393216/250 = 1516字节。
发布于 2013-08-19 13:47:08
你看过fail2ban吗?它可以通过在防火墙上丢弃源IP来帮助您对传入的攻击做出反应。
https://serverfault.com/questions/532005
复制相似问题