介绍
电子邮件身份验证对于防止域欺骗、网络钓鱼和垃圾邮件文件夹拒绝至关重要。三个基于 DNS 的标准 — SPF、DKIM 和 DMARC — 共同验证声称来自您的域的电子邮件是否合法。如果没有这些记录,攻击者就可以代表您发送伪造的电子邮件,而合法电子邮件可能会进入收件人的垃圾邮件文件夹。本指南解释了每个标准并展示了如何在 Cloudflare 或您的 DNS 提供商上配置它们。
SPF:发件人策略框架
SPF 发布授权为您的域发送电子邮件的 IP 地址列表。收件人邮件服务器根据 SPF 记录检查 Return-Path 域。
SPF 记录格式
SPF 记录是 DNS TXT 记录:
example.com TXT "v=spf1 include:_spf.google.com include:spf.mailgun.org ~all"
| 机制 | 意义 |
|---|---|
| 占位符_0 | SPF 版本标识符 |
| 占位符_0 | 将授权委托给另一个域 |
ip4:/ip6: | 授权特定 IP 范围 |
| 占位符_0 | 授权域名的A记录 |
| 占位符_0 | 授权域的 MX 服务器 |
| 占位符_0 | 不匹配发件人的默认操作 |
预选赛
| 预选赛 | 行动 |
|---|---|
| 占位符_0 | 通过(默认) |
| 占位符_0 | SoftFail(已标记但已接受) |
| 占位符_0 | 失败(应该被拒绝) |
| 占位符_0 | 中立(无断言) |
在初始设置期间使用 ~all,然后在验证后迁移到 -all。
DKIM:域名密钥识别邮件
DKIM 为每封发出的电子邮件附加加密数字签名。接收服务器从 DNS 检索发件人的公钥,以验证电子邮件没有被篡改。
DKIM 记录
DKIM 记录是特定选择器名称下的 DNS TXT 记录:
default._domainkey.example.com TXT "v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC..."
| 标签 | 意义 |
|---|---|
| 占位符_0 | 版本(始终为 DKIM1) |
| 占位符_0 | 键类型(rsa 或 ed25519) |
| 占位符_0 | Base64 编码的公钥 |
Google Workspace、Mailgun 或 SendGrid 等电子邮件服务会自动生成 DKIM 密钥。您只需将公钥作为 DNS TXT 记录发布。
DMARC:基于域的消息身份验证、报告和一致性
DMARC 定义了收件人应如何处理未通过 SPF 和/或 DKIM 检查的电子邮件的策略。它还提供报告来帮助您监控身份验证结果。
DMARC 记录格式
DMARC 记录是 DNS TXT 记录:
_dmarc.example.com TXT "v=DMARC1; p=quarantine; rua=mailto:[email protected]; pct=100"
| 标签 | 意义 | 共同价值观 |
|---|---|---|
| 占位符_0 | 版本(始终为 DMARC1) | 占位符_2 |
| 占位符_0 | 未经身份验证的电子邮件的政策 | none、quarantine、reject |
| 占位符_0 | 受政策约束的电子邮件百分比 | 1–100 |
| 占位符_0 | 汇总报告电子邮件地址 | mailto: URI |
| 占位符_0 | 取证故障报告地址 | mailto: URI |
| 占位符_0 | 子域策略(如果设置则覆盖 p) | 与 p 相同 |
DMARC 策略级别
p=none— 仅监控,不采取任何操作(首先使用此进行验证)p=quarantine— 将失败标记为垃圾邮件p=reject— 彻底拒绝失败(最严格)
他们如何合作
Sender sends email → Receiver checks SPF (is IP authorized?)
→ Receiver checks DKIM (is signature valid?)
→ Receiver checks DMARC policy
→ p=none: no action
→ p=quarantine: move to spam
→ p=reject: reject delivery
要使电子邮件通过 DMARC,它必须通过**SPF(带对齐)或DKIM(带对齐)。 对齐 表示 From 标头中的域与用于 SPF 或 DKIM 的域匹配。
Cloudflare 上的配置
- 添加 SPF 记录:为
@创建一条TXT记录,其值为v=spf1 include:_spf.google.com ~all - 添加 DKIM 记录:使用提供商的公钥为
default._domainkey创建TXT记录 - 添加 DMARC 记录:为
_dmarc创建一条TXT记录,其值为v=DMARC1; p=none; rua=mailto:[email protected] - 从
p=none开始,审核报告一周,然后升级到p=quarantine或p=reject
检查工具
- MXToolbox — 检查 SPF、DKIM 和 DMARC 记录
- Google 管理工具箱 — 验证 DMARC 政策和报告
- DMARC 分析器 — 解析和可视化 DMARC 聚合报告
dig命令:dig TXT example.com dig TXT default._domainkey.example.com dig TXT _dmarc.example.com
结论
SPF、DKIM 和 DMARC 构成了分层的电子邮件身份验证策略。 SPF 授权发送 IP,DKIM 提供加密完整性,DMARC 规定执行策略。从监控模式 (p=none) 开始,以确保合法邮件正确进行身份验证,查看 DMARC 报告,然后逐步实施更严格的策略。如果配置正确,这些记录可以显着减少垃圾邮件分类并防止域欺骗。

