未分類

【Ubuntu 24.04】Postfix + Dovecot(IMAP)でメールサーバを最短構築する手順【基本設定のみ】

【Ubuntu 24.04】Postfix + Dovecot(IMAP)でメールサーバを最短構築する手順【基本設定のみ】

本記事では、Ubuntu 24.04Postfix + Dovecot(IMAP)を導入し、ローカル配送 + IMAP閲覧ができる最小構成を“最短ルート”で解説します。まずは動く状態を作り、その後にSPF/DKIM/DMARCやウイルス・迷惑メール対策は別記事で拡張します。

対象:自宅/小規模サーバ運用者、Ubuntu基本操作OKな方(CLI中心)

ゴールuser@example.comへ届いたメールをサーバで受け取り、IMAPでクライアントから閲覧できる

目次

  1. 前提条件・用語
  2. DNSとホスト名の準備
  3. パッケージのインストール
  4. Postfix(配送・Submission)の基本設定
  5. Dovecot(IMAP)の基本設定
  6. SSL/TLS(Let’s Encrypt)の設定ポイント
  7. ファイアウォール(UFW)
  8. 動作確認(送受信・IMAPログイン)
  9. よくあるハマりどころ

1. 前提条件・用語

  • OS:Ubuntu 24.04 Server
  • ドメイン:example.com(ご自身のものに置換)
  • 想定メールアドレス:user@example.com
  • 配送形式:ローカル配送(Maildir/)+ DovecotでIMAP公開

ポイント:後からMySQL連携や仮想ユーザ、DKIM/DMARC等を追加できます。まずは動く最小構成を作るのが近道です。

2. DNSとホスト名の準備

  1. A/AAAAレコードmail.example.com → あなたのサーバのIP
  2. MXレコードexample.com のMXを mail.example.com へ(優先度 10など)
  3. サーバの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.cfsubmission セクションを有効化します。

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.confauthunix_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/tcp993/tcp を忘れがち。
  • ログ場所/var/log/mail.logjournalctl -u postfix -u dovecot を常用。

まとめ:まずは“受けて読める”を最短で作る

ここまでで、受信 → ローカル配送 → IMAPで閲覧の最小構成が完成です。次の拡張は、SPF/DKIM/DMARCClamAV/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


オススメの記事

-未分類