新手防御udp泛洪应聚焦限速+过滤+协同:对dns等必要udp端口限速(如每秒10包、突发20),封禁echo(7)、daytime(13)、chargen(19)等高危端口,并启用rp_filter和conntrack内核防护。

防御UDP泛洪攻击,新手应聚焦“限速+过滤+协同”,不建议直接禁用UDP(会破坏DNS、NTP等关键服务),而要控制异常流量速率、屏蔽高危端口,并配合内核与防火墙联动。
用iptables对UDP流量做速率限制
这是最直接、最易上手的防护手段。系统默认不限制UDP包速率,攻击者可瞬间发包压垮网卡或协议栈。
- 限制每秒最多接收10个UDP包(突发允许20个),仅针对目标端口53(DNS):
- 丢弃所有未被上述规则放行的53端口UDP包:
- 同理可为其他常用UDP端口(如123/NTP、67-68/DHCP)添加类似规则
- 保存规则(Ubuntu/Debian):sudo iptables-save | sudo tee /etc/iptables/rules.v4
屏蔽已知高危UDP诊断端口
攻击者常利用echo(7)、daytime(13)、chargen(19)等UDP服务发起Fraggle类反射放大攻击。这些端口在现代服务器上基本无业务需求,应默认丢弃。
- 一次性封禁这三类端口的所有入向UDP包:
- 该规则优先级应高于限速规则(放在前面),确保恶意报文在进入限速逻辑前就被拦截
- 无需运行对应服务,也无需修改/etc/services,防火墙层直接阻断即可
启用内核级UDP泛洪基础防护
Linux内核本身不提供UDP flood自动检测,但可通过rp_filter和conntrack机制增强抗压能力,间接缓解泛洪影响。
- 开启反向路径过滤(防IP伪造):
- 限制连接跟踪表大小,防止conntrack耗尽内存(尤其对大量短连接UDP):
- 写入/etc/sysctl.conf并执行sudo sysctl -p使永久生效
验证与日常观察要点
配置完别只看命令是否报错,要实际确认效果和系统状态。
- 检查iptables规则是否加载成功:sudo iptables -L INPUT -v -n | grep udp
- 模拟低频UDP请求(如dig @your-server example.com)应正常响应
- 用hping3快速发包测试(仅限隔离环境):hping3 --udp -p 53 --flood 192.168.x.x,观察丢包率是否显著上升
- 监控conntrack使用量:cat /proc/sys/net/netfilter/nf_conntrack_count,持续接近上限需调大max值











