UDP反射放大攻击是一种利用UDP协议无连接特性实施的大流量DDoS攻击方式。攻击者只需要付出很小的带宽成本,就能让目标服务器遭受成百上千倍的流量冲击,严重时可导致服务完全瘫痪。理解这种攻击的原理并掌握对应的防护手段,是每一位运维和网络安全工程师的必修课。

UDP反射放大攻击的工作原理
要理解反射放大攻击,首先要明白UDP协议的特性。与TCP不同,UDP是无连接协议,通信前不需要完成三次握手,发送方也不验证接收方的身份。这意味着服务器收到UDP请求包后,会直接把响应数据发往包头部中声称的源IP地址,而不会核实这个地址是否真实。
攻击者正是利用了这一点。攻击过程分为三步:第一步,攻击者伪造受害者的IP地址作为源IP,向互联网上大量开放的UDP服务(称为反射器)发送请求;第二步,反射器收到请求后,将响应数据发往被伪造的源地址,也就是受害者;第三步,受害者的服务器被海量的、自己从未请求过的响应流量淹没。由于攻击流量来自成千上万个真实的反射器IP,受害者很难通过封禁单一来源来阻挡攻击。
所谓放大,指的是响应数据包远大于请求数据包。例如向DNS服务器发送一个约60字节的查询请求,可能换来4000字节甚至更长的响应,放大倍数可达50到70倍。而Memcached协议曾经出现过高达5万倍的放大倍数,一个150字节的请求可以引发750KB的响应,这也是2018年GitHub遭受1.35Tbps攻击事件的技术根源。
常见的反射放大源及利用方式
几乎任何基于UDP且响应大于请求的协议都可能被滥用为反射器。以下是几种最典型的放大源。
第一种是DNS放大。攻击者向开放的DNS递归服务器发送ANY类型查询,域名配置记录越多,响应包就越大。DNS服务应只对内网用户提供递归解析,对外开放递归功能是导致其成为反射器的最主要原因。
第二种是NTP放大。NTP协议的monlist命令(mon_getlist)会返回最近与服务器交互的最多600个客户端地址列表,响应可达数百倍于请求。虽然新版本NTP已经移除了monlist命令,但互联网上仍有大量老旧的NTP服务器存在风险。
第三种是Memcached放大。Memcached默认监听UDP 11211端口,若服务器直接暴露在公网且未禁用UDP支持,攻击者可以用极小的请求换取巨大的响应。正确的做法是启动时添加-U 0参数禁用UDP监听,并通过防火墙限制访问来源。
# 检查Memcached是否监听UDP端口 netstat -anp | grep 11211 # 启动时禁用UDP监听(推荐) memcached -U 0 -p 11211 -l 127.0.0.1 # 使用防火墙禁止外部访问11211端口 firewall-cmd --permanent --remove-port=11211/udp firewall-cmd --reload
除了上述三种,SSDP、SNMP、LDAP、Chargen、QUIC等协议也都被用于反射攻击。安全社区通过持续扫描互联网上的开放服务来统计潜在反射器数量,CDN厂商Cloudflare定期发布的报告显示,DNS和NTP至今仍是最活跃的放大源。
如何有效防护UDP反射放大攻击
防护工作需要从服务提供方和被攻击方两个视角同时展开。如果你运营着开放的网络服务,首先要确保自己不成为攻击的帮凶。
从服务提供方角度看,第一要务是关闭不必要的服务。检查服务器上所有监听UDP端口的进程,停用或卸载不需要的服务。对于必须开放的UDP服务,应严格配置访问控制。以DNS为例,BIND的配置示例如下。
// named.conf 限制递归查询仅允许内网
options {
recursion yes;
allow-query { 内网地址段; };
allow-recursion { 内网地址段; };
// 禁用ANY查询以减小响应体积
minimal-responses yes;
};第二项措施是部署BCP 38标准的源地址验证。反射攻击的前提是IP欺骗,如果所有网络运营商都在出口处过滤掉源地址不属于自身网段的报文,伪造包根本无法离开攻击者的网络。在Linux服务器上可以通过反向路径过滤来实现。
# 开启反向路径校验,丢弃源地址伪造的包 sysctl -w net.ipv4.conf.all.rp_filter=1 sysctl -w net.ipv4.conf.default.rp_filter=1 # 将配置写入sysctl.conf使其永久生效 echo "net.ipv4.conf.all.rp_filter=1" >> /etc/sysctl.conf sysctl -p
从被攻击方角度看,首先要利用运营商或云服务商提供的DDoS清洗服务。现代流量清洗中心通过骨干网层面的牵引和分流,能够在流量到达你的服务器之前将其过滤掉。其次,在本地网络边界部署限速策略,对UDP流量设置合理的速率阈值,一旦超过阈值就丢弃或降级处理。例如使用iptables对UDP流量进行限速。
# 使用hashlimit模块限制UDP新建流量速率 iptables -A INPUT -p udp --dport 53 -m hashlimit \ --hashlimit-above 50/sec \ --hashlimit-burst 100 \ --hashlimit-mode srcip \ --hashlimit-name dns_limit -j DROP
此外,架构层面的优化同样重要。将关键业务前置到CDN或抗DDoS的高防IP后面,真实服务器不直接暴露公网地址;对纯网页类业务,可以考虑在应用层限制UDP端口暴露面,只开放业务必需的端口;建立监控告警机制,当入向流量出现异常峰值时能够第一时间响应,配合应急预案快速切换到备用线路。
总结
UDP反射放大攻击的本质是IP欺骗加上协议响应放大的组合利用。防护它没有单一银弹,需要多方协作:网络运营商落实源地址验证从根源上掐断伪造流量,服务管理者关停不必要的UDP端口避免沦为帮凶,而潜在的被攻击方则应部署高防服务、流量限速和架构冗余来提升抗压能力。定期用nmap等工具扫描自己资产的开放端口,审计UDP服务的配置,是预防此类攻击最基础的日常动作。只有把每个环节都做扎实,才能在大规模反射攻击来临时保持业务的可用性。