UDP反射放大攻击怎么防?NTP/DNS/SSDP反射原理与高防清洗实战教程

很多站长遇到过这样的场景:服务器带宽没有跑满、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证书一站式服务。

给TA打赏
共{{data.count}}人
人已打赏
0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
在线客服
在线客服
热线电话
QQ客服
电子邮箱
suduwangluo