• 診断項目 No.93/127
  • DNS・メールのなりすまし対策
  • 重大度 中(medium)

MTA-STSとは?DNSレコードとポリシーファイルの設定方法・enforce移行・診断基準

MTA-STSは、自ドメイン宛てメールを検証済み証明書のMXへTLSで届けるよう送信側に求める仕組みです。_mta-sts TXTとmta-sts.txtの書き方、testingからenforceへの移行手順、サーバー設定例、診断基準を解説します。

結論(MTA-STS)

MTA-STSとは、「このドメイン宛てのメールは、検証済みの証明書を持つ指定のメールサーバーへ、TLSで暗号化して届けること」を送信側のメールサーバーに求める仕組みです(RFC 8461)。Webにおける HSTS のメール版にあたり、_mta-sts のDNS TXTレコードと、https://mta-sts.<ドメイン>/.well-known/mta-sts.txt のポリシーファイルの2つで構成されます。保護が働くのは mode: enforce のときだけです。

この記事のポイント

  • SMTPのSTARTTLSは任意の暗号化のため、経路上の攻撃者による平文化(ダウングレード)や偽MXへの誘導が起こりえます。
  • MTA-STSはDNSの _mta-sts TXT(v=STSv1; id=)とHTTPSのポリシーファイルの両方が必要です。
  • ポリシー取得では3xxリダイレクトを追跡しないため、mta-stsサブドメインから他へ転送してはいけません。
  • testingは保護効果がなく、TLS-RPTで問題が無いことを確認してからenforceへ移行します。
  • セキュリティAIチェッカーは、enforceかつ全MXがポリシーに含まれtext/plainで配信なら○、TXTはあるがポリシーが無効なら×と判定します。
診断項目名MTA-STS
項目IDdns.mta-sts
分類DNS・メールのなりすまし対策
重大度・配点の重み中(medium) 重み 2
関連する標準・ガイドラインRFC 8461「SMTP MTA Strict Transport Security (MTA-STS)」/RFC 8460(SMTP TLS Reporting)/CWE-319(Cleartext Transmission of Sensitive Information)/関連項目 dns.tls-rpt

MTA-STSとは

MTA-STS(SMTP MTA Strict Transport Security)とは、「このドメイン宛てのメールは、検証済みの証明書を持つ指定のメールサーバーへ、TLSで暗号化して届けること」を送信側のメールサーバー(MTA)に求めるための仕組みです。RFC 8461で定められており、Webにおける HSTS のメール版にあたります。

_mta-sts.city.example.lg.jp. 3600 IN TXT "v=STSv1; id=20261001T0900"
version: STSv1
mode: enforce
mx: mail.city.example.lg.jp
max_age: 604800

サーバー間のSMTP通信は、STARTTLSによる暗号化が「できればする」任意の方式です。そのため、通信経路上の攻撃者がSTARTTLSの提示を消去したり、偽のMXへ誘導したりすると、送信側は平文で、あるいは偽サーバーへメールを届けてしまいます(ダウングレード攻撃)。MTA-STSを enforce モードで公開すると、MTA-STSに対応した送信側(Gmail、Microsoft 365など)は、TLSが成立しない場合や証明書・MX名がポリシーと一致しない場合に配送を中止します。

セキュリティAIチェッカーのこの項目は、自治体のメールドメインにMTA-STSのDNSレコードとHTTPSポリシーが整合した形で公開され、実際に保護が働く enforce モードになっているかを評価します。TLSの失敗を報告してもらう仕組みは「SMTP TLSレポート(TLS-RPT)」で別に評価します。

MTA-STSの仕組み(DNS TXTとポリシーファイル)

2つの構成要素(RFC 8461 §3)

  1. DNS TXTレコード:_mta-sts.<ドメイン> に v=STSv1; id=<識別子> を公開します。id は1〜32文字の英数字で、ポリシーを変更するたびに値を変えて送信側に再取得を促します。区切りの ; の前後には空白を入れてもよく(*WSP ";" *WSP)、CNAMEで別名を指すこともできます。v=STSv1; で始まるレコードが1件でない場合、送信側は「ポリシーなし」とみなさなければなりません。
  2. HTTPSポリシーファイル:https://mta-sts.<ドメイン>/.well-known/mta-sts.txt に置きます。取得は有効な証明書によるHTTPSで行い、HTTP 3xxリダイレクトは追跡してはならず、HTTPキャッシュも使ってはなりません(MUST NOT)。メディアタイプは text/plain であることを送信側は検証すべき(SHOULD)とされ、推奨される最大サイズは64KB、タイムアウトは1分程度です。

ポリシーファイル(mta-sts.txt)の書き方(§3.2)

version: STSv1
mode: enforce
mx: mail.city.example.lg.jp
mx: *.mail.protection.outlook.com
max_age: 604800
項目内容
versionSTSv1 のみ
modeenforce(検証失敗時は配送しない)/testing(失敗をTLS-RPTで報告するが配送は続ける)/none(ポリシー無効化)
mx許可するMXホスト名。完全一致か、左端ラベル全体のワイルドカード(*.example.net)。複数あれば1行ずつ。mode: none 以外では1つ以上必須(*.mail.protection.outlook.com はMicrosoftがExchange Online向けに案内する指定で、他のサービスではMXホスト名を列挙します)
max_age送信側がポリシーをキャッシュする秒数。最大31557600(約1年)

MTA-STSのモード(testing・enforce・none)の意味

モード検証に失敗したとき位置づけ
testingRFCは「いずれの場合もメッセージは検証失敗がなかったかのように配送されうる」としている保護効果はなく、TLS-RPTで問題を把握するための準備段階
enforce配送しないダウングレード攻撃や偽MXへの誘導を防ぐ効果があるのはこのモードだけ
none―既存のポリシーを撤回するときに使う

初回接続の問題(Trust on First Use)

送信側がポリシーを一度も取得していない状態(初回)や、キャッシュ期限切れの状態では保護されません(Trust on First Use)。max_age を長め(1〜2週間以上)にし、送信側にキャッシュさせておくことが重要です。

MTA-STSでよくある誤解

  • 「TXTレコードだけで有効になる」:HTTPSのポリシーファイルが必須です。TXTだけでは送信側は何もしません。
  • 「mta-stsサブドメインからwwwへリダイレクトしてもよい」:3xxは追跡されないため、ポリシー取得に失敗します。
  • 「Webサイトの証明書があればよい」:mta-sts.<ドメイン> に有効な証明書が必要です。さらに enforce では、MXサーバー自身がMX名に一致する有効な証明書でSTARTTLSを提供している必要があります。

送信ドメイン認証(なりすまし対策)は「SPFの一意性・構文・DNS参照数」や「DMARCレコード」の領域で、MTA-STSは「受信するメールの経路の暗号化」を守る別の仕組みです。

MTA-STSの診断基準(セキュリティAIチェッカー)

取得対象

  • 対象ドメイン:最終URLのホスト名から先頭の www. を除いたもの。
  • DNS-over-HTTPS(dns.google)で MX と _mta-sts.<ドメイン> のTXTを照会します(タイムアウト5秒)。
  • MXがあり、TXTが有効な場合に限り、https://mta-sts.<ドメイン>/.well-known/mta-sts.txt をGETで1回取得します。リダイレクトは追跡しません(3xxはポリシー取得失敗として扱う)。証明書検証は有効、タイムアウト7秒、最大64KB。

判定に使う条件

  • TXT有効:v=STSv1 の後に ;(前後の空白可)が続くレコードがちょうど1件あり、id= が1〜32文字の英数字であること。
  • ポリシー有効:HTTP 200で、version: STSv1、mode: が enforce/testing/none のいずれか、max_age: が0〜31557600の整数、mode: none 以外では mx: が1つ以上あること。
  • MX適合:DNSのMXホスト名(末尾のドットを除く)がすべて、ポリシーの mx: のいずれかに完全一致、またはワイルドカード(左端の1ラベルのみ)で一致すること。

判定条件

判定条件得点への影響
対象外(na)有効なMXが無い。根拠欄は「メール受信設定がなく対象外です。」採点から除外
対象外(na)MXレコードのDNS照会に失敗した。根拠欄は「MXレコードのDNS照会に失敗したため判定できません。」(受信設定なしとは区別して表示)採点から除外
△ 要確認(warn)有効な _mta-sts TXTが無い(未導入、または複数・構文誤り)重み2×0.45
× 要改善(fail)TXTは有効だが、ポリシーを取得できない、リダイレクトされる、または内容が無効重み2×0
△ 要確認(warn)ポリシーは有効だが mode が testing/none重み2×0.45
△ 要確認(warn)enforce だがDNSのMXがポリシーの mx: に含まれない、またはContent-Typeが text/plain でない重み2×0.45
○ 問題なし(pass)enforce かつ全MXが適合し、text/plain で配信重み2×1.00
  • TXTがあるのにポリシーが無効な状態は、送信側から見て設定の不整合であり、導入作業が途中で止まっている可能性が高いため不合格とします。
  • MXの不一致を enforce で放置すると、正規のメールが配送拒否されるおそれがあります。
  • 重大度はmedium、重みは2です。

自治体サイトでの判定例

状況判定
MXはあるが _mta-sts が無い(現状の多数派)△ 要確認
_mta-sts はあるが、mta-sts.city.example.lg.jp のDNS名や証明書が無く取得できない× 要改善
mode: testing で運用中△ 要確認(TLS-RPTで問題がないことを確認後に enforce へ)
Microsoft 365を利用し、mx: *.mail.protection.outlook.com、mode: enforce○ 問題なし

判定の限界

MXサーバーが実際にSTARTTLSを提供し、証明書が有効かどうかは接続して確認していません。_mta-sts のTXT照会に失敗した場合は、レコードなしと同じ要確認になります。DANE(TLSA)による保護も評価対象外です。

MTA-STSが無い・不十分だとどんなリスクがあるか

  • メールの盗聴:経路上の攻撃者がSTARTTLSを無効化すると、住民や事業者から自治体に届くメール(申請に関する問い合わせ、添付書類など)が平文で流れます(CWE-319)。
  • メールの横取り:DNS応答の偽装などで偽のMXへ誘導されると、メールが攻撃者のサーバーに届きます。MTA-STSの enforce はMX名と証明書の一致を求めるため、この種の誘導を防げます。
  • 設定不整合による不達:enforce のままMXを変更し、ポリシーの mx: を更新し忘れると、対応送信者からのメールが届かなくなります。導入後の変更管理が重要です。

MTA-STS未導入を直接の原因として公表された自治体の被害事例は確認できていません。

MTA-STSの設定方法(DNS・Apache・nginx・IIS・Next.js)

導入手順

  1. MXサーバーが、MX名に一致する有効な証明書でSTARTTLSを提供していることを確認します(クラウドメールサービスは通常対応済み)。
  2. mta-sts.<ドメイン> のDNSレコードを作り、有効な証明書でHTTPS配信できる場所を用意します。
  3. mode: testing のポリシーを公開し、_mta-sts TXTと _smtp._tls のTLS-RPTレコードを設定します。
  4. 2〜4週間、TLS-RPTのレポートで失敗が無いことを確認します。
  5. mode: enforce に変更し、TXTの id を更新します。max_age を604800(1週間)以上へ段階的に延ばします。

DNS

_mta-sts.city.example.lg.jp. 3600 IN TXT "v=STSv1; id=20261001T0900"
mta-sts.city.example.lg.jp.  3600 IN CNAME policy-host.example.net.
_smtp._tls.city.example.lg.jp. 3600 IN TXT "v=TLSRPTv1; rua=mailto:tlsrpt@city.example.lg.jp"

Apache(mta-sts用バーチャルホスト)

<VirtualHost *:443>
  ServerName mta-sts.city.example.lg.jp
  DocumentRoot /var/www/mta-sts
  SSLEngine on
  # SSLCertificateFile/SSLCertificateKeyFile にmta-sts用の証明書を指定
  <Location "/.well-known/mta-sts.txt">
    ForceType "text/plain; charset=utf-8"
    Header always set Cache-Control "no-store"
  </Location>
  # ここでwww等へのリダイレクトを設定しない
</VirtualHost>

nginx

server {
    listen 443 ssl;
    server_name mta-sts.city.example.lg.jp;
    # ssl_certificate/ssl_certificate_key にmta-sts用の証明書を指定(必須)
    location = /.well-known/mta-sts.txt {
        default_type text/plain;
        root /var/www/mta-sts;
    }
}

IIS

mta-sts 用サイトを作成し、.txt のMIMEタイプが text/plain であること、HTTP→HTTPSのリダイレクト規則がこのパスに適用されてもHTTPS自体はリダイレクトしないことを確認します。

Next.js(Vercel)

mta-sts.<ドメイン> を独立したプロジェクトとして割り当て、public/.well-known/mta-sts.txt を配置します。ドメイン設定で「wwwへリダイレクト」を有効にしないよう注意します。

設定後の確認方法

dig +short TXT _mta-sts.city.example.lg.jp
dig +short MX city.example.lg.jp
# リダイレクトを追わずに取得(3xxなら設定誤り)
curl -s -o - -w '\n%{http_code} %{content_type}\n' https://mta-sts.city.example.lg.jp/.well-known/mta-sts.txt

最後の行で 200 text/plain が返り、DNSのMXがすべてポリシーの mx: に含まれていることを確認してから、セキュリティAIチェッカーで再診断します。

メールを止めないための注意点(ガードレール)

  • MXの追加・変更時は、先にポリシーの mx: を追加して id を更新し、送信側のキャッシュ(max_age)が切り替わる時間を見込んでからMXを変更します。
  • 撤回するときはいきなりTXTを消さず、mode: none のポリシーを公開して id を更新し、max_age が経過してから削除します。
  • mta-sts サブドメインにも証明書の自動更新と期限監視を設定します。証明書切れはポリシー取得失敗に直結します。

よくある質問(FAQ)

MTA-STSはTXTレコードだけで有効になりますか?

なりません。https://mta-sts.<ドメイン>/.well-known/mta-sts.txt のポリシーファイルが必須で、TXTだけでは送信側は何もしません。セキュリティAIチェッカーでは、TXTがあるのにポリシーを取得できない状態を「× 要改善」と判定します。

MTA-STSのtestingとenforceの違いは何ですか?

testingは検証に失敗してもメールを配送し、失敗をTLS-RPTで報告するだけの準備段階で、保護効果はありません。enforceは、TLSが成立しない場合や証明書・MX名がポリシーと一致しない場合に配送を中止します。ダウングレード攻撃を防げるのはenforceだけです。

mta-stsサブドメインをwwwへリダイレクトしてもよいですか?

いけません。RFC 8461は、ポリシー取得でHTTP 3xxリダイレクトを追跡してはならない(MUST NOT)と定めています。リダイレクトするとポリシー取得に失敗します。

MTA-STSのmax_ageはどれくらいにすべきですか?

最大値は31557600秒(約1年)です。初回接続やキャッシュ切れの間は保護されないため、1〜2週間以上の長めの値にして送信側にキャッシュさせることが重要です。導入時は604800(1週間)以上へ段階的に延ばします。

Microsoft 365を使っている場合、mx:には何を書きますか?

DNSのMXレコードに対応するホスト名を書きます。MXがExchange Online(Microsoft 365)を直接指している場合、Microsoftは mx: *.mail.protection.outlook.com というワイルドカード指定を案内しています。ワイルドカードは左端のラベル1つ分にだけ一致します。Microsoftは、この指定はExchange Online固有のもので一般的な指針として使ってはならないとしているため、他のメールサービスや複数事業者を併用する場合は、各事業者のMXホスト名を列挙します。

MXを変更するときに注意することはありますか?

先にポリシーの mx: に新しいMXを追加して TXT の id を更新し、送信側のキャッシュ(max_age)が切り替わる時間を見込んでからMXを変更します。enforceのままポリシー外のMXに切り替えると、対応送信者からのメールが届かなくなります。

MTA-STSをやめたいときはどうすればよいですか?

いきなりTXTを消さず、mode: none のポリシーを公開してTXTのidを更新し、max_ageが経過してから削除します。

セキュリティAIチェッカーを利用する

この項目を含む127項目を、URLを入れるだけで無料診断します。

参考資料