4.Postfixを使ってSMTPサーバの暗号化する(サーバとして※) (smtp-submission 587番ポート)対応
次にSTMPサーバの暗号化です。
ここで知っておいてほしいのは、概要ページにも記載してますが、SMTPサービスとして2種類の暗号設定をしないといけません。
1. SMTPサービスのサーバとして、メールを受信する際の暗号化設定。
(main.cfファイルの「smtpd_xxxx」のパラメータ)
2. SMTPサービスのクライアントとして、メールを送信する際の暗号化設定。
(main.cfファイルの「smtp_xxxx」のパラメータ)
「サーバとして」と「クライアントとして」の2つの設定を両方とも行って初めてSMTPサービス全体を暗号化したことになります。
(細かい事を言うとSTARTTLSでの提供なのでメールのやり取りをする相手がSTARTTLSに対応していないと平文で送受信する事になるのですが・・・)
このページでは「サーバとして」の暗号化設定を行います。
「サーバとして」の設定をすることで、上記画像のピンクにした部分の暗号化をすることができます。 「クライアントとして」の設定は別ページで記載します。(後日公開予定)
そして上記の図で表した通り、グローバルセグメント側のポートは25番ポートだけにしました。
前提条件として、世界のメールサーバ全てが暗号化に対応していない。という事があります。という事は25番ポートを開放していないと、自ドメイン宛に送ってくる他ドメインのメールサーバが暗号化に対応していない場合、465や587番ポートだけ開放したSMTPサーバだとメールが受信できなくなってしまいます。(特に日本はTLS対応が遅れているっぽい・・・)
という事は・・・
グローバル側に関していえばcaramelsauce.info宛のメールを受信する為に一番セキュリティー的に弱い25番ポートを開放してしまっているので、更にSTARTTLSの587番やSMTPSの465ポートを開放する必要はないと考えます。
よってグローバルセグメント側は25番ポートだけ開放。
今後自分が外からメール送信する場合は25番ポートを使ってSTARTTLSを使えるようにすればいいので無駄なポートは開けません。
ローカルセグメント側は一応STARTTLSに対応している587番ポートだけ開放する事にしました。
更に今回設定するSMTPサーバ要件は、
・外部からのcaramelsauce.info宛のメールを受信する為のSMTPサーバ。
・管理者専用の他ドメインへのメール送信を行うSMTPサーバ。
この2つの役割を同一サーバで行う前提です。
このページで設定しているパラメータは暗号化に関するパラメータのみです。
SMTPサーバとしての設定(smtpd_xxxx)は1.Postfixを使ってSMTPサーバの構築ページ内にも一部存在しているのでご確認ください。
目次
main.cfの修正
smtpd_tls_security_level
smtpd_tls_cert_file
smtpd_tls_key_file
smtpd_tls_ciphers
smtpd_tls_protocols
smtpd_tls_loglevel
設定ファイルmain.cfの修正
smtpd_tls_security_level 720行目
デフォルトのままで修正なしだけど説明の為記載
SMTPサービスのサーバとして受信する際のメールを暗号化するかどうか
下の表にも記載しましたが、外部のSMTPサーバから自ドメイン宛のメールの受信サーバとしても使う為、暗号化の強制はせず「may」を設定します。
smtpd_tls_security_level = may
オプション | 説明 |
---|---|
may | TLSを有効化(適用は任意(クライアントに依存)) 日和見TLS → STARTTLSサポートをクライアントに通知するが、強制ではない。 |
encrypt | TLSを強制化(適用は強制(クライアントに強制)) しかし他ドメインから受信するSMTPサーバである場合はencryptにしてはいけないらしい。 |
smtpd_tls_cert_file 709行目
RSA証明書を含むファイルのフルパス
デフォルトのpostfixの証明書でも暗号化はできるかもしれません。
が、せっかくLet's Encryptを使って自ドメインの証明書を作成しているので設定を変更しましょう。
smtpd_tls_cert_fileは中間証明書も含める必要があるので「fullchain.pem」を設定します。
smtpd_tls_cert_file = /etc/pki/tls/certs/postfix.pem
↓ ↓ ↓ ↓
smtpd_tls_cert_file = /etc/letsencrypt/live/caramelsauce.info/fullchain.pem
smtpd_tls_key_file 715行目
RSAプライベートキーを含むファイルのフルパス
上記のsmtpd_tls_cert_file同様、Let's Encryptの証明書を設定しましょう。
smtpd_tls_key_fileは秘密鍵を指定する必要があるので「privkey.pem」を設定します。
smtpd_tls_key_file = /etc/pki/tls/private/postfix.key
↓ ↓ ↓ ↓
smtpd_tls_key_file = /etc/letsencrypt/live/caramelsauce.info/privkey.pem
smtpd_tls_ciphers 新規追加(どこに追加してもOK)
暗号化アルゴリズムのグレード設定
正直、このパラメータの詳細は分かってないです。デフォルトの設定は「medium」です。
そして設定できる値は、「high」「medium」「low」「export」「null」の5つなので一番上位の「high」を設定しましょう。
smtpd_tls_ciphers = high
「high」を設定した際の定義は、変更しない事を前提にしているようですが「tls_high_cipherlist」を使って変更できるようです。(アタイの理解を超えているので絶対いじらないですが・・・)
逆に使いたくないアルゴリズムがある場合は「smtpd_tls_exclude_ciphers」で設定できるようです。(これまたアタイは修正しないですが・・・)
smtpd_tls_protocols 新規追加(どこに追加してもOK)
SMTPサーバが受け入れるTLSプロトコル
ここでは安全な暗号化プロトコルの設定を入れます。
2022年5月現在TLSv1.2以上のプロトコルを使う様に設定します。
smtpd_tls_protocols = >=TLSv1.2
マニュアルにはPostfixのバージョンが3.6以降の場合は、「>=」の様な記号を使った記載を推奨しています。
レガシースタイル(Postfix version < 3.6 )の場合は下記の様な記載で危険なプロトコルを使わないようにする記載をします。
smtpd_tls_protocols =
!SSLv2
!SSLv3
!TLSv1
!TLSv1.1
smtpd_tls_loglevel 新規追加(どこに追加してもOK)
TLSに関連するログレベルの設定
TLSに関わるPostfix SMTPサーバのログレベルの設定をします。デフォルト(未記載状態)では「0」に設定されています。
設定値に関しては下記の表に記載しておきます。
さすがに16進数のASCII内容を出力されてもさすがにわけがわからなくなると思うので、ここではどのバージョンのTLSプロトコルを使っているのかが分かるようになるように「2」を設定します。
ついでに言うと、2に設定する事でメールを送受信する際にサーバとクライアントがどんなコマンドでやり取りしているのかが分かるようになります。
設定値 | 説明 |
---|---|
0 | TLS動作に関するログ記録を無効にします(デフォルト値) |
1 | TLSハンドシェイクと証明書の情報をログに記録します。 |
2 | TLSネゴシエーションの間のレベルをログに記録します。 |
3 | TLSネゴシエーションプロセスの16進数およびASCIIダンプをログに記録します。 |
4 | STARTTLS以降の通信の16進数およびASCIIダンプを完全にログに記録します。 |
設定が終わったらpostfixをリロードしましょう。
systemctl reload postfix