通过udp进行块同步淹没的IPTABLES

我是通过UDP端口的同步淹没攻击的受害者。 这来自许多不同的IP。 该机器是一个专用的服务器,是一个hlds游戏服务器,攻击者将UDP端口过载,这对游戏中的每个用户造成很大麻烦,造成数据包丢失和高ping。

服务器是在Linux下,iptables激活,现在,有一些规则来阻止这种攻击,但没有发生我的幸运。

TCPDUMP日志(不是全部)

No. Time Source Destination Protocol Length Info 1012 6.134039 111.90.151.22 MYIP UDP 60 Source port: ezmeeting-2 Destination port: 27024 Src: 111.90.151.22 (111.90.151.22), Dst: xxxx (xxxx) Version: 4 Header length: 20 bytes Differentiated Services Field: 0x00 (DSCP 0x00: Default; ECN: 0x00: Not-ECT (Not ECN-Capable Transport)) Total Length: 33 Identification: 0x117f (4479) Flags: 0x00 Fragment offset: 0 Time to live: 242 Protocol: UDP (17) Header checksum: 0x4154 [correct] Source: 111.90.151.22 (111.90.151.22) Destination: xxxx (xxxx) [Source GeoIP: Unknown] [Destination GeoIP: Unknown] User Datagram Protocol, Src Port: ezmeeting-2 (10101), Dst Port: 27024 (27024) Data (5 bytes) Data: ffffffff56 [Length: 5] 

IPTABLES

 iptables -A INPUT -p udp -d XXXX --dport 27024 -m length --length 60 -m recent --set --name GameSynF iptables -A INPUT -p udp -d XXXX --dport 27024 -m string --algo kmp --hex-string "|ff ff ff ff 56|" -m recent --set --name GameSynF -j DROP 

如何执行该iptable丢弃任何数据包的hexstring“ffffffff56”和长度为60。

如果您的防火墙尚未configuration, 默认拒绝是更安全的操作方式。 这意味着任何未明确允许的内容都将被拒绝。 对于iptables,这意味着:

  iptables -P INPUT DROP 

您可以为OUTPUT和FORWARD链执行此操作,但OUTPUT尤其需要pipe理您的服务器允许连接的更多规则。

在禁止了一切之后,你允许你想要的。 您的游戏是否在端口27015和27018上监听UDPstream量? 如果是这样,请添加允许该stream量的规则。客户端是否始终使用小范围的源端口或甚至单个源端口? 如果是,请将允许的数据包限制在这些源端口。 在这种情况下,源端口为80的第一个示例将被自动阻止。 另一个可能取决于客户端使用的源端口。

你如何确定防火墙规则不起作用? tcpdump连接在防火墙之外,因此会看到将被丢弃的数据包(或者已经通过防火墙的出站方向)。 您可以使用-j LOG规则来监视链中的特定部分或使用应用程序内日志logging。

我不太清楚“超载udp端口”是什么意思。 您的应用程序是否需要为每个连接的IP地址使用单独的UDP端口? 有一些共享资源是瓶颈吗? 所有这些UDPstream量只是填补了networking硬件的缓冲区,导致了与bufferbloat相关的延迟? 如果这最后一个是真实的阻塞使用iptables甚至不能解决你的问题。

你需要弄清楚为什么这个UDP洪水正在减慢你的速度。

如果攻击导致更高的ping,那么我会猜测洪水不会在您的服务器上造成问题,但洪水占用了互联网连接上的所有带宽。 如果是这种情况,服务器上的防火墙规则将无法解决此问题。 您需要与您的上游互联网服务提供商进行沟通,以阻止该stream量。