Postfixのバーチャルメールボックス
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
}
}
移行時の注意点
段階的な移行
- まずvirtual_aliasで旧ドメインから転送
- 動作確認後、virtual_mailboxへ移行
- 最後に旧設定を削除
DNSの考慮
- TTLを事前に短縮
- MXレコードの優先度を活用
- SPF/DKIM/DMARCレコードの更新
- ユーザーへの通知
- 移行スケジュールの事前通知
- 新しい設定情報の配布
- サポート窓口の準備
まとめ
Postfixの複数ドメイン運用は、4つの方式を適切に組み合わせることで、柔軟かつ安全なメールシステムを構築できます。各方式の特徴と優先順位を理解し、要件に応じて最適な設定を選択することが重要です。
特に重要なポイント:
- mydestination:サーバー自身のメール処理に限定
- virtual_alias_domains:転送やエイリアスが必要な場合
- virtual_mailbox_domains:本格的なメールホスティング
- relay_domains:中継やゲートウェイ機能
セキュリティを常に意識し、定期的な監査とメンテナンスを行うことで、安定した複数ドメイン運用が実現できます。