网络

SPF DMARC 检测工具

输入一个域名,一次查看邮件认证涉及的四条记录:SPF、DKIM、DMARC、MX。SPF 会静态展开 include 和 redirect,给出保守的查询次数上界,用来发现可能超过 RFC 7208 十次上限的发信路径。DMARC 读取输入名称上的策略、对齐模式和报告授权;DKIM 探测并还原密钥位数;MTA-STS、TLS-RPT、BIMI 也会一并检查。免费,无需注册。

  • 静态展开 SPF include 链,逐项编号,标出超过第十次查询的项
  • DMARC 策略、子域策略、生效比例与两种对齐模式逐标签解读
  • 检查外部 DMARC 报告地址对应的授权记录
  • 按常见 selector 探测 DKIM 密钥,并从记录中还原 RSA 位数
  • MX 目标逐个解析,同时检查 MTA-STS、TLS-RPT 与 BIMI

可以填域名、邮箱地址或完整网址,只取其中的域名部分。

会追加到固定探测的 selector 列表,当前数量: 32

输入域名,检查它的 SPF、DKIM、DMARC 与 MX 记录。

功能简介

四条记录决定邮件是否被信任,而每一条的失效方式都很安静。下面每一项检查给出的是“哪里不对”,而不只是“有什么”。

  1. 01

    十次查询预算,按规则精确计数

    每条 include 和 redirect 都追到底,消耗查询次数的项按求值顺序编号,能直接看到是哪一项越过第十次。超限的记录在展开之前,看上去和正常的没有区别。

  2. 02

    DMARC 逐标签解读

    策略、子域策略、生效比例和两种对齐模式,都给出实际含义,而不是丢一个字母让你自己查。

  3. 03

    报告授权真的去验了

    聚合报告发往其他域名时,需要对方发布授权记录。工具会去查这条记录——因为缺失它的表现,和“根本收不到报告”完全一样。

  4. 04

    DKIM 密钥不只是找到,还量了长度

    从记录中还原 RSA 模数长度,所以 1024 位这种“能用但低于当前建议”的密钥会被单独点出来,和已吊销、测试模式的 selector 并列。

  5. 05

    MX 目标一路跟到底

    每台主机都解析一遍,几类经典故障——目标没有地址记录、该填主机名的地方填了 CNAME、直接写了 IP——分别点名。

  6. 06

    现代记录同一趟查完

    MTA-STS、TLS-RPT、BIMI 和基础记录一起检查,一次运行覆盖全貌,不用再跑三个页面。

如何使用

输入一个域名,每条记录给出各自的结论。其中最该先看的是 SPF 计数器。

  1. 01

    填入域名——邮箱地址或完整网址也可以,只取域名部分——然后点检测。

  2. 02

    先看 SPF 计数器:不到十次还有余量,正好十次无法再增加服务商,超过十次则说明至少有一条可达发信路径需要结合实际发信 IP 继续确认。

  3. 03

    展开链路,看清每条 include 各自贡献了多少次查询,以及越过上限的是哪一项。

  4. 04

    查看 DMARC 策略;如果报告发往其他域名,确认对方是否已授权。

  5. 05

    若没找到 DKIM 密钥,从邮件 DKIM-Signature 头的 s= 标签取出 selector,填进 selector 输入框。

功能说明

邮件认证真正出问题的地方,大多在记录本身看不出来。这些检查就是围绕这些情况写的。

  • 统计的是语法上可达路径的保守上界;具体某封邮件可能在更早的匹配项处结束
  • exists:%{i} 这类宏按一次查询计入并单独标注,不会被悄悄忽略,也不会被错误展开
  • include 指向的域名没有 SPF 记录时,报为永久性错误,而不是“这一项没匹配上”
  • 排在 all 之后的项、以及被 all 屏蔽的 redirect,标记为永不求值,而不是默默计入次数
  • 成环只在当前链路上判定,所以同一个 include 从两条分支各走一遍仍然算两次查询——收信方也是这么算的
  • DKIM 结果会写明尝试了多少个 selector,因为找不到是方法本身的局限,不是关于这个域名的结论

适合哪些场景

邮件认证通常只在两个时候被认真看:刚配置的时候,以及邮件开始退信的第二天早上。

  1. 排查 SPF 永久性错误

    用了好几年的记录,在多加一家服务商之后开始失败。计数器会显示超出多少,以及是哪条 include 把它顶过去的。

  2. 接入新发信服务商之前先看一眼

    已经在九次或十次上的记录,一点余量都没有了。与其等新 include 悄悄把原有的搞崩,不如提前知道。

  3. 搞清楚 DMARC 报告为什么一直收不到

    聚合报告发往分析服务商时,需要对方域名上有授权记录。缺了它报告会被丢弃,而这种沉默看起来就像根本没人发。

  4. 确认 DKIM 密钥完成了轮换

    轮换 selector 之后,检查新的是否已发布并读一下位数,避免本来要上 2048、实际混进去一个 1024 位的。

  5. 从 p=none 推进到强制策略

    在把档位调到 quarantine 或 reject 之前,把当前策略、子域策略和生效比例放在一处看清楚。

  6. 接手一个陌生域名时做体检

    一次运行就能看到整体状况——包括那些本就不该发信的域名,是否已经用 -all 和 null MX 妥善锁死。

延伸阅读

想看这些结论背后的原始记录,或者从根服务器往下追一遍委派链,可以用 DNS 查询。邮件服务器同样要提供证书,检查提交端口或 IMAPS 端口上的那张证书,可以用 SSL 证书检查。而当报告里冒出一个发信地址、你需要知道它属于谁的网络时,可以查 IP 地址查询

使用建议

这些习惯能让一个邮件域名持续保持在正常认证状态,而不是慢慢滑向失效。

  • SPF 链留几次余量,别顶着十次,这样以后加服务商不至于当天就把记录打崩。
  • 服务商地址段稳定时,优先用 ip4、ip6 而不是 include——它们不占查询预算。
  • 确认名单已经完整后,把记录收敛到 -all;~all 是过渡期的谨慎选择,而 ?all 等于什么都没说。
  • DMARC 聚合报告地址从第一天就配上;如果指向的域名不归你管,务必确认授权记录已经发布。
  • 按计划轮换 DKIM selector 并发布 2048 位密钥;停用旧 selector 时把 p 标签清空,而不是删掉整条记录。
  • 对从不收发邮件的域名——包括纯防御性持有的那些——发布 null MX 和 -all 的 SPF 记录。

边界与注意事项

这里的一切都来自公开 DNS,这条边界决定了结果能说明什么、不能说明什么。

  • DKIM selector 无法从 DNS 枚举。工具只探测一批常见名称,所以用随机 selector 的域名会显示“没找到”,尽管 DKIM 其实工作正常。
  • 不建立任何 SMTP 连接。浏览器碰不到 25 端口,所以 MX 一节报告的是配置,绝不是服务器是否在响应。
  • SPF 宏无法展开。它的取值随发信 IP 变化,因此宏按一次查询计入并保持未展开状态。
  • 查询次数是对语法上可达路径作出的保守上界。具体某封邮件会在第一个匹配处停下,所以超过十次不等于每一个发信方都会失败。
  • MTA-STS 只能看到一半。TXT 记录可以读,但策略文件在 HTTPS 端点上,浏览器受跨域限制取不到。
  • DMARC 只按你输入的确切名称查询。收信方在子域没有记录时会回退到组织域,复现这一步需要公共后缀列表。
  • 结果来自经 DevKitLab 服务转发的公共解析器,刚发布的记录可能仍处于缓存中。

常见问题

关于 SPF 查询次数上限、DMARC 策略、DKIM 找不到密钥,以及这项检查看不到什么的常见问题。

怎么检查一个域名的 SPF、DKIM 和 DMARC 记录?

填入域名点检测即可。工具会读取 SPF 记录并展开其中每一条 include 和 redirect,读取 _dmarc.你的域名 上的 DMARC 记录,按一批常见名称探测 DKIM selector,并解析 MX 主机。每条记录给出各自的结论,MTA-STS、TLS-RPT、BIMI 也在同一趟里查完。

SPF 报“DNS 查询次数过多”是什么意思?

RFC 7208 规定,求值过程中触发 DNS 查询的项最多十个:include、a、mx、ptr、exists 以及 redirect 修饰符。include 是递归计数的,所以接入几家服务商就可能把总数悄悄推过十次。求值会在第一个匹配的机制处停下,因此这个总数是最坏情况,而不是对每封邮件的判定:要走到第十次之后才匹配的发信路径会拿到永久性错误——在 DMARC 里等同于 SPF 失败——而更早匹配的发信方仍然通过。这也是为什么超预算的记录看上去毫无异常,却只对一部分发信方失败。

SPF 超过十次查询上限,怎么修?

先删掉已经不再使用的服务商 include,多数情况这一步就够了。服务商地址段稳定的,把 include 换成 ip4、ip6 机制,它们不占预算。把一部分邮件迁到带独立 SPF 记录的子域上,等于把预算拆成两份。把 include 展平成字面地址也可行,但需要长期维护——服务商可能不打招呼就改地址段。

-all 和 ~all 有什么区别?

-all 是硬失败:不在名单上的服务器即未授权,收信方可以直接拒收。~all 是软失败:同样未授权,但先投递再打标记。名单还没摸干净时用 ~all 比较稳妥,-all 才是最终该到的位置。?all 是中立,什么都不断言,以它结尾的记录和没有记录差别不大。

为什么工具找不到我的 DKIM 记录?

因为 DNS 没有任何办法列出一个域名发布了哪些 selector。DKIM 密钥存放在 selector._domainkey.你的域名,不知道 selector 名称就无从查起。本工具会探测主流服务商使用的名称,但自定义的——包括 Amazon SES 签发的随机 selector——必须手动提供。从该域名任意一封邮件的 DKIM-Signature 头里取 s= 标签,填进 selector 输入框即可。

DMARC 策略该怎么选,p=none 是做什么的?

p=none 表示仅监控:收信方不做任何处置,只发报告。作为起点是对的,但它保护不了任何东西,所以是中转站而非终点。p=quarantine 让收信方把验证失败的邮件按可疑处理,通常落进垃圾箱。p=reject 则直接拒收。常规路径是先 none,等报告干净了转 quarantine,最后到 reject。

为什么我收不到 DMARC 报告?

最常见的原因是缺少授权记录。如果 rua 地址所在的域名和被报告的域名不是同一个——比如用了监控服务商——对方域名必须发布一条 你的域名._report._dmarc.对方域名 的记录表示接受。缺了它,规范的发报方会直接丢弃报告且不作任何提示,表现出来就和没人发报告一模一样。本工具会对每个外部地址检查这条记录。

这个工具会检查我的邮件服务器是否真的可达吗?

不会。网页无法建立 SMTP 连接——浏览器碰不到 25 端口——所以 MX 一节只检查配置。它确认记录存在、读取优先级、解析每个目标,并指出几类常见故障:目标没有地址记录、该填主机名的地方填了 CNAME、或者直接写了 IP 地址。对端服务器到底有没有响应,需要能说 SMTP 的工具才能验证。

SPF 明明通过了,邮件为什么还是进垃圾箱?

SPF 通过不等于 DMARC 通过。DMARC 还要求对齐:通过 SPF 的那个域名,必须和收件人看到的 From 地址一致。通过服务商发信时,常见情况是 SPF 过的是服务商自己的域名,而 From 头显示的是你的域名,对齐就不成立。用你自己的域名做 DKIM 签名可以解决,因为 DKIM 对齐是独立判定的。至于信誉、内容和名单质量,那已经在认证之外了。

MTA-STS、TLS-RPT 和 BIMI 分别是什么?

MTA-STS 告诉发信服务器:投递到本域必须使用 TLS,堵住机会性 TLS 留下的降级攻击口子。TLS-RPT 则请对方在这一环节失败时发报告。BIMI 用于发布品牌 logo 供支持展示的收信方使用,前提是 DMARC 已经处于强制策略。三者都是可选的,没有配置完全正常。

可以检查子域吗?

可以,而且凡是发信的子域都值得查一遍,因为 SPF 和 DKIM 都是按确切名称查询的。DMARC 不同:子域没有记录时,收信方会回退到组织域的记录并套用其 sp 标签。本工具只查你输入的确切名称,所以子域上 DMARC 显示为空,往往意味着实际生效的是上级域的策略。

这和 DNS 查询工具是一回事吗?

两者回答的问题不同。DNS 查询工具给你看记录——任意类型、任意解析器,还能追委派链。这个工具则是对其中特定几条做判断:它把 SPF 链展开而不是打印一行,按上限计数,并依据各自的规则解读 DMARC 和 DKIM。想看发布了什么用那个,想知道配得对不对用这个。

更多相关工具

看结论背后的原始记录,检查邮件端口上的证书,或者顺着报告里的地址查下去。