BIMI 配置指南:SVG 徽标、VMC 证书与 DMARC 前提
手把手完成 BIMI:DMARC 强制策略前提、制作 SVG Tiny PS 徽标、在 VMC 与 CMC 证书间选择、发布 BIMI 记录,以及各邮箱客户端的实际展示现状。
DKIM 配置指南:选择器、密钥与 DNS 记录
完整讲解 DKIM 配置:selector 与 _domainkey 记录的配合、2048 位密钥、规范化方式、双选择器安全轮换,以及让签名失效的常见错误。
在任意 DNS 服务商发布 SPF、DKIM 与 DMARC 记录
在任意 DNS 面板发布 SPF、DKIM、DMARC:记录三要素、@ 与 FQDN 主机名写法陷阱、主流服务商速查表,以及发布后的验证方法。
DMARC 配置指南:记录、策略与分阶段上线
DMARC 是邮件认证的策略层:它告诉接收服务器,当一封声称来自你域名的邮件未通过 SPF 和 DKIM 时该怎么处理,并且要求——无论哪个检查通过了——通过者必须与收件人看到的域名对齐。没有 DMARC,伪造者可以毫无代价地冒用你的品牌;正确上线 DMARC 之后,伪造邮件会被直接拒收。但激进策略上得太早会拦掉你自己的正常邮件——所以本指南在上线节奏上花的篇幅不亚于记录语法。
前提条件:一条正确的 SPF 记录,以及每个正常发信源都完成 DKIM 签名。还在打地基的话,先读 认证总览。
DMARC 如何通过(以及如何失败)
最重要的一条规则:DMARC 在SPF 通过且对齐,或 DKIM 通过且对齐时即通过——满足其一即可,并不要求两者都过。所谓对齐,是指通过校验的域名(SPF 的信封域、DKIM 的 d= 域)与可见 From 信头属于同一组织域。
这也解释了日常最常见的谜题:"SPF 过了、DKIM 也过了,DMARC 却失败"——两项检查都是对着你 ESP 的域名通过的,而 From 信头显示的是你的域名。没有任何一项是对齐的,DMARC 自然失败。这类问题的完整诊断见 如何修复 DMARC 失败。
DMARC 记录
DMARC 是 _dmarc.yourdomain.com 下的一条 TXT 记录。值必须以 v=DMARC1 开头,且紧跟一个分号。一条完整的监控期记录:
v=DMARC1; p=none; rua=mailto:dmarc-reports@yourdomain.com; adkim=r; aspf=r; fo=1
各标签的含义:
p=——From 域名的策略:none(仅监控、全量报告)、quarantine(失败邮件进垃圾箱)、reject(在 SMTP 层直接拒收)。sp=——From 域名子域的策略,优先于p=。如果你的子域名不发信,就设sp=reject——父域在强制而 sp 留在 none,等于给伪造者留了一条子域旁路。adkim=/aspf=——DKIM 与 SPF 的对齐模式。r(宽松)要求同一组织域(mail.example.com 与 example.com 视为对齐);s(严格)要求完全一致。宽松是标准选择。pct=——策略对失败邮件生效的百分比,由接收方抽样。它只对 quarantine 和 reject 有意义,是上线期的节流阀。rua=——聚合报告地址。接收方每天发来一份 XML 汇总:来源 IP、SPF/DKIM 结果、对齐结果。这是你的监控通道,也是分阶段上线能够成立的全部依据。ruf=——取证报告地址,内含失败邮件的副本。接收方支持率低,样本可能裹挟正常用户的邮件内容,隐私处理也麻烦——多数方案直接省略。fo=——触发取证报告的条件(比如fo=1:任一失败即触发)。只在用了 ruf 时才有意义。
外部报告地址需要授权
如果 rua 指向的域名与被报告的域名不同——比如你把 yourdomain.com 的报告收到 reports.example.com——那么接收报告的域必须发布一条授权记录,否则其他接收方会(正确地)拒绝向那里发送报告:
yourdomain.com._report._dmarc.example.com TXT "v=DMARC1"
命名模式是 <被报告域>._report._dmarc.<报告接收域>。报告发往本域则无需任何额外配置。
分阶段上线
DMARC 的设计意图就是先监控、后强制。三个阶段的意义各不相同:none 用来发现,quarantine 用来验证,reject 才是真正的防护。每两级之间至少观察一个完整的报告周期,不要在同一天连跳两档。
- p=none 监控 2–4 周。不拦截任何邮件。每天读 rua 报告,按来源 IP 和对齐结果分组,找出每一个 SPF 或 DKIM 失败的正常发信源——在源头修复(自定义 Return-Path、自定义 DKIM 域、更新 SPF include)。DMARC 报告分析器会解析 XML 并自动完成分组。
- 升级到 quarantine 并用 pct 抽样。
25% 的失败邮件进垃圾箱。观察一周,确认没有正常邮件被误伤,再提到v=DMARC1; p=quarantine; pct=25; rua=mailto:dmarc-reports@yourdomain.compct=50,然后pct=100。 - reject 强制执行。
失败邮件直接拒收。rua 要永久保留——只强制不监控,下季度新工具开始发未认证邮件时你将毫无察觉。v=DMARC1; p=reject; rua=mailto:dmarc-reports@yourdomain.com
跳过阶段的后果可以预言:某个 CRM、开票系统或办公室打印机在发未认证邮件,p=reject 生效当天这些邮件集体消失,而且拒收的邮件救不回垃圾箱。永远不要凭假设上 reject——只能凭报告里 100% 正常流量全部对齐通过的事实。
验证与持续监控
用 DMARC 生成器构建记录,再用 DMARC 检测确认记录可解析、可解析出合法标签——它会标出标签拼写错误、v=DMARC1 后漏掉分号、缺失 rua 等问题。上线初期把记录的 TTL 调到十分钟以内,发现策略写错时可以快速回滚,不必等缓存过期。随后向 Gmail 发一封测试邮件,在显示原始邮件里确认出现 dmarc=pass,并确认聚合报告在一天左右开始到达。想一次看全,运行 邮件健康检查。
即使全面强制之后,也要保持每周读报告的习惯。报告能让你赶在用户前面发现下一个未认证的发信源,也能让你看清 reject 策略现在实际挡下了多少伪造。发信信誉的背景知识见 信誉预热指南;各家收件方的具体前置要求见 Gmail 与 Yahoo 发件人要求指南。
常见错误
- 把 p=none 当作"配置完成"。监控策略什么都不拦。它是一个阶段而非终点——防伪造的保护只存在于 quarantine 和 reject。
- pct 长期停在低位。pct=25 是为了让过渡期可控。如果一年后还是 25,那么四分之三的失败邮件——包括真正的伪造——仍在正常投递。
- rua 指向收不到报告的地址。没人读的邮箱、缺外部授权记录的域、默默丢弃 XML 的域名——上线过程从此闭眼开车。
- 第三方发信源从未盘点。CRM、开票、工单系统是常客。它们只会在报告里现形——这正是 p=none 阶段存在的意义。
- sp=none 留下子域旁路。父域已 reject 而 sp=none 时,伪造者直接搬到你的子域上。显式设置 sp(或按 SPF 指南给子域发布
v=spf1 -all)。
常见问题
SPF 和 DKIM 必须都通过,DMARC 才算过吗?
不——只要有一项对齐通过即可。转发后 SPF 常常失败而 DKIM 签名幸存;ESP 发出的邮件可能 DKIM 能对齐而 SPF 无法对齐。这种冗余是刻意设计的。
p=none 要待多久?
待到报告里出现所有正常发信源为止——通常至少 2–4 周,邮件量低或有季节性的要更久:报告需要足够样本,才能判断覆盖是否完整。决定因素是覆盖,不是日历。
能直接上 p=reject 吗?
除非你不怕丢邮件。任何你不知道在发信的东西——账单系统、扫描仪、被遗忘的 SaaS 工具——都会被直接拒收,而拒收的邮件无法从垃圾箱捞回。确需尽快收紧时,至少先看完四周报告,确认每一个来源 IP 都对齐通过,再上 reject。先监控,这是协议自身的设计。
为什么 ruf 取证报告是空的?
出于隐私和体量考虑,多数接收方根本不发 ruf 报告。把流程建立在几乎所有大型接收方都支持的 rua 聚合报告上,ruf 有则当 bonus。
quarantine 和 reject 有什么区别?
quarantine 把失败邮件投进垃圾箱——可恢复、可检查,适合上线期。reject 在 SMTP 事务中直接拒绝——不投递、不可恢复。quarantine 是全面强制前最后一个安全台阶。
