开放递归的危害
对外提供解析的 DNS 服务器如果开放递归,会被第三方当作放大攻击的反射源:一个很小的查询可以触发一个很大的响应,攻击者等于借你的带宽与信誉去打别人。正确做法是按角色拆分:面向公网的只做权威解析,递归只对内部来源开放,并用 allow-recursion 明确限定来源网段。
基本信息
| 适用平台 | Linux(BIND、Unbound) |
|---|---|
| 相关端口 | 53,TCP 与 UDP |
| 风险等级 | 高 |
| 基线要求 | 不存在开放递归 |
| 关键配置 | allow-query、allow-recursion、allow-transfer |
典型使用场景
- DNS 服务器角色梳理与配置收敛
- 排查开放递归带来的风险
- 限制区域传送,防止域数据被拉取
- 新建解析服务时的最小化配置
- 收到放大攻击投诉后的应急处置
- 多台 DNS 分层的来源规划
核查与收紧
核查与收紧
ss -tulnp | grep ':53 ' # 确认 53 端口的监听情况
named-checkconf 2>/dev/null # 检查 BIND 配置语法
grep -E 'allow-(query|recursion|transfer)' /etc/named.conf 2>/dev/null # 查看三个关键条目
# 建议:allow-query { any; }; allow-recursion { 10.0.0.0/8; };
unbound-control status 2>/dev/null | head # Unbound 环境可用它查看运行状态配置项读法
| 配置项 | 含义 | 注意点 |
|---|---|---|
| allow-query | 允许查询的来源 | 与递归控制是两件事 |
| allow-recursion | 允许递归查询的来源 | 必须限定为内部网段 |
| allow-transfer | 允许区域传送的来源 | 显式配置,默认值因版本而异 |
| 监听地址 | 服务绑定的地址与端口 | 不宜绑到不可信网段 |
| 递归开关 | 是否提供递归服务 | 按服务器角色决定 |
存在开放递归时,第三方可以借你的带宽与信誉发动放大攻击:处置优先级等同于一个高危漏洞。
allow-query 与 allow-recursion 是两件事:只改前者不解决问题,递归开关必须单独收敛。
区域传送同样要限制:allow-transfer 的默认值随版本变化,不同版本行为不一致,必须显式写出来才可靠。
改动 DNS 配置属于高风险操作:改之前先备份配置,改完用 named-checkconf 检查语法,再从内部与外部各验证一次解析行为,避免解析中断影响全体业务。