前回、Let's Encryptを使って無料のSSL証明書を取得してWebサーバの暗号化を行ったので、今回はメールサーバ(Postfix+Dovecot)での対応を行う。 なお、すでにPostfix + Dovecotでメールサーバは構築済みの状態とし、同居しているWebサーバはいないものとする。

1.Let's Encryptのインストール

まずは、以下のコマンドでgitをインストールしてLet's Encryptをダウンロードしてくる。

yum install -y git openssl mod_ssl
git clone https://github.com/letsencrypt/letsencrypt.git

次に、以下のコマンドで証明書の発行を行う。

cd letsencrypt
./certbot-auto certonly --standalone -d ドメイン名 -m メールアドレス --agree-tos

作成した証明書ファイルは、「/etc/letsencrypt/live/ドメイン名/」配下に出力されている。

  • /etc/letsencrypt/live/ドメイン名/cert.pem … 証明書
  • /etc/letsencrypt/live/ドメイン名/privkey.pem … 秘密鍵
  • /etc/letsencrypt/live/ドメイン名/chain.pem … 中間CA証明書
  • /etc/letsencrypt/live/ドメイン名/fullchain.pem … 証明書+中間CA証明書

あとは、この作成された証明書をPostfix・Dovecotそれぞれで参照するように設定を変更すればいい。

2. Postfixの設定変更

Postfixの設定ファイルを変更し、メール送信時の通信をSSLで保護する。 「/etc/postfix/main.cf」に以下の内容を追記する。

/etc/postfix/main.cf
smtpd_use_tls = yes smtp_tls_security_level = may smtpd_tls_cert_file = /etc/letsencrypt/live/ドメイン名/fullchain.pem smtpd_tls_key_file = /etc/letsencrypt/live/ドメイン名/privkey.pem smtpd_tls_loglevel = 1 smtpd_tls_received_header = yes

次に、「/etc/postfix/master.cf」を以下のように編集しサービス起動時のオプションを変更する。

/etc/postfix/master.cf
smtps inet n - n - - smtpd # -o syslog_name=postfix/smtps -o smtpd_tls_wrappermode=yes -o smtpd_sasl_auth_enable=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=permit_sasl_authenticated,reject # -o milter_macro_daemon_name=ORIGINATING

最後にPostfixのサービスを再起動する。

systemctl restart postfix

3. Dovecotの設定変更

次に、Dovecotの設定ファイルを変更してメール受信時の通信を保護させる。 「/etc/dovecot/conf.d/10-ssl.conf」にて、以下の項目を変更する。

/etc/dovecot/conf.d/10-ssl.conf
ssl = yes ssl_cert = </etc/letsencrypt/live/ドメイン名/fullchain.pem ssl_key = </etc/letsencrypt/live/ドメイン名/privkey.pem

Dovecotのサービスを再起動する。

systemctl restart dovecot

4. 証明書ファイルの自動更新設定

Let’sEncryptでは2か月で証明書が切れてしまうので、自動更新の設定をする。 まず、gitでとってきたLet’sEncryptのソース等を移動しておく。

mv ~/letsencrypt/ /usr/local/

次にcrontabに以下の内容を記述することで、毎日朝3時に証明書の更新を行う。

/etc/crontab
00 03 * * * root /usr/local/letsencrypt/certbot-auto renew --force-renew && /bin/systemctl reload httpd

これで、Postfix+DovecotのサーバをLet's Encryptで暗号化させることができた。 設定も簡単だし、もし個人で立ち上げているメールサーバでSSL対応をしていないならば対応しておくとよいだろう。


参考