RFC 7001《表示邮件认证状态的头字段(Authentication-Results)》中文导读

诚实披露:本页为 IETF RFC 7001 的中文译介版本。原文由 IETF 发布,依 IETF Trust 条款可自由再制与翻译;本译本由 AI 基于人类权威一手文献(RFC 英文原文)辅助整理生成,非人类原创,亦非逐字全文翻译,仅供学习参考。任何规范性判断以英文原文为准,英文原文见 rfc-editor.org/rfc/rfc7001.txt

摘要

RFC 7001 定义了 Authentication-Results 邮件头字段。当一个管理域(ADMD)在入站边界完成 SPF、DKIM、DomainKeys、反向解析核验(iprev)、SMTP AUTH 等身份认证动作后,可以把这些结果以机器可读的统一格式记入邮件头,交给下游的过滤器、邮件列表处理器乃至最终的 MUA 使用。

本文档在 RFC 5451 的基础上修订而成,并合并了 RFC 6577 的内容与发布后的勘误,因而同时废止(Obsoletes)这两份文档。需要注意的是,RFC 7001 本身其后又被 RFC 7601 取代,当前工程实践应以 RFC 7601 及 IANA 注册表的最新状态为准;本篇导读用于理解该字段的形成脉络与规范意图。

1. 引言、信任边界与适用范围

邮件认证机制(SPF、DKIM 等)的判定通常发生在接收方的边界 MTA 上,而真正需要这些判定结果的往往是下游组件。RFC 7001 解决的正是「结果如何跨组件传递」的问题:把判定固化为一个标准头字段,避免每个实现各造一套私有头。

文档反复强调 信任边界(trust boundary) 概念:该头字段的价值完全建立在「它确实由本 ADMD 内受信任的组件写入」这一前提之上。一旦无法确认来源,字段内容就毫无意义——这也是第 5 节存在的原因。

本规范只定义「如何表达结果」,不规定「拿到结果后应当如何处置」:是否拒信、是否打标、是否投入垃圾箱,均属接收方本地策略。

2. 头字段的定义与格式

字段的整体结构可概括为三段:

其中 ptype 的取值集合为 smtp(取自 SMTP 会话,如 smtp.mailfrom)、header(取自邮件头,如 header.dheader.from)、body(取自正文)与 policy(表示该结果源自本地策略判定而非协议输出)。若本次未做任何认证,可使用 none 形式表明「无结果」。

ABNF 形式语法见原文第 2.2 节;本导读不逐条复刻语法产生式,实现时请直接对照英文原文。

2.6 已定义的认证方法与结果关键字

method含义常见 result 关键字
dkim / domainkeysDKIM 签名校验 / 历史 DomainKeysnone、pass、fail、policy、neutral、temperror、permerror
spfSPF 校验none、pass、fail、softfail、policy、neutral、temperror、permerror
sender-idSender ID 校验同 SPF 集合
iprev客户端 IP 的反向/正向解析一致性核验pass、fail、temperror、permerror(无 none)
authSMTP AUTH 认证none、pass、fail、temperror、permerror
dkim-adsp作者域签名策略(ADSP)评估见 IANA 注册表

此外,vbr(Vouch By Reference)与 dkim-atps 亦为已注册方法。方法与结果关键字均由 IANA 注册表维护,新增须经指定专家评审,因此实现不应把关键字集合写死

3. iprev 认证方法

iprev 指对连接来源 IP 先做 PTR 反查得到域名,再对该域名做正查、确认能解析回原 IP 的一致性校验。RFC 7001 正式定义了这一方法在本字段中的表达形式,同时明确其可靠性存在争议:许多合法邮件源并未正确配置反向解析,因此文档不建议将 iprev 视为强认证手段,验证方可自行决定如何报告与使用其结果。

4. 向邮件添加该头字段

规范要求执行认证的 MTA 把新生成的字段加在邮件头顶部,从而与 Received 链的时序保持一致,便于下游按「自上而下=由近及远」解析。关键约束是:

"An MTA MUST NOT add a result to an existing header field."(§4)

译:MTA 不得向一个已存在的该头字段实例中追加结果。

也就是说,每一次认证动作应写入新的独立实例,而不是就地改写别人写的字段——否则将破坏「每个实例可归因到唯一 authserv-id」的信任模型。

文档还指出,若本地策略决定拒收未通过认证的邮件,应尽量在 SMTP 会话阶段直接拒绝(给出 5xx),而不是先收下再退信,以避免制造反向散射(backscatter)。

5. 删除既有实例:防伪造的关键一步

这是全文最具安全意义的规定。攻击者完全可以在自己发出的邮件中预先伪造一条形如「本域已验证通过」的 Authentication-Results 字段,若边界 MTA 原样放行,下游组件就会被欺骗。因此规范要求:

"For security reasons, any MTA conforming to this specification MUST delete any discovered instance of this header field that claims, by virtue of its authentication service identifier, to have been added within its trust boundary but that did not come directly from another trusted MTA."(§5)

译:出于安全原因,符合本规范的 MTA 必须删除所发现的、凭其认证服务标识声称是在本信任边界内添加、但实际并非直接来自另一台受信 MTA 的任何该字段实例。

边界 MTA 有两种落地做法:一是删除全部外来实例(最简单、最安全);二是维护受信 authserv-id 白名单,仅放行名单内的实例。无论哪种,都必须保证「带本域 authserv-id 的字段只可能由本域产生」。

6. IANA 考虑

IANA 完成了该头字段本身的注册,并维护两张注册表:Email Authentication Methods(认证方法)与 Email Authentication Result Names(结果名称)。新增条目采用「指定专家评审」策略;既有条目的引用在本文档发布时统一更新指向 RFC 7001。

7. 安全考量

8. 附录要点

原文附录包含:致谢;对旧版 MUA 的兼容建议;一组头字段书写示例;运维层面的考量;以及相对 RFC 5451 的变更记录。其中「变更记录」对从 5451 迁移的实现尤为有用。

参考链接