很多站长遇到过这样的场景:服务器带宽没有跑满、CPU 正常,网站却突然全站超时;一看流量监控,入站流量瞬间冲到几十上百 G,把机房出口直接打瘫。这种攻击十有八九就是 UDP 反射放大攻击。它成本极低、效果极猛,是游戏、API、直播类业务最常遭遇的 DDoS 类型之一。这篇教程讲清楚三件事:反射放大是怎么”以小博大”的、源站怎么自查和加固、带宽被打满时真正靠什么扛。
一、什么是 UDP 反射放大攻击?小请求为什么能打瘫大带宽?
UDP 反射放大攻击的原理并不复杂:攻击者伪造受害者的 IP 作为源地址,向互联网上大量开放的 UDP 服务(反射器)发送体积很小的请求,这些服务会向”源地址”返回体积大得多的响应——而接收这些响应的,其实是受害者。
关键在”放大倍数”,几个最常见的反射源:
| 反射服务 | 典型放大倍数 | 触发方式 |
|---|---|---|
| NTP(monlist 命令) | 约 556 倍 | 发送 60 字节请求,回包高达 33KB |
| DNS(ANY 查询 / 大记录) | 28~54 倍 | 伪造查询、诱导返回大响应 |
| SSDP(UPnP 设备) | 约 30 倍 | 向开放 1900 端口的设备发 M-SEARCH |
| Memcached(UDP 模式) | 最高上万倍 | 未鉴权实例被利用 |
一个攻击者用 1Gbps 的肉鸡带宽打 NTP 反射,理论上能放大出数百 Gbps 的流量涌向受害者。而且 UDP 无连接、无需握手,攻击者可以无限伪造源 IP,传统 IP 封禁手段完全失效,这就是它难防的根本原因。
怎么判断自己是不是正在被反射攻击?看两个特征:一是流量监控里入站流量远大于出站、且以 UDP 为主;二是用 tcpdump 在服务器上抓包,看到大量源 IP 随机、目标端口固定在 123/53/1900 的数据包。命中这两条,基本可以确诊,接下来就按下面的方案处理。
二、先自查:你的服务器是不是在帮攻击者”放大”?
被反射攻击打是一回事,更糟的是你的服务器被当成反射器去害别人——到时候被投诉、被机房封 IP 的就是你。先用一条命令看看本机开了哪些 UDP 端口:
# 查看监听中的 UDP 端口
ss -lun
# 用 nmap 从外部扫自己的公网 IP,重点看 123(NTP)、53(DNS)、1900(SSDP)、11211(memcached)
nmap -sU -p 53,123,1900,11211 你的公网IP
查到开放端口后,按下面的清单处理:
- NTP:在
/etc/ntp.conf中禁用 monlist 查询——monlist 是最大的放大源:# /etc/ntp.conf 追加 disable monitor restrict -4 default kod nomodify notrap nopeer noquery restrict -6 default kod nomodify notrap nopeer noquery # 改完重启 systemctl restart ntpd - DNS:如果不需要对外提供递归解析,务必关闭递归,只允许权威查询:
# /etc/named.conf 的 options 段 recursion no; allow-query { any; }; # 按需收紧为允许查询的网段 # 改完重启 systemctl restart named - SSDP / Memcached / 其他:不用的服务直接停掉,端口一律不对外:
systemctl disable --now upnp 2>/dev/null # memcached 若必须用,绑定内网并加鉴权 memcached -l 127.0.0.1 -p 11211 -U 0 # -U 0 关闭 UDP 监听
自查原则就一句:UDP 端口能不开就不开,必须开就限制来源、关闭一切”查询放大”能力。
三、iptables 层防护:成本最低的第一道防线
自己服务器作为攻击目标时,iptables 可以挡住一部分反射流量——但要注意,它的作用仅限于”攻击流量还没打满带宽”的场景。常用配置:
# 1) 对反射攻击最常用的 NTP/DNS 响应做限速(超速直接丢)
iptables -A INPUT -p udp --dport 123 -m limit --limit 10/s --limit-burst 20 -j ACCEPT
iptables -A INPUT -p udp --dport 123 -j DROP
iptables -A INPUT -p udp --dport 53 -m limit --limit 20/s --limit-burst 50 -j ACCEPT
iptables -A INPUT -p udp --dport 53 -j DROP
# 2) 丢弃畸形/分片 UDP(反射攻击常带分片)
iptables -A INPUT -p udp -m length --length 0:16 -j DROP
# 3) 业务没用到的高位 UDP 端口一律拒绝(按需调整)
iptables -A INPUT -p udp --dport 1:1023 -j DROP
# 4) 限制单 IP 并发连接与速率(对 UDP Flood 有一定缓解)
iptables -A INPUT -p udp -m conntrack --ctstate NEW -m limit --limit 30/s -j ACCEPT
iptables -A INPUT -p udp -m conntrack --ctstate NEW -j DROP
# 保存规则
service iptables save # 或 iptables-save > /etc/sysconfig/iptables
用 firewalld 的站长可以等价实现:firewall-cmd --permanent --add-rich-rule='rule protocol value="udp" limit value="10/s" accept',然后 --reload。宝塔面板则在”安全 → 系统防火墙”里添加 UDP 端口限制规则即可。
必须清醒认识局限:iptables 工作在服务器网卡之后,一旦攻击流量超过机房分配给这台服务器的带宽(比如 10Gbps 攻击打 10Mbps 的轻量服务器),数据还没到服务器,机房出口就先堵死了,iptables 根本看不到包。所以它只能作为”小流量骚扰”的过滤器,扛大流量必须靠网络侧的清洗。
四、真正扛住大流量:高防 IP / 高防 CDN 清洗
对付 UDP 反射放大攻击,业界标准做法是把流量引流到清洗节点,清洗后再把干净流量回源:攻击流量在骨干网边缘就被吸收,源站只接收回源流量,压力几乎为零。
落地方式有两种:一是给域名套高防 CDN/WAF,攻击流量打到边缘节点;二是直接上高防 IP,把源站 IP 换掉,攻击者找不到真实源站。对 UDP 特征明显、反射流量集中的攻击,专业的防护节点通常还提供“上层封 UDP”功能——直接把 UDP 协议层禁掉,反射攻击瞬间失效,业务只走 TCP。
这也是速度网络高防 IP 的强项:T 级清洗带宽应对大流量冲击,支持上层一键封 UDP、禁海外流量,源站 IP 完全隐藏,接入只要改个 DNS 解析(5 分钟完成),高防节点清洗后经回源白名单只放行真实流量。如果你的业务已经出现过带宽被打满、机房限速甚至封 IP 的情况,别指望靠服务器端配置硬扛——接入网络侧清洗才是治本。
接入后怎么验证防护是否生效?两个动作:一是确认回源白名单之外的数据包被清洗节点丢弃(防护后台能看到清洗量和攻击源分布);二是观察源站带宽曲线——攻击持续期间源站流量保持平稳,说明清洗生效。专业的高防服务商会主动提供攻防测试协助验证,不用自己反复试探。
总结
UDP 反射放大攻击的防御要点,按优先级排:第一,自查并关闭源站的 UDP 反射源(不做”帮凶”);第二,iptables 限速过滤小流量骚扰(低成本兜底);第三,大流量攻击交给高防清洗节点(治本)。三层配合,你的业务才真正扛得住。
如果你不确定自己的服务器有没有开放危险 UDP 端口,或者正在为带宽被打满发愁,欢迎联系主机吧(速度网络官方合作伙伴)做一次免费安全评估:扫描 UDP 暴露面、给出加固清单、按业务规模推荐合适的高防方案,让每一次攻击都无功而返。
主机吧 | 专注网络安全实战 · 速度网络官方合作伙伴,提供高防IP、高防CDN、WAF接入、高防服务器、SSL证书一站式服务。
