使用 iptables 预防 udp 泛洪

使用 iptables 预防 udp 泛洪

我想防止 udp 泛洪,所以我认为如果我丢弃所有不来自内部网络且与 udp 连接无关的 udp,我就可以防止 udp 泛洪。换句话说,如果只有来自内部网络的 udp 和来自外部网络但不是第一个并与 udp 连接相关的 udp 被接受,而其他的被丢弃,则不会发生 udp 泛洪,我认为我编写的这个 iptable 代码可以工作

# accept any packet that's a response to anything we sent
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

iptables -A INPUT -p udp -s 8.8.8.0/24 -j ACCEPT

iptables -A INPUT -p udp -j DROP

8.8.8.0/24 是我的内部网络的地址。你认为这是真的吗?我的代码是真的吗?

答案1

即使你的iptables陈述是正确的,你也不会取得太大的成就。

UDP是无状态的。这意味着我可以向您的服务器发送任意大型 UDP 数据包。DROP如果没有进程在目标 UDP 端口上监听,这些数据包将被内核拦截。流量仍然穿过互联网并到达您的调制解调器/分界点。

使用 UDP 丢弃唯一可以防止的事情是防止与正在运行的服务相关的端口泛滥。例如:我可以制作大型 DNS 数据包并通过 UDP 将它们发送到您的 DNS 服务器端口。服务器可能会收到ACCEPT这些数据包并尝试处理它们。阻止可能有助于这种处理。

如果您尝试阻止任意 UDP 数据包,那么您将遇到麻烦。DHCP、DNS、RPC、NFS、NTP 等……大量重要的网络协议通过 UDP 运行。这些都需要被允许。


我建议您再检查一下您的网络。如果如果您遇到了 UDP 洪水问题,您可以研究解决确切原因然后寻找可能的解决方案。

如果您被大量 UDP 数据包淹没,并且占满了您的上行带宽,请考虑获取更多带宽或 DDoS 保护。

如果某个应用程序由于洪水而出现故障,请考虑修复该应用程序、使用更好的应用程序或使用某种第 7 层防火墙来预先筛选数据包。

最后,如果你只是UDP flooding因为……就认为拦截是个好主意?……?那可能不是。除非你遇到特定的 UDP 洪水问题,否则拦截带来的破坏可能比解决的问题更多。

相关内容