防范DNS递归放大攻击的核心是协同管控“谁可以查”“查什么”“查了多少”:需结合防火墙限制53端口访问来源、DNS服务层禁用非必要递归并清空根提示、启用调试日志审计异常查询,三者缺一不可。

防范DNS递归查询放大攻击,核心不是只堵一个端口,而是把“谁可以查”“查什么”“查了多少”三件事管住。防火墙是第一道防线,但必须和DNS服务配置、日志监控配合使用,单靠防火墙规则效果有限。
精准限制53端口访问来源
DNS服务默认监听UDP/TCP 53端口,攻击者正是通过伪造源IP向这个端口发请求来触发放大。防火墙要做的是:只放行真正需要递归解析的内部子网,其他一概拒绝。
- 在Windows Server上,用高级安全Windows防火墙新建入站规则:协议类型选UDP和TCP,本地端口53,作用域中“远程IP地址”仅添加可信网段(如192.168.10.0/24、10.1.0.0/16),其余全部阻止
- Linux系统(如iptables)执行:
iptables -A INPUT -p udp --dport 53 -s 192.168.10.0/24 -j ACCEPTiptables -A INPUT -p tcp --dport 53 -s 192.168.10.0/24 -j ACCEPTiptables -A INPUT -p udp --dport 53 -j DROPiptables -A INPUT -p tcp --dport 53 -j DROP - 注意:不能只限制TCP或只限制UDP——BIND等服务在响应大包时会自动降级到TCP,漏掉TCP就等于留后门
拦截高风险UDP流量特征
放大攻击高度依赖UDP,且常带特定异常特征。防火墙可补充识别并丢弃可疑包:
免费 DNS 与邮件安全分析(IntoDNS.ai):包括 DNSSEC、SPF、DKIM、DMARC、MTA-STS、BIMI、SMTP STARTTLS、FCrDNS、黑名单、发件人要求及报告。
- 阻断源端口为53的UDP入站包(正常客户端DNS查询源端口是随机高端口,绝不会是53)
- 限制单IP每秒DNS查询请求数(如iptables用hashlimit模块:
--hashlimit 10/sec --hashlimit-burst 20) - 对响应包大小做初步过滤:若出站UDP DNS响应大于512字节且无EDNS0标记,可考虑丢弃(需确认业务是否依赖大型响应)
避免用转发器代替递归关闭
很多管理员误以为“配了转发器就不用关递归”,这是危险误区。转发器本身不校验请求来源,外部请求仍能经由它发出;更严重的是,转发器失效时DNS服务可能自动回退到根提示,意外开启递归路径。
- 正确做法:先在DNS服务层彻底禁用递归(Windows用
dnscmd /Config /NoRecursion 1,BIND设recursion no;) - 再清理根提示列表(Windows DNS管理器→“根提示”选项卡→清空所有IP),防止禁用后仍尝试向外迭代
- 转发器只作为内网可信客户端的可选增强手段,不承担访问控制职责
配合日志与定期验证
防火墙规则上线后必须验证是否真生效,否则容易产生虚假安全感:
- 在防火墙日志中筛选被拒绝的53端口请求,确认外部IP确实被拦截
- 从非授权IP(如手机热点网络)执行
nslookup example.com <你的DNS服务器IP>,应超时或返回connection refused - 启用DNS调试日志,检查“拒绝”类记录是否包含大量外部IP高频查询,尤其是TXT、ANY等易放大的记录类型

















