【Ubuntu Server 22.04】DovecotをSSL通信で暗号化

DovecotでSSL/TLS証明書を使用して、通信の暗号化を行う手順です。

この他にもPostfix + Dovecotでメールサーバの構築手順を下記のページで説明しています。

メールサーバ構築手順

  1. 【Ubuntu Server 22.04】Postfix + SMTP-AUTH + Dovecotでメ>ールサーバを構築
  2. 【Ubuntu Server 22.04】DovecotをSSL通信で暗号化
  3. 【Ubuntu Server 22.04】PostfixでTLSを有効化して通信を暗号化
  4. 【Ubuntu Server 22.04】PostfixにDKIMの設定を追加
  5. 【迷惑メール対策】ざっくり説明SPFの設定方法(送信側)
  6. 【迷惑メール対策】ざっくり説明DMARCの設定方法(送信側)
  7. 【Ubuntu Server 22.04】PostfixにSPFチェック機能を追加(policyd-spf)
  8. 【Ubuntu Server 22.04】PostfixとOpenDMARCでDMARC認証を行う方法

SSL/TLS証明書ファイルを取得

Dovecotとメールクライアント間の通信をSSLで暗号化させていくのですが、今回はSSL/TLS証明書をLet's Encryptで取得していきます。

Let's Encryptでの証明書取得方法はこちらページで解説していますので、参考にしてみてください。

【Ubuntu】Let’s Encrypt+nginxでSSL/TLS(https接続)を設定する方法
検証環境 下記の環境でLet's EncryptでSSL/TLS証明書を発行して、nginxでhttps通信ができるまでの手順を解説していきます。 OS:Ubuntu Server 20.04 nginx:1.21.4 certbot(証明...

上記の手順では、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で設定されているルールを削除する方法は、下記のページで説明していますので参考にしてみてください。

【Ubuntu】ufwの使い方ー入門編ー
ufwの使い方 入門編 ufwの使い方の入門編です。 ufwはファイアウォール(iptables)の設定を簡単に行うためのコマンドで、サーバを運用していくためには良くお世話になります。 今回は入門編ということなので、とりあえず普段良く使いそ...

証明証更新時の処理

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

コメント

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