关闭开放递归是抵御DNS反射放大攻击最直接、成本最低的手段,任何暴露在公网上的DNS服务器都不应允许任意来源IP发起递归查询。
DNS反射放大攻击常年盘踞在DDoS攻击类型前列,攻击者利用全网暴露的开放递归DNS服务器,用少量请求即可制造出几十倍甚至上百倍的流量洪峰,很多管理员并非不想修复,而是不清楚自己的服务器是否存在问题,也不知道从何下手,下面直接讲清楚风险原理、自查方法、关闭步骤与后续加固。
为什么说开放递归是一颗定时炸弹
DNS协议设计之初注重可用性,忽略了验证来源,递归查询会替任意客户端完整遍历域名解析链路,并将最终结果返回给“询问者”,如果这个“询问者”的源IP被伪造为受害者的地址,DNS服务器就会把响应数据包发向受害者。
反射放大攻击的成本极不对称
攻击者发送一个几十字节的查询请求,例如请求解析一个包含较大TXT记录或DNSSEC签名记录的域名,DNS服务器返回的响应可能达到请求大小的几十倍,再加上攻击者用僵尸网络同时命令数以万计的开放递归服务器发起反射,最终汇聚到受害者身上的流量规模非常恐怖,行业共识认为,反射放大攻击之所以长期存在,根因就是公网上遗留了大量配置不当的开放递归节点。
开放递归不只带来DDoS风险
- 攻击者可以利用你的递归服务器进行DNS劫持或缓存投毒,篡改域名解析结果。
- 递归服务器被滥用后,会成为恶意软件回连、钓鱼站点解析的跳板。
- 日志中会留存大量来自外部的异常查询记录,增加合规审计压力。
如何自查:判断你的DNS服务器是不是开放递归
在动手关闭前,先要确认当前状态,你可以用以下方法快速验证,整个过程只需几分钟。
使用外部工具检测
在本地电脑或任意一台外网主机上执行:
nslookup -type=txt o-o.myaddr.l.google.com 你的服务器IP
中出现了edns0-client-subnet或正常解析结果,而不仅仅是超时或拒绝,说明你的服务器正在为外部来源提供递归服务,也可以使用开放递归检测网站,输入服务器IP即可获得直观结论,不过部分站点可能要求注册或限速,使用命令行更直接。
检查本地配置文件
- 在Linux服务器上执行
cat /etc/named.conf或cat /etc/unbound/unbound.conf,查看allow-recursion、allow-query等参数。 - Windows Server的DNS管理器里,右键服务器属性,查看“高级”选项卡或“接口”设置。
- 如果使用dnsmasq、SmartDNS等轻量工具,检查
except-interface或no-resolv配置项。
确定你的DNS服务器位置
如果你的DNS服务器托管在机房或云上,且配置了公网IP,就必须假设它正被全网扫描,据业内专家指出,互联网上每天都有针对常用端口和DNS服务的自动化扫描流量,新上线的开放递归服务器通常暴露数小时内就会被发现并列入攻击工具列表。
DNS反射放大攻击怎么防护:核心思路是把递归权限关进笼子里
防护思路分两层:第一层是关闭不必要的递归,第二层是限制递归服务的来源,两者配合使用才能形成完整防线。
明确递归与权威的关系
如果这台DNS服务器只负责解析你自己管理的域名(权威解析),那么它完全不需要对外提供递归服务,如果它需要为内网用户解析外部域名(递归解析),则必须将递归权限严格限制在可信来源范围内。
判断标准:任何来自未知IP的递归请求,直接拒绝。
关闭或限制递归的具体配置
在/etc/named.conf的options块中进行如下设置:
options {
recursion no; # 完全关闭递归,适合纯权威服务器
allow-query { any; }; # 保持端口可达,用于响应权威查询
};
如果服务器同时承担内网递归职能,则这样配置:
options {
recursion yes;
allow-recursion { 内网网段; 127.0.0.1; }; # 仅允许内网来源使用递归
allow-query { any; }; # 权威查询仍然对全网开放
};
对于Unbound,在unbound.conf中找到access-control选项:
access-control: 127.0.0.1/32 allow access-control: 内网网段/16 allow access-control: 0.0.0.0/0 refuse
防火墙层面的兜底控制
配置层面完成后,再用防火墙规则兜底,以iptables为例:
iptables -A INPUT -p udp --dport 53 -s 内网网段 -j ACCEPT iptables -A INPUT -p udp --dport 53 -s 可信IP -j ACCEPT iptables -A INPUT -p udp --dport 53 -j DROP
TCP 53端口同样需要限制,虽然反射攻击主要走UDP,但TCP入口的开放递归也可能被用于慢速探测。
从配置到验证:关闭后的完整检查流程
修改配置只是第一步,确认配置真正生效才算是结束,建议按以下顺序操作:
重启服务并观察日志
重启DNS服务后,马上查看日志确认没有报错,执行tail -f /var/log/messages或journalctl -u named -f,观察是否有异常语法提示。
再次执行外部检测
重复使用nslookup命令,从外网测试递归功能,此时应当返回REFUSED或server can't find,说明递归已被成功阻断。
验证权威解析不受影响
让同事或使用在线工具,从外网查询你负责的权威域名,确认解析记录仍然正常返回。这一步容易被忽略,但直接关系到业务连续性。
扫描全网暴露面
登录Shodan或FOFA搜索你的IP,查看53端口暴露情况,这类平台往往记录了设备的历史指纹数据,如果此前被标记为开放递归,清理后仍可能被记录一段时间,但这不影响实际安全状态。
不同场景下的差异化处理策略
开放式递归的清理无法一刀切,不同部署环境需要针对性调整。
企业自建DNS服务器
如果企业有多个分支,各分支的DNS请求最终都要回到总部解析,这种情况不适合简单粗暴地关闭递归,建议架构调整思路如下:
- 各分支部署本地缓存DNS,仅允许分支内部网段使用递归。
- 总部DNS只对分支的DNS服务器IP开放递归,拒绝其他来源。
- 用防火墙策略将分支DNS服务器与总部DNS之间的通信限制在特定端口和IP上。
有的团队反馈,调整后内网解析延迟并未增加,因为分支缓存已经承担了大部分重复查询。
云服务器上的DNS服务
云厂商本质不提供额外防护能力,安全组规则由租户自行管理,在云控制台的安全组入方向规则里,删除或禁用0.0.0/0到53端口的放行策略,如果申请了DDoS高防IP,注意高防回源地址可能涉及DNS查询,需要将高防的回源IP段加入白名单,避免误伤。
IDC机房托管的高防DNS
这类服务器通常承载着大量权威解析业务,需要保证高可用性,除了关闭递归外,建议在设备前面加一层专门的流量清洗设备,或直接使用云解析服务作为前置,源站IP不暴露在公网。
家用路由器和小型办公设备
很多家用路由器的DNS转发功能默认允许外网访问,如果你的设备同时开启了UPnP,很容易被扫描到,登录路由器后台,关闭“DNS转发”或“DNS代理”功能,同时在“远程管理”中禁止WAN侧访问。
DNS维护中的长期安全习惯
关闭开放递归不是一劳永逸,后续人员变动、系统重装、服务升级都可能让配置回退,以下习惯可以长期保持,降低复发概率。
配置变更走最小权限原则
任何DNS配置变更都应遵循“非必要不开放”原则,新装系统时,默认配置通常是允许所有来源查询的,必须在初始化阶段就收紧权限。
建立定期外部扫描机制
使用免费工具或商业平台定期扫描公网IP的53端口,检查递归是否重新开启,比较简单的做法是部署一个定时任务,每周从外网VPS执行一次检测脚本,异常时自动通知管理员。
关注相关软件安全公告
BIND、Unbound、dnsmasq等主流DNS软件会不定期发布安全补丁,开放递归一旦与已知漏洞叠加,风险会成倍放大,即使关闭了递归,也建议保持软件版本更新,无业务特殊需求时,不要长期运行停止维护的旧版本。
内网递归与权威解析物理分离
在条件允许的情况下,建议将权威解析与递归解析部署在不同的服务器上,这样即使递归服务遭受DDoS攻击影响,权威解析业务仍能保持稳定,内网DNS服务器可以使用独立域名或内部根区域,避免与公网解析逻辑互相干扰。
针对价格和区域选择的现实建议
部分团队在购买DNS防护服务时会纠结:便宜的每月几百元,贵的高防套餐可能上万元,这些报价取决于清洗能力、区域节点数量和是否包含智能调度,地域上,如果业务主要面向国内用户,选择华东或华北节点的云解析,效果通常优于海外节点,国内节点对运营商Local DNS的兼容性更好,在成本有限的情况下,优先清理自身开放递归是性价比最高的方案,比单纯购买高价防护更能解决根子问题。
常见问题排查与解答
Q1:DNS开放递归怎么关闭,为什么关闭后域名解析变慢了?
关闭开放递归后,如果配置不当,可能影响正常的权威解析响应,多数“变慢”的情况是因为防火墙规则误伤了权威查询来源,或allow-query与allow-recursion的配置顺序不正确,检查服务日志,确认外部权威查询是否被拒绝或丢包,确认是否需要保留内网递归服务,如果需要,请明确指定内网网段。
Q2:DNS反射放大攻击怎么防护,只关闭递归真的够用吗?
关闭开放递归可以消除被利用的根基,但若攻击者转向反射你的权威解析服务,仍然可能造成一定流量压力,完整防护方案应当包括限制权威服务器的响应速率、配置相应网络层清洗策略,以及部署专业的DDoS防护产品,单独关闭递归能挡住相当一部分常见攻击手法,多数情况下用于应对中小规模攻击足够了。
Q3:递归查询和迭代查询有什么区别,为什么关闭递归不影响权威解析?
递归查询是替客户端完成整个解析过程,包括向根服务器、顶级域服务器逐级询问,最终返回完整结果,因此消耗大量服务器资源,迭代查询是服务器直接回指下一级域名服务器地址,由客户端自行跟进查询,权威DNS服务器主要工作在迭代模式下,关闭递归后,权威服务器依然可以正常响应关于自身管辖域名的查询,只是不再替陌生用户完成全网解析,这是两套完全独立的功能路径。
Q4:设置完成后,仍有外网IP能递归查询,可能是什么原因?
首先确认配置没有同时存在多个配置文件或include多重引用,部分系统存在默认配置文件覆盖自定义配置的情况,再次检查防火墙规则顺序,因为DROP规则放在ACCEPT之前可能导致白名单失效,最后检查服务器是否存在多个网卡或多IP绑定,确保配置文件里的匹配范围与实际监听地址对应。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/786802.html


