LoginSignup
0
0

PostfixでTLSするのにはまった話

Posted at

はじめに

 sendmailにかわり、SMTPサーバとして利用されているPostfix。今回は、PostfixのTLS化の話しです。
ただし、自分にくるSMTPをTLS化する話はおいておいて、組織内にあるリレーホストがTLSもしくはSMTPSしか受け付けてくれないので、自分のSMTPサーバからリレーホストに対してTLS接続する設定を入れてやる必要がありました。

PostfixでTLSの設定する

 送信時のTLS化のみ設定します。そのため、非常に設定はシンプルで、/etc/postfix/main.cfに次の行を足します。(Rockey Linux9です)

smtp_tls_security_level = may => 相手がTLSに対応してればTLS使う
smtp_tls_loglevel = 1 => ログの取得レベルは1にする

と設定を変更した後に

smtp_server # systemctl restart postfix

でPostfixを再起動し、設定をリロードしています。
ちなみにログの取得レベルは次のようになっています。

Log Level
0 TLSに関するログを取得しない
1 TLSハンドシェイクと証明書を記録する
2 TLSネゴシエーション間のプロセスを記録する
3 TLSネゴシエーションプロセスのHEX/ASCIIを記録します
4 STARTTLS以降の動作をすべて記録する

テストメールを送信する

さて、ここで送信テストです。
ひとまずmailxコマンドで・・・と思ったらNot Found...。
dnf searchしてもmailxコマンドはありませんでした。
そこで代わり(後継)をするのがs-nail!
早速インストールです。

smtp-server $ sudo dnf install s-nail

はい、これでmailx使えるようになりました。
そこで、早速テストメール送ってみます。

smtp-server $ echo 'TEST Mail'|mailx -s '<Subjext>' <送信先アドレス>

メールボックスを確認して、届いているか見てみましょう。
同時にログでちゃんとTLS暗号化されているか見てみましょう。

ログで確認

ログを見てみましょう

Apr 16 **:59:00 mail postfix/pickup[85888]: 4199E41D3F: uid=1003 from=<user01>
Apr 16 **:59:00 mail postfix/cleanup[86122]: 4199E41D3F: message-id=<20240416**5900.4199E41D3F@mail.domain.local.jp>
Apr 16 **:59:00 mail postfix/qmgr[85889]: 4199E41D3F: from=<user01@mail.domain.local.jp>, size=327, nrcpt=1 (queue active)
Apr 16 **:59:00 mail postfix/smtp[86129]: Untrusted TLS connection established to smtp.domain.local.jp[172.16.0.151]:25: TLSv1.
2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)
Apr 16 **:59:00 mail postfix/smtp[86129]: 4199E41D3F: to=<test@local.jp>, relay=smtp.domain.local.jp[172.16.0.151]:25, dela
y=0.58, delays=0/0.02/0.36/0.2, dsn=2.0.0, status=sent (250 Message queued for delivery as ca23452e64)
Apr 16 **:59:00 mail postfix/qmgr[85889]: 4199E41D3F: removed

よしよし、送れてる。って、”Untrusted TLS”と記録されてる。
ネットで探すと、
・証明書の検証ができていない/失敗している
・証明書のホスト名と接続先のホスト名が違う
場合にUntrustedとなるようだ。
リレーホストに入れている証明書は中間証明書がいるもののroot証明局の署名が入った正しいもの。接続先のホスト名もログに記録されているものと一致している。
ということは検証ができていないことが原因っぽい

そこでログレベルを3にして再度テストしたところ、相手から証明書も正しく取得しているし、検証に必要な証明書Chainも一緒に貰っているようだ。
さらに調べたところ、smtp_tls_CAfileにCA認証局の証明書を指定すると検証ができるという情報が。
しかし、ここで中間証明書を指定してもダメ、自分のサーバの証明書を指定してもダメ、どうするか・・・。

OSにバンドルされているCA証明書があるので、それを指定するといいという情報を得たので

smtp_server $ sudo dnf install ca-certificates

とすると/etc/pki/tls/certsにCA認証局の証明書がインストールされる。
そこで、/etc/postfix/main.cfに

smtp_tls_CAfile = /etc/pki/tls/certs/ca-bundle.crt

と設定後、Postfixを再起動して、テストメールを送信すると

Apr 18 **:52:21 mail postfix/pickup[88757]: 7CBEF41D3F: uid=1003 from=<user01>
Apr 18 **:52:21 mail postfix/cleanup[88763]: 7CBEF41D3F: message-id=<20240418**5221.7CBEF41D3F@mail.domain.local.jp>
Apr 18 **:52:21 mail postfix/qmgr[88758]: 7CBEF41D3F: from=<user01@mail.domain.local.jp>, size=328, nrcpt=1 (queue active)
Apr 18 **:52:21 mail postfix/smtp[88765]: Trusted TLS connection established to smtpmail.domain.local.jp[172.16.0.151]:25: TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)
Apr 18 **:52:22 mail postfix/smtp[88765]: 7CBEF41D3F: to=<test@local.jp>, relay=smtpmail.domain.local.jp[172.16.0.151]:25, delay=0.54, delays=0.01/0.05/0.32/0.16, dsn=2.0.0, status=sent (250 Message queued for delivery as aa8bdaa078)
Apr 18 **:52:22 mail postfix/qmgr[88758]: 7CBEF41D3F: removed

無事にTrustedなTLSで接続ができました。

まとめ

結局のところ、
・mailxはs-nailが後継
・PostfixのリレーホストにTLSで接続するには、smtp_tls_CAfileでルート証明書の場所を指定する
という感じでした。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0