AlmaLinx9にインストールされているPostfixで、SSL/TLSを使用して通信の暗号化を有効化する方法です。
今回は下記の手順でインストールされたPostfixに追加で通信の暗号化設定を行っています。
【AlmaLinux9】Postfix + SMTP-AUTH + Dovecotでメールサーバを構築する方法
Dovecotの通信暗号化の方法はこちらで解説しています。
【AlmaLinux9】DovecotをSSL/TLSで通信暗号化する方法
SSL/TLS証明書の取得
今回の手順ではLet's Encryptで取得したSSL/TLS証明書を使用しています。
証明書の取得方法はこちらページで解説しています。
【AlmaLinux9】Let’s EncryptでSSL/TLS証明書を取得する方法(Nginx + certbot)
証明書を取得済みの場合は、この作業は必要ありません。
Postfix設定
SSL/TLS証明書を使ってPostfixとメールクライアント間の通信を暗号化するための設定を行っていきます。
/etc/postfix/main.cf設定
PostfixでSSL/TLSでの暗号化を有効化する設定を追加します。
$ su - # cd /etc/postfix # cp -p main.cf main.cf_$(date +%Y%m%d-%H%M%S) # vi main.cf
設定内容
初期で設定されてるSSL/TLS証明書と秘密鍵を指定する項目の行頭に「#」をつけて無効化します。
ここで証明書と秘密鍵の指定を行っても良いのですが、通信暗号化に関する設定を最後にまとめて記述したいので無効化しています。
- smtpd_tls_cert_file (SSL/TLS証明書)
- smtpd_tls_key_file (秘密鍵)
#smtpd_tls_cert_file = /etc/pki/tls/certs/postfix.pem #smtpd_tls_key_file = /etc/pki/tls/private/postfix.key
下記の通信暗号化に関する設定をmain.cfの最後に追加します。
smtpd_tls_cert_fileとsmtpd_tls_key_fileで設定しているドメイン名は、証明書を取得したドメイン名になりますので環境にあわせて読み替えてください。
smtpd_use_tls = yes smtpd_tls_auth_only = yes smtpd_tls_loglevel = 1 smtpd_tls_cert_file = /etc/letsencrypt/live/ドメイン名/fullchain.pem smtpd_tls_key_file = /etc/letsencrypt/live/ドメイン名/privkey.pem smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
/etc/postfix/master.cf設定
submission(587)ポートでも通信を暗号化できるように設定を行います。
# cp -p master.cf master.cf_$(date +%Y%m%d-%H%M%S) # vi master.cf
設定内容
メールクライアントとPostfixのSubmission(587)ポートの通信は、SSL/TLSによる暗号化を必須とする設定とします。
submissionに関する部分の「# -o smtpd_tls_security_level=encrypt」行頭にある「#」を削除して設定を有効化させてください。
submission inet n - n - - smtpd # -o syslog_name=postfix/submission -o smtpd_tls_security_level=encrypt -o smtpd_sasl_auth_enable=yes # -o smtpd_tls_auth_only=yes # -o smtpd_reject_unlisted_recipient=no # -o smtpd_client_restrictions=$mua_client_restrictions # -o smtpd_helo_restrictions=$mua_helo_restrictions # -o smtpd_sender_restrictions=$mua_sender_restrictions # -o smtpd_recipient_restrictions= -o smtpd_relay_restrictions=permit_sasl_authenticated,reject # -o milter_macro_daemon_name=ORIGINATING
設定反映
postfix checkで設定ファイルのチェックを行って、問題がなければPostfixを再起動して設定を反映させます。
# postfix check # systemctl restart postfix
動作テスト
メールクライアントからメールを送信して以下の動作確認を行ってください。
- 暗号化無しの状態でメール送信できないこと
- 暗号化有りの状態でメールが送信できること
メールクライアント(Thunderbird)の設定方法
ThunderbirdでSMTPサーバ(Postfix)と暗号化通信を行うための設定方法です。
「編集」-「アカウント設定」と選択し、設定を行うアカウントを選択します。
アカウント設定画面が表示されるので、画面の下部にある「SMTPサーバを編集」ボタンをクリックします。
送信(SMTP)サーバの設定画面が表示されるので、「セキュリティと認証部分」の「接続の保護」を「STARTTLS」に設定し「OK」ボタンをクリックします。(暗号化通信を行わない場合は「なし」を選択)
最後にThunderbirdを一度終了して、再度起動してください。
証明書更新時の処理
SSL/TLS証明書が更新された場合にPostfixを再起動して、新しい証明書を読み込ませる設定を行います。
Let's EcryptでSSL/TLS証明書を取得した場合、「/etc/letsencrypt/renewal-hooks/post」にスクリプトを格納しておくことで証明書更新時にスクリプトを実行してくれるという機能があります。
この機能を利用してPostfixを再起動させて、新しい証明書を読み込むようにします。
まずは、Postfixを再起動させるスクリプトを作成します。
# cd /etc/letsencrypt/renewal-hooks/post/ # vi postfix_restart.sh
スクリプトの中身はsystemctlでpostfixを再起動させるだけです。
#!/bin/bash systemctl restart postfix.service
パーミッションを変更して、スクリプトに実行権限を与えます。
# chmod 755 restart_postfix.sh
作成したスクリプトを実行して、postfixが問題なく再起動するか確認します。
# ./restart_postfix.sh
Postfixが再起動しているかは、/var/log/maillogで確認することができます。
Dec 7 17:21:31 mail postfix/postfix-script[803475]: stopping the Postfix mail system Dec 7 17:21:31 mail postfix/master[786563]: terminating on signal 15 Dec 7 17:21:32 mail postfix/postfix-script[803551]: starting the Postfix mail system Dec 7 17:21:32 mail postfix/master[803553]: daemon started -- version 3.5.9, configuration /etc/postfix
スクリプトの動作に問題がなければ、次に証明書の更新を行ったときに再起動するかを確認します。
--dry-run
オプションを指定して証明書の更新処理をしてあげると、実際に証明書を更新せずに更新テストを行えるので、こちらで動作確認を行うのが良いでしょう。
# certbot renew --dry-run
これでPostfixが再起動していることが確認できたら作業完了となります。
コメント