メールシステム構築をやってみた

Linux

■ はじめに

今回はインフラ学習の一環として、Ubuntu Server上にメールサーバを構築してみました。

これまでZabbixによる監視サーバ構築、HTTP監視、MySQLでのDB構築などを進めてきましたが、今回は次のステップとして、メールシステム構築に挑戦しました。

最初は「メールサーバ」と聞くと少し難しそうな印象がありましたが、実際に手を動かしてみると、

  • Postfix は送信側
  • Dovecot は受信側
  • メールの保存形式には mbox と Maildir がある

といった基本の役割が少しずつ見えてきました。

今回は学習用のVirtualBox上のUbuntu Serverに、Postfix と Dovecot を導入し、ローカルユーザー宛メール送信、配送確認、Maildir化まで実施したので、その内容を記録としてまとめます。


■ 環境

  • OS:Ubuntu Server 24.04系
  • 仮想環境:VirtualBox
  • MTA:Postfix
  • IMAP/POP3サーバ:Dovecot
  • 動作確認:mailutils

※ 個人学習用の検証環境で実施しています。
※ 接続情報やパスワードなどの機微情報は記載していません。


■ 構築手順

① メール関連パッケージのインストール

まずは必要なパッケージを導入しました。

sudo apt update
sudo apt install -y postfix dovecot-imapd dovecot-pop3d mailutils

途中で Postfix の設定画面が表示されたため、以下のように選択しました。

  • General mail configuration type:Internet Site
  • System mail name:学習用のローカル名

今回はまず、同一サーバ内で送受信の流れを確認することを目的に進めました。


② サービス起動確認

インストール後、Postfix と Dovecot が起動しているか確認しました。

systemctl status postfix
systemctl status dovecot

どちらも active (running) となっており、サービスが正常に立ち上がっていることを確認できました。

あわせて、Dovecot 側が IMAP/POP3 として動いていることも確認できました。


③ ローカルユーザー宛にテストメール送信

次に、同じサーバ内のローカルユーザー宛にメールを送ってみました。

echo "This is a test mail." | mail -s "postfix local test" s-hashiba

まずは「送れるか」をシンプルに確認する段階です。

送信後、キューの状態やログを見ながら、配送が成功しているかを確認しました。


④ ログ確認

メール配送の流れは /var/log/mail.log を見ると分かりやすいです。

sudo tail -n 50 /var/log/mail.log

ログには、Postfix がメールを受け取り、ローカルユーザーのメールボックスへ配送したことが記録されていました。

この段階で、送信自体は成功していることが分かりました。


⑤ 保存先確認(mbox形式)

最初は Maildir が見当たらなかったため、従来形式の保存先も確認しました。

sudo cat /var/mail/s-hashiba

その結果、送ったメールの件名と本文がきちんと保存されており、最初は mbox形式 で配送されていることが分かりました。

この時点で、

  • Postfix によるローカル送信
  • ユーザー宛配送
  • 保存確認

までは成功です。


⑥ Maildir 用ディレクトリ作成

次に、Dovecot と組み合わせやすいように Maildir 形式へ寄せていくことにしました。

まずは Maildir の基本ディレクトリを作成しました。

mkdir -p ~/Maildir/{cur,new,tmp}

確認すると、curnewtmp の3つが作成されていることを確認できました。


⑦ Postfix の配送先を Maildir に変更

Postfix 側の保存先を Maildir に変更しました。

sudo nano /etc/postfix/main.cf

設定ファイル内に以下を記載します。

home_mailbox = Maildir/

その後、Postfix を再起動しました。

sudo systemctl restart postfix

ここでは最初、パラメータ名を誤って設定してしまい、変更が反映されない場面がありました。
home_mail_box ではなく、正しくは home_mailbox であることを確認して修正しました。

このあたりは、実際に手を動かしてみないと気づきにくいポイントだと感じました。


⑧ Maildir 配送の再テスト

設定修正後、再度テストメールを送信しました。

echo "Maildir test mail" | mail -s "maildir test" s-hashiba

ログを確認すると、今度は

  • delivered to maildir

という形で出力され、Maildir 形式で配送されたことが確認できました。

さらに、実際に ~/Maildir/new を確認すると、メールファイルが作成されていました。

ls -la ~/Maildir/new

これで、Postfix 側は Maildir 配送に切り替わったことが分かりました。


⑨ Dovecot 側も Maildir を参照するよう変更

次に、受信側である Dovecot も Maildir を参照するように変更しました。

sudo nano /etc/dovecot/conf.d/10-mail.conf

以下のように設定します。

mail_location = maildir:~/Maildir

その後、Dovecot を再起動します。

sudo systemctl restart dovecot

反映確認は次のコマンドで行いました。

sudo doveconf -n | grep mail_location
systemctl status dovecot

mail_location = maildir:~/Maildir となっており、Dovecot も Maildir を参照する状態にできました。


■ 確認結果

今回確認できたことは以下の通りです。

  • Postfix のインストール
  • Dovecot のインストール
  • ローカルユーザー宛メール送信
  • /var/log/mail.log での配送確認
  • /var/mail/ユーザー名 での mbox 配送確認
  • Maildir ディレクトリ作成
  • Postfix の Maildir 配送設定
  • ~/Maildir/new へのメールファイル作成確認
  • Dovecot の mail_location を Maildir に変更
  • Dovecot の正常起動確認

送信側と受信側で、最終的に同じ保存形式を向くところまで確認できたのは大きな収穫でした。


■ 詰まったポイント

① パッケージ名のスペルミス

インストール時にパッケージ名を誤って入力し、対象パッケージが見つからないエラーになりました。

スペルを修正して再実行することで解決しました。


maildirmake コマンドが使えなかった

最初は maildirmake を使おうとしましたが、環境に入っていなかったため使えませんでした。

今回は追加パッケージを入れず、手動で cur/new/tmp を作成して対応しました。


③ Postfix の設定名ミス

Maildir 化の設定で、最初に home_mail_box と誤って書いてしまい、反映されませんでした。

正しくは home_mailbox で、修正後に Maildir 配送へ切り替えることができました。

この1文字の違いで挙動が変わるのは、設定ファイル作業の難しさでもあり、面白さでもあると感じました。


■ 学んだこと

今回の学習で印象に残ったのは、メールサーバは単にインストールするだけではなく、

  • 送信側の役割
  • 受信側の役割
  • 保存形式
  • 設定の整合性

まで見ていく必要がある、ということでした。

特に、Postfix は Maildir に配送しているのに、Dovecot は mbox を参照している、というズレが起きたときに、送信と受信を別々に考える必要があることがよく分かりました。

また、ログを確認しながら進めることで、表面的に「動いた・動かない」だけではなく、どこまで処理が進んでいるのかを追いやすいことも学びになりました。


■ まとめ

今回は VirtualBox 上の Ubuntu Server に、Postfix と Dovecot を導入し、メールシステム構築の基礎を実践しました。

最終的には、

  • ローカルユーザー宛のメール送信
  • ログ確認
  • mbox での配送確認
  • Maildir 形式への切り替え
  • Dovecot の参照先調整

まで進めることができました。

これまで監視、ウイルス対策、DB と進めてきましたが、今回のメールシステム構築もまた、インフラの基礎理解を深める良い練習になったと思います。


■ 今後

一旦他のテーマを勉強しますが、将来的には次のようなことも試してみたいです。

  • IMAP/POP3 ポート確認
  • メールクライアントからの接続確認
  • Zabbix で Postfix / Dovecot の監視
  • 外部配送を意識したDNSやSPF/DKIMの学習

まずは今回の構築内容をしっかり自分のものにして、少しずつ発展させていきたいと思います。