前回の記事の続きです。前回までの内容でクライアントからサーバまでの通信は SSL による暗号化が成されるようになりましたが、自サーバから相手サーバまでの通信経路はまだ平文のままです。
Postfix の設定を少し変えるだけで、サーバ間の通信を TLS に対応させることができます。Debian 9 Stretch 環境での設定例を示します。
/etc/postfix/main.cf
... smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt smtp_tls_security_level = may smtp_tls_loglevel = 1 ...
"smtp_tls_CAfile" には接続先を検証するためのルート証明書を指定します。サーバ証明書は関係ないので間違えないように。
"smtp_tls_security_level" は "may" に設定すると可能な場合は TLS を、それ以外なら通常の SMTP で送信します。"encrypt" とすると TLS を強制できますが、対応してないサーバがあると中断されます。
ルート証明書の更新
念のためルート証明書の更新も行っておきます。
# update-ca-certificates Updating certificates in /etc/ssl/certs... 0 added, 0 removed; done. Running hooks in /etc/ca-certificates/update.d... done. done.
検証とログの確認
検証は Gmail 宛にメールを送ると簡単です。Gmail で受信したメールには送信者が TLS を使用したかが簡単にわかるようにアイコンが表示されます。以下は iOS の Gmail アプリの例です。
サーバ側のログも確認します。ルート証明書が正しく指定されていないと、次のように "Untrusted TLS connection established" のログが残ります。通信自体は暗号化されていますが、接続先の証明書が検証できなかったことを示しています。
/var/log/mail.log
... Sep 18 10:43:52 150-95-153-XXX postfix/smtp[25050]: Untrusted TLS connection established to gmail-smtp-in.l.google.com[108.177.97.26]:25: TLSv1.2 with cipher ECDHE-RSA-CHACHA20-POLY1305 (256/256 bits) ...
正しいルート証明書による接続先の検証が成功した場合は、次のように "Trusted TLS connection established" が残ります。
... Sep 18 10:53:36 150-95-153-XXX postfix/smtp[25506]: Trusted TLS connection established to gmail-smtp-in.l.google.com[64.233.189.27]:25: TLSv1.2 with cipher ECDHE-RSA-CHACHA20-POLY1305 (256/256 bits) ...