📌 前言
電子郵件在傳輸過程中,本質上是明文的。如果中間遭遇 DNS 欺騙、降級攻擊(downgrade attack)或中間人攻擊(MITM),郵件的內容和憑證就可能被攔截或竄改。為提升郵件安全性,Google、Microsoft、Yahoo 等大型郵件供應商提出 MTA-STS(Mail Transfer Agent – Strict Transport Security)標準。
MTA-STS 的目的很簡單:
👉 強制所有寄件伺服器使用 TLS 加密,並驗證憑證,否則拒絕投遞。
🔐 什麼是 MTA-STS?
MTA-STS 是一種針對 SMTP 的安全強化機制,允許網域擁有者發布政策,要求其他郵件伺服器:
- 必須使用 TLS 進行加密傳輸
- TLS 必須成功驗證憑證(不得使用自簽、不合法、過期憑證)
- 不得降級成明文 SMTP
如果寄件端無法建立安全連線,郵件就會被暫存或退回,而不是以明文方式傳輸。
🧩 MTA-STS 的四大組成
1️⃣ DNS TXT 記錄
宣告你的網域啟用 STS 服務:
_mta-sts.example.com. TXT "v=STSv1; id=20250101"
id 代表版本,只要政策更新就需要調整。
2️⃣ HTTPS 端點(固定 URL)
寄件方會透過 HTTPS 下載你的 STS 政策:
https://mta-sts.example.com/.well-known/mta-sts.txt
要求:
- 必須是 HTTPS
- 必須使用公開 CA 憑證(不能用自簽)
- 必須可從外部公開存取
3️⃣ MTA-STS 政策檔案(Policy File)
範例:
version: STSv1
mode: enforce
mx: mail.example.com
mx: mx-backup.example.com
max_age: 604800
政策參數:
| 參數 | 意義 |
|---|---|
| version | 固定 STSv1 |
| mode | testing / enforce / none |
| mx | 允許接收郵件的 MX 主機 |
| max_age | 快取時間(秒) |
4️⃣ 寄件端 MTA 快取
寄件 MTA 會將 STS 政策存放在快取中,以避免 DNS 遭攔截。
🔄 MTA-STS 的運作流程
- 寄件 MTA 查詢
_mta-sts.example.comTXT - 下載 HTTPS 政策檔
- 檢查 MX 是否符合
- 強制使用 TLS 建立加密連線
- 驗證憑證是否有效
- 成功後投遞郵件,並快取政策內容
如果 TLS 協商、憑證驗證或 MX 不符 → 郵件會延遲投遞或直接拒收(依模式而定)。
🆚 MTA-STS 與 TLS-RPT、DANE 比較
| 技術 | 功能 | 優點 | 缺點 |
|---|---|---|---|
| MTA-STS | 強制 TLS、驗證憑證 | 無需 DNSSEC,主流支援度最高 | 需 HTTPS 網站 |
| TLS-RPT | 回報 TLS 錯誤 | 可監控政策是否生效 | 需處理報告信件 |
| DANE | 使用 DNSSEC 驗證憑證 | 抗 MITM 無敵 | DNSSEC 部署困難 |
企業最常見組合:
👉 MTA-STS(enforce) + TLS-RPT
🏗 如何部署 MTA-STS(快速版)
1️⃣ 建立 DNS TXT
_mta-sts.example.com. TXT "v=STSv1; id=20250101"
2️⃣ 建立 HTTPS 站點
目錄:
/var/www/mta-sts/.well-known/mta-sts.txt
3️⃣ 寫入政策檔
version: STSv1
mode: enforce
mx: mail.example.com
max_age: 604800
4️⃣ MX 必須使用有效 TLS 憑證
- 正式 CA
- SAN 必須包含 MX 主機名稱
- 支援 TLS 1.2 / 1.3
5️⃣(建議)設定 TLS-RPT
_smtp._tls.example.com. TXT "v=TLSRPTv1; rua=mailto:tls-rpt@example.com"
⚠ 常見問題
❌ 憑證 CN 與 MX 不匹配
→ 寄件端會拒收
❌ 使用自簽憑證
→ 直接拒收
❌ mode=testing 無法強制 TLS
→ 只會收到錯誤報告
❌ 忘記更新 id
→ 寄件端不會重新抓政策
🎯 結論
MTA-STS 是現代郵件系統不可或缺的安全機制。它部署簡單、無需 DNSSEC,卻能大幅提升郵件傳輸安全性。若你正在部署 Postfix、Dovecot 或自行管理企業郵件系統,務必啟用 MTA-STS + TLS-RPT,以確保郵件安全與信任度。