MTA-STS 策略检测工具

获取域名的 _mta-sts TXT 记录与 mta-sts.txt 策略文件,诊断邮件传输过程中的强制 TLS 加密(MTA-STS)是否配置正确。

诊断邮件投递的 TLS 强制(MTA-STS)

SMTP 的加密本是一件「能则为之」的随意事,故而半途插足的攻击者只消把 STARTTLS 的告示抹去,便可将往来压回明文。MTA-STS 正是堵上这一口子的约定,**它告诉发信方:寄往本域名的邮件必须走 TLS。** 本工具会把 `_mta-sts` 的 TXT 记录与策略文件一并取来,报出配置是否齐全。

**这套安排最令人困惑之处,是 DNS 里并不存放策略本身。** TXT 记录所载的不过是标示版本的 `id`;**实体则经 HTTPS 自 `https://mta-sts.您的域名/.well-known/mta-sts.txt` 发放。** 故而此机制的信任,落在网站证书而非 DNS 之上。**而最常卡住人的,是把 `mode` 留在 `testing`。** 在那种状态下,纵使 TLS 失败,投递照旧放行,**惟有取值为 `enforce` 时,强制才真正生效。** 通行的采用次第是:先停在 `testing`,看 TLS-RPT 的报告直到确信无物受损,然后才转入 `enforce`。

使用方法

  1. 输入域名 只给域名即可,形如 `example.com`。
  2. 查看 TXT 记录 **看有无 `v=STSv1` 与 `id=`。** 每更新一次策略,`id` 便要改一次。
  3. 阅读策略文件的内容 其中列着三项:`mx`、`max_age` 与 `mode`。
  4. 确认 mode **停在 `testing` 便什么也没强制。** 取到 `enforce`,策略方才有效。

用好本工具的小技巧

  • MTA-STS 是由“发信方”服务器负责检查的机制。一旦发布策略,其他人发往你域名的邮件服务器就会开始强制使用 TLS。
  • 建议先以 mode: testing 运行数周至一个月,监控是否出现意外的投递拒绝,再切换到 enforce,以确保过渡安全。
  • max_age(策略有效期)通常设置在 604800 秒(7天)到 31557600 秒(1年)之间。数值过短会导致频繁重新获取策略文件。
  • mx 字段可以使用通配符(如 *.example.com),但 TLS 证书的 SAN(Subject Alternative Name)必须与该通配符匹配。
  • 只发布 DNS 记录或只发布策略文件都不起作用,只有两者同时齐备时 MTA-STS 才会生效。

这些场景会用到

检视自家域名

**此机制须 DNS 与 HTTPS 双双就位方能运转,故可揪出缺了哪一半。**

转入 enforce 之前先查一遍

趁还在 `testing`,把配置上的差错扫清。

添了 MX 之后重新审视

**忘了把新的 MX 主机写进策略的 `mx`,投往该主机的邮件便会被拒。**

弄清往来对象做到了哪一步

可以看出对方是否对自家邮件强制了 TLS。

MTA-STS 的术语

_mta-sts TXT
**承载标示策略版本之 `id` 的 DNS 记录。** 策略本身不存于此。
策略文件
实体,置于 `https://mta-sts.您的域名/.well-known/mta-sts.txt`。**既经 HTTPS 发放,便须有一份有效的证书。**
mode
`enforce`、`testing`、`none` 三者之一。**在 `testing` 之下,纵使检查失败邮件照送。**
max_age
发信方可将策略缓存的秒数。取值越长保护越强,可变更散开得也越慢。
mx
要强制 TLS 的 MX 主机清单。**凡不在此列的主机,投递一概被拒。**
STARTTLS 降级
中间人抹去 STARTTLS 的告示以逼出明文的攻击。**MTA-STS 正是为防它而设。**

常见问题

“未配置 MTA-STS”本身并不罕见,目前大多数域名仍未采用。但如果希望增强对 STARTTLS 剥离攻击的防护,值得考虑引入该机制。

SPF、DKIM、DMARC 用于验证发信方身份、防止伪造。MTA-STS 与发信方身份验证无关,它强制邮件传输链路本身使用 TLS 加密,防御的是另一类威胁。

并非放在你自己的域名下,而是必须放在以“mta-sts.”为前缀的子域名(例如 mta-sts.example.com)的 /.well-known/mta-sts.txt 路径下,并通过有效的 TLS 证书提供服务。

不建议这样做。应先以 testing 模式运行数周至一个月,借助 TLS-RPT 监控投递情况,确认不会出现意外拒收后再切换到 enforce,这样更安全。

本工具仅检查 TXT 记录与策略文件的语法及必填字段是否齐全,并不验证 TLS 证书的有效性,也不会对列出的 MX 主机执行实际的 TLS 握手。如需更严格的验证,请配合 checktls.com 等专业工具使用。
工具君

闲话 ― STARTTLS 的弱点与 MTA-STS 诞生的背景

长期以来,SMTP 传输加密依赖于 1999 年标准化的 STARTTLS 机制——先以明文建立连接,再切换到加密通道。2014 年,安全研究人员确认了真实存在的“STARTTLS 剥离攻击”:由于 STARTTLS 协商本身发生在加密启用之前,路径中的攻击者可以篡改服务器响应,隐藏其对 STARTTLS 的支持,从而诱使对方退回到明文通信。

问题的根源在于 STARTTLS 刻意设计为“对方不支持 TLS 时优雅降级为明文”这一兼容性特性,而攻击者恰恰可以利用这一点,伪装成对方不支持 TLS。大约在 2015 年前后,谷歌自身的测量数据显示,在某些国家和某些运营商网络中,STARTTLS 剥离攻击已经大规模发生。

MTA-STS(RFC 8461,2018年发布)正是业界对此问题的回应,由谷歌、微软、雅虎等共同制定。域名通过 DNS TXT 记录声明支持 MTA-STS,再发布一份通过 HTTPS 获取的策略文件,列出允许的 MX 主机与 TLS 要求。策略一旦获取便会按 max_age 缓存,此后若发生降级尝试即可被检测并拒绝,而不是被悄悄接受。

MTA-STS 通常与 TLS-RPT(TLS 报告,RFC 8460)搭配使用,后者可让域名所有者在发信服务器无法建立 TLS 时收到报告。MTA-STS 负责“强制执行”,TLS-RPT 负责“可观测性”,两者并用是目前业界推荐的最佳实践。