DMARC 记录是一条 DNS TXT 条目,用于发布你的邮件身份验证策略。它位于一个固定位置 _dmarc.yourdomain.com(注意开头的下划线),任何接收邮件的服务器都可以查询它,了解你希望如何处理验证失败的邮件以及将报告发送到哪里。
DMARC 记录放在哪里?
始终位于你要保护的域名的 _dmarc 子域。对于 example.com,记录位于 _dmarc.example.com。对于你用来发信的子域,例如 mail.example.com,记录则位于 _dmarc.mail.example.com,不过大多数团队只在组织域发布一条记录,让它覆盖所有子域。它是一条 TXT 记录,与 SPF 使用的记录类型相同,所以发布过 SPF 记录的人会觉得流程很熟悉。
如果没有 DMARC 记录会怎样?
"No DMARC record found" 表示 _dmarc.yourdomain.com 上没有发布任何内容。这会带来两个后果,第二个往往被忽略。
接收服务器没有来自你的指令,因此每台服务器在邮件验证失败时都按自己的方式处理。而且由于 rua 是请求报告的位置,没有记录就等于没有请求:你收不到聚合报告,也就无法看到谁在以你的域名发信,或者你自己的邮件是否通过了验证。
没有记录与 p=none 不同。p=none 记录是一条已发布的策略,要求接收方不做任何改变,同时仍向你发送报告,这是通常的起步方式。完全没有记录则意味着既没有策略,也没有可见性。
要自行检查某个域名,请查询 _dmarc 名称下的 TXT 记录:
dig +short TXT _dmarc.example.com
nslookup -type=TXT _dmarc.example.com
如果你不想手动查询,邮件分析器可以在浏览器中检查域名,bird email tools audit 则可以在命令行中完成同样的操作。
返回内容包含 v=DMARC1 的就是一条记录。空返回表示确实不存在记录。有两种常见的情况,虽然你发布了内容,但仍会报告为 "not found":
- 发布在了错误的名称下。 记录必须位于
_dmarc.example.com(带前导下划线),而不是与 SPF 记录一起放在域名根目录下。 v标签格式错误。v=DMARC1是必需的且必须排在第一位,因此该处的拼写错误会导致整条记录无法被识别为 DMARC,即使 TXT 条目可以解析。
如果结果是你没有记录,下一步就是如何设置 DMARC,通常的第一条记录是以 p=none 开始,并将 rua 指向你会查看的邮箱。
DMARC 记录长什么样?
下面是一个简单的示例:
v=DMARC1; p=none; rua=mailto:dmarc@example.com
从左到右读,它表示:这是一条 DMARC 版本 1 的记录,暂不执行强制策略(仅监控),并将聚合报告发送到 dmarc@example.com。一条更完整的记录可能是这样的:
v=DMARC1; p=quarantine; sp=reject; rua=mailto:agg@example.com; ruf=mailto:forensic@example.com; adkim=s; aspf=r
每条记录都只是一组用分号分隔的 tag=value 对。其中两个是必需的(v 和 p);其余为可选,且有合理的默认值。
每个 DMARC 标签是什么意思?
| 标签 | 是否必需 | 作用 | 示例 |
|---|---|---|---|
v | 是 | 协议版本。始终为 DMARC1,且必须排在第一位。 | v=DMARC1 |
p | 是 | 主域名的策略:none、quarantine 或 reject。 | p=quarantine |
sp | 否 | 子域名的策略,当你希望它与 p 不同时使用。 | sp=reject |
rua | 否 | 聚合(汇总)报告的接收地址。 | rua=mailto:agg@example.com |
ruf | 否 | 取证(逐条失败)报告的接收地址。 | ruf=mailto:forensic@example.com |
adkim | 否 | DKIM 对齐模式:r 宽松(默认)或 s 严格。 | adkim=s |
aspf | 否 | SPF 对齐模式:r 宽松(默认)或 s 严格。 | aspf=r |
fo | 否 | 取证报告选项:何时生成失败报告。 | fo=1 |
ri | 否 | 聚合报告发送间隔,以秒为单位(默认 86400)。 | ri=86400 |
你最常用到的两个标签是 p 和 rua。p 是你的执行级别,选好它是成功上线的关键(完整说明见什么是 DMARC 策略)。rua 是接收每日汇总报告的地址,你真正能从中获得洞察。
rua 和 ruf 有什么区别?
rua 收集聚合报告:XML 格式的汇总,通常每个提供商每天发送一份,涵盖他们看到的所有以你域名发出的邮件。这是值得关注的数据流。ruf 收集取证报告,即验证失败的单封邮件的副本(通常经过脱敏处理)。许多提供商出于隐私原因根本不发送取证报告,所以 ruf 邮箱安静是正常的。当报告开始到达时,如何阅读 DMARC 报告会逐字段讲解。
对齐标签有什么作用?
adkim 和 aspf 控制域名匹配需要多精确。宽松模式(r)允许子域与组织域匹配,因此 mail.example.com 可以与 example.com 对齐。严格模式(s)要求完全匹配。宽松是默认值,也是几乎所有人的正确选择;只有在你有明确理由时才使用严格模式。对齐是 DMARC 比单独使用 SPF 或 DKIM 更强的机制,DMARC 的工作原理解释了原因。
如何发布和检查记录?
通过你的 DNS 托管商添加 TXT 记录,然后确认它能正确解析。包括 cPanel 操作演示在内的分步指南见如何设置 DMARC。如果你通过 Bird 发信,DKIM 和 SPF 的对齐已通过你的发送域记录完成,因此发布这条 DMARC 记录并将 rua 指向你会查看的邮箱就完成了大部分工作。文档中的身份验证指南包含 Bird 相关的详细信息。
一条 DMARC 记录虽然很短,但在一行之中承担了大量工作。把 p 和 rua 设对,其他一切都可以之后再调整。