DovecotでSSL/TLS証明書を使用して、通信の暗号化を行う手順です。
この他にもPostfix + Dovecotでメールサーバの構築手順を下記のページで説明しています。
メールサーバ構築手順
- 【Ubuntu Server 22.04】Postfix + SMTP-AUTH + Dovecotでメールサーバを構築
- 【Ubuntu Server 22.04】DovecotをSSL通信で暗号化
- 【Ubuntu Server 22.04】PostfixでTLSを有効化して通信を暗号化
- 【Ubuntu Server 22.04】PostfixにDKIMの設定を追加
- 【迷惑メール対策】ざっくり説明SPFの設定方法(送信側)
- 【迷惑メール対策】ざっくり説明DMARCの設定方法(送信側)
- 【Ubuntu Server 22.04】PostfixにSPFチェック機能を追加(policyd-spf)
- 【Ubuntu Server 22.04】PostfixとOpenDMARCでDMARC認証を行う方法
SSL/TLS証明書ファイルを取得
Dovecotとメールクライアント間の通信をSSLで暗号化させていくのですが、今回はSSL/TLS証明書をLet's Encryptで取得していきます。
Let's Encryptでの証明書取得方法はこちらページで解説していますので、参考にしてみてください。
上記の手順では、NginxでWebサーバを構築したあとにLet's Encryptで証明書を取得しています。
Let'sEncryptで証明書を取得する際に自分が管理しているドメインかの確認をHTTP-01チャレンジで行うために、webサーバを構築する必要があります。
DNSを使用したDNS-01チャレンジという確認方法もありますが、こちらは自動更新の方法などが少し面倒なので今回はHTTP-01チャレンジを紹介しています。
すでに証明書を取得済みの場合は、こちらの工程は必要ありません。
imapsとpop3sの通信許可設定
通信を暗号化する場合、使用数ポート番号がそれぞれ下記のとおりとなりますので、ufwコマンドで通信を許可する設定をファイアウォールに追加します。
- imaps ポート993
- pop3s ポート995
$ sudo ufw allow 993/tcp $ sudo ufw allow 995/tcp
10-ssl.conf設定
DovecotでSSL通信を行うための設定を、/etc/dovecot/conf.d/10-ssl.confファイルを編集して行います。
$ cd /etc/dovecot/conf.d $ sudo cp -p 10-ssl.conf 10-ssl.conf_$(date +%Y%m%d-%H%M%S) $ sudo vi 10-ssl.conf
設定内容
Dovecotで暗号化通信を行うために以下の設定を行います。
- ssl 暗号化通信のみとする
- ssl_cert SSL/TLS証明書を指定
- ssl_key 秘密鍵ファイルを指定
ssl = required ssl_cert = </etc/letsencrypt/live/ドメイン名/fullchain.pem ssl_key = </etc/letsencrypt/live/ドメイン名/privkey.pem
ssl_certとssl_key部分で指定しているドメイン名の部分は、証明書を取得したドメイン名により異なりますので、適宜読み替えてください。
10-master.conf
imapとpopについて下記の設定を行います。
$ sudo cp -p 10-master.conf 10-master.conf_$(date +%Y%m%d-%H%M%S) $ sudo vi 10-master.conf
設定内容
今回設定している手順では、Dovecotとメールクライアント間の通信は暗号化されたものだけにしています。
ですので、通信が暗号化されていないimapとpopを無効化し、通信が暗号化されるimapsとpopsを有効化させる設定を行います。
- inet_listener imapのポート番号を0に設定し無効化
- inet_listener imaps port = 993とssl = yes についている#を削除
- inet_listener pop3のポート番号を0に設定し無効化
- inet_listener pop3s port = 995とssl = yes についている#を削除
赤字の部分が編集対象となる項目です。
service imap-login { inet_listener imap { port = 0 } inet_listener imaps { port = 993 ssl = yes } } service pop3-login { inet_listener pop3 { port = 0 } inet_listener pop3s { port = 995 ssl = yes } }
設定反映
Dovecotを再起動して設定を反映させます。
$ sudo systemctl restart dovecot
動作確認
設定反映後に、メールクライアントから実際にimapsとpop3sを使って、問題なくメールを受信できることを確認してください。
popとimapの通信許可設定を削除
今回のDovecotに行った設定では、imapsとpop3sのみ通信ができる設定となっているため、メールの受信テストを行い問題がなければ、ファイアウォールに設定しているpop(110)とimap(143)の通信許可設定を削除します。
ファイアウォールに設定されているルール一覧を番号付きで表示させます。
$ sudo ufw status numbered
削除したいルールの番号を指定して設定を削除します。
$ sudo ufw delete 削除するルールの番号
ufwで設定されているルールを削除する方法は、下記のページで説明していますので参考にしてみてください。
証明証更新時の処理
Let's Encryptで取得したSSL/TLS証明書の有効期限は90日なので、定期的に証明書を更新する必要があります。
更新された証明書を読み込むために、証明書が更新された際にDovecotを再起動させる設定を行います。
Dovecot再起動用スクリプト作成
「/etc/letsencrypt/renewal-hooks/deploy」実行させたいスクリプトを作成しておくと、証明書が更新された際にスクリプトが実行されます。
この機能を利用し、証明書の更新が行われた際にDovecotを再起動させるためのスクリプト作成します。
$ cd /etc/letsencrypt/renewal-hooks/deploy $ sudo vi restart_dovecot.sh
作成するスクリプトの内容です。
#!/bin/bash systemctl restart dovecot.service
スクリプトを実行できるように権限をつけます。
$ sudo chmod 755 restart_dovecot.sh
動作確認
スクリプトを実際に実行して、問題なくDovecotが再起動することを確認します。
$ sudo ./restart_dovecot.sh
Doevecotが再起動したことを確認するには、/var/log/mail.logを確認するか、sudo systemctl status dovecotで確認することができます。
/var/log/mail.logで確認
Dovecotが再起動しているログが下記のように表示されます。
Nov 7 23:17:20 133-130-96-87 dovecot: log(44046): Warning: Killed with signal 15 (by pid=1 uid=0 code=kill) Nov 7 23:17:20 133-130-96-87 dovecot: master: Dovecot v2.3.7.2 (3c910f64b) starting up for imap, pop3 (core dumps disabled)
systemctl status dovecotで確認
Activeの赤字で示してある部分にDovecotが起動した時間と経過時間が表示されているので、こちらでも再起動しているかの判断ができます。
$ sudo systemctl status dovecot
● dovecot.service - Dovecot IMAP/POP3 email server
Loaded: loaded (/lib/systemd/system/dovecot.service; enabled; vendor preset: enabl>
Active: active (running) since Mon 2022-11-07 23:17:20 JST; 52s ago
Docs: man:dovecot(1)
http://wiki2.dovecot.org/
Main PID: 72487 (dovecot)
Tasks: 4 (limit: 1066)
Memory: 4.0M
CGroup: /system.slice/dovecot.service
├─72487 /usr/sbin/dovecot -F
├─72498 dovecot/anvil
├─72499 dovecot/log
└─72500 dovecot/config
スクリプト単体での動作に問題がなければ、次にcertbotを使って強制的に証明書を更新させて、Dovecotが再起動することを確認してください。
$ sudo certbot renew --force-renew
こちらもスクリプト単体での場合と同様に、Dovecotが再起動していることを確認してください。
Let's Encryptでは、証明書の更新は1週間に5回までとなっていますのでテストし過ぎには注意してください。
メールクライアント(Thunderbird)の設定
今回の設定でDovecotをSSLに対応させたので、メールクライアントの設定も暗号化に対応するように設定を変更します。
設定例としてThunderbirdの設定方法を説明していきます。
Thunderbirdを起動し「編集」-「アカウント設定」と選択します。
設定したいアカウントの「サーバー設定」を選択し、Dovecotへの接続の設定を変更します。
IMAPの場合
設定を変更する部分は下記のとおりです。
- ポート:993
- 接続の保護: SSL/TLS
POP3の場合
設定を変更する部分は下記のとおりです。
- ポート:995
- 接続の保護: SSL/TLS
コメント