PostfixでTLS暗号化を設定する方法

目次
PostfixでTLS暗号化を設定する方法を解説
メールはインターネットを経由して送受信されるため、暗号化されていない状態では通信内容が盗聴される危険があります。
特にSMTP認証を利用している場合、ユーザー名やパスワードが第三者に漏洩するリスクがあるため、TLS暗号化は必須の設定となっています。
現在のメールシステムでは、SMTP-AUTHとTLSを組み合わせて利用することが一般的です。
GmailやMicrosoft 365などの主要なメールサービスもTLSによる暗号化通信を前提として動作しています。
本記事ではPostfixでTLS暗号化を設定する方法と確認手順について解説します。
TLSとは
TLS(Transport Layer Security)は通信内容を暗号化するためのプロトコルです。
HTTPSで利用されているSSL/TLSと同じ技術がSMTPでも利用されています。
TLSを利用することで以下の情報を保護できます。
- メール本文
- 送信者アドレス
- 宛先アドレス
- SMTP認証情報
- 添付ファイル
現在ではメールサーバ構築時の必須設定と考えてよいでしょう。
SMTPにおけるTLSの役割
SMTP通信は元々平文通信として設計されました。
そのためTLSを利用しない場合、通信内容をネットワーク上で確認できてしまいます。
例えば以下のような情報が見えてしまいます。
MAIL FROM:
RCPT TO:
Subject: Test MailTLSを利用することでこれらの情報を暗号化できます。
SMTPで利用される暗号化方式
Postfixでは主に2種類の暗号化方式が利用されます。
| 方式 | ポート | 特徴 |
|---|---|---|
| SMTP over SSL | 465 | 接続直後から暗号化 |
| STARTTLS | 587 | SMTP通信途中で暗号化 |
現在は587番ポートのSTARTTLSが広く利用されています。
証明書を準備する
TLSを利用するためにはサーバ証明書と秘密鍵が必要です。
検証環境では自己署名証明書を利用できます。
秘密鍵を作成します。
# openssl genrsa -out /etc/pki/tls/private/server.key 2048
CSRを作成します。
# openssl req -new -key /etc/pki/tls/private/server.key -out server.csr
自己署名証明書を作成します。
# openssl x509 -req -days 365 -in server.csr -signkey /etc/pki/tls/private/server.key -out /etc/pki/tls/certs/server.crt本番環境では正式な証明書を利用することを推奨します。
証明書の配置場所
一般的には以下の場所へ保存します。
| ファイル | 保存先 |
|---|---|
| 証明書 | /etc/pki/tls/certs/ |
| 秘密鍵 | /etc/pki/tls/private/ |
Linux標準構成でもこの配置がよく利用されます。
Postfixで証明書を設定する
main.cfを編集します。
# vi /etc/postfix/main.cf
まず証明書を指定します。
smtpd_tls_cert_file = /etc/pki/tls/certs/server.crt
続いて秘密鍵を指定します。
smtpd_tls_key_file = /etc/pki/tls/private/server.keyこれでPostfixが証明書を利用できるようになります。
TLSを有効にする
SMTPサーバ側でTLSを有効にします。
smtpd_use_tls = yesSMTP接続時にTLSが利用可能になります。
ログレベルを設定する
TLS関連のログを出力する場合です。
smtpd_tls_loglevel = 1トラブルシューティング時に役立ちます。
認証とTLSを組み合わせる
SMTP-AUTHを利用する場合は以下も設定します。
smtpd_tls_auth_only = yes暗号化されていない接続での認証を禁止します。
セキュリティ向上のため推奨される設定です。
STARTTLSを有効にする
587番ポートでSTARTTLSを利用する場合はmaster.cfを編集します。
# vi /etc/postfix/master.cf
submissionサービスを有効化します。
submission inet n - n - - smtpd
その下へ以下を追加します。
-o smtpd_tls_security_level=encrypt
-o smtpd_sasl_auth_enable=yesこれにより587番ポートでTLS通信が利用できます。
465番ポートを有効にする
SMTP over SSLを利用する場合です。
master.cfへ以下を追加します。
smtps inet n - n - - smtpd
さらにTLS設定を追加します。
-o smtpd_tls_wrappermode=yes
-o smtpd_sasl_auth_enable=yesこれで465番ポートが利用可能になります。
Postfixを再起動する
設定変更後はPostfixを再起動します。
# systemctl restart postfix
正常起動を確認します。
# systemctl status postfix待受ポートを確認する
SMTPサービスが起動していることを確認します。
# ss -tlnp | grep master
例です。
*:25
*:465
*:587必要なポートが表示されれば成功です。
STARTTLSを確認する
telnetで確認します。
# telnet localhost 25
EHLOを実行します。
EHLO localhost
以下が表示されればSTARTTLS対応です。
250-STARTTLSTLS機能が有効になっています。
opensslで接続確認する
587番ポート確認例です。
# openssl s_client -starttls smtp -connect localhost:587
証明書情報が表示されれば成功です。
465番ポートの場合です。
# openssl s_client -connect localhost:465TLS動作確認のポイント
確認時は以下をチェックします。
- 証明書読み込み成功
- STARTTLS表示
- 証明書有効期限
- ホスト名一致
- TLS接続成功
本番環境では定期的な確認が重要です。
よくあるエラー
cannot load certificate
cannot load certificate証明書ファイルのパスを確認します。
cannot load private key
cannot load private key秘密鍵ファイルや権限を確認します。
warning: TLS library problem
warning: TLS library problem
証明書形式やOpenSSL設定を確認します。
本番環境で推奨される設定
現在の運用では以下が一般的です。
- SMTP-AUTH有効
- STARTTLS有効
- 587番ポート利用
- 正式証明書利用
- TLS1.2以上利用
セキュリティ強化のためにも推奨される構成です。
実務での利用例
TLS設定は以下の環境で利用されています。
- 社内メールサーバ
- レンタルサーバ
- クラウドメール
- 業務システム通知
- 監視通知システム
現在のメールシステムではTLSは事実上必須となっています。
まとめ
PostfixではTLSを利用することでSMTP通信を暗号化できます。
証明書と秘密鍵を準備し、main.cfでsmtpd_tls_cert_fileやsmtpd_use_tlsを設定します。
また、587番ポートのSTARTTLSや465番ポートのSMTP over SSLを利用することで安全なメール送信が可能になります。
SMTP-AUTHとTLSを組み合わせることで、現在のメールサーバに求められるセキュリティ要件を満たすことができます。






