MXとSTARTTLSのテスト

あなたのドメイン宛てのメールは、2つのサーバーの間でインターネットを渡ります。その区間の暗号化は、仕組み上オプションです。このテストは受信サーバーを1つずつノックし、送信側に何が提示されるかを報告します。

例: gmail.com, proton.me

メールがサーバーにたどり着く仕組み

誰かがanna@example.comにメールを書くと、その人のメールサーバーはexample.comのMXレコードを調べます。各レコードにはサーバー名と数字が書かれています。数字の小さいものから試し、ほかは予備です。送信サーバーはポート25で接続を開き、2台のマシンはSMTPで会話します。1982年に生まれたプロトコルで、すべてを読めるテキストのまま送ります。

暗号化は後から、同じ会話の中で切り替える形で加わりました。受信サーバーが対応機能の一覧にSTARTTLSを載せ、送信側が同じ言葉で応じると、そこから先のセッションはHTTPSと同じ技術であるTLSで守られます。一覧にその言葉がなければ、メールは平文のまま運ばれます。

テストがポート25で行うこと

最大5つのMXサーバーについて、優先順に最初のIPv4アドレスを解決し、配送の冒頭部分を演じます。

S: 220 mx1.example.com ESMTP
C: EHLO <our server>
S: 250-mx1.example.com
S: 250-SIZE 52428800
S: 250 STARTTLS
C: STARTTLS
S: 220 Ready to start TLS
   (TLS handshake, certificate read)
C: QUIT

そこで止めます。送信者、宛先、メッセージを渡すことは決してありません。ハンドシェイクからは、TLSバージョン、暗号スイート、証明書の発行者と有効期限、証明書にMXホスト名が含まれているか、証明書チェーンが信頼された認証局までつながっているかを記録します。

その後、2つのDNSレコードと1つのファイルを探します。_mta-stsのTXTレコード、https://mta-sts.example.com/.well-known/mta-sts.txtのポリシー、_smtp._tlsのTXTレコードです。

4つのタイルの読み方

サーバー
接続に挨拶を返したMXホストの数です。予備のサーバーが1つ応答しないと警告します。どれも応答しなければ、送信側はメールをキューに入れ、数日後に送り返します。
暗号化
「一部のみ」は、到達できたサーバーのうち少なくとも1つがSTARTTLSを完了しなかったという意味です。メールは届き続けるのに結果全体が赤になる、ここで唯一の項目です。
証明書
「要確認」には、期限切れの証明書、自己署名の証明書、別の名前用に発行された証明書が含まれます。TLS 1.0と1.1は、古いものとして別に警告します。
MTA-STS
ポリシーファイルにあるモードを表示します:enforce、testing、none。DNSレコードはあるのにファイルを取得できない、modeの行がない、MXホストの1つが抜けている、といった場合は赤になります。

MXがないドメイン、または「null MX」レコード0 .を持つドメインは、メールを受信しないと報告します。ウェブサイトだけのドメインなら、それは正しい設定です。

証明書がおかしくてもメールが届く理由と、MTA-STSで変わること

ただのSTARTTLSは「できれば暗号化」という方式です。ほとんどの送信側は、可能なら暗号化しますが、証明書は検証しません。そのため、ネットワーク経路を握っている人は、応答からSTARTTLSの行を消してすべてを読めてしまいます。MTA-STSはこの穴をふさぎます。MXホストの一覧と、それらが有効な証明書を提示しなければならないというルールを、HTTPSで公開するのです。GmailとOutlook.comは、あなた宛てに送るときにこれを適用します。

ポリシーファイルは4行です。

version: STSv1
mode: testing
mx: mx1.example.com
max_age: 604800

有効なHTTPS証明書を持つmta-stsサブドメインからこれを配信し、TXTレコードを2つ追加してください。

_mta-sts.example.com.   TXT "v=STSv1; id=20260115"
_smtp._tls.example.com. TXT "v=TLSRPTv1; rua=mailto:tls-reports@example.com"

毎日届くTLS-RPTレポートに失敗がなくなるまではtestingのままにし、その後enforceに切り替えて、送信側がポリシーを読み直すようidの値を変えてください。Google WorkspaceやMicrosoft 365のようなホスティング型のメールでは、MXの証明書は事業者の担当です。あなたが公開する必要があるのはポリシーだけです。

このテストは1台のサーバーから、IPv4で、各MXの最初のアドレスに接続します。DANE(TLSAレコード)、IPv6での配送、スパムフィルター、特定のメールボックスが存在するかは確認しません。知らない相手からの接続を制限しているメールサーバーは、当サーバーを断っても、本物の送信者は受け入れていることがあります。

よくある質問

STARTTLSとポート465のSSL/TLSの違いは何ですか?

サーバー間のポート25は、必ず暗号化なしで始まり、STARTTLSコマンドで切り替えます。ポート465は最初の1バイトから暗号化されています。メールソフトが自分の事業者にメールを送信するときに使うもので、事業者どうしの間では使いません。ポート587もメールソフト用で、STARTTLSを使います。

メールは転送中にデフォルトで暗号化されていますか?

たいていはそうですが、保証はありません。大手事業者は、サーバー間メールの90%を優に超える量がTLSを使っていると報告しています。中継ごとにそれぞれ判断するので、MTA-STSやDANEがなければ、暗号化が提示されないとき送信側は平文に戻ります。

メールサーバーに公的な認証局の証明書は必要ですか?

自己署名の証明書でもメールは届きます。ほとんどの送信側は検証しないからです。MTA-STSをenforceモードで公開したとたん、MXホスト名を含む信頼された証明書が必要になります。Let’s Encryptなら費用はかかりません。

ドメインにMXレコードはいくつ必要ですか?

その名前の裏で複数のマシンを動かしている事業者を指しているなら、1つで十分です。自分でサーバーを運用しているなら、2つ以上あれば予備になります。スパムフィルターの弱い予備MXは知られた裏口なので、すべてのMXを同じ水準で守ってください。

メールは受信できているのに、テストでサーバーに到達できないと表示されるのはなぜですか?

サーバーの応答が遅い(当サイトは8秒で接続をあきらめます)、知らないホストに速度制限をかけている、IPv6アドレスしか持っていない、のいずれかが考えられます。DNSレコード検索でMXの名前を確認し、数分後にもう一度試してください。