Postfixのバーチャルメールボックス

2025/11/16

Postfixで複数ドメインを運用する:4つの方式を理解する

バーチャルドメインの説明

バーチャルドメイン(仮想ドメイン)とは、1台のメールサーバーで複数のドメインのメールを処理する技術です。物理的には1つのPostfixサーバーでありながら、あたかも複数の独立したメールサーバーが存在するかのように動作させることができます。

例えば、以下のような複数のドメインを1台のサーバーで運用できます:

  • company-a.com
  • company-b.jp
  • subsidiary.net
  • old-domain.org

また、同じドメインのサブドメインでメール運用する場合にも必須の技術となります。
バーチャルドメイン、バーチャルメールボックスの歴史は、バーチャルドメインとは にて。

バーチャルドメインの有用性

1. コスト削減

  • サーバー台数を削減し、ハードウェアコストを抑制
  • 管理工数の削減による人件費の節約
  • 電力消費やデータセンター費用の削減

2. 管理の効率化

  • 一元的な管理による運用負荷の軽減
  • バックアップやセキュリティ対策の統合
  • 監視システムの簡素化

3. リソースの有効活用

  • サーバーリソースを複数ドメインで共有
  • 負荷分散の最適化
  • スケーラビリティの向上

4. 柔軟なサービス提供

  • ドメイン単位での細かな設定が可能
  • 企業の合併・分割への迅速な対応
  • マルチテナント環境の実現

Postfixにおける4種類のドメイン運用方式

Postfixでは、複数ドメインを運用するために4つの方式が用意されています。それぞれに明確な役割と用途があり、適切に使い分けることで効率的なメールシステムを構築できます。

4つの方式の比較と優先順位

使い分けまとめ表

優先順位 方式 メールの最終目的地 UNIXアカウント 主な用途 設定の複雑さ
1 mydestination このサーバー(ローカル配送) 必須 サーバー自身のメール ★☆☆
2 virtual_alias_domains 転送先アドレス 不要 エイリアス・転送専用 ★★☆
3 virtual_mailbox_domains このサーバー(仮想メールボックス) 不要 ホスティング・企業メール ★★★
4 relay_domains 別のメールサーバー 不要 ゲートウェイ・中継 ★★☆

重要: Postfixは上記の優先順位で評価を行います。同一ドメインが複数の方式に設定されている場合、優先順位の高い方のみが適用されます。

各方式の詳細解説

1. mydestination方式

概要

最も基本的な方式で、Postfixがローカル配送として扱うドメインを指定します。システムのUNIXアカウント(/etc/passwd)と直接対応し、メールは/var/mail/配下に保存されます。

適用場面
  • メールサーバー自身のホスト名ドメイン
  • 管理者用のシステムメール受信
  • 小規模な社内メールサーバー(10人以下)
  • 開発・テスト環境
メリット・デメリット

メリット:

  • 設定が最もシンプルで理解しやすい
  • システムツール(procmail、mail等)との連携が容易
  • メール配送が高速

デメリット:

  • UNIXアカウントが必須(セキュリティリスク)
  • ユーザー名がメールアドレスの一部になる制約
  • ユーザー名が同じであれば、別ドメインでも同一メールボックスに入ってしまう。
  • 大規模運用には不向き
設定例
# /etc/postfix/main.cf
myhostname = mail.example.com
mydomain = example.com
myorigin = $mydomain
mydestination = $myhostname, localhost.$mydomain, localhost, example.com

# メールアドレス例:
# root@example.com → /var/mail/root
# john@example.com → /var/mail/john (UNIXユーザー「john」が必要)

2. virtual_alias_domains方式

概要

メールアドレスを別のアドレスに転送・エイリアス化する方式です。実際のメールボックスは持たず、転送専用として機能します。

適用場面
  • info@、support@などの共有メールアドレス
  • 部署やグループへの一斉転送
  • ドメイン移行時の旧アドレスから新アドレスへの転送
  • キャッチオールアドレスの設定
メリット・デメリット

メリット:

  • UNIXアカウント不要でセキュア
  • 柔軟な転送ルール設定が可能
  • 複数の転送先を指定可能

デメリット:

  • 独立したメールボックスを持てない
  • 必ず転送先が必要
  • SPF/DKIM/DMARCの考慮が必要
設定例
# /etc/postfix/main.cf
virtual_alias_domains = virtual1.com, virtual2.com, old-company.jp
virtual_alias_maps = hash:/etc/postfix/virtual

# /etc/postfix/virtual
# 個別転送
info@virtual1.com         admin@example.com
support@virtual1.com      team@example.com, leader@example.com

# 部署への転送
sales@virtual2.com        sales-team@example.com
tech@virtual2.com         dev-team@example.com

# キャッチオール(その他全て)
@old-company.jp           archive@new-company.jp

# 設定反映
$ sudo postmap /etc/postfix/virtual
$ sudo systemctl reload postfix

3. virtual_mailbox_domains方式

概要

完全な仮想メールボックスシステムで、UNIXアカウントと独立したメールアカウント管理を実現します。大規模なメールホスティングに最適です。

適用場面
  • メールホスティングサービス
  • 複数企業のメール環境提供
  • 大規模組織のメールシステム
  • SaaSアプリケーションのメール機能
メリット・デメリット

メリット:

  • 完全に独立したメール環境
  • データベース(MySQL/PostgreSQL)連携可能
  • 柔軟なユーザー管理とクォータ設定
  • マルチテナント対応

デメリット:

  • 設定が最も複雑
  • Dovecot等のIMAPサーバーとの連携必須
  • 管理ツールが必要な場合が多い
設定例
# /etc/postfix/main.cf
virtual_mailbox_domains = client1.com, client2.com, hosting.jp
virtual_mailbox_base = /var/mail/vhosts
virtual_mailbox_maps = hash:/etc/postfix/vmailbox
virtual_minimum_uid = 100
virtual_uid_maps = static:5000
virtual_gid_maps = static:5000

# メールボックス用ユーザー作成
$ sudo groupadd -g 5000 vmail
$ sudo useradd -g vmail -u 5000 vmail -d /var/mail/vhosts -m

# /etc/postfix/vmailbox
# メールアドレス → メールボックスパス
admin@client1.com          client1.com/admin/
user1@client1.com          client1.com/user1/
info@client2.com           client2.com/info/
sales@hosting.jp           hosting.jp/sales/

# ディレクトリ作成と権限設定
$ sudo mkdir -p /var/mail/vhosts/client1.com
$ sudo mkdir -p /var/mail/vhosts/client2.com
$ sudo mkdir -p /var/mail/vhosts/hosting.jp
$ sudo chown -R vmail:vmail /var/mail/vhosts

# 設定反映
$ sudo postmap /etc/postfix/vmailbox
$ sudo systemctl reload postfix
データベース連携の例(MySQL)
# /etc/postfix/main.cf(MySQL連携版)
virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql-virtual-domains.cf
virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql-virtual-mailbox.cf

# /etc/postfix/mysql-virtual-domains.cf
user = mailuser
password = mailpassword
hosts = 127.0.0.1
dbname = mailserver
query = SELECT 1 FROM virtual_domains WHERE name='%s'

# /etc/postfix/mysql-virtual-mailbox.cf
user = mailuser
password = mailpassword
hosts = 127.0.0.1
dbname = mailserver
query = SELECT maildir FROM virtual_users WHERE email='%s'

4. relay_domains方式

概要

メールを別のサーバーへ中継(リレー)する方式です。このサーバーは最終的な配送先ではなく、中継点として機能します。

適用場面
  • メールセキュリティゲートウェイ
  • バックアップMXサーバー
  • 支社や関連会社への中継サーバー
  • DMZ配置の中継サーバー
メリット・デメリット

メリット:

  • セキュリティ層の追加が可能
  • 負荷分散とフェイルオーバー対応
  • 内部ネットワークの隠蔽

デメリット:

  • 設定ミスによるオープンリレーのリスク
  • 配送遅延の可能性
  • トラブルシューティングが複雑
設定例
# /etc/postfix/main.cf
# メールゲートウェイとしての設定
relay_domains = protected-company.com, subsidiary.jp
relay_recipient_maps = hash:/etc/postfix/relay_recipients
transport_maps = hash:/etc/postfix/transport

# セキュリティ設定
smtpd_recipient_restrictions = 
    permit_mynetworks,
    reject_unauth_destination,
    reject_unknown_recipient_domain

# /etc/postfix/relay_recipients
# 実在するアドレスのみを登録(バックスキャッター対策)
ceo@protected-company.com         OK
staff@protected-company.com       OK
all@subsidiary.jp                 OK

# /etc/postfix/transport
# 転送先の指定
protected-company.com    smtp:[192.168.1.10]:25
subsidiary.jp           smtp:[mail.subsidiary.jp]:25

# 設定反映
$ sudo postmap /etc/postfix/relay_recipients
$ sudo postmap /etc/postfix/transport
$ sudo systemctl reload postfix

実践的な組み合わせ例

実際の運用では、これらの方式を組み合わせて使用することが一般的です。以下に、典型的な企業環境での設定例を示します。

中規模企業の統合メールサーバー設定例

# /etc/postfix/main.cf
# ========================================
# 基本設定
# ========================================
myhostname = mail.company.com
mydomain = company.com
myorigin = $mydomain
inet_interfaces = all
inet_protocols = ipv4

# ========================================
# 1. ローカル配送(サーバー管理用)
# ========================================
mydestination = $myhostname, localhost.$mydomain, localhost

# ========================================
# 2. 転送・エイリアス用ドメイン
# ========================================
virtual_alias_domains = 
    old-company.com,
    info-domain.jp,
    support-domain.net
    
virtual_alias_maps = hash:/etc/postfix/virtual

# ========================================
# 3. 仮想メールボックスドメイン(メイン)
# ========================================
virtual_mailbox_domains = 
    main-company.com,
    subsidiary-a.jp,
    subsidiary-b.jp
    
virtual_mailbox_base = /var/mail/vhosts
virtual_mailbox_maps = hash:/etc/postfix/vmailbox
virtual_uid_maps = static:5000
virtual_gid_maps = static:5000

# Dovecot連携
virtual_transport = lmtp:unix:private/dovecot-lmtp

# ========================================
# 4. 中継ドメイン(関連会社)
# ========================================
relay_domains = 
    partner-company.com,
    affiliated-org.jp
    
relay_recipient_maps = hash:/etc/postfix/relay_recipients
transport_maps = hash:/etc/postfix/transport

# ========================================
# セキュリティ設定
# ========================================
smtpd_recipient_restrictions =
    permit_mynetworks,
    permit_sasl_authenticated,
    reject_unauth_destination,
    reject_unknown_recipient_domain,
    reject_unverified_recipient

# SPF/DKIM/DMARC対応
smtpd_milters = inet:127.0.0.1:8891
non_smtpd_milters = $smtpd_milters
milter_default_action = accept

# レート制限
smtpd_client_connection_rate_limit = 10
smtpd_client_message_rate_limit = 30

設定ファイルの詳細例

# /etc/postfix/virtual(転送設定)
# ========================================
# 旧ドメインからの転送
@old-company.com           @main-company.com

# サポート窓口
support@info-domain.jp     ticket-system@main-company.com
info@info-domain.jp        sales@main-company.com, marketing@main-company.com

# 部署共有アドレス
helpdesk@support-domain.net    it-team@main-company.com
sales@support-domain.net       sales-all@main-company.com

# /etc/postfix/vmailbox(メールボックス設定)
# ========================================
# メインドメイン
admin@main-company.com         main-company.com/admin/
john.doe@main-company.com      main-company.com/john.doe/
jane.smith@main-company.com    main-company.com/jane.smith/

# 子会社A
president@subsidiary-a.jp      subsidiary-a.jp/president/
staff01@subsidiary-a.jp        subsidiary-a.jp/staff01/

# 子会社B  
manager@subsidiary-b.jp        subsidiary-b.jp/manager/
support@subsidiary-b.jp        subsidiary-b.jp/support/

# /etc/postfix/transport(中継設定)
# ========================================
partner-company.com     smtp:[mail.partner-company.com]:25
affiliated-org.jp       smtp:[192.168.100.50]:25

セキュリティと運用の推奨事項

1. 基本的なセキュリティ設定

# 不正中継の防止
smtpd_relay_restrictions =
    permit_mynetworks,
    permit_sasl_authenticated,
    defer_unauth_destination

# 送信者検証
smtpd_sender_restrictions =
    permit_mynetworks,
    reject_non_fqdn_sender,
    reject_unknown_sender_domain

# SASL認証の設定
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
smtpd_sasl_local_domain = $myhostname

2. ドメイン設定のベストプラクティス

優先順位の考慮

  • 同一ドメインを複数の方式に設定しない
  • 設定前に優先順位を理解し、意図した動作を確認

最小権限の原則

  • mydestinationは最小限に留める
  • 不要なUNIXアカウントは作成しない
  • virtual_mailboxでは専用ユーザー(vmail)を使用

監査とログ

# 詳細なログ設定
maillog_file = /var/log/mail.log
debug_peer_level = 2
debug_peer_list = 127.0.0.1

# 定期的な監査コマンド
$ sudo postconf -n  # 設定確認
$ sudo postmap -q "test@domain.com" hash:/etc/postfix/virtual  # マップ確認

3. パフォーマンスチューニング

# 接続数の最適化
default_process_limit = 100
smtpd_client_connection_count_limit = 10
smtpd_client_connection_rate_limit = 30

# キューの管理
maximal_queue_lifetime = 5d
bounce_queue_lifetime = 5d
maximal_backoff_time = 4000s
minimal_backoff_time = 300s
queue_run_delay = 300s

4. バックアップとリカバリー

# 設定ファイルのバックアップ
$ sudo tar -czf /backup/postfix-config-$(date +%Y%m%d).tar.gz /etc/postfix/

# メールボックスのバックアップ
$ sudo rsync -av /var/mail/vhosts/ /backup/mailboxes/

# キューのバックアップ
$ sudo postsuper -h ALL  # キューをホールド
$ sudo tar -czf /backup/queue-$(date +%Y%m%d).tar.gz /var/spool/postfix/
$ sudo postsuper -H ALL  # ホールド解除

補足情報

トラブルシューティングのヒント

1. 配送先の確認方法
# アドレスがどの方式で処理されるか確認
$ postmap -q "user@domain.com" hash:/etc/postfix/virtual
$ postmap -q "user@domain.com" hash:/etc/postfix/vmailbox

# 配送経路のテスト
$ sendmail -bv user@domain.com
2. よくあるエラーと対処法

"Relay access denied"

  • relay_domainsまたは承認済みネットワークの設定確認
  • SASL認証の設定確認

"User unknown in virtual mailbox table"

  • vmailboxマップの更新忘れ(postmap実行)
  • ディレクトリの作成と権限設定の確認

"mail for domain.com loops back to myself"

  • mydestinationとvirtual_*_domainsの重複確認
  • DNSのMXレコード確認

Dovecotとの連携設定例

# /etc/dovecot/conf.d/10-auth.conf
auth_mechanisms = plain login
!include auth-sql.conf.ext

# /etc/dovecot/conf.d/10-mail.conf
mail_location = maildir:/var/mail/vhosts/%d/%n
mail_uid = vmail
mail_gid = vmail

# /etc/dovecot/conf.d/10-master.conf
service lmtp {
  unix_listener /var/spool/postfix/private/dovecot-lmtp {
    mode = 0600
    user = postfix
    group = postfix
  }
}

移行時の注意点

  1. 段階的な移行

    • まずvirtual_aliasで旧ドメインから転送
    • 動作確認後、virtual_mailboxへ移行
    • 最後に旧設定を削除
  2. DNSの考慮

    • TTLを事前に短縮
    • MXレコードの優先度を活用
    • SPF/DKIM/DMARCレコードの更新
  3. ユーザーへの通知
    • 移行スケジュールの事前通知
    • 新しい設定情報の配布
    • サポート窓口の準備

まとめ

Postfixの複数ドメイン運用は、4つの方式を適切に組み合わせることで、柔軟かつ安全なメールシステムを構築できます。各方式の特徴と優先順位を理解し、要件に応じて最適な設定を選択することが重要です。

特に重要なポイント:

  • mydestination:サーバー自身のメール処理に限定
  • virtual_alias_domains:転送やエイリアスが必要な場合
  • virtual_mailbox_domains:本格的なメールホスティング
  • relay_domains:中継やゲートウェイ機能

セキュリティを常に意識し、定期的な監査とメンテナンスを行うことで、安定した複数ドメイン運用が実現できます。