DNS放大攻击之所以难防,根本原因在于它利用的是互联网基础设施中合法的DNS查询机制。攻击者向开放的递归DNS服务器发送小型查询请求,伪造源IP为受害者地址,DNS服务器返回的响应体积往往是请求的数十倍甚至上百倍,所有响应流量集中涌向受害者,瞬间耗尽带宽。针对这种攻击,单纯依赖传统防火墙或入侵检测系统基本无效,因为流量在到达应用层之前,网络链路就已经被塞满了。有效的防护必须从网络边缘、DNS服务配置、上游运营商协同三个层面同时入手。
先关闭开放递归,从源头消除放大条件
如果你运维的是企业自有的DNS服务器,第一步就是检查它是否对互联网开放了递归查询。大量DNS放大攻击利用的正是那些配置疏忽、允许任意来源递归查询的服务器。登录DNS服务器,检查配置文件中的allow-recursion和allow-query参数。对于BIND,正确配置应当只允许内网网段进行递归,外部仅对权威域响应。示例如下:
options {
directory "/var/cache/bind";
recursion yes;
allow-recursion { 192.168.0.0/16; 10.0.0.0/8; };
allow-query { any; };
allow-transfer { none; };
};
对于不需要递归功能的权威DNS服务器,直接将recursion设为no。同时检查响应速率限制功能,BIND 9.10以上版本支持response-rate-limit,可以限制对同一源IP的响应频率,降低被利用时的放大倍数。配置示例:
options {
response-rate-limit {
responses-per-second 5;
window 5;
};
};
如果你使用的是云DNS服务或托管DNS,确认服务商默认关闭开放递归,并开启源地址验证。很多攻击之所以成功,是因为服务商在出口没有做BCP38反欺骗过滤,导致伪造源地址的请求被正常处理。选择服务商时,要求对方提供明确的抗放大攻击能力说明,包括是否支持响应速率限制、是否部署出口过滤。
在边界部署针对DNS流量的深度检测与限速
企业网络边界即使不直接暴露DNS服务,也需要对入站的DNS响应流量做识别和限制。正常情况下,内部用户主动发起的DNS查询会收到对应的响应,但攻击流量中的DNS响应往往是未经请求的。边界防火墙或DDoS防护设备应当具备DNS协议状态检测能力,只放行与内部查询匹配的响应,丢弃其他非对称的DNS流量。
对于大型网络或数据中心,建议在边界部署专门的DDoS缓解设备或接入运营商清洗服务。这些设备能够基于DNS响应报文的大小、类型、源端口分布进行建模。放大攻击的响应通常集中在少数几个源IP,且响应类型以ANY、TXT、DNSSEC记录为主,体积异常大。通过限制单源IP入站DNS响应速率,或者直接丢弃超过合理大小的DNS响应包,可以显著降低攻击影响。
在路由器或交换机层面,可以配置ACL和QoS策略,对UDP 53端口的入站流量设置硬性带宽上限。例如在Cisco设备上:
ip access-list extended DNS-INBOUND permit udp any eq 53 any class-map match-all DNS-TRAFFIC match access-group name DNS-INBOUND policy-map EDGE-POLICY class DNS-TRAFFIC police cir 100000000 bc 3125000 be 3125000 conform-action transmit exceed-action drop
上述策略将入站DNS流量限制在100Mbps以内,超过部分直接丢弃,保证其他业务流量不受影响。实际阈值需要根据正常业务基线调整,但原则是DNS响应流量永远不应该占据主要带宽。
上游运营商协同与Anycast架构
当攻击流量超过自有带宽时,任何本地防护都无济于事,必须依靠上游运营商或专业抗DDoS服务商进行流量清洗。这里的关键在于提前建立协同机制。很多企业直到攻击发生时才联系运营商,而运营商临时配置清洗路由需要时间,攻击可能已经造成长时间中断。
有效的做法是与上游运营商签订DDoS清洗服务协议,并预先配置BGP远程触发黑洞路由。当检测到入站流量超过阈值时,通过BGP社区属性通知上游将受害IP的流量牵引至清洗中心,过滤后再回注正常流量。对于关键业务,建议采用Anycast架构部署DNS和Web服务,将同一IP宣告在多个地理位置。Anycast本身不能阻止攻击,但可以将攻击流量分散到多个节点,每个节点承受的压力成倍降低,同时配合各节点的本地清洗能力,整体抗攻击容量大幅提升。
如果业务完全依赖单一IP和单一机房,那么面对超过链路带宽的攻击几乎没有还手之力。Anycast部署需要一定的网络架构调整,但对于高价值业务来说,这是目前对抗大流量DNS放大攻击最可靠的方案之一。
监控与响应:识别攻击特征并自动化处置
DNS放大攻击发生时,最明显的特征就是入站UDP 53端口流量激增,同时伴随大量来自不同源IP的大包响应。正常DNS响应包大小通常在512字节以内,启用EDNS后可能达到4096字节,而放大攻击中的响应包往往集中在数百到数千字节,且响应类型高度集中。通过NetFlow或sFlow分析,可以快速识别流量突增的来源端口和协议类型。
建议在监控系统中设置针对UDP 53入站流量的阈值告警,一旦超过基线即触发自动化响应流程。自动化响应可以包括:自动向边界设备下发限速策略、自动通知上游运营商启动清洗、自动将业务流量切换至备用链路或Anycast节点。响应速度直接决定攻击造成的损失大小。
同时要保留完整的流量日志和攻击样本。攻击结束后,分析攻击源IP的分布和请求类型,有助于优化后续的防护策略。很多攻击源来自被利用的开放递归DNS服务器,将这些IP加入威胁情报库,并在边界设备上设置更严格的过滤规则,可以减少同类攻击的重复影响。
应用层与协议层面的加固
除了网络层防护,DNS服务本身也可以做进一步加固。对于权威DNS服务器,关闭不必要的查询类型,例如ANY查询。ANY查询是放大攻击中最常利用的类型之一,因为它返回的记录最多、体积最大。在BIND中可以通过设置minimal-responses yes来减少响应中的附加记录,降低放大倍数。对于确实需要支持ANY查询的场景,可以限制其响应频率或仅对特定来源开放。
启用DNSSEC虽然会增加响应体积,但DNSSEC本身不是放大攻击的根源,攻击者利用的是开放递归和伪造源地址。正确配置DNSSEC不会显著增加被利用的风险,反而能提升整体DNS安全性。关键在于控制递归范围、限制响应速率、在出口做源地址验证。
对于企业内网用户,建议在本地DNS转发器上启用缓存和查询限制,减少对外部递归DNS的依赖。内网DNS转发器只向上游可信递归服务器查询,并且限制每个客户端的查询频率,防止内网主机被控制后成为攻击跳板。
总结防护层次
针对DNS放大攻击的防护不是一个单点方案,而是从DNS服务器自身配置、网络边界策略、上游协同到架构设计的完整链条。首先确保自己的DNS服务器不成为攻击的放大器,关闭开放递归、限制响应速率、启用源地址验证。其次在边界对DNS流量做深度检测和硬性限速,丢弃非对称响应和超大数据包。然后与上游运营商建立清洗协同机制,必要时采用Anycast架构分散攻击压力。最后通过持续监控和自动化响应,缩短攻击发现和处置时间。这四层防护同时落地,才能把DNS放大攻击的实际影响降到可控范围。
