DMARC 记录配置:从 p=none 到 p=reject
分三阶段配置 DMARC:先用 p=none 收集报告,升级到 pct=10 的 p=quarantine,最终达到 p=reject。涵盖记录语法、对齐模式、阅读汇总报告,以及四个最常见错误。

DMARC(基于域的消息认证、报告和一致性)建立在 SPF 和 DKIM 之上。它告诉接收方服务器对认证失败的邮件应该怎么处理,同时会向你发送报告,让你看清谁在以你的域名发信。
一句话版本
在 DNS 里加一条 DMARC 记录,先设 p=none,这样可以观察情况而不拦截任何邮件。读一两周的报告,再收紧策略。
记录语法
一条最简 DMARC 记录长这样:
_dmarc.yourdomain.com. TXT "v=DMARC1; p=none; rua=mailto:dmarc-reports@yourdomain.com"
重要标签说明:
| 标签 | 作用 |
|---|---|
v=DMARC1 | 必填,固定值 |
p= | 域名策略:none、quarantine 或 reject |
sp= | 子域策略,不填则继承 p |
rua= | 汇总报告收件地址(每日摘要) |
ruf= | 取证报告收件地址(单条失败样本,很少用) |
pct= | 策略生效比例,1–100,默认 100 |
adkim= | DKIM 对齐方式:r(宽松,默认)或 s(严格) |
aspf= | SPF 对齐方式:r(宽松,默认)或 s(严格) |
宽松对齐意味着子域也算数:在宽松模式下,mail.yourdomain.com 可以满足 yourdomain.com 的 DMARC 要求。严格模式要求域名完全一致。
三阶段策略
第一阶段 — p=none:仅监控,认证失败的邮件照常投递,你会收到汇总报告。用这个阶段建立基线,找出所有合法的发信来源。
第二阶段 — p=quarantine:认证失败的邮件进垃圾箱。建议先用 pct=10 起步,观察几天报告后再逐步提高比例。只有在汇总报告里看不到合法邮件的异常失败后,再进入这一阶段。
第三阶段 — p=reject:认证失败的邮件在网关直接丢弃。这是最终目标,达到后伪造你的域名发信将变得非常困难。
第二阶段 25% 比例的记录示例:
"v=DMARC1; p=quarantine; pct=25; rua=mailto:dmarc@yourdomain.com"
阅读汇总报告
报告通常以 XML 附件形式发送,每个发信方每天一份,大致内容如下:
- 来源 IP:
203.0.113.4,142 封邮件 - SPF 结果:通过
- DKIM 结果:失败
- DMARC 处置:none(策略为 p=none)
大多数邮件服务商都有 DMARC 报告查看工具,可以把 XML 转成可读的表格。Google Postmaster Tools、MXToolbox、dmarcian 都有免费版。
常见错误
不先监控就直接设 p=reject。 如果某个第三方服务(比如通讯工具或工单系统)用你的域名发信但没有 DKIM,这些邮件会被直接丢弃。永远从 p=none 开始,给它两周时间。
不填 rua 地址。 没有报告就是在盲飞。即使是 p=none 阶段也要填,否则一无所知。
忘记子域。 如果设了 p=reject 但没有 sp= 标签,子域默认继承 p=reject——这通常是你想要的,但值得了解。如果有子域在发合法邮件,在切换到 reject 之前先在报告里确认一下。
pct 没有调回 100 就忘了。 默认值是 100,只有想要更低比例才需要写 pct=。留着 pct=10 忘记改,意味着 90% 的失败邮件仍能通过。
检查你的记录
dig TXT _dmarc.yourdomain.com +short
应该能看到你的记录原文输出。如果什么都没有,检查记录是否加了 _dmarc. 前缀并保存在了正确的域名下。
延伸阅读:邮件认证机制详解、一键 DNS 配置、邮件为什么进垃圾箱?