三件套各管一段
SPF 用 DNS 声明哪些 IP 有权代表本域发信,接收方按信封发件人核对;DKIM 由发信方私钥签名、接收方用 DNS 公钥验证,防正文与关键信头被篡改;DMARC 要求 SPF 或 DKIM 至少一个与头域对齐,并声明失败动作与报告地址。三者配齐才谈得上反伪造,只配一半的域名很容易被冒名。
基本信息
| SPF | 域名 TXT 记录,形如 v=spf1 include:... -all |
|---|---|
| DKIM | 选择器._domainkey 下的 TXT 公钥,签名写在 DKIM-Signature 头 |
| DMARC | _dmarc 子域 TXT,声明 p= 策略与 rua/ruf 报告地址 |
| 对齐 | SPF 看信封发件人域、DKIM 看 d= 域,与头域 From 比对 |
| 失败动作 | none 观察 / quarantine 进垃圾箱 / reject 直接拒收 |
典型使用场景
- 自建邮件服务器上线前自检:确认三条记录可查、签名可验
- 收到退信或进垃圾箱:先看对方信头的认证结果再改配置
- 域名被冒名群发:收紧 DMARC 策略并收聚合报告定位伪造源
- 更换邮件服务商:同步更新 SPF 与 DKIM 选择器,避免签名失效
查三条记录
查三条记录
dig +short TXT example.com # SPF:看 v=spf1 与 -all
dig +short TXT default._domainkey.example.com # DKIM:选择器由服务商指定
dig +short TXT _dmarc.example.com # DMARC:看 p= 与 rua=
# 发一封信到常见邮箱,读信头里的认证结果
grep -i -E 'Authentication-Results|DKIM-Signature' mail.eml | head常见结果与处理
| 结果 | 含义 | 处理方向 |
|---|---|---|
| spf=permerror | SPF 记录语法错或查找超限 | 简化 include 链,控制在 10 次查找内 |
| dkim=fail (body hash) | 正文被改写或转发破坏签名 | 检查转发链路与签名后再改内容 |
| dmarc=fail (alignment) | 认证通过但域不对齐 | 统一信封域与头域,或加 sp= 子域策略 |
| 有记录仍被冒名 | 策略仍是 p=none | 收报告确认合法源后再升级为 reject |
落地顺序:先让 SPF 与 DKIM 全部达标,DMARC 用 p=none 收集一到两周聚合报告,确认合法发信源都在列表内,再逐级升到 quarantine 与 reject。
上线前自检清单
- 用第三方检测服务分别验 SPF 语法、DKIM 签名与 DMARC 策略是否通过
- 确认所有发信来源(自建服务器、企业邮箱、营销平台、工单系统)都写进 SPF
- 给每个发信服务分配独立 DKIM 选择器,便于单独吊销与轮换密钥
- 给子域单独配 DMARC 或使用 sp= 策略,避免子域成为冒名跳板
SPF 的 DNS 查找次数上限是 10 次,include 与 a/mx 等机制层层嵌套会直接 permerror,一旦 permerror 等于所有校验都没过。