新手防御UDP泛洪需“区分业务、精准限速、前置过滤”:先用ss/netstat识别真实使用的UDP端口,封禁无监听的高危端口(如7/13/19);对DNS(53)、NTP(123)等关键端口按源IP限速;再调优内核参数防IP伪造和conntrack耗尽。

新手防御针对特定开放服务的UDP泛洪,核心是“区分业务、精准限速、前置过滤”,不能一刀切禁UDP,也不能依赖单一手段。DNS(53)、NTP(123)、DHCP(67/68)等服务必须保留,但要让它们只收“该收的包”,且速率可控。
一、先识别哪些UDP端口真正在用
盲目封端口会断服务。先查清本机实际监听和转发的UDP端口:
- 运行 ss -ulpn 或 netstat -ulpn,看哪些进程在监听UDP端口;
- 结合业务确认:DNS服务开没开?NTP是否作为时间源对外提供?有没有VoIP或游戏服务暴露了UDP端口?
- 若某端口(如7/echo、13/daytime、19/chargen)无任何进程监听,它就是高危敞口,直接封——这些是Fraggle反射攻击常用靶子。
二、对关键业务端口做源IP级限速
限速比丢弃更稳妥,既防洪又保运维。用 hashlimit 按源IP控制,避免一个攻击者占满全部配额:
- DNS(53端口)示例(每IP每秒最多10个请求,突发30个):
sudo iptables -A INPUT -p udp --dport 53 -m hashlimit --hashlimit-name dns_perip --hashlimit-mode srcip --hashlimit-rate 10/sec --hashlimit-burst 30 -j ACCEPT - 紧接一条丢弃规则(顺序不能错):
sudo iptables -A INPUT -p udp --dport 53 -j DROP - 同理可配NTP(123)、DHCP(67-68),速率按实际负载调低(如NTP建议5/sec)。
三、封死无业务需求的高危UDP端口
这些端口现代服务器几乎不用,却是攻击者最爱的放大跳板,防火墙层直接拦截最省资源:
- 一次性屏蔽 echo(7)、daytime(13)、chargen(19):
sudo iptables -I INPUT -p udp -m multiport --dports 7,13,19 -j DROP - 注意:这条规则必须加在限速规则之前(用 -I 插入开头),确保恶意包不进入限速逻辑、不触发内核处理。
- 不需要停服务、不改配置文件,纯防火墙阻断即生效。
四、配合内核参数降低协议栈压力
iptables管“包怎么走”,内核参数管“系统怎么扛”。几项关键设置能显著缓解泛洪冲击:
- 开启反向路径过滤(防IP伪造):
echo 'net.ipv4.conf.all.rp_filter = 1' >> /etc/sysctl.conf - 限制连接跟踪表大小(防 conntrack 耗尽内存):
echo 'net.netfilter.nf_conntrack_max = 65536' >> /etc/sysctl.conf - 缩短UDP连接跟踪超时(减少无效条目堆积):
echo 'net.netfilter.nf_conntrack_udp_timeout = 30' >> /etc/sysctl.conf - 全部写完后执行 sudo sysctl -p 生效。











