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 負責“可觀測性”,兩者並用是目前業界推薦的最佳實踐。