SenderGuard
SenderGuard

为什么要持续监测 SPF/DKIM/DMARC

认证配置是“活的系统”,不是“一次配好就行”的开关。供应商会新增 include、 DKIM 选择器要轮换、模板改版可能丢头部;这些变化大多发生在夜里或迭代中,等收件箱 降权/拒收才发现就晚了。每日体检 + 阈值告警 + 可验证证据,能把事故变成通知。

三秒体检

输入域名即可得到分数与“五徽章”(SPF/DKIM/DMARC/对齐/一键退订),外加 Top 3 修复建议。

四大支柱(以及它们如何“走形”)

  • SPF:唯一 TXT、总查询 ≤10(建议 ≤8)、无递归环。新增供应商或供应商自身的 include 扩张,最容易把查询数推高。
  • DKIM:每日至少一次 dkim=pass、密钥 ≥2048 位、双选择器、零停机轮换。过期/未完全切换会造成间歇性失败。
  • DMARC:none→quarantine→reject 分阶段推进,必要时用 sp= 管控子域。策略滞后会掩盖对齐问题。
  • 对齐:宽松(r)按组织域;严格(s)需完全一致。使用供应商 envelope 或供应商 d= 会打破对齐。
  • 一键退订:头部存在且端点安全(POST、幂等、HTTPS)。模板切换最容易丢。

每日监测清单(含阈值)

  1. SPF 健康:唯一记录;lookups ≤10(≥8 预警);递归深度 ≤3;无重复 TXT。
  2. DKIM 健康:最近 24h 有 pass;两个选择器有效;密钥 ≥2048;轮换日历可追溯。
  3. DMARC 状态:分阶段策略、rua/ruf 正常;子域 sp= 按业务线设置。
  4. 对齐:宽松通过(或严格通过);PSL 版本保持最新。
  5. 退订:头部存在;自动化检查仅校验存在/语法,不访问 URL。

可验证证据(Proof‑of‑Scan)

每次体检都会生成标准化 JSON(键排序、LF、UTC)与 sha256 哈希,并打印在 PDF 尾页(含 scanIdrulepackVersion、解析器与超时)。任何人都可调用 /api/verify 用 1.1.1.1/8.8.8.8/9.9.9.9 复算,比对哈希。

从 AR 头读出问题

Authentication-Results: mx.google.com;
  spf=pass smtp.mailfrom=return@mail.example.com;
  dkim=pass header.d=mail.example.com header.s=s1;
  dmarc=pass header.from=example.com
  • SPF 身份:smtp.mailfrom
  • DKIM 身份:header.dd=)与 header.s(选择器)
  • 可见发件人:header.from

宽松对齐用 PSL 推导组织域后比对;严格对齐需完全一致。若 spf=pass/dkim=pass 却仍 dmarc=fail,多半是对齐出了问题(供应商 envelope 或供应商 d=)。

告警 → 原因 → 修复 → 验证(一页表)

告警可能原因修复动作如何验证
SPF 查询 ≥8(预警)/ >10(失败)新增供应商、深度 include受控域扁平化、限制深度重跑体检、保存 scanId/sha256、Verify
DKIM 通过率下降选择器过期/灰度未全量/用供应商 d=零停机轮换、双签名、用 d=brand.tldAR 见新选择器 pass;对齐 OK
DMARC 失败但 SPF/DKIM 通过对齐失败优先在 DKIM 上对齐或改 envelopeAR 身份对齐;体检对齐徽章通过
一键退订缺失模板丢头部或新路由未加恢复头部、加入模板测试体检显示已存在;PDF 列出摘录

可扩展的作业流

  • 队列与去重:Redis + BullMQ;同域 15 分钟只入队一次
  • 扫描器:解析 DNS 与 AR;PSL 对齐;出分与建议
  • 证据:规范化 JSON + sha256;记录 rulepackVersion、解析器集合
  • PDF:Worker 异步渲染、24h 签名下载
  • 告警:Email 为先;Slack/飞书 可选;模板使用 Markdown

保留与隐私

  • JSON 90 天;PDF 30 天;Proof 可长期(或 1 年)
  • 不保存邮件正文;.eml 仅用于头部解析且即删
  • 下载链接 HMAC 签名,24 小时过期

常见问答

每天都过,为什么还要监测?

因为配置会“回弹”。新增供应商、选择器轮换、模板改版都可能在 24 小时内引入回归。提前发现比事后排障成本更低。

只让 SPF 或 DKIM 其一对齐可以吗?

可以。DMARC 要求二者其一对齐即可。现实中更推荐先在 DKIM 上对齐(d=brand.tld),SPF 作为补充。

如何向外部证明“我们确实修好了”?

把 scanId/sha256 与 PDF 证据贴到变更单,审核人可用 Verify 复算,比对哈希。