DNSBL / DNSWL 的查询机制是怎样的?如何正确接入并做健康自检?
DNSBL(DNS-based Blacklist)与 DNSWL(whitelist)的设计巧思在于复用 DNS 作为分布式查询协议:列表运营方把数据发布为一个 DNS 区,查询方发起一次普通的 A 记录查询即可完成判定,天然获得缓存、任播分发与高可用能力,无需任何专用协议。RFC 5782 于 2010 年 2 月发布,把这一广泛存在的既有实践形式化为规范文档(Informational)。
需要先明确一个常被混淆的点:DNSBL 不是「一个黑名单」,而是一类查询接口。不同列表的收录标准、数据来源、误报率与适用位置差异极大,接入前必须逐个了解其发布的收录与移除政策。
查询某个 IPv4 地址是否在名为 dnsbl.example 的列表中,规则是把四段八位组反序,与列表区名拼接,然后查 A 记录:
待查地址:192.0.2.44
查询名称:44.2.0.192.dnsbl.example. IN A
- 返回 A 记录:表示命中(在列表中)。返回值位于
127.0.0.0/8段内,如127.0.0.2。具体的 127.0.0.x 取值是列表自定义的语义编码,不同列表用不同末位区分收录原因(如动态地址段、已知垃圾源、开放代理等),必须查阅该列表的官方说明才能解读,不能跨列表套用。 - 返回 NXDOMAIN:表示未命中。
- TXT 记录:对同一名称查询 TXT,可获得人类可读的说明文本,通常包含收录原因与查询移除的 URL。把这段文本带入 SMTP 拒绝响应,是让被误拦发件人能够自助解决问题的关键,不带则对方只能看到一句无从下手的拒绝。
IPv6:规则相同但粒度更细——把地址展开为完整的 32 个十六进制半字节(nibble),反序后以点号分隔,再拼接区名。这与 IPv6 反向解析所用的 nibble 格式一致。由于 IPv6 地址空间巨大,基于单个地址的列表意义有限,实践中更多以前缀为单位处理,接入前需确认目标列表是否真正支持 IPv6 查询。
基于域名的列表:除 IP 外,同样的机制可用于域名——直接把待查域名与区名拼接后查询,用于判定发件域、正文链接中的主机名或其权威名称服务器是否已被收录。这类列表在拦截使用一次性新注册域名的钓鱼与垃圾邮件时尤为有用,因为发件 IP 可以频繁更换,而落地页域名相对稳定。
务必注意:IP 列表与域名列表不能互换使用,把域名拼进 IP 列表的区名只会得到无意义的结果。
这是 RFC 5782 中最具工程价值、却最常被忽略的一节。规范要求列表提供固定的测试条目,用于验证查询链路是否正常:
127.0.0.2必须被列入(对 DNSBL 与 DNSWL 均如此)。即查询2.0.0.127.<zone>应当返回 A 记录。127.0.0.1必须不被列入。即查询1.0.0.127.<zone>应当返回 NXDOMAIN。
# 正常应返回 127.0.0.x
dig +short 2.0.0.127.dnsbl.example A
# 正常应无结果(NXDOMAIN)
dig +short 1.0.0.127.dnsbl.example A
这两个探针能区分三种截然不同的故障状态,而它们在业务表现上可能完全一样:
- 两个都无返回:列表区不可达、DNS 解析链路故障,或本方查询量超限被列表方屏蔽。此时 DNSBL 静默失效——所有邮件都「未命中」而被放行,拦截能力归零且不产生任何错误日志。这是最危险的失效模式。
- 两个都有返回:解析路径上存在通配符应答或 NXDOMAIN 劫持(部分 ISP 递归服务器或某些 DNS 服务会把不存在的域名解析到广告页)。此时所有地址都「命中」,将导致大规模误拦全部入站邮件。
- 符合预期:链路正常。
因此,把这两条探针做成定时健康检查并接入告警,是接入任何 DNSBL 的前置条件,而不是可选项。
- 自建递归解析器:不要使用公共 DNS 递归服务查询 DNSBL。多数列表按查询来源限流,公共递归器的查询量早已超限,会被返回错误结果或直接屏蔽;同时公共递归器也可能改写 NXDOMAIN。应部署本地递归解析器直接向权威查询,并按需求量评估是否需要与列表方约定镜像同步。
- 用对位置:IP 类列表用于连接阶段(依据对端连接 IP);域名类列表用于信封发件域与正文 URL 主机名。把用于连接阶段判定的列表拿去判定正文链接,或反之,都会产生系统性误判。
- 区分「拒绝」与「加分」:只有误报率极低、政策透明的列表适合用于 SMTP 阶段直接拒绝;其余应作为评分因子并入综合判定。新接入的列表一律先以「只记录、不动作」模式观察,用真实流量评估误报后再决定是否提权。
- 拒绝时给足信息:按 RFC 5321 的响应格式返回永久拒绝,附 RFC 3463 体系下的增强状态码,并把列表 TXT 中的说明与查询 URL 一并带出,使发件方可自助申诉。
- 建立白名单与豁免通道:对关键业务往来域与自有基础设施设置豁免,防止列表侧误收录直接中断业务。
- 监控命中分布:持续观察各列表的命中量与误拦申诉。某个列表命中量突然暴涨或归零,通常意味着列表侧策略变更或链路故障,而非威胁态势变化。
- 准备退出方案:列表可能停止服务或变更政策。配置上应能快速摘除单个列表而不影响整体投递,切勿把邮件可达性完全绑定在某一个外部列表上。
参考:RFC 5782《DNS Blacklists and Whitelists》,J. Levine,2010 年 2 月,Informational,DOI 10.17487/RFC5782,https://www.rfc-editor.org/rfc/rfc5782.html ;RFC 1034《Domain names - concepts and facilities》,P. Mockapetris,1987 年 11 月,STD 13,https://www.rfc-editor.org/rfc/rfc1034.html ;RFC 5321《Simple Mail Transfer Protocol》,J. Klensin,2008 年 10 月,https://www.rfc-editor.org/rfc/rfc5321.html ;RFC 3463《Enhanced Mail System Status Codes》,G. Vaudreuil,2003 年 1 月,https://www.rfc-editor.org/rfc/rfc3463.html
