DNS放大攻击的核心在于把开放递归解析器当成“免费倍增器”,而放大系数怎么选,取决于你是在做防御评估还是攻击面分析防护侧优先关递归,评估侧优先看响应字节与查询字节的比值,不要把“倍数越高越危险”当唯一标准。业内专家指出,一个配置不当的开放解析器,能把几十字节的查询放大成数百甚至数千字节的响应,放大系数与查询类型、EDNS0缓冲区大小、递归链长度都直接挂钩,下面按场景拆开讲清楚。
开放解析放大系数到底在衡量什么
放大系数不是单一数字,而是“字节比”加“链路乘数”
很多人把DNS放大系数理解成一个固定倍数,这是误区,实际它有两个层面:
- 单次响应放大比:响应报文长度 ÷ 查询报文长度,同一个解析器,查A记录可能只有2到4倍,查TXT或ANY类记录能到十几倍甚至更高。
- 链路放大乘数:攻击者伪造源IP向大量开放解析器发查询,每个解析器再向权威服务器递归,形成“一对多”的流量膨胀,这个乘数取决于开放解析器的数量和递归深度。
行业共识认为,评估放大风险时要看“有效放大字节”,而不是只看倍数,因为攻击者真正消耗的是带宽和会话资源,响应越大、越集中,链路压力越明显。
为什么开放递归解析器会成为放大依赖的载体
递归解析器天生要替客户端跑腿:客户端问一次,它可能向根、顶级域、权威服务器发多轮查询,开放解析意味着任何源IP都能让它跑腿,攻击者用伪造源IP的查询就能把响应“反射”到受害者地址。
近年的监测数据显示,相当一部分反射放大事件仍然依赖配置不当的递归服务器,尤其是小型IDC和自建DNS环境,问题的根子不在协议,而在“谁都能用”。
DNS放大攻击为什么盯上开放递归解析器
反射放大的三个必要条件
要形成有效放大,缺一不可:
- 开放解析:任意源IP可发起递归查询,不做ACL限制。
- 响应大于查询:响应报文显著大于请求报文,形成字节增益。
- 源IP可伪造:UDP协议无握手,攻击者可把源地址写成受害者IP。
三个条件里,开放解析是最容易被运维忽视的一环,因为递归服务“默认能用”往往被当成便利,而不是风险。
放大系数选择的常见误区
- 只看最大倍数:以为选最高倍数的查询类型就“效果最好”,实际高倍数响应往往触发分片,链路上更容易被过滤或丢弃。
- 忽略EDNS0缓冲:EDNS0把UDP响应上限从512字节抬到更大值,放大系数随之变化,但很多评估表格还停留在老参数上。
- 混淆权威与递归:权威服务器只回答自己域内的记录,放大能力有限;递归服务器才是放大依赖的主角。
开放解析放大系数怎么选:按场景给判断标准
自查自家DNS是否存在开放解析风险
先确认解析器是否对公网开放递归,BIND环境可检查配置:
# 查看 allow-recursion 与 allow-query 配置 named-checkconf -p /etc/named.conf | grep -E "allow-recursion|allow-query" # 从外部主机测试递归是否可用 dig @目标IP example.com A +recurse
如果外部主机能拿到递归结果,说明开放解析成立,再看放大系数:用不同查询类型对比响应大小。
dig @目标IP example.com TXT +bufsize=4096 +ignore dig @目标IP example.com ANY +bufsize=4096 +ignore
比较MSG SIZE字段,业内专家指出,如果TXT类查询响应明显大于请求,且递归对外开放,就应优先收紧ACL,而不是纠结具体倍数。
评估反射放大攻击面时的系数取舍
做风险评估时,放大系数不是越高越“值得关注”,而是看“可稳定利用的字节比”,建议按以下顺序判断:
- 先看递归是否开放,开放则风险等级直接上调。
- 再看响应是否触发分片:不分片的大响应比高分片响应更“好用”。
- 最后看查询类型是否被权威侧限制,ANY查询在很多权威服务器已被最小化响应,实际放大系数会被压低。
不同查询类型的放大倍数对比
| 查询类型 | 典型请求字节 | 典型响应字节 | 放大特征 | 评估要点 |
|---|---|---|---|---|
| A记录 | 约30到40字节 | 约60到100字节 | 低倍数 | 稳定但不“划算” |
| TXT记录 | 约40字节 | 数百字节 | 中高倍数 | 长度影响大 |
| ANY查询 | 约40字节 | 视实现而定 | 理论高倍数 | 多数权威已限制,实际缩水 |
| DNSSEC签名响应 | 约50字节 | 数百到上千字节 | 高倍数 | 分片概率高,链路易过滤 |
表格里的数字是区间示意,不是固定值,行业共识认为,DNSSEC和EDNS0普及后,单次响应的字节上限被抬高,放大系数的“天花板”更多由链路MTU和分片策略决定。
EDNS0把放大系数拉高了多少
缓冲区大小直接改变响应上限
传统UDP DNS响应限制在512字节,EDNS0允许客户端声明更大的接收缓冲区,运维如果配了较大的max-udp-size,解析器就会返回更大的响应,放大系数随之上升。
BIND中相关参数:
# 查看 EDNS0 相关上限 named-checkconf -p /etc/named.conf | grep -E "max-udp-size|edns-udp-size"
建议把max-udp-size控制在合理范围,既保证正常解析,又不给反射放大留过大空间,多数情况下,按业务实际需求设定,比盲目调大更稳妥。
分片与放大系数的隐性代价
响应超过链路MTU会触发IP分片,分片响应在放大攻击里并不“完美”:中间设备可能丢弃分片,受害者侧重组也会消耗资源,所以评估放大系数时,要同时看“是否分片”和“分片后可达性”。
开放解析放大系数的防护配置实操
第一步:关闭不必要的开放递归
- 对权威服务器:关闭递归,只回答授权域。
- 对递归服务器:用
allow-recursion限定内网网段,公网口不做开放递归。 - 对云上DNS实例:检查安全组和监听地址,避免“全零监听加无ACL”。
第二步:限制响应大小与查询类型
- 收紧
max-udp-size,避免超大UDP响应。 - 对ANY查询做最小化响应或直接拒绝,减少被利用空间。
- 开启响应速率限制(RRL),压制异常放大流量。
第三步:持续验证而不是一次性配置
配置完用外部视角复测:从公网主机发起递归查询,确认被拒绝;用不同查询类型对比响应大小,确认放大系数落在预期范围,行业共识认为,DNS配置的风险往往在变更后回归,定期复测比一次性加固更重要。
DNS放大依赖开放解析的常见问题
问:开放解析放大系数越高,是不是攻击危害一定越大?
不一定,放大系数高但响应分片严重、链路可达性差时,实际反射效果会打折扣,评估时要把“字节比、分片、可达性”放在一起看,单看倍数容易误判。
问:只封UDP 53端口能不能解决开放解析放大问题?
不能,封端口只是阻断某条路径,解析器如果仍对公网开放递归,换协议或换端口仍可能被利用,根本措施是收紧递归ACL和响应策略。
问:自建DNS和云解析哪个更容易出现开放解析放大依赖?
自建DNS更容易出现配置疏漏,尤其是BIND和PowerDNS的默认递归行为需要显式收紧;云解析服务通常默认关闭公网递归,但自建转发器或缓存实例仍可能被误配为开放解析,据工信部相关安全提示,DNS服务暴露面收敛应作为基础加固项持续执行。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/785439.html


