Linux防御UDP泛洪攻击核心是“限流+过滤+溯源”,需区分正常业务(如DNS、NTP)与恶意洪流;用iftop -n -P -B和tcpdump抓包识别真实攻击源,iptables分层放行必要端口、限速非必要UDP、丢弃超限包并加日志,辅以sysctl调优和无用服务关闭。

Linux系统防御UDP泛洪攻击,核心是“限流+过滤+溯源”,不是简单封端口或关服务。关键在于区分正常UDP业务(如DNS、NTP、VoIP)和恶意洪流,避免误杀导致服务中断。
识别真实攻击流量
先确认是不是真被攻击,而不是业务突发或配置错误:
- 用 iftop -n -P -B 实时看哪个IP发UDP最多(加 -n 不解析域名,-B 显示字节数,更准)
- 用 tcpdump -i eth0 -c 100 'udp and src port 53' -w udp53.pcap 抓小样本,重点看源IP是否随机、包长是否异常(如全是65507字节)、目的端口是否集中
- 查 netstat -s | grep -A 5 -B 5 "Udp:" 看内核统计:若 "packets to unknown port" 或 "no port" 持续飙升,说明大量UDP打到了没监听的端口,大概率是泛洪
iptables基础防护规则
不建议直接 iptables -A INPUT -p udp -j DROP,会把DNS等全干掉。应分层控制:
Linux AI 服务器 — 将 Linux 服务器转换为本地 AI 推理集群。使用 systemd、NVIDIA CUDA 实现无头 Linux AI,零 GUI 开销。
- 放行已知必要UDP服务(如本机做DNS服务器):
iptables -A INPUT -p udp --dport 53 -m state --state NEW -j ACCEPT - 对非必要端口限速(例如限制所有其他UDP每秒最多20个包):
iptables -A INPUT -p udp -m limit --limit 20/sec --limit-burst 60 -j ACCEPT - 最后丢弃超限的UDP包:
iptables -A INPUT -p udp -j DROP - 加日志便于追踪:
iptables -I INPUT 1 -p udp -m limit --limit 5/min -j LOG --log-prefix "UDP-ATTACK: "
系统级资源加固
防止UDP处理过程耗尽CPU或触发内核OOM:
- 调低UDP接收缓冲区上限(避免大包堆积):
echo 'net.core.rmem_max = 262144' >> /etc/sysctl.conf
sysctl -p - 关闭无用的UDP服务:检查 ss -ulpn,停掉不需要的如
rpcbind、avahi-daemon - 启用连接跟踪限速(防伪造源IP绕过):
iptables -A INPUT -p udp -m connlimit --connlimit-above 5 --connlimit-mask 32 -j DROP
快速临时止血与溯源
攻击正在发生时优先保业务:
- 用 iftop -n -t -s 30 输出30秒TOP IP列表,提取高流量源IP
- 单IP封禁示例:
iptables -I INPUT -s 203.0.113.45 -p udp -j DROP - 批量封网段(如发现来自某C段):
iptables -I INPUT -s 203.0.113.0/24 -p udp -j DROP - 封完后立刻查日志:
grep "UDP-ATTACK" /var/log/messages | tail -50 验证是否生效

















