shintaro.info infra

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 = requiredauth_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-28Shintaro / Acia初版
2025-11-19AciaTLS・SASL 整合改訂
2025-11-21Acia平文→TLS 切替手順の安全化
2025-11-21AciaUFW/パケットフィルタ設計を追加
2025-11-21Acia10-mail.conf を Maildir 用にする正しい手順に改訂