好吧,我曾经是 Ddos 攻击的受害者,我真的不知道如何避免它。在某些机器上它可以工作,而在某些机器上则不行,或者可能是我在某些方面做错了,
攻击者使用多个 IP 攻击我的游戏服务器端口,导致我的游戏服务器向每个 IP 地址输出 1mb/s,从技术上讲,这些是 UDP 反射攻击。以下是我保护它们的方法,
iptables -A INPUT -p udp -m state --state NEW -m recent --set --name DDOS --rsource
iptables -A INPUT -p udp -m state --state NEW -m recent --update --seconds 1 --hitcount 5 --name DDOS --rsource -j DROP
从技术上讲,这将阻止 UDP 端口上的所有攻击者。当我看到攻击者 IP 的输出变为 0 时,我使用“iftop”或“tcpdump”检查攻击者是否被阻止,这证实了保护措施正在发挥作用。
在运行 iptables 1.4.7 的 CentOS 6 机器上,我使用类似的方法来阻止它,但奇怪的是,有时它有效,但下一个小时它却不起作用。经过多次尝试,我重新启动了系统和 iptables,保护工作正常,攻击者被阻止了。我今天登录了我的系统,他再次攻击我,虽然我重新启动了 iptables,但他没有被阻止。我不想一次又一次地重新启动我的系统来使其工作,那么问题可能是什么?
此外,有些人说 UDP 是无状态的,但无论它在技术上是什么 - 我一直使用这个命令,它以前对我有用,为什么现在不行,或者为什么现在部分有效?
答案1
UDP 确实是无状态的,尽管 iptables出现对其进行一些特殊处理。
因此,查看您的规则,似乎您正在尝试阻止任何在一秒钟内向您发送超过 5 个数据包的 IP。问题 1 是您的合法客户端将这样做,因此您最终也会阻止它们。
更好的解决方法是限制服务器看到的“getstatus”数据包的数量。DDoS 反射攻击依赖于此,并且基于数据包内容的匹配非常简单。这还有一个好处,即不会影响您的合法客户端(它们应该只会发送一些“getstatus”请求)。