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 でのやり取りのログ出力レベルを指定するパラメータとなり、指定できるレベルと出力される内容は以下になります。

意味
0TLSのログを無効
1TLSハンドシェイクと証明書のログを記録
2TLSネゴシエーションの間のレベルをログに記録
3TLSネゴシエーションプロセスの16進数およびASCIIダンプをログに記録
4STARTTLS以降の通信の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

SSL証明書に戻る

このページのトップに戻る