关闭DNS开放递归是防御反射放大攻击最直接有效的措施,能显著降低服务器被利用的风险,是域名系统安全加固的第一步。
开放递归让DNS服务器自动响应来自任意来源的解析请求,攻击者正是利用这一特性,通过伪造源IP地址向服务器发送大量查询,将响应流量“反射”到受害者目标,据统计,这类攻击的放大倍数可达数十倍甚至上百倍,严重影响网络稳定性,关闭开放递归等于切断了攻击者的“弹药库”,让服务器不再为恶意流量做“帮凶”。
DNS反射放大攻击怎么防御?关闭开放递归是首选
反射放大攻击的触发原理
攻击者向开放递归DNS服务器发送一个源IP被伪造为受害者的查询请求,服务器生成的响应数据包会发送给受害者,由于DNS响应通常比查询请求大得多,攻击者可以用较小的带宽产生巨大的攻击流量,业内专家指出,大多数反射放大攻击都依赖互联网上大量存在的开放递归DNS服务器,因此关闭递归是扼制此类攻击的“七寸”。
开放递归在攻击中的角色
- 无条件响应:开放递归服务器不会验证请求来源的合法性,无论来自哪个IP,都返回完整的解析结果。
- 放大系数高:某些DNS记录类型(如TXT、DNSSEC相关记录)的响应长度远大于查询,攻击者精挑细选查询类型,放大倍数可达50倍以上。
- 难以追溯:由于源IP已伪造,被攻击者难以直接定位攻击源头,只能看到大量来自不同DNS服务器的流量。
关闭开放递归后,服务器仅响应授权域名的解析请求,或只对特定客户(如内部网络)提供递归服务,攻击者无法再将其作为“反射器”。

如何关闭DNS递归查询?各类服务器配置详解
判断当前服务器是否开放递归
在配置变更前,先确认服务器是否存在开放递归,以下操作可快速验证,使用任意一台能连上该服务器的设备执行:
dig @服务器IP www.example.com +short
如果返回正常解析结果,说明服务器允许递归查询,更严格的测试是使用非权威域名:
dig @服务器IP www.google.com +short
同样返回结果,则基本确定是开放递归。
针对不同DNS软件的关闭步骤
BIND(最大开源的DNS服务器软件)
编辑主配置文件(通常是/etc/named.conf),在options块中修改以下参数:
options {
recursion no;
allow-query-cache { none; };
allow-recursion { none; };
};
recursion no;关闭递归功能。allow-query-cache { none; };禁止缓存查询,防止内部缓存被利用。allow-recursion { none; };明确拒绝所有递归请求。
如果希望仅对内部网络开放递归,可将allow-recursion改为客户网段,如allow-recursion { 192.168.0.0/16; };。
修改后执行rndc reload或重启named服务。
Windows Server DNS
在DNS管理器控制台,右键点击服务器名称,选择“属性”,在“高级”选项卡中,确保“禁用递归(也禁用转发器)”已勾选,如果服务器仅作为内部解析,可以关闭递归并配置转发器,将外部查询转发到权威DNS。
Unbound(轻量级递归服务器)

编辑unbound.conf,设置:
server:
access-control: 127.0.0.0/8 allow
access-control: 192.168.0.0/16 allow
access-control: 0.0.0.0/0 refuse
只允许内网地址进行递归查询,拒绝所有外部请求,同时可以设置do-not-query-localhost: yes防止环路。
验证关闭结果
再次使用dig @服务器IP www.google.com,如果返回REFUSED或timed out,表明递归已关闭,对于内部授权域名,应能正常解析,说明服务器仍能处理权威查询。
关闭开放递归后,注意这些影响和替代方案
对正常解析的影响
- 内部客户端无法解析外部域名:如果服务器之前为内部网络提供递归解析,关闭递归后,内网设备将无法通过该服务器解析公网域名,此时需要引入转发器或配置内部DNS代理。
- 授权解析不受影响:服务器上托管的权威区域的解析请求仍然正常,因为授权查询不依赖递归功能。
替代方案:使用转发器代替递归
行业共识认为,关闭递归后,通过配置转发器可以满足内网对外部域名的解析需求,同时不暴露递归服务,转发器将请求发送到指定的上游DNS(如8.8.8.8或114.114.114.114),由上游完成递归,本地服务器仅缓存结果。
BIND转发器配置示例:
options {
recursion no;
forwarders {
8.8.8.8;
114.114.114.114;
};
forward only;
};
Windows Server:在DNS管理器“转发器”选项卡中添加上游DNS服务器地址,并勾选“如果没有到目标域的响应,则使用递归”但建议关闭递归,只依赖转发器。

风险控制:转发器也需选择可信的、支持DNSSEC验证的公共DNS,避免被中间人劫持。
长期维护与监控
- 定期扫描外部IP,使用在线工具或自行搭建扫描脚本,检查DNS服务器是否仍存在开放递归。
- 监控DNS响应流量,若发现异常大的出站流量,及时排查配置。
- 将DNS服务器部署在防火墙后,仅允许必要端口(UDP 53、TCP 53)从特定源地址访问。
关闭开放递归降低反射放大风险常见问题
关闭开放递归后,我的网站访客还能正常解析吗?
如果您的网站域名使用该服务器作为权威DNS,不会受影响,开放递归针对的是非本域名的查询请求,关闭后服务器仍能正常响应自己托管的域名,如果您的服务器同时承担内部递归解析任务,需要配置转发器或改用其他递归服务器为内网服务。
如何判断我的DNS服务器是否被用于反射攻击?
检查服务器网络接口的出站流量,如果发现大量UDP流量涌向单一目标IP,且端口为53,很可能已被用作反射节点,此时应立即关闭递归,并清理缓存,还可以查看DNS日志,若出现大量来自不同源IP但查询相同域名的记录,也可能是攻击前兆。
关闭递归后还需要做哪些安全配置?
限制对DNS服务器的访问来源,仅允许授权网段发起查询;启用DNSSEC验证防止缓存投毒;定期更新DNS软件版本修补已知漏洞;配置响应速率限制,防止暴力查询耗尽资源,对于大型网络,建议部署独立的递归服务器与权威服务器,严格隔离角色。