手当たり次第に書くんだ

飽きっぽいのは本能

Ubuntu 26.04 Dovecot の基本設定 – IMAP / Maildir / TLS と Postfix 連携を構成する

Ubuntu 26.04 メール関連の記事

Ubuntu 26.04 でメールボックスを扱う場合、Postfix は SMTP の入口や配送制御を担当し、Dovecot は IMAP、認証、LMTP によるメールボックス配送を担当します。両者は別プロセスですが、実際のメール基盤では auth socket と LMTP socket でつながるため、どちらか一方だけを見ても全体像を判断しにくくなります。

この記事では、Dovecot を Maildir、IMAP、LMTP、Sieve、TLS、PAM 認証、Postfix 連携 socket という単位に分けて構成します。単体の IMAP サーバーとしてではなく、Postfix と組み合わせて受信メールをユーザーの Maildir に配送する前提で整理します。

この記事で扱うこと
  • Dovecot が担当する IMAP / LMTP / 認証の範囲を確認する
  • Maildir と index directory を分けて配置する
  • Postfix が使う auth socket と LMTP socket を用意する
  • TLS、Sieve、IMAP 接続数、PAM 認証の設定を確認する

前提と構成の考え方

ここではローカルユーザーの認証を PAM で扱い、メール保存形式は maildir とします。メールの実体は /mnt/maildir、Dovecot の index は /var/lib/dovecot/index に分けて配置します。メール本文と index を分けておくと、容量管理やバックアップ対象を判断しやすくなります。

Postfix との連携では、SMTP AUTH 用の /var/spool/postfix/private/auth と、ローカル配送用の /var/spool/postfix/private/dovecot-lmtp を Dovecot 側で作成します。Postfix 側の main.cfmaster.cf は、これらの socket を参照する前提になります。

パッケージをインストールする

IMAP、LMTP、ManageSieve を使うため、Dovecot 本体に加えて必要なサブパッケージを入れます。

sudo apt update
sudo apt install -y dovecot-core dovecot-imapd dovecot-lmtpd dovecot-managesieved

Maildir と index directory を用意する

/mnt/maildir はユーザーごとの Maildir を置く場所です。/var/lib/dovecot/index は Dovecot が検索や状態管理に使う index の場所です。

sudo install -d -o root -g root -m 0711 /mnt/maildir
sudo install -d -o root -g root -m 1777 /var/lib/dovecot/index

ユーザーごとの Maildir は、運用方針に合わせて事前作成します。ここでは例として myuser を使います。実際のユーザー名に置き換えてください。

sudo install -d -o myuser -g myuser -m 0700 /mnt/maildir/myuser

プロトコルを有効化する

Dovecot では IMAP、LMTP、Sieve を明示的に有効化します。IMAP はクライアントからのメール参照、LMTP は Postfix から Dovecot へのローカル配送、Sieve はユーザー側の振り分け処理で使います。

sudo tee /etc/dovecot/conf.d/10-protocols.conf >/dev/null <<'EOF'
protocols {
  imap = yes
  lmtp = yes
  sieve = yes
}
EOF

Maildir の場所を指定する

メール保存形式、ユーザーごとの Maildir、index directory、INBOX namespace を設定します。mail_pathmail_index_path はユーザー単位で展開されます。

sudo tee /etc/dovecot/conf.d/10-mail.conf >/dev/null <<'EOF'
mail_driver = maildir
mail_path = /mnt/maildir/%{user}
mail_index_path = /var/lib/dovecot/index/%{user}
namespace inbox {
  inbox = yes
  mailbox INBOX {
  auto = create
  }
}
EOF

TLS 証明書を指定する

IMAP を平文のまま使わないため、Dovecot 側でも TLS を有効化します。証明書と秘密鍵のパスは、サーバーで実際に配置しているものに合わせます。自己署名証明書を使う場合でも、Dovecot が読めるパスと権限になっていることを確認します。

sudo tee /etc/dovecot/conf.d/10-ssl.conf >/dev/null <<'EOF'
ssl = yes
ssl_server {
  cert_file = /etc/ssl/localcerts/server.crt
  key_file = /etc/ssl/localcerts/server.key
}
EOF

Postfix 連携 socket を作成する

Postfix が Dovecot を利用するための socket を Dovecot 側で公開します。auth は SMTP AUTH、dovecot-lmtp は Postfix から Dovecot へのローカル配送で使います。どちらも /var/spool/postfix/private 配下に置くため、Postfix の chroot 構成でも参照しやすくなります。

sudo tee /etc/dovecot/conf.d/10-master.conf >/dev/null <<'EOF'
service auth {
  unix_listener /var/spool/postfix/private/auth {
  mode = 0660
  user = postfix
  group = postfix
  }
}
service lmtp {
  unix_listener /var/spool/postfix/private/dovecot-lmtp {
  mode = 0600
  user = postfix
  group = postfix
  }
}
service stats {
  unix_listener stats-writer {
  user = dovecot
  group = dovecot
  mode = 0666
  }
}
EOF

古い LDA 用の設定を残している場合は、LMTP と混ざらないように外しておきます。

sudo rm -f /etc/dovecot/conf.d/15-lda.conf

LMTP と Sieve を設定する

LMTP では、配送失敗時に使う postmaster address と、配送時に使う plugin を指定します。ここでは Sieve を有効化し、ユーザーごとの振り分けルールを Maildir 配下に置く構成にします。

sudo tee /etc/dovecot/conf.d/15-lmtp.conf >/dev/null <<'EOF'
protocol lmtp {
  postmaster_address = postmaster@example.com
  mail_plugins = sieve
}
EOF
sudo tee /etc/dovecot/conf.d/90-sieve.conf >/dev/null <<'EOF'
sieve_script_driver = file
sieve_script_path = /mnt/maildir/%{user}/sieve
sieve_script_active_path = /mnt/maildir/%{user}/sieve/.dovecot.sieve
EOF

IMAP と認証を設定する

IMAP では、同一ユーザーと接続元の組み合わせに対する接続数を制限します。値を小さくしすぎると複数端末やメールクライアントの並列接続で詰まるため、実際の利用端末数に合わせて調整します。

sudo tee /etc/dovecot/conf.d/20-imap.conf >/dev/null <<'EOF'
protocol imap {
  mail_max_userip_connections = 10
}
EOF

認証は PAM と passwd userdb を使います。システムユーザーでログインさせる構成では、Dovecot 側のサービス名と PAM 側の設定名を合わせます。

sudo tee /etc/dovecot/conf.d/auth-system.conf.ext >/dev/null <<'EOF'
passdb pam {
  session = yes
  service_name = dovecot
}
userdb passwd {
}
EOF
sudo tee /etc/pam.d/dovecot >/dev/null <<'EOF'
@include common-auth
@include common-account
@include common-session-noninteractive
EOF

設定を確認してサービスを再起動する

設定ファイルを置いたら、Dovecot の設定確認をしてからサービスを再起動します。構文エラーや証明書パスの誤りがある場合は、この段階で止めます。

sudo doveconf -n
sudo systemctl restart dovecot.service
sudo systemctl enable dovecot.service
sudo systemctl status dovecot.service --no-pager

socket が作成されているかも確認します。Postfix 側で smtpd_sasl_pathvirtual_transport を設定していても、Dovecot 側の socket が存在しなければ認証や配送は成立しません。

sudo ls -l /var/spool/postfix/private/auth
sudo ls -l /var/spool/postfix/private/dovecot-lmtp

動作確認の見方

IMAP の待ち受け、Dovecot のログ、Postfix からの LMTP 配送、Maildir への反映を分けて確認します。ログインできない問題と配送されない問題は原因が異なるため、同じエラーとして扱わない方が切り分けやすくなります。

ss -ltnp | grep dovecot
journalctl -u dovecot.service -n 100 --no-pager
sudo doveadm user myuser
sudo find /mnt/maildir/myuser -maxdepth 2 -type d | sort
確認するポイント
  • doveconf -n で意図した設定だけが出ているか
  • /var/spool/postfix/private/auth を Postfix が参照できるか
  • /var/spool/postfix/private/dovecot-lmtp が存在するか
  • Maildir の所有者と権限がログインユーザーに合っているか
  • TLS 証明書と秘密鍵を Dovecot が読めるか

まとめ

Dovecot は IMAP サーバーとしてだけ見ると単純に見えますが、Postfix と組み合わせる場合は auth socket、LMTP socket、Maildir、TLS、PAM 認証の境界をそろえる必要があります。特に socket のパスと権限、Maildir の所有者、証明書のパスは、設定ファイル上は小さな差でも実運用ではログイン不可や配送失敗に直結します。

Ubuntu 26.04 でメール基盤を構成する場合は、Postfix 側の SMTP / TLS / alias 設定、OpenDKIM、OpenDMARC と合わせて確認すると、受信、認証、配送、署名、DMARC 検証の役割分担が見えやすくなります。

関連する記事
Ubuntu 26.04 Dovecot の基本設定 – IMAP / Maildir / TLS と Postfix 連携を構成する

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

トップへ戻る