DMARC 标准演进 — RFC 9989/9990/9991(2026-05)正式发布:DNS Tree Walk 与标签体系重构 · ztpop 邮件技术知识库

⁣​‌​‌‌​‌​​‌​‌​‌​​​‌​‌​​​​​‌​​‌‌‌‌​‌​‌​​​​​‌‌‌‌‌​​​​‌‌​​‌​​​‌‌​​​​​​‌‌​​‌​​​‌‌​‌‌​​​‌​‌‌​‌​​‌‌​​​​​​‌‌‌​​​​‌‌‌‌‌​​​‌‌‌​‌‌​​​‌‌​​​‌​‌‌‌‌‌​​​‌​​​‌‌​​‌​​​‌​‌​‌​​​‌​​​‌​​​‌​‌⁤
DMARC 标准体系自 RFC 7489 (2015, Informational) 到 RFC 9989/9990/9991 (2026-05, Standards Track) 的完整演进路径。RFC 9989 废弃 RFC 7489 与 RFC 9091,引入 DNS Tree Walk 策略发现、np/psd/t 新标签,移除 pct/rf/ri 标签,RFC 9990/9991 将聚合报告与失败报告独立为规范。

勘误说明(2026-08-09):本文早期版本基于草案传闻误述「RFC 9989 于 2025-03 发布、Tree Walk 被弃用」。经与 RFC Editor 官方文本核对(rfc-editor.org/rfc/rfc9989),RFC 9989/9990/9991 均于 2026 年 5 月Internet Standards Track 状态发布,RFC 9989 的 DNS Tree Walk 是新增的核心策略发现机制(非被弃用)。本文已按官方文本全面修正。

一、概述:DMARC 正式成为互联网标准

2026 年 5 月,IETF 正式发布 RFC 9989(Domain-Based Message Authentication, Reporting, and Conformance (DMARC),Standards Track),同时发布配套的 RFC 9990(DMARC Aggregate Reporting)与 RFC 9991(DMARC Failure Reporting)。

RFC 9989 废弃(Obsoletes)了服役 11 年的 RFC 7489(2015-03,Informational)与 RFC 9091(2021-07,Experimental,PSD DMARC 扩展)。RFC 9990 与 RFC 9991 分别独立规范聚合报告与失败报告,同时废弃 RFC 7489 的相应章节;RFC 9991 还更新了 RFC 6591(ARF 格式)。这是 DMARC 协议自诞生以来最重要的一次版本升级:从 Informational 类别正式进入 IETF 标准轨道(Standards Track)。

三份文档的官方信息:

二、三大架构性变更

2.1 DNS Tree Walk:正式确立的策略发现机制(新增,非弃用)

RFC 9989 引入 DNS Tree Walk 作为 DMARC 策略记录发现的核心机制(Section 4.10),替代 RFC 7489 依赖公共后缀列表(PSL)的组织域判定方式。这是本文档最重要的架构变化,与早期草案误传的「Tree Walk 被弃用」完全相反。

算法要点:

  1. 查询域:在 Author Domain 的 _dmarc 子域下查询 TXT 记录(如 _dmarc.example.com)。
  2. 过滤:丢弃不以 v=DMARC1 开头的记录;若返回多条记录则全部丢弃。
  3. 终止条件:若找到的记录包含 psd=npsd=y 标签,停止遍历。
  4. 标签剥离:将域名拆分为标签序列,每次移除最左标签后向上查询父域。
  5. 安全上限:Author Domain 超过 8 个标签时先缩短至 7 个标签,保证最多 8 次 DNS 查询,防止深层域名构造的拒绝服务攻击。

观察数据显示实际使用的 Author Domain 最多 7 个标签,8 层限制覆盖全部合法场景。DNS Tree Walk 消除了对人工维护 PSL 的依赖,同时支持多级子域的差异化策略发现。

2.2 子域策略:sp 标签 + np 标签两级体系

RFC 9989 保留 sp= 标签为子域指定策略,并新增 np= 标签处理「不存在的子域」(DNS 查询返回 NXDOMAIN,定义同 RFC 8020)。np 取值与 p/sp 相同(none/quarantine/reject),未设置时回退到 sp,再回退到 p。

v=DMARC1; p=reject; sp=quarantine; np=none; rua=mailto:dmarc@example.com

含义:主域 reject,现有子域 quarantine,不存在的子域(如拼写错误产生的 NXDOMAIN)仅监控,避免误拒。

2.3 报告体系拆分:RFC 9990 + RFC 9991

RFC 7489 单一文档中的报告章节被拆分为两份独立规范:

三、标签体系变化

3.1 移除标签(C.5.2)

移除标签原含义移除原因 / 替代
pct按百分比应用策略只在 0/100 时被准确执行,中间值实现不统一;测试功能由新 t= 标签承担(Appendix A.6)
rf失败报告格式(afrf/iodef)报告格式由 RFC 9991 统一管理
ri聚合报告间隔(秒)接收方很少遵循指定间隔,改为自行决定;聚合报告中作为回显字段保留

3.2 新增标签(C.5.1)

新标签名称取值与语义
npNon-Existent Subdomain Policynone/quarantine/reject;定义不存在子域(NXDOMAIN)的评估策略;回退顺序 np → sp → p
psdPublic Suffix Domain 标志y=该域是公共后缀域(PSD);n=希望被视为自身及子域的组织域;u=不确定(默认),使用标准 DNS Tree Walk
tTesting 测试模式y=请求降低一级执行策略(p=reject→实际 quarantine;p=quarantine→实际 none);n=正常应用(默认)

psd 标签服务于 DNS Tree Walk:PSO(公共后缀运营商)在 PSD 上发布 DMARC 记录时必须包含 psd=y,接收方遇到该记录即停止向上遍历,向下一级查找真正的组织域策略。

四、术语与行为更新

五、关键互操作性建议(Section 7.4)

重要:RFC 9989 Section 7.4 明确指出——拥有普通用户发送日常邮件的域 不应部署 p=reject 策略(SHOULD NOT),接收方也不得仅凭 p=reject 策略拒绝邮件,而应将其作为综合决策的输入。

六、推荐部署路线

  1. 发布 v=DMARC1; p=none; rua=...(监控模式)至少一个月,收集基线数据。
  2. 分析聚合报告,修复未认证的合法邮件流(补充 DKIM 签名、修正 SPF)。
  3. 升级 p=quarantine 至少一个月,观察误判。
  4. 使用 t=y 标签在强制执行前进行最终测试(p=reject + t=y 实际执行 quarantine)。
  5. 确认通用邮件域场景后再评估是否升级 p=reject(参考 Section 7.4 建议)。

示例(通用邮件域推荐配置):

v=DMARC1; p=none; rua=mailto:dmarc-rua@example.com,mailto:rua@third-party-service.com

七、错误勘误汇总(RFC 7489 Errata)

RFC 9989 附录 C.9 逐项列出了 RFC 7489 自 2015 年以来的 15 个勘误(Erratum ID 5151/5221/5229/5365/5371/5440/5495/5774/6439/6485/6729/7099/7100/7835/7865),并说明每一勘误在 RFC 9989/9990/9991 中如何被处理。涉及策略发现算法(5495、7835)与 PSL 使用(6729)的勘误通过 DNS Tree Walk 重新设计彻底清除。

八、对中国邮件系统的影响

九、总结

RFC 9989/9990/9991 标志着 DMARC 从「社区实践描述」(Informational)正式升级为 IETF 互联网标准(Standards Track)。核心变化可概括为:一套发现机制(DNS Tree Walk)、两个新语义标签(np/psd)、一个测试标签(t)、三标签移除(pct/rf/ri)、报告体系拆分(9990/9991)。对已部署 DMARC 的域名,DNS 记录通常无需紧急修改;对新建部署,应直接按 RFC 9989 语义配置。

参考文献

  1. RFC 9989 — Domain-Based Message Authentication, Reporting, and Conformance (DMARC),IETF,2026-05,Standards Track,Obsoletes 7489, 9091。Section 4.10(DNS Tree Walk)、Section 4.7(标签格式)、Section 7.4(互操作性)、Appendix A.6(pct 移除)、Appendix C(变更对照)。https://www.rfc-editor.org/rfc/rfc9989
  2. RFC 9990 — DMARC Aggregate Reporting,IETF,2026-05,Standards Track,Obsoletes 7489。https://www.rfc-editor.org/rfc/rfc9990
  3. RFC 9991 — DMARC Failure Reporting,IETF,2026-05,Standards Track,Obsoletes 7489,Updates 6591。https://www.rfc-editor.org/rfc/rfc9991
  4. RFC 7489 — Domain-Based Message Authentication, Reporting, and Conformance (DMARC),IETF,2015-03,Informational(已废弃)。https://www.rfc-editor.org/rfc/rfc7489
  5. RFC 9091 — DMARC Extension for Public Suffix Domains,IETF,2021-07,Experimental(已废弃)。https://www.rfc-editor.org/rfc/rfc9091
  6. RFC 8020 — NXDOMAIN:There Really Is Nothing Underneath,IETF,2016-10(np 标签的 NXDOMAIN 定义依据)。https://www.rfc-editor.org/rfc/rfc8020

引用本文

ztpop.net 知识库编辑. "DMARC 标准演进 — RFC 9989/9990/9991(2026-05)正式发布:DNS Tree Walk 与标签体系重构" ztpop.net 知识库.

本站技术文章采用 CC-BY 4.0 许可,可自由引用,仅需标注来源 ztpop.net。