Postfix 実用ガイド
Postfix の設計、設定、運用を詳しく確認したい場合の参考書籍です。価格や在庫はリンク先で確認してください。
Amazon で見るこのリンクは Amazon アソシエイトリンクです。
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.cf と master.cf は、これらの socket を参照する前提になります。
パッケージをインストールする
IMAP、LMTP、ManageSieve を使うため、Dovecot 本体に加えて必要なサブパッケージを入れます。
sudo apt update
sudo apt install -y dovecot-core dovecot-imapd dovecot-lmtpd dovecot-managesievedMaildir と 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
}
EOFMaildir の場所を指定する
メール保存形式、ユーザーごとの Maildir、index directory、INBOX namespace を設定します。mail_path と mail_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
}
}
EOFTLS 証明書を指定する
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
}
EOFPostfix 連携 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.confLMTP と 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
EOFIMAP と認証を設定する
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-pagersocket が作成されているかも確認します。Postfix 側で smtpd_sasl_path や virtual_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 | sortdoveconf -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 検証の役割分担が見えやすくなります。

