windows dns服务器默认允许任意客户端区域传送,必须限制为仅指定辅助服务器ip并启用tsig签名:先在dns管理器中为每个主区域配置传送白名单,再用powershell批量设置securesecondaries策略,最后部署tsig密钥验证并定期检查soa同步与日志事件。
windows dns 服务器默认允许任意客户端发起区域传送(axfr/ixfr),这会造成敏感域名、主机名和 ip 地址泄露,必须严格限制传送范围。核心做法是:**只允许指定辅助服务器的 ip 地址发起传送,禁用“允许所有服务器”选项,并结合 tsig 签名增强身份验证。**
在 DNS 管理器中设置单个区域的传送白名单
这是最基础也最关键的一步,适用于每个主区域:
- 打开“DNS 管理器”,右键目标主区域(如 contoso.com)→ 选择“属性”
- 切换到“区域传送”选项卡
- 勾选“允许区域传送”,然后选择“仅到下列服务器”
- 点击“编辑”,在弹出窗口中**逐个输入已知辅助 DNS 服务器的 IPv4 或 IPv6 地址**(例如:192.168.10.5、2001:db8::1)
- 不要勾选“仅到‘名称服务器’选项卡上列出的服务器”,该方式依赖 NS 记录,易被伪造或绕过
- 确认后点击“确定”保存
批量配置所有区域统一启用传送限制
若服务器托管多个区域,逐一手动设置效率低且易遗漏。可通过 PowerShell 统一强制策略:
免费 DNS 与邮件安全分析(IntoDNS.ai):包括 DNSSEC、SPF、DKIM、DMARC、MTA-STS、BIMI、SMTP STARTTLS、FCrDNS、黑名单、发件人要求及报告。
- 以管理员身份运行 PowerShell
- 执行命令关闭所有区域的开放传送:
Get-DnsServerZone | ForEach-Object { Set-DnsServerPrimaryZone -Name $_.ZoneName -SecureSecondaries NonSecureAndTransferToSecureServers -SecondaryServers @() } - 再为每个区域明确指定可信辅助服务器列表(示例含两台):
Set-DnsServerPrimaryZone -Name "contoso.com" -SecureSecondaries TransferToSecureServers -SecondaryServers "192.168.10.5","192.168.10.6" - 检查结果是否生效:
Get-DnsServerPrimaryZone -Name "contoso.com" | Select-Object ZoneName,SecureSecondaries,SecondaryServers
用 TSIG 签名防止 IP 欺骗攻击
仅靠 IP 白名单无法防御源地址伪造。TSIG 可对每次传送请求签名验证,大幅提升安全性:
- 在主服务器上创建密钥(例如密钥名 rpz-key):
dnscmd /config /tsigkey "rpz-key" hmac-sha256 "Base64EncodedKeyString==" - 在辅助服务器上配置相同密钥(密钥内容必须完全一致)
- 为主区域启用 TSIG 验证:
Set-DnsServerPrimaryZone -Name "contoso.com" -NotifyLevel Notify -Notify -SecondaryServers "192.168.10.5" -TsigKey "rpz-key" - 在辅助服务器上配置对应主区域时,同样指定该 TsigKey 名称
- 验证日志:若出现事件 ID 4515,说明 TSIG 校验失败,需检查密钥一致性
验证与日常维护要点
配置不是一次性的,需定期确认有效性:
- 用命令比对主辅服务器 SOA 序列号是否同步:
dnscmd /zoneinfo contoso.comdnscmd /zoneinfo contoso.com - 在“事件查看器 → Windows 日志 → DNS Server”中筛选事件 ID:
4013(传送开始)、4016(传送完成)、4515(TSIG 失败) - 确保 TCP 53 端口在主辅服务器之间双向可达,防火墙规则未拦截 DNS 服务的出站连接
- 辅助区域本身必须设为“不允许任何动态更新”,且类型为“辅助区域”,避免被意外写入










