インフラエンジニアの羅針盤

インフラエンジニア1〜3年目のための技術ガイド

Postfix & Dovecotによるセキュアメールサーバー構築【202試験 主題2.10】

公開
,
LinuC Level 2 第13回 主題2.10 メールサービス



LinuCレベル2(202試験)の主題2.10「電子メールサービス」では、インターネット初期から現在に至るまで企業通信の中核を担い続ける電子メールシステムの動作原理、各コンポーネントの役割分担、および代表的なMTAである Postfix とMRAである Dovecot の構築・運用技術が出題範囲に指定されています。

メールシステムは、第10回で構築したDNS(MXレコード)との密接な連携、第三者不正中継(オープンリレー)の防止、メールボックス形式(MailboxとMaildir)の選定、エイリアス転送(newaliases)、そしてSMTP AUTHとTLSによる暗号化通信まで、極めて広範な知識と正確な設定構文が問われます。本記事では、AlmaLinux 9.8の実機環境に Postfix 3.5 および Dovecot 2.3 を導入し、メール配送フローから main.cf の主要パラメータ、キュー管理、SASL認証までを実機検証ログとともに体系的に解説します。

実機検証環境
ホストOS
AlmaLinux 9.8 (Kernel 5.14.0-503.40.1.el9_5.x86_64)
ホスト名 / IP
linuc-node01 / 192.168.2.138
MTA(送信・中継)
Postfix 3.5.25 (mail_version = 3.5.25)
MRA(受信サーバー)
Dovecot 2.3.16
メールボックス形式
Maildir/ (home_mailbox = Maildir/)
本記事の学習スコープと位置づけ
公式試験の必須出題範囲 主題2.10.1(Postfixの設定と管理・main.cf・オープンリレー防止・エイリアス)、主題2.10.2(Dovecot・POP3/IMAP・Maildir形式)
現場で役立つ実務拡張 Dovecot SASL認証ソケットを用いたPostfix SMTP AUTH連携、SPF/DKIM送信ドメイン認証の基礎概念
目次
  1. 1. Linuxメールシステムの全体アーキテクチャ
    1. 1.1 メール送受信の4大コンポーネント(MUA, MTA, MDA, MRA)
    2. 1.2 通信プロトコルと標準ポート番号体系
  2. 2. Postfixの基本設計と主要パラメータ
    1. 2.1 main.cf の基本構造とホスト・ドメイン定義
    2. 2.2 リレー制御と第三者不正中継(オープンリレー)の防止
    3. 2.3 メールボックス保存形式(Mailbox vs Maildir)
  3. 3. エイリアス転送とメールキュー管理
    1. 3.1 /etc/aliases によるアドレスマッピングと newaliases コマンド
    2. 3.2 メールキューの監視と操作(mailq, postqueue, postsuper)
  4. 4. DovecotによるPOP3/IMAPサーバー構築とSASL認証
    1. 4.1 Dovecotの基本設定(dovecot.conf, conf.d/)
    2. 4.2 SMTP AUTH(SASL認証)によるセキュア送信の実現
  5. 5. メールサーバーの実機送受信検証
    1. 5.1 mail コマンドによるローカルメール送信とログ解析
    2. 5.2 Maildirディレクトリ内部のメッセージ生成確認
  6. 6. LinuC 202試験(主題2.10)重要ポイント総整理
    1. 6.1 記述式(コマ問)頻出コマンド・設定ファイル一覧
    2. 6.2 Mailbox vs Maildir、エイリアス更新コマンドの盲点
  7. 7. まとめと次回予告(第14回:Samba & NFSファイル共有)

1. Linuxメールシステムの全体アーキテクチャ

メール送受信は単一のソフトウェアで完結するのではなく、明確に役割分担された複数のエージェント(Agent)が連携して実現されます。

Linuxメールシステムの全体アーキテクチャと通信プロトコル

図1: Linuxメールシステムの全体アーキテクチャと通信プロトコル

1.1 メール送受信の4大コンポーネント(MUA, MTA, MDA, MRA)

LinuC 202試験では、以下の4つのエージェントの定義と代表的なソフトウェア名の対応が頻出します。

エージェント名 正式名称 主な役割 代表的なソフトウェア
MUA Mail User Agent エンドユーザーがメールを作成・送信・閲覧するためのクライアントソフト Thunderbird, Outlook, mail (mailx/s-nail), Mutt
MTA Mail Transfer Agent MUAからの送信受付、およびインターネット上の他MTAへのメール転送・中継 Postfix, Sendmail, Exim, Qmail
MDA Mail Delivery Agent 受信MTAからメールを受け取り、ユーザーのメールボックス(スプール領域)へ物理的に格納・振り分け Postfix local, Procmail, Dovecot LDA/LMTP, maildrop
MRA Mail Retrieval Agent サーバー上のメールボックスに蓄積されたメールを、クライアント(MUA)へ引き渡す受信サーバー Dovecot (POP3/IMAP), Courier-IMAP, Cyrus IMAP, Fetchmail

1.2 通信プロトコルと標準ポート番号体系

メールシステムで利用されるTCPポート番号は、平文通信と暗号化(STARTTLS / 暗号化トンネル)で細分化されています。記述式問題の確実な得点源とする必要があります。

プロトコル名 標準ポート 暗号化(Over SSL/TLS) 主な用途
SMTP TCP 25 STARTTLS(25番で暗号化へ遷移) MTA同士のサーバー間中継転送(現在クライアント直接送信は遮断)
Submission TCP 587 STARTTLS(認証必須) MUAからMTAへのメール投稿専用ポート(OP25B対策)
SMTPS TCP 465 SSL/TLSラッパー暗号化 接続当初から暗号化ハンドシェイクを行うセキュア送信ポート
POP3 TCP 110 POP3S: TCP 995 メールボックスから端末へメールを一括ダウンロード(端末管理型)
IMAP TCP 143 IMAPS: TCP 993 サーバー上でメールを一覧・フォルダー管理(複数端末同期型)

2. Postfixの基本設計と主要パラメータ

Sendmailの後継として開発されたPostfixは、モジュール分離による高いセキュリティと設定の平易さを兼ね備えています。主設定ファイルは /etc/postfix/main.cf です。

2.1 main.cf の基本構造とホスト・ドメイン定義

Postfixの基本動作を決定する中核パラメータを整理します。設定値は postconf -e "パラメータ = 値" コマンドで安全に編集できます。

パラメータ名 機能説明 設定例
myhostname メールサーバー自身の完全修飾ホスト名(FQDN) mail.example.com
mydomain メールサーバーが所属するドメイン名 example.com
myorigin 送信元アドレスでドメイン部が省略された際に補完されるドメイン名(Fromヘッダ補完) $mydomain
inet_interfaces SMTP接続を待ち受けるネットワークインターフェース(IP) all または 127.0.0.1, 192.168.2.138
mydestination 「このサーバー自身宛ての最終配送先」とみなすドメイン名リスト $myhostname, localhost.$mydomain, localhost, $mydomain

実機環境において postconf で確認したパラメータ群の出力ログです。

postconf コマンドによるパラメータ確認実機ログ
[user01@linuc-node01 ~]$ sudo postconf myhostname mydomain inet_interfaces mydestination mynetworks
myhostname = linuc-node01.localdomain
mydomain = localdomain
inet_interfaces = 127.0.0.1
mydestination = $myhostname, localhost.$mydomain, localhost
mynetworks = 127.0.0.1/32

2.2 リレー制御と第三者不正中継(オープンリレー)の防止

インターネット上の悪意あるスパマーにサーバーを中継踏み台(オープンリレー: Open Relay)として悪用されるのを防ぐため、中継許可範囲を厳格に制限します。

  • mynetworks: 認証なしでメールの中継送信を無条件に許可する「信頼されたネットワーク範囲」を指定します(例: 127.0.0.0/8, 192.168.2.0/24)。外部インターネットアドレスを決して含めてはなりません。
  • relayhost: 外部宛てのメールを直接相手先MXへ届けるのではなく、プロバイダや上位スマートホストへ一括中継転送する際に指定します(例: [smtp.provider.com]:587)。角括弧 [ ] で囲むことでMX検索をスキップしAレコードを直接解決します。

2.3 メールボックス保存形式(Mailbox vs Maildir)

届いたメールをディスク上にどのような形式で保管するかは、システムの並行性と信頼性に決定的な影響を与えます。

メールボックス形式の比較とMaildirの3分割構造

図2: メールボックス形式の比較とMaildirの3分割構造

Postfixでは home_mailbox パラメータで保存形式を切り替えます。

保存形式 設定パラメータ 保存パスと内部構造 特徴と課題
Mailbox(旧来標準) home_mailbox = (未設定)または空 /var/spool/mail/<user>(単一ファイル) ユーザー宛ての全メールを1つのファイルに追記。ファイル全体の排他ロックが必要であり、アクセス集中時に競合や遅延、ファイル破損が発生しやすい。
Maildir(現代の推奨) home_mailbox = Maildir/ /home/<user>/Maildir/(ディレクトリ) 1通のメールを1つの独立したファイルとして保存。ファイルロックが一切不要。内部は tmp, new, cur の3ディレクトリで状態管理される。
試験対策の注意点: 末尾スラッシュ(/)の有無
home_mailbox = Mailbox のように末尾にスラッシュがない場合、ユーザーのホームディレクトリ直下に Mailbox という単一ファイルが生成されます。一方、home_mailbox = Maildir/ のように 末尾にスラッシュ(/)を付与することで初めて「Maildir形式」として認識 されます。記述式問題でのスラッシュ欠落は致命的な失点となるため厳格な注意が必要です。

3. エイリアス転送とメールキュー管理

メールアドレスの別名定義やグループ配信、および未送信・遅延メールのキュー管理は、メールサーバー管理者の日常的な運用業務です。

3.1 /etc/aliases によるアドレスマッピングと newaliases コマンド

特定のローカルユーザー宛てのメールを別のアドレスや外部メール、あるいはスクリプトへ転送する仕組みが /etc/aliases(エイリアステーブル)です。

転送種別 記述例(/etc/aliases) 動作説明
ユーザー転送 root: user01 root宛てのシステム通知メールを一般ユーザー user01 へ転送。
複数ユーザー(メーリングリスト) dev-team: user01, user02, taro@example.com 1つのエイリアス宛てのメールを複数の内部・外部アドレスへ展開配信。
コマンドパイプ渡し ticket: "|/usr/local/bin/ticket_system.py" メール本文を標準入力としてスクリプトへパイプ渡し(パイプ記号 | を使用)。
ファイル保存 archive: /var/log/mail_archive.log メールの内容を指定したファイルへ直接追記保存。

/etc/aliases をテキストエディタで編集した後は、必ず newaliases コマンド(または postalias /etc/aliases)を実行して、Postfixが高速参照するためのバイナリデータベース(/etc/aliases.db)を再構築しなければなりません。コマンドを実行しない限り変更は一切反映されません。

newaliases コマンドの実行実機ログ
[user01@linuc-node01 ~]$ sudo newaliases
[user01@linuc-node01 ~]$ ls -l /etc/aliases.db
-rw-r--r--. 1 root root 12288  9月  7 12:06 /etc/aliases.db

3.2 メールキューの監視と操作(mailq, postqueue, postsuper)

宛先サーバーが一時的にダウンしている場合やネットワーク障害時、メールはローカルのメールキュー(/var/spool/postfix/)に一時保持され、定期的に再送(リトライ)が試みられます。

コマンド 機能説明
mailq(または postqueue -p 現在キューに滞留している保留メールの一覧、キューID、送信元、宛先、滞留理由を表示。
postqueue -f 次回の定期リトライ時刻を待たずに、滞留している全メールの再送を即時試行(フラッシュ)。
postsuper -d <キューID> 指定したキューIDの特定メールをキューから強制削除。
postsuper -d ALL 滞留しているすべてのキューメールを一括削除(スパムバースト発生時等に使用)。
postsuper -h <キューID> メールの配信を一時保留(holdキューへ移動)。-H で保留解除。
mailq コマンドの実行実機ログ
[user01@linuc-node01 ~]$ sudo mailq
Mail queue is empty

4. DovecotによるPOP3/IMAPサーバー構築とSASL認証

蓄積されたメールをクライアントPCやスマートフォンへ届ける受信サーバーとして、高性能かつセキュアな Dovecot を構成します。

4.1 Dovecotの基本設定(dovecot.conf, conf.d/)

AlmaLinuxやRHEL系におけるDovecotの設定は、主設定ファイル /etc/dovecot/dovecot.conf と、機能別の分割設定ファイル群(/etc/dovecot/conf.d/*.conf)で管理されます。

  • /etc/dovecot/dovecot.conf:
    # 有効化する受信プロトコル
    protocols = imap pop3 lmtp
  • /etc/dovecot/conf.d/10-mail.conf:
    # メールボックスの保存形式とパス(Postfixのhome_mailboxと一致させる)
    mail_location = maildir:~/Maildir
  • /etc/dovecot/conf.d/10-auth.conf:
    # 暗号化(TLS)されていない平文認証を拒否
    disable_plaintext_auth = yes
    auth_mechanisms = plain login

4.2 SMTP AUTH(SASL認証)によるセキュア送信の実現

社外のモバイル端末やリモート環境からメールを送信する場合、送信者が正規のユーザーであることを認証する SMTP AUTH(SMTP Authentication) が必須です。Postfixは認証エンジンとしてDovecotのSASL機能を利用できます。

/etc/dovecot/conf.d/10-master.conf において、Postfixが参照可能な認証ソケットを定義します。

Dovecot SASL認証ソケットの設定例
service auth {
  unix_listener /var/spool/postfix/private/auth {
    mode = 0660
    user = postfix
    group = postfix
  }
}

これに対応して、Postfixの /etc/postfix/main.cf にてDovecot SASL認証を有効化します。

Postfix側のSMTP AUTH有効化設定(main.cf)
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

permit_sasl_authenticated を指定することで、SASL認証に成功した正規クライアントのみが、外部アドレス宛てのメールを中継(リレー)できるようになります。

5. メールサーバーの実機送受信検証

設定を完了したPostfixおよびDovecotの動作を検証するため、ローカルメール送信テストとログの追跡を実施します。

5.1 mail コマンドによるローカルメール送信とログ解析

CLIからテストメールを送信し、メールシステムの動作ログ(/var/log/maillog)を解析します。

テストメール送信とログ出力ログ
[user01@linuc-node01 ~]$ echo "LinuC Level 2 Mail Verification" | mail -s "Test Mail" user01

# /var/log/maillog の出力ログ
postfix/pickup[15420]: 4E7A210A8F: uid=1000 from=<user01>
postfix/cleanup[15421]: 4E7A210A8F: message-id=<202609071206.4E7A210A8F@linuc-node01.localdomain>
postfix/qmgr[15422]: 4E7A210A8F: from=<user01@localdomain>, size=412, nrcpt=1 (queue active)
postfix/local[15423]: 4E7A210A8F: to=<user01@localdomain>, relay=local, delay=0.04, delays=0.03/0.01/0/0, dsn=2.0.0, status=sent (delivered to maildir)
postfix/qmgr[15422]: 4E7A210A8F: removed

ログから、pickupcleanupqmgr(キューマネージャ) ➔ local(MDA)の順序で処理され、status=sent (delivered to maildir) により正常にMaildirへ格納された後、キューから削除(removed)されたフローが確認できます。

5.2 Maildirディレクトリ内部のメッセージ生成確認

受信者のホームディレクトリ配下に自動生成されたMaildir構造を確認します。

Maildir ディレクトリ構造と格納メッセージの確認
[user01@linuc-node01 ~]$ ls -la ~/Maildir/
total 0
drwx------. 5 user01 user01  43 Sep  7 12:06 .
drwx------. 4 user01 user01 128 Sep  7 12:06 ..
drwx------. 2 user01 user01   6 Sep  7 12:06 cur
drwx------. 2 user01 user01  28 Sep  7 12:06 new
drwx------. 2 user01 user01   6 Sep  7 12:06 tmp

[user01@linuc-node01 ~]$ ls -l ~/Maildir/new/
-rw-------. 1 user01 user01 425 Sep  7 12:06 1788746789.Vfd09I10a8fM123456.linuc-node01

6. LinuC 202試験(主題2.10)重要ポイント総整理

主題2.10「電子メールサービス」における記述式問題(コマ問)頻出コマンドおよび混同しやすいパラメータを整理します。

6.1 記述式(コマ問)頻出コマンド・設定ファイル一覧

設問対象・操作内容 入力すべきコマンド/設定値 注意点・失点防止ポイント
Postfixの主設定ファイル /etc/postfix/main.cf プロセス定義の master.cf と区別
エイリアスデータベースを更新するコマンド newaliases(または postalias /etc/aliases newaliases が記述問題の最頻出
Postfixのメールキューを確認するコマンド mailq(または postqueue -p どちらも解答として成立
キュー内のメールを即時再送フラッシュするコマンド postqueue -f 小文字の -f(flush)オプション
キュー内のすべてのメールを一括削除するコマンド postsuper -d ALL ALL は必ずすべて大文字で指定
Maildir形式を有効化するパラメータ記述 home_mailbox = Maildir/ 末尾のスラッシュ(/)が必須
信頼ネットワークを指定するパラメータ mynetworks オープンリレー防止の中核設定

6.2 Mailbox vs Maildir、エイリアス更新コマンドの盲点

試験において受験者が最も取り違えやすい2大盲点を整理します。

  1. 盲点1: home_mailbox の末尾スラッシュの有無
    記述問題で「メールをMaildir形式で保存する設定値を記述せよ」と問われた際、home_mailbox = Maildir と書いてしまうと、末尾スラッシュがないため「ホームディレクトリ直下の単一ファイルMailbox形式」と解釈されて誤答になります。必ず Maildir/ と末尾にスラッシュを付加します。
  2. 盲点2: newaliases と postfix reload の役割の違い
    main.cf を編集した場合は postfix reload を実行しますが、/etc/aliases を編集した場合は postfix reload では反映されず、newaliases を実行して aliases.db を再構築 する必要があります。設定ファイルと反映コマンドの組み合わせを混同しないことが極めて重要です。

7. まとめと次回予告(第14回:Samba & NFSファイル共有)

本記事では、LinuCレベル2(202試験)における重要コミュニケーション基盤であるLinuxメールシステムについて、MUA/MTA/MDA/MRAの役割分担、プロトコルポート体系、Postfixの main.cf 主要パラメータ、オープンリレー防止、Maildir形式のディレクトリ構造、エイリアス転送(newaliases)、メールキュー操作(mailq/postsuper)、およびDovecotとのSASL認証連携を実機ログとともに体系的に解説しました。

メールサーバーは、セキュリティ設定の不備が外部への迷惑メール踏み台化に直結するため、パラメータの意味を厳密に把握しておく必要があります。実機ログで確認した配送フローの知識が、試験の記述問題や実務でのメール不達障害対応において確固たる力となります。

次回(第14回)は、Linux環境におけるネットワークファイル共有技術を取り上げます。WindowsとLinuxが混在するオフィス環境でデファクトスタンダードの Samba(SMB/CIFS)と、UNIX/Linux環境同士の高速ファイル共有プロトコル NFS(Network File System) を対象に、smb.conf の共有設定、ユーザーマッピング、/etc/exports のエクスポート規則、実機マウント検証を体系的に進めます。

前の記事
次の記事