RFC 6591:认证失败报告(AFRF)
ELI5: 当有人在电子邮件中伪造您的域名并且它未通过身份验证检查(SPF、DKIM、DMARC)时,接收服务器可以向您发送详细的事件报告。RFC 6591 定义了该报告的格式 — 它使用特定于身份验证失败的额外字段扩展了标准垃圾邮件投诉格式(ARF)。
为什么存在
电子邮件身份验证机制如 SPF、DKIM 和 DMARC 检测欺骗或未授权邮件。当这些检查失败时,接收服务器采取行动(拒绝、隔离或允许)。但域所有者——被欺骗的一方——需要了解这些失败以:
- 检测其域的未授权使用(网络钓鱼、欺骗)
- 识别配置错误的合法发件人(例如未使用 DKIM 签名的营销平台)
- 调试身份验证记录问题(损坏的 SPF 包含、错误的 DKIM 密钥)
- 在将 DMARC 切换到
p=reject之前建立攻击模式的图景
DMARC 汇总报告(rua)提供统计摘要,但不包括邮件详情。DMARC 取证报告(ruf)使用本 RFC 定义的 AFRF 格式提供按邮件详情:实际头部、身份验证结果和特定失败原因。
RFC 6591 通过添加 Feedback-Type: auth-failure 报告类型和定义身份验证特定字段来扩展 RFC 5965 (ARF)。
工作原理
AFRF 报告是一条 ARF 邮件(multipart/report 带有 report-type=feedback-report),其中机器可读部分使用 Feedback-Type: auth-failure 并包括身份验证特定字段。
AFRF 报告示例
From: dmarc-reporter@receiver.example.com To: dmarc-ruf@example.com Subject: Auth failure report for example.com MIME-Version: 1.0 Content-Type: multipart/report; report-type=feedback-report; boundary="AFRF-BOUNDARY-001" --AFRF-BOUNDARY-001 Content-Type: text/plain Authentication failure report for a message claiming to be from example.com, received from IP 192.0.2.55. --AFRF-BOUNDARY-001 Content-Type: message/feedback-report Feedback-Type: auth-failure User-Agent: Receiver-DMARC/2.0 Version: 1 Original-Mail-From: spoofed@example.com Arrival-Date: Tue, 10 Mar 2026 16:42:00 -0500 Source-IP: 192.0.2.55 Auth-Failure: dmarc Authentication-Results: receiver.example.com; dkim=fail header.d=example.com; spf=fail smtp.mailfrom=spoofed@example.com; dmarc=fail header.from=example.com Reported-Domain: example.com DKIM-Domain: example.com Delivery-Result: reject --AFRF-BOUNDARY-001 Content-Type: text/rfc822-headers From: ceo@example.com To: finance@receiver.example.com Subject: Urgent wire transfer needed Message-ID: <fake-msg-001@192.0.2.55> DKIM-Signature: v=1; a=rsa-sha256; d=example.com; s=selector1; b=INVALID... --AFRF-BOUNDARY-001--
关键技术细节
RFC 6591 添加的字段
这些字段出现在 message/feedback-report 部分,与标准 ARF 字段一起:
| 字段 | 必需 | 描述 |
|---|---|---|
Auth-Failure |
是 | 身份验证失败类型:adsp、bodyhash、dkim、dmarc、iprev、sender、spf |
Delivery-Result |
否 | 邮件发生了什么:delivered、spam、policy、reject、other |
DKIM-Domain |
否 | 失败的 DKIM 签名中的 d= 值 |
DKIM-Identity |
否 | 失败的 DKIM 签名中的 i= 值 |
DKIM-Selector |
否 | 失败的 DKIM 签名中的 s= 值 |
Authentication-Results |
否 | 完整身份验证结果,按 RFC 8601 |
Reported-Domain |
否 | 其身份验证策略被违反的域 |
Auth-Failure 值
| 值 | 含义 |
|---|---|
dmarc |
DMARC 策略评估失败(SPF 和 DKIM 都未对齐) |
dkim |
DKIM 签名验证失败 |
spf |
信封发件人的 SPF 检查失败 |
bodyhash |
DKIM 正文哈希不匹配(邮件正文在传输中被修改) |
iprev |
发送 IP 的反向 DNS 检查失败 |
sender |
Sender 头验证失败 |
adsp |
DKIM ADSP 检查失败(已废弃;很少使用) |
与 DMARC 报告的关系
DMARC(RFC 7489)在其 DNS 记录中定义两个报告地址:
rua— 汇总报告(XML)。跨所有邮件的身份验证结果统计摘要。ruf— 取证报告。使用本 RFC 定义的 AFRF 格式的按邮件详情。
实际上,通过 ruf 的取证报告采用有限。许多大型邮箱提供商(Gmail、Yahoo)不发送取证报告,原因是隐私问题。那些发送的通常会编辑邮件正文和收件人地址。汇总报告(rua)仍然是 DMARC 反馈的主要来源。
常见错误
- 期望来自所有接收方的取证报告。大多数主要邮箱提供商不发送 AFRF 报告。不要将
ruf作为身份验证失败数据的唯一来源。DMARC 汇总报告(rua)的支持要广泛得多。 - 将 AFRF 与 ARF 滥用报告混淆。两者都使用
multipart/report和report-type=feedback-report,但它们具有不同的Feedback-Type值。auth-failure报告表示身份验证检查失败;abuse报告表示用户点击了"报告垃圾邮件"。应分别处理它们。 - 忽略 Auth-Failure 字段。
Auth-Failure字段告诉你确切哪个检查失败了。dkim失败表示签名问题;spf失败表示 SPF 记录中缺少 IP;dmarc失败表示两个机制都未对齐。 - 未发布 ruf 地址。虽然大多数接收方不会使用它,但一些较小的提供商和企业网关确实会发送取证报告。在 DMARC 记录中包括
ruf成本为零,可能提供有用数据。 - 将取证报告视为退回。身份验证失败报告并不意味着邮件未被投递。检查
Delivery-Result字段——邮件可能已投递到垃圾箱,尽管失败了。
可投递性影响
- 早期检测欺骗活动。当某人用你的域进行网络钓鱼时,AFRF 报告(如可用)提供伪造邮件的特定头部和源 IP,支持更快的事件响应。
- 调试身份验证配置错误。取证报告显示
Auth-Failure: dkim带特定选择器和域,告诉你确切哪个 DKIM 密钥或签名配置已损坏。 - 安全的 DMARC 推出。从
p=none移动到p=quarantine或p=reject时,取证报告帮助你识别在这些邮件开始被阻止之前正在失败身份验证的合法发件人。 - 补充汇总数据。汇总 DMARC 报告显示来自 IP 192.0.2.55 的 50 条邮件失败了身份验证。取证报告显示其中一条邮件的实际头部,揭示它是网络钓鱼还是配置错误的合法系统。