【Ubuntu 24.04】Postfix + Dovecot(IMAP)でメールサーバを最短構築する手順【基本設定のみ】
本記事では、Ubuntu 24.04にPostfix + Dovecot(IMAP)を導入し、ローカル配送 + IMAP閲覧ができる最小構成を“最短ルート”で解説します。まずは動く状態を作り、その後にSPF/DKIM/DMARCやウイルス・迷惑メール対策は別記事で拡張します。
対象:自宅/小規模サーバ運用者、Ubuntu基本操作OKな方(CLI中心)
ゴール:user@example.com
へ届いたメールをサーバで受け取り、IMAPでクライアントから閲覧できる
目次
- 前提条件・用語
- DNSとホスト名の準備
- パッケージのインストール
- Postfix(配送・Submission)の基本設定
- Dovecot(IMAP)の基本設定
- SSL/TLS(Let’s Encrypt)の設定ポイント
- ファイアウォール(UFW)
- 動作確認(送受信・IMAPログイン)
- よくあるハマりどころ
1. 前提条件・用語
- OS:Ubuntu 24.04 Server
- ドメイン:
example.com
(ご自身のものに置換) - 想定メールアドレス:
user@example.com
- 配送形式:ローカル配送(
Maildir/
)+ DovecotでIMAP公開
ポイント:後からMySQL連携や仮想ユーザ、DKIM/DMARC等を追加できます。まずは動く最小構成を作るのが近道です。
2. DNSとホスト名の準備
- A/AAAAレコード:
mail.example.com
→ あなたのサーバのIP - MXレコード:
example.com
のMXをmail.example.com
へ(優先度 10など) - サーバのFQDNを設定:
sudo hostnamectl set-hostname mail.example.com
3. パッケージのインストール
sudo apt update
sudo apt install -y postfix dovecot-imapd mailutils ufw
Postfixのインストール時に構成を聞かれたら「インターネットサイト」を選択、システムメール名に example.com
を指定しておくと後が楽です(後で手動修正も可)。
4. Postfix(配送・Submission)の基本設定
4.1 main.cf(最小構成)
/etc/postfix/main.cf
を以下の要領で編集します。
sudo nano /etc/postfix/main.cf
# 基本
myhostname = mail.example.com
mydomain = example.com
myorigin = $mydomain
inet_interfaces = all
inet_protocols = all
mydestination = $myhostname, localhost.localdomain, localhost, $mydomain
mynetworks = 127.0.0.0/8 [::1]/128
# ユーザのMaildir配下へローカル配送
home_mailbox = Maildir/
# TLS(後でLet's Encryptに差し替え)
smtpd_use_tls = yes
smtpd_tls_cert_file = /etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file = /etc/ssl/private/ssl-cert-snakeoil.key
smtpd_tls_auth_only = yes
# SASL(Dovecot連携)
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes
# 受信制御(最小)
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
# ログ強化(任意)
smtpd_helo_required = yes
smtpd_helo_restrictions = reject_invalid_helo_hostname, reject_non_fqdn_helo_hostname
4.2 master.cf(Submission 587有効化)
/etc/postfix/master.cf
の submission
セクションを有効化します。
sudo nano /etc/postfix/master.cf
# 先頭の # を外して以下のように調整
submission inet n - y - - smtpd
-o syslog_name=postfix/submission
-o smtpd_tls_security_level=encrypt
-o smtpd_sasl_auth_enable=yes
-o smtpd_client_restrictions=permit_sasl_authenticated,reject
4.3 Postfixの再起動
sudo systemctl enable --now postfix
sudo systemctl restart postfix
5. Dovecot(IMAP)の基本設定
5.1 プロトコルとメール保存先
/etc/dovecot/dovecot.conf
と /etc/dovecot/conf.d/10-*
を調整します。
# プロトコル
sudo sed -i 's/^#\?protocols.*/protocols = imap/' /etc/dovecot/dovecot.conf
# メール保存先(Maildir)
sudo sed -i 's|^#\?mail_location.*|mail_location = maildir:~/Maildir|' /etc/dovecot/conf.d/10-mail.conf
5.2 認証設定
sudo nano /etc/dovecot/conf.d/10-auth.conf
# 平文禁止 + 認証方式(PLAIN/LOGIN)
disable_plaintext_auth = yes
auth_mechanisms = plain login
# システムユーザでの認証(デフォルトのままでOK)
!include auth-system.conf.ext
5.3 TLS設定
sudo nano /etc/dovecot/conf.d/10-ssl.conf
ssl = required
ssl_cert = </etc/ssl/certs/ssl-cert-snakeoil.pem
ssl_key = </etc/ssl/private/ssl-cert-snakeoil.key
後ほどLet’s Encryptの実証済み証明書に差し替えます。
5.4 Postfix連携用ソケット
/etc/dovecot/conf.d/10-master.conf
で auth
の unix_listener /var/spool/postfix/private/auth
を有効化(デフォルトで有効なことが多い)。
service auth {
unix_listener /var/spool/postfix/private/auth {
mode = 0660
user = postfix
group = postfix
}
}
5.5 Dovecot再起動
sudo systemctl enable --now dovecot
sudo systemctl restart dovecot
6. SSL/TLS(Let’s Encrypt)の設定ポイント
本番運用では必ず実証済み証明書を使います。mail.example.com
で証明書を取得し、Postfix/Dovecot双方に適用します。
sudo apt install -y certbot
# Nginx/Apacheが無い場合はstandaloneで一時停止可能な時間帯に実行
sudo systemctl stop postfix dovecot
sudo certbot certonly --standalone -d mail.example.com
# 成功後、以下に差し替え
sudo postconf -e "smtpd_tls_cert_file=/etc/letsencrypt/live/mail.example.com/fullchain.pem"
sudo postconf -e "smtpd_tls_key_file=/etc/letsencrypt/live/mail.example.com/privkey.pem"
sudo sed -i 's|^ssl_cert.*|ssl_cert = </etc/letsencrypt/live/mail.example.com/fullchain.pem|' /etc/dovecot/conf.d/10-ssl.conf
sudo sed -i 's|^ssl_key.*|ssl_key = </etc/letsencrypt/live/mail.example.com/privkey.pem|' /etc/dovecot/conf.d/10-ssl.conf
sudo systemctl start postfix dovecot
自動更新:
certbot
はcron/systemdで更新されます。更新後にPostfix/Dovecotを再読み込みするフックを仕込むと安心です。
7. ファイアウォール(UFW)
sudo ufw allow OpenSSH
sudo ufw allow "Postfix"
sudo ufw allow "Postfix Submission"
sudo ufw allow "Dovecot IMAP"
sudo ufw enable
sudo ufw status
8. 動作確認(送受信・IMAPログイン)
8.1 ユーザ作成とMaildir準備
# メールを受けるLinuxユーザ
sudo adduser user
# 念のためMaildir作成(mailutils導入済みなら配送で自動作成されることが多い)
sudo -u user maildirmake.dovecot ~/Maildir
sudo -u user maildirmake.dovecot ~/Maildir/.Drafts
sudo -u user maildirmake.dovecot ~/Maildir/.Sent
sudo -u user maildirmake.dovecot ~/Maildir/.Trash
8.2 ローカル配送テスト
echo "hello" | mail -s "test local delivery" user
# ログ確認
sudo tail -f /var/log/mail.log
8.3 Submission(587)でのSMTP認証テスト
swaks
があれば便利です。
sudo apt install -y swaks
swaks --to user@example.com --server mail.example.com:587 \
--auth LOGIN --auth-user user --auth-password 'PASSWORD' \
--tls --from user@example.com
8.4 IMAP接続テスト(openssl)
openssl s_client -connect mail.example.com:993 -quiet
# * OK Dovecot ready と出ればOK。クライアント(Thunderbird等)でもIMAP接続を確認。
9. よくあるハマりどころ
- 逆引きPTRが無い:外部への送信で迷惑判定されやすい。プロバイダ側でPTR設定を。
- FQDN不一致:
myhostname
と証明書CN/SAN、DNSの整合を必ず取る。 - UFW未開放:
587/tcp
と993/tcp
を忘れがち。 - ログ場所:
/var/log/mail.log
、journalctl -u postfix -u dovecot
を常用。
まとめ:まずは“受けて読める”を最短で作る
ここまでで、受信 → ローカル配送 → IMAPで閲覧の最小構成が完成です。次の拡張は、SPF/DKIM/DMARC、ClamAV/SpamAssassin、仮想ユーザ+DB連携、バックアップを段階的に追加していきましょう。
付録:ひな形(ドメイン置換用スニペット)
# まとめて置換する時の例(危険なのでバックアップ推奨)
sudo sed -i 's/example.com/あなたのドメイン/g' /etc/postfix/main.cf
sudo sed -i 's/mail.example.com/あなたのFQDN/g' /etc/postfix/main.cf