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`。
使用方法
- 输入域名 只给域名即可,形如 `example.com`。
- 查看 TXT 记录 **看有无 `v=STSv1` 与 `id=`。** 每更新一次策略,`id` 便要改一次。
- 阅读策略文件的内容 其中列着三项:`mx`、`max_age` 与 `mode`。
- 确认 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 正是为防它而设。**
常见问题
闲话 ― 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 负责“可观测性”,两者并用是目前业界推荐的最佳实践。