![使用 iptables 预防 udp 泛洪](https://linux22.com/image/708121/%E4%BD%BF%E7%94%A8%20iptables%20%E9%A2%84%E9%98%B2%20udp%20%E6%B3%9B%E6%B4%AA.png)
我想防止 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 洪水问题,否则拦截带来的破坏可能比解决的问题更多。