2018年09月26日に**RFC 8461**が公開されました。**MTA-STS(SMTP MTA Strict Transport Security)**と呼ばれるSMTPのセキュリティに関連する新しい仕様です。最初のドラフトは2016年5月に公開されている1ので2年半ほどかけてRFCとなったようです。最終的な仕様はGoogle、Microsoft、Comcast、Oath2で策定しています。
日本語情報をあまりみかけないので少し調べてみました。
MTA-STSとは?
ざっくり書くと**「SMTPで厳格にTLSを使うために、メールサーバ(MTA)がTLSに対応していることをポリシーとして宣言して、検証できるようにする仕組み」**です。宣言・検証はDNSとHTTPSを組み合わせて行います。
MTA-STSが生まれた背景について、RFC 8461のIntroductionでSTARTTLSの問題点を触れています。
RFC 3207のSTARTTLSはSMTPの通信をTLSにする仕組みですが、日和見暗号化(Opportunistic Encryption)のため、相手先がTLSに対応していない場合は平文での通信となります。これには問題があって、たとえば中間者攻撃(man-in-the-middle attack、MITM)で仲介して平文にダウングレードさせたり、DNSクエリによる問合せを仲介して攻撃者の管理下にあるサーバのMXを返したり、といったことをして内容の傍受が可能となってしまいます。
この問題を解決するためにMTA-STSが考えられました。3
MTA-STSに対応するには?
次のステップを踏みます。
- TLSに対応し、証明書等に問題がないことを確認する
https://en.internet.nl/test-mail/ などで確認できるようです。
- DNSにMTA-STS TXTレコードを追加する
ドメインがexample.comの場合は次のようなTXTレコードをDNSに定義して、MTA-STSのポリシーに対応することを示します。idはポリシーの更新をチェックするためのもので、タイムスタンプやランダムな数値を入れるとのこと。
_mta-sts.example.com. IN TXT "v=STSv1; id=20181111085700Z;"
- MTA-STS Policiesを配置する
RFC 5785のwell known URLを使って、次のパスにtxtファイルを配置します。
https://mta-sts.example.com/.well-known/mta-sts.txt
ファイルの中身は次のようなkey/valueの値です。
version: STSv1
mode: enforce
max_age: 10368000
mx: mail.example.com
mx: *.example.net
mx: backupmx.example.com
versionは「STSv1」で固定です。
modeは「enforce」「testing」「none」のいずれかで、検証結果を定義します。enforceは、失敗した場合はSTARTTLSに対応していないと判断します。testingの場合はRFC 8460の SMTP TLS Reportingに沿ってレポートが行われるとのことで、たとえば次のようなTXTレコードでレポート先を指定できるようです。mxではワイルドカード(*)も使えるとのこと。
_smtp._tls.example.com v=TLSRPTv1; rua=mailto:mta-sts@example.com
このチェックフローが読み取りにくかったのですが、以下がわかりやすかったです。
https://www.youtube.com/watch?v=VJKjfosckuU
Gmailの確認結果
Gmailは既にMTA-STSに対応しているようなので確認してみました。
まずはMTA-STS TXTレコードを調べてみます。
dig -t txt _mta-sts.gmail.com
結果は次のとおり、定義されていました。
;; ANSWER SECTION:
_mta-sts.gmail.com. 300 IN TXT "v=STSv1; id=20171114T070707;"
続いてMTA-STSのポリシーを確認してみます。以下のURLにアクセスするだけです。
Gmailではmodeが「enforce」となっていました。(記事執筆時はtestingでしたが、その後、時期不明ですがenforceに変わりました。)
ということは、SMTP TLS Reportingもありそうです。
dig -t txt _smtp._tls.gmail.com
結果をみると次のとおり定義されていました。
;; ANSWER SECTION:
_smtp._tls.gmail.com. 300 IN TXT "v=TLSRPTv1;rua=mailto:sts-reports@google.com"
今回は手動で1つ1つ確認しましたが、以下のサイトを使って簡単に確認できるようになっています。
https://www.hardenize.com/
https://aykevl.nl/apps/mta-sts/ (コマンドベースもある https://github.com/aykevl/mta-sts )