Windows Server DNS服务器须禁用递归并配置ACL防护:勾选“禁用递归”,清空根提示,用防火墙限制53端口访问,启用调试日志审计,避免使用转发器替代递归关闭。
windows server dns服务器默认开启递归查询,若未合理限制,可能被用作开放递归服务器,导致dns放大攻击或资源耗尽。实际运维中,必须结合递归设置关闭与acl访问控制双重手段,才能有效防护。
关闭不必要的递归查询
DNS递归功能应仅对内部可信客户端启用。对外网或未知来源的递归请求必须禁用,避免成为反射攻击跳板。
- 打开DNS管理器 → 右键服务器名 → “属性” → 切换到“高级”选项卡
- 勾选“禁用递归(也禁用循环查找)”,点击“确定”
- 重启DNS服务(或运行
net stop dns && net start dns)使配置生效 - 验证:使用
nslookup -type=soa example.com 127.0.0.1测试本地递归是否已禁用(应返回“Query refused”或超时)
配置DNS服务器端IP地址访问控制(ACL)
Windows DNS本身不提供传统ACL语法(如BIND的acl语句),但可通过“条件转发器+根提示屏蔽+防火墙规则”组合实现等效访问控制。
- 仅允许指定子网查询:在DNS服务器所在主机上,用Windows防火墙限制UDP/TCP 53端口入站流量,例如只放行192.168.10.0/24和10.20.30.0/24
- 禁用根提示转发:在DNS管理器 → 服务器属性 → “根提示”选项卡 → 清空全部根服务器IP(防止禁用递归后仍尝试外部解析)
-
为内部客户端配置条件转发器:对常用内部域名(如
corp.local)设置条件转发到域控DNS,确保内网解析不受影响
启用日志审计与异常识别
仅靠配置不能替代监控。开启DNS服务器调试日志,可快速定位异常递归请求来源。
- DNS管理器 → 右键服务器 → “属性” → “事件日志”选项卡 → 勾选“详细事件日志记录”
- 在“调试日志”选项卡中启用日志,并指定路径、日志级别(建议选“查询”和“拒绝”)
- 定期检查日志中高频出现的外部IP,尤其是大量
A或AAAA查询且目标域非常规的记录 - 配合PowerShell脚本自动提取Top 10可疑客户端:
Get-WinEvent -LogName "DNS Server" | Where-Object {$_.Id -eq 257} | Group-Object -Property @{e={$_.Properties[1].Value}} | Sort-Object Count -Descending | Select-Object -First 10
补充说明:为何不用“转发器”代替递归关闭?
设置转发器(如指向8.8.8.8)看似可控,但仍有风险:
- 转发器本身不校验查询源,外部请求仍可经由转发链路发出
- 若转发器不可达,DNS服务可能回退至根提示并重新启用递归行为
- 转发器无法限制查询类型或频率,无法防御NXDOMAIN泛洪等应用层攻击
- 真实生产环境推荐:内网客户端直接使用域控DNS,外网访问走专用解析代理(如dnsmasq+iptables限速),DNS服务器本身保持“非递归+严格ACL”模式










