【AlmaLinux9】PostfixでSSL/TLSを使って通信を暗号化

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が再起動していることが確認できたら作業完了となります。

コメント

タイトルとURLをコピーしました