← RFC Reference

DMARC — 基于域的邮件身份验证、报告和符合性

Informational Email Authentication Published March 2026
ELI5: SPF 检查信封上的回信地址。DKIM 检查信件上的封蜡。但两者都无法确认用户看到的信头中的名字(`From:` 地址)是否与已验证的身份相匹配。DMARC 是一条规则,它说:"信头上的名字必须与信封回信地址或封蜡相匹配——如果不匹配,这是处理该信件的方式。"

为什么存在这个RFC

SPF和DKIM都很强大,但各自都有关键漏洞。SPF验证信封发件人域名,用户永远看不到。DKIM验证签名者选择的任何域名,可能是ESP的域名而非可见发件人。两者单独都无法防止攻击者伪造用户实际看到的From:头。

DMARC通过引入两个概念弥补了这一漏洞:

  1. 标识符对齐:SPF或DKIM中至少有一个必须既通过且其认证域与From:头域对齐。
  2. 域名所有者策略:域名所有者发布DNS记录,声明当对齐失败时接收方应采取的行动:监控(p=none)、隔离(p=quarantine)或拒绝(p=reject)。

DMARC还定义了聚合报告机制,允许域名所有者接收日报告,以XML格式显示其域名在互联网上如何被使用(和滥用)。

工作原理

DMARC评估流程

  1. 邮件到达,From: user@example.com。
  2. 接收方对信封发件人域名检查SPF。如果SPF通过且信封域与example.com匹配(或子域,取决于对齐模式),则SPF"对齐"。
  3. 接收方检查DKIM。如果有效签名具有d=example.com(或子域),则DKIM"对齐"。
  4. 如果SPF或DKIM中至少一个既通过且对齐,DMARC通过。
  5. 如果DMARC失败,接收方查询_dmarc.example.com获取策略并应用。

DMARC DNS记录

_dmarc.example.com. IN TXT "v=DMARC1; p=reject; rua=mailto:dmarc-reports@example.com; ruf=mailto:dmarc-forensic@example.com; adkim=r; aspf=r; pct=100"

实践中的对齐

# 邮件到达:
# 信封:MAIL FROM:<bounce@mail.example.com>
# 头部: From: sales@example.com
# DKIM签名:d=example.com

# SPF检查:
SPF域名:mail.example.com(来自信封)
From域名:example.com
SPF对齐(宽松):mail.example.com <-> example.com = 通过(同一组织域)

# DKIM检查:
DKIM d=域名:example.com
From域名:example.com
DKIM对齐:example.com <-> example.com = 通过(完全匹配)

DMARC结果:通过(SPF和DKIM都对齐)

关键技术细节

策略标签

标签 值 描述
v DMARC1 版本(必需,必须在首位)
p none、quarantine、reject 域名的策略(必需)
sp none、quarantine、reject 子域的策略(默认为p)
rua mailto:URI(多个) 发送聚合报告的地址(逗号分隔)
ruf mailto:URI(多个) 发送法证/失败报告的地址
adkim r(宽松)、s(严格) DKIM对齐模式。宽松允许子域。
aspf r(宽松)、s(严格) SPF对齐模式。宽松允许子域。
pct 0–100 应用策略的失败邮件百分比(用于逐步推出)
fo 0、1、d、s 失败报告选项

对齐模式

宽松对齐(默认,adkim=r/aspf=r):认证域与From:域共享同一组织域。例如,mail.example.com与example.com对齐。

严格对齐(adkim=s/aspf=s):认证域必须完全匹配From:域。mail.example.com不与example.com对齐。

聚合报告(rua)

支持DMARC的接收方以XML格式向rua地址发送日聚合报告。这些报告包含:

这些报告对于发现未授权发件人、识别配置错误的合法来源以及在将策略从none加强到reject前建立信心非常宝贵。

外部目标验证

如果您的rua或ruf地址在不同域名(例如,rua=mailto:reports@analytics.com),接收域必须发布DNS记录授权它:

example.com._report._dmarc.analytics.com. IN TXT "v=DMARC1"

没有此记录,报告发送方将不会向外部地址传递报告,这是防止将DMARC报告用作拒绝服务向量的保护措施。

常见错误

投递能力影响

Related RFCs