Dovecot (IMAP/POP3, SASL) — 段階構築ガイド
作成: Shintaro / Acia
対象OS: Debian 13 (Sakura VPS)
表記方針: 変数による抽象化を採用し、一貫性を保つ
<DOMAIN>: 運用ドメイン(例:example.com)<MAIL_HOST>: メールホストFQDN(例:mail.<DOMAIN>→mail.example.com)<MAIN_USER>: 常用ユーザ(例:main_user)
目的
教材・再現性を重視し、まず 非SSL で Dovecot を最小構成で動作させたのち、段階的に TLS(IMAPS/POP3S)・SASL(Postfix連携) を導入する。
当面は システムユーザ + Maildir を採用し、バーチャルユーザは後繰検討とする。
構成方針
- Part 1(非SSL): IMAP(143) で Maildir を読む最小構成
- Part 2(TLS & SASL): IMAPS(993) / POP3S(995) と Postfix SASL 連携
- 認証は既定の PAM(システムユーザ)を利用
前提
- Postfix は 07 章に従い Maildir 配送設定済み(
home_mailbox = Maildir/) - Dovecot は Debian 13 デフォルトの 10-mail.conf(mail_driver / mail_home / mail_path)を Maildir 用に調整して利用する
- 証明書は Let's Encrypt(webroot)で取得済み(06_apache.md 参照)
- Debian 13 は journald を標準ログとする
- UFW / さくらのパケットフィルタは、サービス完成まで極力閉じた状態を維持し、最後に必要ポートのみ開放する
Mermaid: フロー概要(保持必須)
flowchart LR Client[[IMAP/POP3 Client]] Postfix((Postfix)) Dovecot((Dovecot 2.4)) Maildir[/~/Maildir/] Client -- IMAP/POP3 --> Dovecot Dovecot -- read/write --> Maildir Postfix -- deliver --> Maildir Client -. SMTP auth (587) .-> Postfix Postfix -- SASL via socket --> Dovecot
Part 1: 基本構築(非SSL)
1.1 パッケージ
sudo apt update
sudo apt install -y dovecot-core dovecot-imapd
sudo apt install -y netcat-openbsd
1.2 Maildir 定義(10-mail.conf の Debian defaults を Maildir 用に変更)
Debian 13 の 10-mail.conf では、デフォルトで mbox を前提にした設定になっている。
これを Maildir + ~/Maildir を使うように変更する。
sudo vi /etc/dovecot/conf.d/10-mail.conf
# Debian defaults ブロックを次のように編集する(mbox → maildir):
(変更前のイメージ)
# Debian defaults
mail_driver = mbox
mail_home = /home/%{user | username}
mail_path = %{home}/mail
mail_inbox_path = /var/mail/%{user}
これを 以下のように書き換える:
# Debian defaults(Maildir + ~/Maildir を使用するように変更)
mail_driver = maildir
mail_home = /home/%{user | username}
mail_path = %{home}/Maildir
#mail_inbox_path = /var/mail/%{user}
1.3 Maildir ディレクトリ作成(常用ユーザ)
sudo -u <MAIN_USER> mkdir -p /home/<MAIN_USER>/Maildir/{cur,new,tmp}
sudo chown -R <MAIN_USER>:<MAIN_USER> /home/<MAIN_USER>/Maildir
sudo chmod -R u+rwX /home/<MAIN_USER>/Maildir
1.4 平文認証(ローカル検証限定)
printf '%s\n' \
'auth_allow_cleartext = yes' \
'auth_mechanisms = plain login' \
| sudo tee /etc/dovecot/conf.d/99-auth-plain.conf
1.5 TLS 無効化
sudo sed -i 's/^\s*ssl\s*=.*/ssl = no/' /etc/dovecot/conf.d/10-ssl.conf
1.6 起動
sudo systemctl enable --now dovecot
sudo systemctl status dovecot --no-pager
Part 2: TLS(IMAPS/POP3S) & SASL(Postfix)
2.0 前提
- SAN 証明書と
<MAIL_HOST>が一致していること - TLS を有効化する前に **
auth_allow_cleartext = no** - Postfix 側は
smtpd_sasl_type = dovecot/smtpd_sasl_path = private/auth <MAIN_USER>の~/Maildirが作成済み
2.1 追加パッケージ(POP3)
sudo apt install -y dovecot-pop3d
2.2 TLS 有効化(10-ssl.conf)
ssl = required
ssl_server {
cert_file = /etc/letsencrypt/live/<DOMAIN>/fullchain.pem
key_file = /etc/letsencrypt/live/<DOMAIN>/privkey.pem
}
2.3 平文認証の無効化
sudo sed -i 's/^auth_allow_cleartext.*/auth_allow_cleartext = no/' /etc/dovecot/conf.d/99-auth-plain.conf
2.4 SASL ソケット(10-master.conf)
unix_listener /var/spool/postfix/private/auth {
mode = 0660
user = postfix
group = postfix
}
2.5 再起動
sudo systemctl restart dovecot
2.6 到達確認
ss -tulpen | egrep ':993|:995'
openssl s_client -connect <MAIL_HOST>:995 -servername <MAIL_HOST>
openssl s_client -connect <MAIL_HOST>:993 -servername <MAIL_HOST>
2.7 UFW / パケットフィルタ設計(IMAPS/POP3S)
基本方針
- すべて完成してから 必要ポートのみ開放
- アプリ名指定(推奨)
- 公開するのは 993 / 995 のみ(143/110 は開けない)
UFW(アプリ名指定)
sudo ufw allow "Dovecot Secure POP3" # 995/tcp
sudo ufw allow "Dovecot Secure IMAP" # 993/tcp(必要なら)
Postfix 側(07章と整合):
sudo ufw allow "Postfix"
sudo ufw allow "Postfix SMTPS"
sudo ufw allow "Postfix Submission"
確認:
sudo ufw reload
sudo ufw status numbered
さくらのパケットフィルタ
- 許可: 22, 25, 465, 587, 993, 995/tcp
- それ以外は拒否
検証
- メールクライアント IMAPS / POP3S
- SASL 認証(swaks)
- journald:
sudo journalctl -u dovecot -n 100
- 最終設定:
doveconf -n
トラブルシュート
- Debian デフォルトの mbox 設定を残すと
/var/mail/...を参照し Permission denied ssl = requiredとauth_allow_cleartext = yesは矛盾し起動失敗- ソケットは
/var/spool/postfix/private/auth - 必ず
doveconf -nで Maildir 設定を確認
運用ノート
- 本番は
ssl = required/auth_allow_cleartext = no - 公開ポートは 22 / 25 / 465 / 587 / 993 / 995
- Fail2ban の
dovecotジェイル推奨(05_fail2ban.md を参照) - certbot 更新後は reload を行う
変更履歴
| 日付 | 編集者 | 内容 |
|---|---|---|
| 2025-10-28 | Shintaro / Acia | 初版 |
| 2025-11-19 | Acia | TLS・SASL 整合改訂 |
| 2025-11-21 | Acia | 平文→TLS 切替手順の安全化 |
| 2025-11-21 | Acia | UFW/パケットフィルタ設計を追加 |
| 2025-11-21 | Acia | 10-mail.conf を Maildir 用にする正しい手順に改訂 |