1. DNS 安全威胁概述
DNS 是网络基础设施的关键组件,但也面临着多种安全威胁:
- DNS 欺骗/缓存投毒:攻击者伪造 DNS 响应,将用户引导到恶意网站(中间人攻击)
- 区域复制攻击:未授权服务器通过 AXFR 获取整个区域数据(泄露内网拓扑)
- DoS/DDoS 攻击:攻击者通过大量查询耗尽 DNS 服务器资源
- 动态更新劫持:恶意客户端注册伪造的 DNS 记录
防护措施
| 措施 | 说明 |
|---|---|
| DNSSEC | 对 DNS 响应进行数字签名,验证数据完整性 |
| 安全动态更新 | 仅限已加入域的计算机更新 DNS 记录 |
| 区域传输限制 | 仅允许授权辅助服务器进行区域传输 |
| 递归查询限制 | 限制谁可以向 DNS 服务器发起递归查询 |
2. DNSSEC 配置
DNSSEC(DNS Security Extensions)通过公钥加密为 DNS 记录添加数字签名,确保解析结果的完整性和来源验证。
1
DNS 管理器 → 展开服务器 → 正向查找区域 → 右键 iehang.cn → 属性
2
切换到区域验证选项卡
3
勾选为这个区域签名(DNSSEC),点击确定开始签名
4
等待签名过程完成(几秒钟),DNSSEC 会在区域中添加 RRSIG 记录
5
重复以上步骤为反向查找区域启用 DNSSEC(可选但推荐)
PowerShell - DNSSEC 签名
# 为正向区域启用 DNSSEC 签名
Invoke-DnsServerZoneSign -ZoneName "iehang.cn"
# 查看签名后的记录统计
Get-DnsServerResourceRecord -ZoneName "iehang.cn" -RRType RRSIG | Measure-Object
# 为反向区域启用 DNSSEC
Invoke-DnsServerZoneSign -ZoneName "10.168.192.in-addr.arpa"
# 导出 DNSSEC 信任锚点(用于客户端验证)
Get-DnsServerDnsSecZoneSigningKey -ZoneName "iehang.cn" `
-CryptoAlgorithmId 13
3. 区域传输安全
PowerShell - 区域传输安全
# 查看区域传输设置
Get-DnsServerZone -Name "iehang.cn"
# 允许特定 IP 进行区域传输
Set-DnsServerZoneTransfer `
-Name "iehang.cn" `
-AllowTransfer `
-Server19216810100, "192.168.10.253"
# 或者禁用区域传输(仅限本地)
Set-DnsServerZoneTransfer -Name "iehang.cn" -NoTransfer
4. 递归查询限制
默认情况下,DNS 服务器对所有查询者提供递归查询服务。在公网 DNS 服务器上,应当限制递归查询仅对内部网络生效。
PowerShell - 递归限制
# 查看当前递归设置
Get-DnsServerRecursion
# 仅允许特定客户端使用递归查询
Add-DnsServerQueryResolutionPolicy `
-Name "AllowInternalClients" `
-Action ALLOW `
-ApplyTo All `
-ClientSubnet "192.168.10.0/24" `
-RecursionScopes "RecursionDefault"
# 禁用递归(转发器模式下使用)
Set-DnsServerRecursion -Enable $false
警告
DNSSEC 需要客户端操作系统支持验证(Windows 10/11 和 Windows Server 2016+ 默认支持)。较老的客户端可能无法解析启用了 DNSSEC 的区域。建议先在测试环境验证。
5. 常见问题
Q1:DNSSEC 签名后客户端无法解析
确保客户端 DNS 指向已正确配置 DNSSEC 的 DNS 服务器。如果客户端操作系统不支持 DNSSEC,考虑在内网环境中禁用 DNSSEC 或使用支持 DNSSEC 验证的解析器。
Q2:区域传输被拒绝
检查辅助 DNS 服务器是否在允许列表中,以及是否使用安全的 TLS 通道(DNS over TLS)进行区域传输。