UDP放大攻击是什么原理?服务器怎么防?

UDP 放大攻击是 DDoS 家族里攻击者性价比最高的一种:每发 1 字节的请求流量,目标可能收到几十甚至上千倍的响应洪流。本文用问答形式讲清 UDP 放大攻击的原理、常见被滥用协议、如何判断自己被打、iptables 应急封堵配置,以及服务器被当反射点利用时的自查与修复方法。

Q:什么是UDP放大攻击?

UDP 放大攻击(UDP Amplification,也叫 DrDoS)利用的是 UDP 协议不握手、不验证源地址的特点。攻击者把请求包的源 IP 伪造成受害者的 IP,发给大量第三方开放服务(公共 DNS、NTP 服务器等),这些服务收到小请求后,把大得多的响应包全部发给受害者。攻击者只付出很小的带宽成本,受害者承受的是放大后的响应洪流,第三方服务器还浑然不觉地当了”帮凶”。

Q:常见的被滥用协议和放大倍数是多少?

  • DNS(ANY 类型查询):放大 28~54 倍
  • NTP(monlist 指令):放大 550 倍左右
  • SSDP(路由器/摄像头等设备):放大 30 倍左右
  • Memcached(未授权对外开放):放大可达 10000 倍以上

Memcached 反射是迄今放大倍数最高的载体,2018 年 GitHub 遭受的 1.35Tbps 攻击正是利用它实现的。

Q:怎么判断服务器正在被UDP放大攻击?

典型特征是入站 UDP 流量瞬间飙升,且源 IP 极度分散(全是反射服务器的响应包):

# 实时查看网卡带宽
iftop -i eth0

# 统计 UDP 流量来源分布
tcpdump -nn -i eth0 udp | awk '{print $3}' | cut -d. -f1-4 | sort | uniq -c | sort -rn | head

如果 UDP 流量远超业务正常水平,且来源端口集中在 53(DNS)、123(NTP)、1900(SSDP)、11211(Memcached),基本可以确认是反射流量。

Q:iptables 怎么应急封堵?

# 封掉常见反射协议的响应端口
iptables -A INPUT -p udp --sport 53 -j DROP
iptables -A INPUT -p udp --sport 123 -j DROP
iptables -A INPUT -p udp --sport 1900 -j DROP
iptables -A INPUT -p udp --sport 11211 -j DROP

# 限制 UDP 速率,防止 CPU 被打满
iptables -A INPUT -p udp -m limit --limit 100/s --limit-burst 200 -j ACCEPT
iptables -A INPUT -p udp -j DROP

注意:UDP 放大攻击的流量通常远超服务器出口带宽,iptables 只能保住 CPU 不被打挂,救不了带宽被打满,必须配合上游清洗。

Q:怎么自查服务器有没有被当反射点?

如果你的服务器开放了 UDP 服务,被利用就等于在帮攻击者打工,还会连累 IP 信誉。逐项自查:

  • DNS:外部执行 dig @你的服务器IP www.baidu.com,有结果说明递归开放,需在配置中设置 recursion no; 或加 ACL 白名单
  • NTP:外部执行 ntpdc -n -c monlist 你的服务器IP,有响应则需在 ntp.conf 中加 disable monitor
  • Memcached:确认启动参数为 memcached -l 127.0.0.1绝不能监听 0.0.0.0

Q:CDN和高防能防住UDP放大攻击吗?

能,这也是最有效的手段。普通 CDN 只代理 HTTP 流量,UDP 反射流量打的是你的真实源站 IP,所以必须接入 DDoS 高防 IP 或高防 CDN:把真实 IP 藏在高防节点后面,反射流量在高防机房被清洗,回源到服务器的只有干净流量。带宽型攻击靠服务器自身硬扛不现实,防护能力要买在平时。

Q:被UDP放大攻击了,应急步骤是什么?

  1. 用 tcpdump 抓包确认攻击类型和端口;
  2. iptables 临时封堵对应源端口,保住 CPU;
  3. 联系机房或云厂商做上游黑洞/牵引,或立即切换高防 IP;
  4. 排查自身 UDP 服务是否被当反射点,关闭不需要的 UDP 端口;
  5. 事后把高防接入常态化,别等被打才想起来。

Q:还有什么补充建议?

三句话总结:UDP 能关就关,业务不需要的 UDP 端口一律禁用;真实 IP 能藏就藏,高防或 CDN 套在前面;监控要有带宽基线,攻击发生 10 分钟后才被发现和 1 分钟内被发现,处置代价完全不同。UDP 放大攻击的攻防本质是带宽资源战,预案和清洗能力都要提前准备好。