翻译披露:本页为对 IETF RFC 9091《Experimental Domain-Based Message Authentication, Reporting, and Conformance (DMARC) Extension for Public Suffix Domains》中文翻译,原文著作权归 IETF/原作者所有,内容以人类原始 RFC 为准。本译本由 ztpop.net 整理,仅供学习参考;RFC 受 BCP 78 与 IETF 信托法律条款约束,译本保留原文编号与结构,权威性以英文原文为准。英文原文见 rfc-editor.org/rfc/rfc9091

RFC 9091:面向公共后缀域的实验性 DMARC 扩展(PSD DMARC)

摘要

基于域名的消息鉴别、报告与一致性(DMARC,定义于 RFC 7489)允许一个掌控域名的组织表达域名级的策略与偏好,用于消息验证、处置与报告,邮件接收组织可藉此改进邮件处理。

DMARC 区分了一个名称中属于公共后缀域(Public Suffix Domain,PSD)的部分,其下创建组织域(Organizational Domain)名称。基本 DMARC 能力允许组织域指定适用于其子域的策略,但并未将该能力赋予 PSD。本文档描述了对 DMARC 的一项扩展,以完整启用 PSD 的 DMARC 功能。

DMARC 的某些实现对 PSD 视为不符合 DMARC 强制执行的资格。本规范处理这一情形。

本备忘录的状态

本文档并非互联网标准跟踪规范;其发布供审查、实验性实现与评估之用。

本文档为互联网社区定义了一项实验性协议。本文档是互联网工程任务组(IETF)的产物,代表 IETF 社区的共识,已经过公开评审,并由互联网工程指导组(IESG)批准发布。并非所有经 IESG 批准的文档都能成为任何级别的互联网标准;参见 RFC 7841 第 2 节。

关于本文档当前状态、任何勘误,以及如何就其提供反馈的信息,可在 https://www.rfc-editor.org/info/rfc9091 获取。

Copyright (c) 2021 IETF 信托及被列为文档作者的个人。保留所有权利。

本文档受 BCP 78 以及 IETF 信托的《IETF 文档相关法律规定》(https://trustee.ietf.org/license-info)约束,以本文档发布之日生效的版本为准。请仔细审阅这些文档,因为它们描述了您就本文档所享有的权利与限制。从本文档中提取的代码组件必须包含《信托法律条款》第 4.e 节所述的简化 BSD 许可证文本,并依简化 BSD 许可证所述"按原样"提供,不附带任何担保。

1. 引言

DMARC [RFC7489] 提供了一种向邮件接收方发布组织策略信息的机制。DMARC 允许针对单个域名、以及针对一个组织内的组织域及其子域,指定策略。

为确定被评估消息的组织域(从而确定去何处查找策略声明),DMARC 借助一份公共后缀列表。其处理过程见 DMARC 规范 [RFC7489] 第 3.2 节。当前最常用的公共后缀列表由 Mozilla 基金会维护,发布于 <https://publicsuffix.org>。

在基本 DMARC 模型中,公共后缀域(PSD)不是组织域,因此不受 DMARC 处理约束。在 DMARC 中,域名分为三类:组织域、组织域的子域,或 PSD。PSD 只能为自己发布 DMARC 策略,而不能为其下任何子域发布。在某些情况下,这一限制使得非存在的组织级域名的滥用成为可能,并妨碍了对邮件中域名滥用的识别。

本文档对 DMARC 规范 [RFC7489] 指定了实验性更新,试图缓解此类滥用。

1.1. 示例

作为一个例子,设想一个顶级域(TLD)".example",其下有为政府用途与商业用途而设的公共子域(".gov.example" 与 ".com.example")。此类 PSD 结构的维护者会在列表中为这两个子域各加一条记录,表明它们是 PSD,其下可以注册组织域。进一步假设在 ".gov.example" 内注册了一个名为 "tax.gov.example" 的合法域名。

利用电子邮件通常未经认证的天然特性,常有恶意活动冒充该组织,使用外形相似的("近亲")域名,如 "t4x.gov.example"。此类域名并未注册。

在 ".gov.example" 这个公共后缀下,已强制要求使用 DMARC,于是 "gov.example" 发布了如下 DMARC DNS 记录:

_dmarc.gov.example. IN TXT ( "v=DMARC1; p=reject;"
                             "rua=mailto:dmc@dmarc.svc.gov.example" )

这条 DMARC 记录为来自 @gov.example 的邮件提供了策略与报告去向。类似地,"tax.gov.example" 会拥有一条 DMARC 记录,为来自 @tax.gov.example 地址的邮件指定策略。然而,由于 DMARC 当前在组织域层级发现并应用策略的方式,非存在的组织域 @t4x.gov.example 并不、也无法落入某条 DMARC 策略之下。

防御性地注册 "tax" 的所有变体并非可扩展的策略。因此,本规范的目标在于增强 DMARC 发现方法,使接收到此类消息的代理能够确定在 "gov.example" 处存在一个相关策略——而这一点被当前 DMARC 规范所排除。

1.2. 讨论

本文档对 [RFC7489] 提供了一项简单的扩展,使公共后缀域(PSD)的运营者能够:

本文档还提供了一个新的 DMARC 标签,用于指示针对非存在子域所请求的处理策略。此标签专门用以支持 PSD DMARC 的分阶段部署,但预计在更一般情形下也有用处。对于声称来自不存在域名的邮件,不期望的拒收风险,显著低于来自存在域名的邮件,因此请求严厉策略处理(例如 reject)的运行风险更低。

作为一项额外收益,PSD DMARC 扩展澄清了既有要求。基于 [RFC7489] 的要求,对于精确域名匹配,DMARC 应当在组织层之上发挥作用(即,如果为 "example" 发布了 DMARC 记录,那么来自 example@example 的邮件应当受 DMARC 处理)。测试表明,这一点在不同实现中并未一致地得到应用。

有两种类型的公共后缀运营者(PSO)适合并有理由使用本扩展:

由于 DMARC 的设计与互联网邮件架构 [RFC5598] 的特性,DMARC 部署存在互操作性问题。这些问题在《域名级消息鉴别、报告与一致性(DMARC)与间接邮件流之间的互操作性问题》[RFC7960] 中讨论。这些问题通常不适用于 PSD,因为它们(例如上文的 ".gov.example")通常不发送邮件。

2. 术语与定义

本节定义文档其余部分使用的术语。

2.1. 本文档使用的约定

本文档中的关键词"MUST"(必须)、"MUST NOT"(不得)、"REQUIRED"(需要)、"SHALL"(应)、"SHALL NOT"(不应)、"SHOULD"(应当)、"SHOULD NOT"(不应当)、"RECOMMENDED"(推荐)、"NOT RECOMMENDED"(不推荐)、"MAY"(可以)与"OPTIONAL"(可选),当且仅当它们以此处所示全大写形式出现时,依 BCP 14 [RFC2119] [RFC8174] 解释。

2.2. 公共后缀域(PSD)

全局互联网域名系统(DNS)记载于众多 RFC 中。它定义了一棵以根"."开头的名称树,其下紧邻的是顶级域名,如 ".com" 与 ".us"。域名结构由一棵名称树组成,其中每个名称由一串以句点分隔的"标签"(词)构成。树的根简称为"."。互联网社区整体通过本工作之外的流程与政策,在这棵树上选择一些点,用以注册由独立组织"拥有"的域名。现实例子有 ".com"、".org"、".us" 与 ".gov.uk"。发生此类注册的名称称为"公共后缀域(PSD)",一次注册由注册者选定的一个标签加上所希望的 PSD 构成。例如 "ietf.org" 是一个已注册域名,而 ".org" 是其 PSD。

2.3. 组织域

"组织域"一词定义于 [RFC7489] 第 3.2 节。

2.4. 最长 PSD

最长 PSD 是去掉一个标签后的组织域,即 DNS 名称树中组织域的紧邻父节点。

2.5. 公共后缀运营者(PSO)

公共后缀运营者是在一个 PSD 内管理运维、特别是该域名及其之下名称所发布 DNS 记录的组织。

2.6. PSO 管控的域名

PSO 管控的域名是 DNS 中由 PSO 管理、不可用作组织域的名称。PSO 管控的域名可能含有一个(例如 ".com")或多个(例如 ".co.uk")名称组件,取决于 PSD 政策。

2.7. 非存在的域名

就 DMARC 而言,非存在的域名是指对 A、AAAA 与 MX 记录返回 NXDOMAIN 或 NODATA 响应的域名。此定义比 [RFC8020] 中的更宽泛。

3. 对 DMARC 要求的 PSD DMARC 更新

为参与本实验,实现应当按以下各小节解释 [RFC7489]。

3.1. 一般性更新

对"域名拥有者(Domain Owners)"的引用同样适用于 PSO。

3.2. 第 6.3 节("通用记录格式")中的变更

本节新增如下段落,并在 "fo" 之后新增一个标签:

|  np:  针对非存在子域请求的邮件接收方策略(纯文本;可选)。
|     指明接收方应域名拥有者请求执行的策略。它仅适用于被查询
|     域名的非存在子域,而不适用于既存的子域或域名本身。其
|     语法与下文定义的 "p" 标签相同。若 "np" 标签缺省,则对
|     非存在子域必须应用由 "sp" 标签(若 "sp" 标签存在)指定的
|     策略,或由 "p" 标签(若 "sp" 标签缺省)指定的策略。注意:
|     由于 [RFC7489] 第 6.6.3 节描述的 DMARC 策略发现机制的作用,
|     "np" 对于发布在组织域子域与 PSD 上的 DMARC 记录将被忽略。

DMARC 中的下列标签定义被更新:

p:原句"策略适用于被查询的域名及其子域,除非使用 "sp" 标签显式描述了子域策略"修改为"策略适用于被查询的域名及其子域,除非使用 "sp" 或 "np" 标签显式描述了子域策略"。

sp:原句"若缺省,子域必须应用由 "p" 标签指定的策略"修改为"若 "sp" 标签缺省且 "np" 标签缺省或不适用,则子域必须应用由 "p" 标签指定的策略"。

3.3. 第 6.4 节("形式化定义")中的变更

DMARC 的 ABNF [RFC5234] 更新为包含一个新的定义 "dmarc-nprequest":

             dmarc-nprequest =  "np" *WSP "=" *WSP
                 ( "none" / "quarantine" / "reject" )

"dmarc-record" 定义更新为包含如下内容:

dmarc-record    = dmarc-version dmarc-sep
              [dmarc-request]
              [dmarc-sep dmarc-srequest]
              [dmarc-sep dmarc-auri]
              [dmarc-sep dmarc-furi]
              [dmarc-sep dmarc-adkim]
              [dmarc-sep dmarc-aspf]
              [dmarc-sep dmarc-ainterval]
              [dmarc-sep dmarc-fo]
              [dmarc-sep dmarc-rfmt]
              [dmarc-sep dmarc-percent]
              [dmarc-sep]
              [dmarc-sep dmarc-nprequest]
              ; dmarc-version 与 dmarc-request 之外的组件
              ; 可以任意顺序出现

3.4. 第 6.5 节("域名拥有者动作")中的变更

除 DMARC 域名拥有者动作外,要求使用 DMARC 并参与 PSD DMARC 的 PSO 应当将该信息提供给接收方。本文档是实现此目的的一项实验性机制;参见附录 B 中的描述。

3.5. 第 6.6.1 节("提取作者域名")中的变更

DMARC 的经验表明,某些实现在接收方提取的域名(来自 RFC5322.From 域名)出现在接收方使用的公共后缀列表上时,会短路处理消息,绕过 DMARC 策略应用。这抵消了本规范正在创建的能力。因此,向 DMARC 规范 [RFC7489] 第 6.6.1 节追加如下段落:

|  注意:出现在公共后缀列表上的域名,并不免除 DMARC 策略应用
|  与报告。

3.6. 第 6.6.3 节("策略发现")中的变更

在第 3 步与第 4 步之间新增一步:

|  3A. 若集合现已为空,且组织域的最长 PSD([RFC9091] 第 2.4 节)
|      是接收方已确定为可用于 PSD DMARC 的(基于 [RFC9091] 附录 B
|      所述的某个 DMARC PSD 注册表示例中的数据),则邮件接收方
|      必须查询 DNS,以在组织域的 RFC5322.From 域名所在位置改用
|      最长 PSD 匹配的那个 DNS 域名查询 DMARC TXT 记录(若不同)。
|      返回一个可能为空的结果集合。

例如,对于组织域为 "example.compute.cloudcompany.com.example" 的消息,PSD DMARC 查询将使用 "compute.cloudcompany.com.example" 作为最长 PSD。接收方会检查该 PSD 是否列于 DMARC PSD 注册表,若是,则在 "_dmarc.compute.cloudcompany.com.example" 处执行策略查找。

注:由于 PSD 策略查询位于组织域策略查询之后,PSD 策略不会用于已发布 DMARC 策略的组织域。具体而言,当某个组织域拒绝提供时,这不是一种提供反馈地址(RUA/RUF)的机制。

3.7. 第 7 节("DMARC 反馈")中的变更

本节新增如下段落:

|  PSD DMARC 的运行说明:对于 PSO,针对非存在域名的反馈正如对
|  组织级 DMARC 运营者一样,是值得要且有用的。关于 PSD DMARC
|  隐私考量的讨论见 [RFC9091] 第 4 节。

4. 隐私考量

这些隐私考量基于 [RFC6973] 的要求发展而来。此外,[RFC7489] 的隐私考量适用于本文档描述的机制。为参与本实验,实现应当知悉本节描述的隐私考量。若本实验成功,本节应作为"反馈泄漏"并入"隐私考量"一节。

向 PSO 提供反馈报告,在某些情况下会导致信息从某个组织泄漏到 PSO。这种泄漏可能被用作普遍性监视计划的一部分(见 [RFC7624])。大致有三种情形需要考虑:

PSO 会收到关于非存在域名的反馈,其可能与既存组织域相似。与此类近亲域名相关的反馈,携带与某个真实组织域相关信息的风险较小。为将这一潜在问题最小化,PSD DMARC 反馈必须限于聚合报告(Aggregate Reports)。反馈报告(Feedback Reports)携带更详尽的信息,风险更大。

由于 PSD DMARC 对未参与 DMARC 的多组织 PSD 中的组织域存在固有的隐私与安全风险,任何与多组织 PSD 相关的反馈报告必须限于非存在域名,除非报告者通过查 DMARC PSD 注册表而知 PSO 要求使用 DMARC。

5. 安全考量

本文档不改变 [RFC7489] 与 [RFC7960] 的安全考量。

[RFC7489] 第 12.3 节("DNS 安全")所指出问题的风险被 PSD DMARC 放大。特别是,DNS 缓存投毒(或名称链)的后果因一次成功攻击可能有大得多的波及范围而加剧(详见 [RFC3833])。

[RFC7489] 第 12.5 节("外部报告地址")所指出问题的风险被 PSD DMARC 放大。按设计,PSD DMARC 导致将反馈未经请求地报告给组织域之外的实体。这在第 4 节中有更详细的讨论。

6. IANA 考量

IANA 已在"基于域名的消息鉴别、报告与一致性(DMARC)参数"注册表中的"DMARC 标签注册表"新增一个标签。"Status"列定义于 [RFC7489] 第 11.4 节。

新条目如下:

标签名引用状态描述
npRFC 9091current针对非存在子域请求的处理策略

7. 参考性引用

7.1. 规范性引用

7.2. 资料性引用

附录 A. PSD DMARC 隐私问题缓解实验

正在进行的实验有三个不同的问题,期望在本文档中得到回答:

附录 B. DMARC PSD 注册表示例

为便于围绕数据泄漏缓解开展实验,基于 DNS 的与类 IANA 的注册表示例可在 [PSD-DMARC] 获取。

B.1. DMARC PSD DNS 查询服务

一个独立的样本 DNS 查询服务可在 [PSD-DMARC] 获取。它基于本文档早期草案版本中为一个 IANA 注册表建议的内容开发。该服务的使用方式在 [PSD-DMARC] 中描述。

B.2. DMARC PSD 注册表

[PSD-DMARC] 提供一个类 IANA 的 DMARC 公共后缀域(PSD)注册表,以独立 DNS 查询服务形式提供,其内容如下文描述。其中有一份所列 PSD 的逗号分隔值(CSV)版本,适用于 PSD DMARC 能力软件的构建更新。

正在部署 DMARC 并参与 PSD DMARC 的 PSD,必须在本新注册表中注册其公共后缀域。该要求须以符合 [RFC8126] 专家评审(Expert Review)条款的方式记录。指定专家需确认所提供文档充分描述了 PSD 政策,要求域名拥有者使用 DMARC,或确认所有域名拥有者都与 PSO 同属一个组织。

权威注册表位于:<https://psddmarc.org>

B.3. DMARC PSD PSL 扩展

[PSD-DMARC] 提供一个格式如同公共后缀列表(PSL)的文件,以便于识别 PSD DMARC 参与者。其内容在功能上与类 IANA 注册表相同,只是呈现格式不同。

使用此法时,扩展查询的输入域名应为常规 PSL 查询的输出域名,即组织域。这一替代数据法可能有益,因为 DMARC 实现本就需要能够解析该数据格式,因此应更易实现。

附录 C. 实现

已知有两个可用于测试的 PSD DMARC 实现。

C.1. Authheaders 模块

authheaders Python 模块与命令行工具可从 Python 包索引(Pypi)下载或安装。

它同时支持使用基于 DNS 的查询服务,以及从 [PSD-DMARC] 下载 CSV 注册表文件。

C.2. Zdkimfilter 模块

zdkimfilter 模块是 Courier-MTA 的一个独立附加组件。

它主要用于域名密钥识别邮件(DKIM)签名,也可配置为执行验证、应用 DMARC 策略并发送聚合报告。对于 PSD DMARC,它使用 PSL 扩展列表法,可从 [PSD-DMARC] 获取。

致谢

感谢以下人士为改进本文档所做的贡献(公开与私下皆有):Kurt Andersen、Seth Blank、Dave Crocker、Heather Diaz、Tim Draegen、Zeke Hendrickson、Andrew Kennedy、John Levine、Dr. Ian Levy、Craig Schwartz、Alessandro Vesely 与 Tim Wicinski。

特别提及 Dave Crocker 想出了这个名称。

作者地址

Scott Kitterman,fTLD Registry Services,Suite 400,600 13th Street, NW,Washington, DC 20005,United States of America。电话:+1 301 325-5475;邮箱:scott@kitterman.com

Tim Wicinski(编辑),Elkins, WV 26241,United States of America。邮箱:tjw.ietf@gmail.com


来源(Source)

本页译自 IETF 人类原始文本,英文原文与权威版本:

如中文表述与英文原文存在歧义,一律以 ietf.org / rfc-editor.org 英文原文为准。