前回まで ConoHa の VPS に RHEL9 をインストールし、そこにメールサーバーを構築しました。
今回はその環境に MTA-STS ポリシーを設定していこうと思います。
MTA-STS(Mail Transfer Agent-Strict Transport Security)は STARTTLS をより堅牢にする仕組みです。
DNS で MTA-STS を使用するように宣言したうえで、Web サイト上にポリシーファイルを設置することで設定できます。
ディレクトリの準備
ポリシーファイルを配置する場所は https://mta-sts.ドメイン名/.well-known/mta-sts.txt と定められています。
メールのドメインが増えたとしても、参照するファイル(指定する MX のドメイン)は同じなので、mta-sts というディレクトリを作成して、ドメインが増えてもそこを共通で参照するようにします。
1 2 | # mkdir -p /var/www/mta-sts/.well-known # chown nobody. -R /var/www/mta-sts |
ドメインごとにルールを変える場合は、サブディレクトリで管理するのも良いでしょう。
OpenLiteSpeed の設定
OLS の管理画面にログインし、バーチャルホストを作成します。
- バーチャルホスト名:mta-sts
- Virtual Host Root:/var/www/mta-sts/
- 設定ファイル:$SERVER_ROOT/conf/vhosts/$VH_NAME/vhconf.conf
- シンボリックリンクを許可する:いいえ
- スクリプト/外部アプリを有効にする:いいえ
- 抑制された:はい
続いて作成したバーチャルホストの一般のタブからメールサーバーのドメインを指定します。
ドメイン名には頭に mta-sts のサブドメインを付けて指定します。
- Document Root:$VH_ROOT
- ドメイン名:mta-sts.example.com
- ドメインエイリアス:(複数のメールドメインがあれば記載)
MTA-STS ポリシーファイルの配置
続いて mta-sts.txt ファイルを作成します。
1 2 3 4 | version: STSv1 mode: enforce max_age: 31557600 mx: mail.example.com |
- version:STSv1(固定値)
- mode:STARTTLS に失敗したときの送信サーバーの挙動
- enforce:メールを送信しない
- testing:メールは通常通り送信し、レポートを送信
- none:MTA-STS を利用しない
- max_age:86400(1 日)〜 31557600(約 1 年)
- mx:許可するメール受信サーバーのホスト名
DNS の設定
ConoHa の管理画面から DNS を開き、対象のドメインに下記を設定していきます。
MTA-STS の設定
DNS のテキストレコードに _mta-sts を設定することで、MTA-STS が有効化されます。
- タイプ:TXT
- 名称:_mta-sts
- 値:v=STSv1; id=任意の英数字;
id は 1 ~ 32 文字の英数字で、外部サーバーは前回と id が変わっていればポリシーをチェックします。値に古い新しいの順序はありませんが、更新日を絡めたものにしておくのが一般的なようです。
TLS レポートの設定
ポリシーで指定した mode が testing の場合に、レポートを送信する宛先を設定します。
- タイプ:TXT
- 名称:_smtp._tls
- 値:v=TLSRPTv1; rua=mailto:レポート送信先のメールアドレス
レポートを複数のメールアドレスで受信するには、各アドレスをカンマで区切って指定します。メールではなく、HTTPS レポート配信オプションもあるようです。
逆引き DNS の設定
ConoHa 管理画面のサーバーから VPS 設定を開き、IPv4 の PTR レコードを mail.example.com に変更しておきましょう。
逆引きホスト名を修正して、保存します。
すぐには反映されないので、暫く経ってから確認を行っておきましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | # dig -x サーバーの IP アドレス ; <<>> DiG 9.16.23-RH <<>> -x xxx.xxx.xxx.xxx ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 41647 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;xxx.xxx.xxx.xxx.in-addr.arpa. IN PTR ;; ANSWER SECTION: xxx.xxx.xxx.xxx.in-addr.arpa. 3600 IN PTR mail.example.com. ;; Query time: 5 msec ;; SERVER: ooo.ooo.ooo.ooo#53(ooo.ooo.ooo.ooo) ;; WHEN: Thu Jan 25 13:09:57 JST 2024 ;; MSG SIZE rcvd: 81 |
確認
More Options を開いて「Check MTA-STS」にチェックを入れ、Run Test を行います。
MTASTS の項目が OK になっていれば、正しく設定されています。
MTA-STS を解除する場合
- MTA-TLS を解除する場合は、ポリシーで mode を none に指定し、mx の指定を削除します。また、max-age は最も短い 86400 に設定します。
1 2 3 | version: STSv1 mode: none max_age: 86400 |
- DNS のテキストレコードで、_mta-sts のバージョンを更新します。
- ポリシーの以前のバージョンがキャッシュに保存されている可能性があるので、以前に指定していた max_age の期間を空けてからテキストレコードを削除します。
コメント