首页/网络/协议速查/邮件安全三件套:SPF / DKIM / DMARC

邮件安全三件套:SPF / DKIM / DMARC

防伪造三件套各管一段:SPF 授权发信 IP、DKIM 给邮件签名、DMARC 要求两者对齐并指定失败动作;没配齐的域名很容易被冒名。

协议速查网络更新于 2026-10-13

三件套各管一段

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=permerrorSPF 记录语法错或查找超限简化 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 等于所有校验都没过。

易错点

  • SPF 记录里出现两条 v=spf1,接收方判定永久错误,等于没有 SPF
  • 更新发信 IP 却忘了同步 SPF,合法邮件被判失败进垃圾箱
  • DKIM 密钥轮换后旧公钥仍留 DNS,选择器不一致导致偶发验签失败
  • 直接跳过 p=none 阶段拨到 reject,把业务系统邮件一起拒掉才发现

数据来源与参考

  • RFC 7208(SPF)
  • RFC 6376(DKIM)
  • RFC 7489(DMARC)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌