DMARC

基于域的邮件验证、报告和一致性(DMARC) 这个规范旨在减少邮件滥用(例如通过伪造邮件的“From:” 报头。) DMARC 帮助域拥有者使用“域名系统”(DNS)来向收件服务器告知其 DMARC 策略,例如他们希望这些服务器如何处理自称来自他们域但无法验证实际来源的邮件。 收件服务器在处理入站邮件时通过 DNS 查询检索到的这个策略,可以向服务器表明应该隔离或拒收不符合这个策略的邮件,或根本不采取任何操作(例如继续照常处理邮件)。 除了这个策略以外,该域的 DMARC DNS 记录也可以包含服务器请求来向某人发送 DMARC 报告、概述自称来自此域的入站邮件的总数、它们是否通过验证、以及任何失败的详细信息。 DMARC 的报告功能在确定您的邮件验证流程是否有效,以及伪造邮件使用您域名的频率时极其有用。

在“安全设置”对话框的“发件人验证”部分中,提供以下三个部分供您配置 MDaemon 的 DMARC 验证和报告功能: DMARC 验证、DMARC 报告和 DMARC 设置。

DMARC 验证

作为 DMARC 验证流程的一部分,MDaemon 对在每封入站邮件的“From:” 报头中找到的域执行 DMARC DNS 查询。 这用来确定该域是否使用 DMARC,如果使用了 DMARC 则检索其“DMARC DNS 记录”,其中包含了它的策略和其他 DMARC 相关信息。 此外,DMARC 使用 SPFDKIM 来验证每封邮件,并要求它至少通过一项测试来通过 DMARC 验证。 如果该邮件通过验证,则按照 MDaemon 其余投递和过滤流程来照常处理这封邮件。 如果未通过验证,则取决于该域的 DMARC 策略以及您对于 MDaemon 如何处理这些邮件的配置来确定该邮件的命运。

如果一封邮件未通过 DMARC 验证,而且 DMARC 域拥有一个“p=none”策略,则不会采取任何惩罚性操作并照常处理这封邮件。 相反,当 DMARC 域拥有一个存在限制的策略,例如“p=quarantine”或“p=reject”,MDaemon 可以有选择性地将该邮件自动过滤到接收用户垃圾邮件 (例如:垃圾邮件) 的文件夹。 您也可以选择在该域使用“p=reject”策略时,让 MDaemon 完全拒收未通过验证的邮件。 对于使用限制性策略且未通过验证的邮件,MDaemon 将取决于策略插入“X-MDDMARC-Fail-policy: quarantine”或“X-MDDMARC-Fail-policy: reject”报头。 这帮助您使用“内容过滤器”,基于这些报头来执行一些操作,例如将该邮件发送至特定的文件夹进行审核。

建议默认情况下为大多数 MDaemon 配置启用 DMARC 验证。

DMARC 报告

在 MDaemon 查询 DNS 是否存在 DMARC 记录时,该记录可能包含一些标签,指示域的拥有者是希望接收与声称来自此域邮件相关的 DMARC 综合报告还是故障报告。 “DMARC 报告”屏幕上的一些选项供您用来指定是否希望发送请求的报告类型,并指定这些报告应该包含的元数据。 将在每晚午夜(UTC)发送综合报告,将按邮件来发送故障报告,因为每个发生的事件将触发这个报告。 报告以打包压缩(ZIP)的 XML 文件附件形式发送,而且在线提供各种分析工具,帮助收件人更简便地进行查看。

默认情况下 MDaemon 不发送综合或故障报告。 如果您希望发送这些报告,请在“DMARC 报告”屏幕上启用相应的选项。

DMARC 设置

DMARC 设置屏幕包含各种选项,例如在 DKIM 报告中包含特定信息、记录 DMARC DNS 记录、以及更新 MDaemon 用于 DMARC 的“公共后缀”文件。

DMARC 验证和邮件列表

因为 DMARC 的目的在于确保在邮件“From:” 报头中找到的域不被伪造,必须允许发件服务器代表该域来发送邮件。 这会给邮件列表带来一个问题,因为列表通常代表来自外部域的列表成员来分发邮件,并使“From:” 报头保持不变。 这就意味着在收件服务器尝试对这些邮件使用 DMARC 验证时,邮件会被不关联“From:” 报头域的服务器发送。 如果 DMARC 域正好使用了存在限制的 DMARC 策略,这会导致邮件被隔离甚至被收件服务器拒收。 在某些情况下,这会导致从列表的成员中删除收件人。 为了避免这个问题,在 MDaemon 发现列表邮件来自使用了受限 DMARC 策略的域时,MDaemon 将使用邮件列表的地址来替换“From:” 报头。 此外,您也开始配置 MDaemon 在列表邮件来自存在受限策略的域时,拒收这些邮件。 后者使所在域使用了受限策略的用户能够向列表发送邮件。 用来替换“From:” 报头的选项位于邮件列表编辑器的“报头”屏幕。 用来拒收邮件的选项位于“设置”屏幕。

为您的 MDaemon 域使用 DMARC

如果您希望为您自己的域使用 DMARC,这就意味着您希望支持 DMARC 的收件服务器使用 DMARC 来验证声称由您发送的邮件,您首先必须确保您已为该域创建了格式正确的 SPF 和 DKIM DNS 记录;而且您必须使这些选项正确工作来使用 DMARC。 如果您正在使用 DKIM,您也要配置 MDaemon 的“DKIM 签名”选项来签署该域的邮件。 此外,您必须为该域创建一个 DMARC DNS 记录。 通过查询 DNS 是否存在这个拥有特殊格式的 TXT 记录,收件服务器可以确定您的 DMARC 策略和各种可选的参数,例如: 您使用的验证模式、您是否希望接收综合报告、应接收报告的邮件地址等。

一旦您正确配置了 DMARC 并开始接收 DMARC XML 报告,您可以使用大量在线工具来阅读这些报告并诊断任何潜在的问题。 方便起见,在 \MDaemon\App\ 文件夹中还为您提供一个 DMARC Reporter 工具。 请参阅 DMARCReporterReadMe.txt 来获得使用说明。

定义 DMARC TXT 资源记录

以下是 DMARC 记录常用组件的基本概述。 要获得更多详细信息或有关高级配置的更多信息,请参阅: www.dmarc.org.

拥有者字段

DMARC 资源记录的“拥有者”(也叫做“姓名”或“左侧”)字段必须始终为 _dmarc,如果您希望指定该记录应用到的域或子域,也可以采用 _dmarc.domain.name 这种形式。

示例:

example.com 的 DMARC 记录

_dmarc IN TXT "v=DMARC1;p=none"

该记录将应用于发自 user@example.com 或子域为 example.com 的电子邮件,例如 user@support.example.com、user@mail.support.example.com 等。

_dmarc.support.example.com IN TXT "v=DMARC1;p=none"

该记录仅应用于发自 user@support.example.com 的电子邮件,不应用于发自 user@example.com 的电子邮件。

_dmarc.support IN TXT "v=DMARC1;p=none"

该记录将应用于发自: user@support.example.com、user@a.support.example.com、user@a.b.support.example.com 等的电子邮件。

DMARC 记录标签和值

必需标签

标签

便笺

v=

DMARC1

这是“版本”标签,必须作为该记录的 DMARC 特定文本部分的第一个标签。 即使其他 DMARC 标签值不区分字母大小写,v= 标签的值必须是大写字母: DMARC1

示例:

_dmarc IN TXT "v=DMARC1;p=none"

p=

none

quarantine

reject

这是“策略”标签,必须作为 DMARC 记录中的第二个标签,紧接 v= 这个标签。

p=none 表示收件服务器基于 DMARC 查询结果不采取任何操作。 不得基于未通过 DMARC 检查这个失败隔离或拒收邮件。 不过可以出于其他理由隔离或拒收这些邮件,例如未通过垃圾邮件过滤测试或与 DMARC 无关的其他安全检查。 对于 p=none 的使用有时被称为“监控”或“监控模式”,因为您可以配合 rua= 这个标签一起使用来从收件域接收有关您邮件的综合报告,不过不会对未通过 DMARC 检查的这些邮件执行任何惩罚性操作。 您可以一直使用这个策略,直到您彻底测试了您的 DMARC 实施,并确保您已准备好使用更具有限制性的 p=quarantine 策略。

p=quarantine 这个策略用于以下场景:在邮件的“From:” 报头声称由您所发送但未通过 DMARC 检查时,您希望其他邮件服务器将该邮件视为可疑邮件。 取决于服务器的本地策略,这可以表示对邮件进行额外审核、将其放入收件人的垃圾邮件文件夹、将其路由到不同的服务器或采取其他操作。

p=reject 表示您希望收件服务器拒收未通过 DMARC 验证的任何邮件。 不过一些服务器仍然接收这些邮件,不过将其隔离或进行额外审核。 这是限制性最高的策略,通常不使用该策略,除非您对自己的邮件策略、以及您允许账户使用的邮件或服务类型把握十足。 例如,如果您允许您的用户加入第三方邮件列表,使用邮件转发服务,并使用网站上的“共享”功能,使用 p=reject 将可能导致一些合法邮件被拒收。 而且该设置也会使某些用户被一些邮件列表删除或阻止。

示例:

_dmarc IN TXT "v=DMARC1;p=quarantine;rua=mailto:dmarc-report@example.net"

额外标签

以下列出的所有标签都是可选标签。 如果未在记录中使用任何这些标签,则假定其默认值。

标签

便笺

sp=

none

quarantine

reject

默认值:

如果未使用 sp=,则对域和子域应用 p= 这个标签。

此标签用来指定应用 DMAR 记录的域的子域将使用的策略。 例如,如果应用于 example.com 的记录中使用了这个标签,那么会将 p= 这个标签中指定的策略应用于来自 example.com 的邮件,将 sp= 这个标签中指定的策略应用于来自 example.com 子域的邮件,例如 mail.example.com。如果在记录中忽略了这个标签,则将 p= 这个标签应用于该域及其子域。

示例:

_dmarc IN TXT "v=DMARC1;p=quarantine;sp=reject"

rua=

由逗号分隔的将接收 DMARC 综合报告的邮件地址列表 必须使用以下格式输入作为 URI 的 地址:
mailto:user@example.com

默认值: none

如果未使用这个标签,则不发送综合报告。

此标签表示您希望从接收了一封“From:” 声称来自您所在域邮件的收件服务器接收 DMARC 综合报告。 使用以下格式指定作为 URI 的一个或多个邮件地址: mailto:user@example.com,使用逗号分隔多个 URI。

示例:

_dmarc IN TXT "v=DMARC1;p=quarantine;rua=mailto:user01@example.com,mailto:user02@example.com"

通常这些地址将位于此记录覆盖的域。 如果您希望将报告发送至其他域的地址,则该域的 DNS 区域文件必须也包含一个专用的 DMARC 记录,指示它将接收该域的 DMARC 报告。

example.com 的记录示例:

_dmarc IN TXT "v=DMARC1;p=quarantine;rua=mailto:non-local-user@example.net"

example.net 的记录:

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

ruf=

由逗号分隔的将接收 DMARC 故障报告的邮件地址列表 必须使用以下格式输入作为 URI 的 地址:
mailto:user@example.com

默认值: none

如果未使用这个标签,则不发送故障报告。

此标签表示您希望从接收了一封“From:” 声称来自您所在域邮件的服务器接收 DMARC 故障报告,前提是满足了在 fo= 这个标签中指定的条件。 在默认情况下,如果未指定 fo= 这个标签,在邮件未通过所有 DMARC 验证检查时将发送故障报告(例如未通过 SPF 和 DKIM 验证)。 使用以下格式指定作为 URI 的一个或多个邮件地址: mailto:user@example.com,使用逗号分隔多个 URI。

示例:

_dmarc IN TXT "v=DMARC1;p=quarantine;ruf=mailto:dmarc-failures@example.com"

通常这些地址将位于此记录覆盖的域。 如果您希望将报告发送至其他域的地址,则该域的 DNS 区域文件必须也包含一个专用的 DMARC 记录,指示它将接收该域的 DMARC 报告。

example.com 的记录示例:

_dmarc IN TXT "v=DMARC1;p=quarantine;ruf=mailto:non-local-user@example.net"

example.net 的记录:

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

要了解有关 DMARC 规范的更多扩展信息,请参阅: www.dmarc.org

还请参阅: