PostfixへのSSL証明書の設定
カテゴリ:SSL証明書
PostfixでのSMTP通信を暗号化するためにはTLS(Transport Layer Security)を有効にします。
TLSを有効にするためには、SSL証明書と秘密鍵が必要になります。
※SSL証明書の作成についてはSSL証明書の作成方法を参照してください。
SSL/TLSによる暗号化通信の2つの方法
SMTP通信を暗号化するための方法には、2つの方法があります。
STARTTLS
ひとつは拡張SMTP(ESMTP)の「STARTTLS」コマンドを使用する方法です。
こちらは、EHLOコマンドに対して、「250-STARTTLS」を返したサーバに対して TLS での通信を開始する方法です。
※「STARTTLS」をサポートしていないサーバに対しては TLS は使用できません。
SMTPS(SMTP over SSL/TLS)
もうひとつは SMTPS(SMTP over SSL/TLS)と呼ばれる、SSL 専用の SMTP の待ち受けポート(一般的には465番ポート)を使用する方法です。
もし465番ポートに接続要求があった場合、接続直後から SSL での暗号化が行われ、HELOやEHLOコマンドのやり取りも含めてすべての通信が暗号化されます。
※但し、SSL の専用ポートであるため、SSL/TLS に対応していないクライアントからの接続は確立できません。
PostfixのTLSの設定
SSL証明書と秘密鍵の設定
vi で main.cf ファイルを開きます。
# vi /etc/postfix/main.cf
以下のように「smtpd_tls_cert_file」パラメータにSSL証明書(CRTファイル)、「smtpd_tls_key_file」パラメータに秘密鍵(KEYファイル)を指定します。
smtpd_tls_cert_file = /etc/postfix/server.crt smtpd_tls_key_file = /etc/postfix/server.key
もし中間CA証明書もある場合は、「smtpd_tls_CAfile」パラメータに指定します。
smtpd_tls_CAfile = /etc/postfix/intermediate.crt
TLSレベルの設定(Postfix 2.3以降)
更に「smtpd_tls_security_level」パラメータ(Postfix 2.3以降)でTLSのセキュリティレベルを設定します。
smtpd_tls_security_level = may
smtp_tls_security_level は初期設定は空であり、TLSは無効です。
設定できる値と意味は以下となります。
値 | 意味 |
---|---|
may | may を指定した場合は TLS は必須ではなく、TLS を使用するかどうかはクライアント側で決められます。 そのため TLS に対応していないクライアントからの非暗号化の SMTP 通信も許可されます。 こちらが一般的な設定になります。 |
encrypt | encrypt は TLS が必須となり、TLS に対応していないクライアントからのメッセージは受け取りません。 そのため機密情報などをやり取りするような、高いセキュリティレベルが求められる特別な MTA にのみ設定します。 |
Postfix 2.3 より前のバージョン
Postfix 2.3 より前のバージョンでは、smtpd_use_tls を yes に設定します。
smtpd_use_tls = yes
※但し「smtpd_use_tls = yes」はクライアントに TLS を強制するものではありません。
TLS を強制する場合は、「smtpd_enforce_tls = yes」も指定します。
つまり以下を指定すれば、「smtpd_tls_security_level = encrypt」を指定するのと同じ意味になります。
smtpd_use_tls = yes smtpd_enforce_tls = yes
TLSのログレベルの設定
「smtp_tls_loglevel」パラメータでTLS関連のログの出力レベルを指定します。
smtp_tls_loglevel = 1
smtp_tls_loglevel は TLS でのやり取りのログ出力レベルを指定するパラメータとなり、指定できるレベルと出力される内容は以下になります。
値 | 意味 |
---|---|
0 | TLSのログを無効 |
1 | TLSハンドシェイクと証明書のログを記録 |
2 | TLSネゴシエーションの間のレベルをログに記録 |
3 | TLSネゴシエーションプロセスの16進数およびASCIIダンプをログに記録 |
4 | STARTTLS以降の通信の16進数およびASCIIダンプを完全にログに記録 |
Postfix を reload します。
# postfix reload
TLS専用ポート(SMTPS)を使用する場合
vi で master.cf ファイルを開きます。
# vi /etc/postfix/master.cf
以下の行のコメント(#)を外します。
※必要に応じて他のオプションのコメントも外してください。
#smtps inet n - n - - smtpd # -o smtpd_tls_wrappermode=yes
変更後:
smtps inet n - n - - smtpd -o smtpd_tls_wrappermode=yes
Postfix を reload します。
# postfix reload
動作確認
telnet コマンドで Postfix に接続して、EHLOコマンドを送信すれば、「250-STARTTLS」が返され、STARTTLSをサポートしている事が分かります。
# telnet localhost 587
Trying ::1...
Connected to localhost.
Escape character is '^]'.
220 example.com ESMTP Postfix
EHLO FQDN
250-example.com
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS
250-AUTH PLAIN LOGIN
250-AUTH=PLAIN LOGIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
STARTTLSを使用した通信のやり取り
以下のパケットキャプチャの結果のように、STARTTLSコマンド以降の通信が暗号化されています。
220 example.com ESMTP Postfix EHLO win7vmimac 250-example.com 250-PIPELINING 250-SIZE 10240000 250-VRFY 250-ETRN 250-STARTTLS 250-AUTH PLAIN LOGIN 250-AUTH=PLAIN LOGIN 250-ENHANCEDSTATUSCODES 250-8BITMIME 250 DSN STARTTLS 220 2.0.0 Ready to start TLS ....z...v..T.p.{..'..:..].SM,.]..J...;...9. .....@p...-r$...a%.....W.....MwJ.../.5... ....... .2.8.............. ..................Q...M..T.P...~./..`%P...=.l1h.....0... W ...
SMTPSポート(465番ポート)を使用した通信のやり取り
接続直後から通信が暗号化されています。
...........T.w6r..=w....eGO.x$..RR.+.0..l....*.<./.=.5... .'.....+.#.,.$... .@.2.j.8.......U..............secure.shared.live.com.......... .........................................U...Q..T.w6.tO5...f.....*0....].......; c...EHEc.P./:.[<<@.$4].A.........5................y...u..r..10..-0................Ej,N.S^.0..*.H.......0F1.0...U. ..Cybertrust Inc1+0)..U..."Cybertrust Public SureServer SV CA0..140416105423Z.150416105423Z0..1.0...U....US1.0...U... Washington1.0...U....Redmond1.0...U. ..Microsoft Corporation1.0...U....Windows Live1.0...U....secure.shared.live.com0.."0..*.H..
公開日時:2014年09月14日 02:09:48
最終更新日時:2022年03月12日 03:04:09