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

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 Mail

TLSを利用することでこれらの情報を暗号化できます。

SMTPで利用される暗号化方式

Postfixでは主に2種類の暗号化方式が利用されます。

方式ポート特徴
SMTP over SSL465接続直後から暗号化
STARTTLS587SMTP通信途中で暗号化

現在は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 = yes

SMTP接続時に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-STARTTLS

TLS機能が有効になっています。

opensslで接続確認する

587番ポート確認例です。

# openssl s_client -starttls smtp -connect localhost:587
証明書情報が表示されれば成功です。

465番ポートの場合です。
# openssl s_client -connect localhost:465

TLS動作確認のポイント

確認時は以下をチェックします。

  • 証明書読み込み成功
  • 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を組み合わせることで、現在のメールサーバに求められるセキュリティ要件を満たすことができます。