“Dovecot” は、これ一つで平文のPOP3とIMAP4だけでなく、セキュアなPOP3SとIMAP4Sにも対応している優れものです。
まずは簡単に運用するには、Linuxサーバーに存在する実ユーザーのIDとパスワードの情報(実ユーザーの認証情報)を使用して、そのユーザーのMaildirディレクトリにメールを格納する、というのがよいでしょう。
Dovecotをこの方法で設定してしまうと、以後はDovecotに対しては何もしなくても大丈夫です。実ユーザーの追加、変更、削除はLinuxそのものですし、メールアドレスと実ユーザーの関連付けはPostfixが行うためです。
今回は、Centos 9 Streamや、AlmaLinux 9、といった、RHELベースのLinuxサーバーを想定して説明していきます。
1) Dovecotのインストール
まずはdovecotパッケージのインストール。これ一つで4つのプロトコルに対応してくれるのでありがたいですね。
dnf -y install dovecot
2) 110番と143番と993番と995番ポートの開放
firewalldにPOP3/IMAP4/POP3S/IMAP4Sすべてのプロトコルのポート開放設定を追加します。iptables/ip6tablesやnftablesを使っている場合には、それぞれに合わせて、同様に四つのポートを解放してください。
firewall-cmd --add-service=pop3 --permanent
firewall-cmd --add-service=imap --permanent
firewall-cmd --add-service=pop3s --permanent
firewall-cmd --add-service=imaps --permanent
そうしたら、きちんと追加されていることを確認します。
firewall-cmd --list-services --permanent
無事に追加されていたら、firewalldに既存の設定を再読み込みさせます。
firewall-cmd --reload
3) Dovecotの設定
ではDovecot本体の設定をしましょう。基本設定ファイル(dovecot.conf)の他、複数のサブ設定ファイルを編集します。
3-1) /etc/dovecot/dovecot.conf
:
#protocols = imap pop3 lmtp
protocols = imap pop3
:
コメントアウトされているprotcolsの行頭の#をとって、imapとpop3プロトコルを有効にします。ここではimapsとかpop3sとか書かなくても、セキュアなプロトコルにも対応します。
3-2) /etc/dovecot/conf.d/10-mail.conf
:
#mail_location =
mail_location = maildir:~/Maildir
:
コメントアウトされているmail_locationの行頭の#をとって、アクセスしてきたユーザーのメールが、どのような状態(maildir)で、どこに格納(~/Maildir)されているのかを記述します。
3-3) /etc/dovecot/conf.d/10-ssl.conf (サーバー証明書がある場合)
もし、Let’s Encryptでサーバー証明書を取得しているなら、pop3sやimaps(imap4s)の設定もしましょう。
:
# SSL/TLS support: yes, no, required. <doc/wiki/SSL.txt>
####ssl = required
ssl = yes
# PEM encoded X.509 SSL/TLS certificate and private key. They're opened before
# dropping root privileges, so keep the key file unreadable by anyone but
# root. Included doc/mkcert.sh can be used to easily generate self-signed
# certificate, just make sure to update the domains in dovecot-openssl.cnf
####ssl_cert = </etc/pki/dovecot/certs/dovecot.pem
####ssl_key = </etc/pki/dovecot/private/dovecot.pem
ssl_cert = </etc/letsencrypt/live/example.mydns.jp/fullchain.pem
ssl_key = </etc/letsencrypt/live/example.mydns.jp/privkey.pem
:
# SSL protocols to use
#ssl_protocols = !SSLv3
ssl_protocols = !SSLv3 !TLSv1
:
sslがrequiredだと、pop3sやimapsを強制することになります。ここをyesに変更することで「クライアントが対応しているならpop3sやimapsもOK」となります。(Postfixとyesの扱いが少し異なりますね)
あとは、いわゆるオレオレ証明書になっているssl_certとssl_keyを、Let’s Encryptのサーバー証明書に書き直します。
使用するプロトコルは今更ですが、脆弱性が指摘されているものは「!」を付けて禁止を明示しましょう。
4) Dovecotの設定
Dovecotの設定はこれだけです。あとは実際に起動して、外部からアクセスして確認をすればOKです。
systemctl enable dovecot
systemctl start dovecot
systemctl --no-pager status dovecot
5) Dovecotの確認
無事に起動したら、皆さんが普段使っているメールソフトで受信すればOKです。
- メールサーバー名:example.mydns.jp
- 受信アカウント:someone
- パスワード:someoneのパスワード
- プロトコル:POP3でもIMAP4でも(サーバー証明書も設定したならPOP3s、IMAP4sでも)
基本的なPOP3プロトコルはCLIでも手打ちで行うことができます。
# telnet example.mydns.jp 110
Trying 192.168.0.10...
Connected to example.mydns.jp.
Escape character is '^]'.
+OK Dovecot ready.
user someone
+OK
pass someoneのパスワード
+OK Logged in.
quit
+OK Logging out.
Connection closed by foreign host.
# openssl s_client -connect example.mydns.jp:995 -crlf
CONNECTED(00000003)
depth=2 C = US, O = Internet Security Research Group, CN = ISRG Root X1
verify return:1
depth=1 C = US, O = Let's Encrypt, CN = R3
verify return:1
depth=0 CN = h146003.ga
verify return:1
---
Certificate chain
0 s:CN = h146003.ga
i:C = US, O = Let's Encrypt, CN = R3
a:PKEY: rsaEncryption, 2048 (bit); sigalg: RSA-SHA256
v:NotBefore: Dec 5 05:56:25 2022 GMT; NotAfter: Mar 5 05:56:24 2023 GMT
:
:
00c0 - 34 eb 6d 2f e0 48 14 66-d9 4d f7 f4 d8 57 1d 9b 4.m/.H.f.M...W..
00d0 - 3e d0 72 44 b8 d4 d9 61-e9 3e 4f 3b 30 72 01 28 >.rD...a.>O;0r.(
Start Time: 1670226325
Timeout : 7200 (sec)
Verify return code: 0 (ok)
Extended master secret: no
Max Early Data: 0
---
read R BLOCK
+OK Dovecot ready.
user someone
+OK
pass someoneのパスワード
+OK Logged in.
quit
+OK Logging out.
Connection closed by foreign host.
以上のように「pass」でのパスワード認証のあとエラーとかにならず「Logged in」になったらOKです。ここではすぐに「quit」として切断してしまっていますが、切断せずに「list」とすると、Maildir/newにメールが溜まっていれば、簡易的な一覧が出てきます。
さらにはPOP3プロトコルなら「retr n」とするとn通目のメールの中身を取得することができますが、openssl経由だとセッションの張り直しが必要なので、残念ながら切断されてしまいます。暗号化通信はサーバーもクライアントも忙しいのです。
ちなみにクライアントとのやりとりがセキュアかそうでないかは、ログにはTLSという文字列が出力されるかされないか、の違いしかありません。
いかがですか?
メールサーバーの構築って意外と簡単だったと思います。
皆さんもぜひ”Dovecot”でMUA(MRA)を動かしてみてください。
上記の文章は、サーバー構築ハンズオンのオンラインマニュアルから抜粋しています。