Postfix

Postfixの仮想ドメインホスティングに関する設定方法 - Postfix解説文書

原文(英語)はこちら


この文書の目的

この文書の内容はPostfixのバージョン2.0以降を対象にしています。

この文書では、複数のインターネットドメインに関するメールを管理するにはPostfixをどのように設定すればいいのかについて概要を説明しています。対象ドメインは、そのマシン自身が最終配信先となっている場合も、どこか別の宛先に転送することを目的としている場合もあります。

ここでは、Postfixに組み込まれている配信のしくみだけでなく、Postfix以外のメール配信ソフトを利用するためのポイントについても紹介しています。

この文章では以下の話題について説明しています。

正規ドメイン、ホストドメイン、その他のドメイン

ほとんどのPostfixシステムは、いくつかのドメイン名のみを最終的な宛先としています。これらのドメイン名には、Postfixが動作するマシンのホスト名と[IPアドレス]が含まれ、さらにはホスト名の親ドメインも含まれることもあります。以降この文書では、これらのドメインを正規ドメイン(canonical domain)と呼ぶことにします。これらは通常、ADDRESS_CLASS_READMEファイルで定義されているように、Postfixのlocal domainアドレスクラスで実装されています。

Postfixでは、正規ドメイン以外に、任意の数の追加ドメインの最終的な宛先となるように設定することができます。これらのドメインはマシン名に直接関連付けられないので、ホストドメインと呼ばれます。ホストされるドメインは通常、ADDRESS_CLASS_READMEファイルで定義されているように、virtual alias domainアドレスクラスやvirtual mailbox domainアドレスクラスで実装されています。

でも待ってください! まだあります。Postfixは他のドメインのバックアップMXホストとして設定することができます。この場合、Postfixはそれらドメインの最終的な宛先にはなりません。単にプライマリMXホストがダウンしているときにメールをキューに入れ、プライマリMXホストが使用可能になったときにメールを転送するだけです。この機能は ADDRESS_CLASS_README ファイルで定義されているrelay domainアドレスクラスで実装されています。

最後に、Postfixはインターネット上でメールを送信するトランジットホストとして設定することができます。もちろん、Postfixはそのようなメールの最終的な宛先ではありません。この機能は許可されたクライアントやユーザのみが使用でき、ADDRESS_CLASS_READMEファイルで定義されているdefault domainアドレスクラスによって実装されています。

ローカルファイルとネットワークデータベース

ここに示す例では、DBMやBerkeley DBのようなローカルファイルからのテーブル検索を使っています。これらはpostmapコマンドで簡単にデバッグできます:

例: postmap -q info@example.com hash:/etc/postfix/virtual

ローカルファイルをデータベースに置き換える方法については、LDAP_READMEMYSQL_READMEPGSQL_READMEのドキュメントを参照してください。読者は、ネットワークデータベースに移行する前にシステムをローカルファイルで動作させ、postmapコマンドを使用してネットワークデータベース検索がローカルファイル検索と全く同じ結果を生成することを確認することを強く勧めます。

例: postmap -q info@example.com ldap:/etc/postfix/virtual.cf

できるだけシンプルに: 共有ドメイン、UNIXシステムアカウント

追加ドメインをホストする最も簡単な方法は、Postfixのmydestination設定パラメータに列挙されているドメインにドメイン名を追加し、UNIXパスワードファイルにユーザー名を追加することです。

このやり方では、正規ドメインとホストされたドメインを区別しません。それぞれのユーザ名はすべてのドメインでメールを受信できます。

以下の例では、ローカルのPostfixマシンでホストされているドメインとして "example.com "を使用します。

/etc/postfix/main.cf:
    mydestination = $myhostname localhost.$mydomain ... example.com

この方法を使った場合の制限:

この後の例で、この2つの制限に対する解決策を示します。

Postfix仮想ALIASの例: 分離ドメイン、UNIXシステムアカウント

この節で説明する方法を使うと、すべてのホストされたドメインにおいて、電子メールアドレスをなどの情報をそれぞれドメインごとに持つことができます。しかし、ローカルメールボックスへの配送にはUNIXシステムアカウントを使用します。

virtual alias domainsを使うと、ホストされている各アドレスは、ローカルの UNIXシステムアカウントまたはリモートのアドレスの別名として設定されます。以下の例では、example.comドメインでこの仕組みを使う方法を示しています。

 1 /etc/postfix/main.cf:
 2     virtual_alias_domains = example.com ...other hosted domains...
 3     virtual_alias_maps = hash:/etc/postfix/virtual
 4 
 5 /etc/postfix/virtual:
 6     postmaster@example.com postmaster
 7     info@example.com       joe
 8     sales@example.com      jane
 9     # 全メールを受信するには以下の記述をコメントアウト解除してください
10     # @example.com         jim
11     ...virtual aliases for more domains...

注意:

バーチャルファイルを変更したら、"postmap /etc/postfix/virtual" のコマンドを、main.cfのファイルを変更したら"postfix reload" を実行してください。

注意:仮想エイリアスは、ローカルアドレス、リモートアドレス、またはその両方で解決することができます。あなたのマシンのUNIXシステムアカウントで解決できる必要はありません。

仮想エイリアスファイルについて、詳しくは virtual(5)のマニュアルページに、右側の複数のアドレスも含めて記載されています。

バーチャルエイリアスは1つの問題を解決してくれます:それは、各ドメインがそれぞれ独自のメールアドレス情報を持つことができるということです。しかしまだ欠点が一つあります。それは、各バーチャルアドレスはUNIXシステムアカウントの別名になっているということです。バーチャルアドレスを増やすと、UNIXシステムアカウントも増えてしまいます。次の節でこの問題を解決する方法を示します。

Postfix仮想MAILBOXの例: 分離ドメイン、非UNIXアカウント

システムがホストするドメインとユーザーの数が増えるにつれて、すべてのユーザーに独自の UNIX システム アカウントを与えるのは望ましいことではなくなってきます。

Postfixの virtual(8) メールボックス配信エージェントを使うと、すべての受信者アドレスが独自の仮想メールボックスを持つことができます。仮想エイリアスドメインとは異なり、仮想メールボックスドメインでは、各受信者アドレスを別のアドレスに置き換えるという不器用なことをする必要がなく、仮想メールボックスアドレスの所有者がUNIXシステムアカウントを持つ必要もありません。

Postfixのvirtual(8)メールボックス配信エージェントは、受信者のメールアドレスで別のテーブルを検索し、ユーザーのメールボックスのパス名、uid、および gid の情報を得ます。 Maildir 形式の配信は、メールボックスのパス末尾を「/」にすることで有効になります。

複数のテーブルという概念が煩わしいときは、(一旦機能すれば)情報をSQLデータベースに移行できることを思い出してください。この方法を取る場合は、この文書の冒頭にある「ローカルファイルとデータベース」の節を必ず確認してください。

ここに示すのは"example.com"という:仮想メールボックスドメインの例です。

 1 /etc/postfix/main.cf:
 2     virtual_mailbox_domains = example.com ...more domains...
 3     virtual_mailbox_base = /var/mail/vhosts
 4     virtual_mailbox_maps = hash:/etc/postfix/vmailbox
 5     virtual_minimum_uid = 100
 6     virtual_uid_maps = static:5000
 7     virtual_gid_maps = static:5000
 8     virtual_alias_maps = hash:/etc/postfix/virtual
 9 
10 /etc/postfix/vmailbox:
11     info@example.com    example.com/info
12     sales@example.com   example.com/sales/
13     # 全メールを受信するには以下の記述をコメントアウト解除してください
14     # @example.com      example.com/catchall
15     ...virtual mailboxes for more domains...
16 
17 /etc/postfix/virtual:
18     postmaster@example.com postmaster

注意:

仮想ファイルを変更したら「postmap /etc/postfix/virtual」のコマンドを、vmailbox ファイルを変更したら「postmap /etc/postfix/vmailbox」のコマンドを、main.cfのファイルを変更したら「postfix reload」のコマンドをそれぞれ実行してください。

注意: メール配信は、virtual_uid_mapsと および virtual_gid_maps で指定された受信者の UID/GID 権限を使って行われます。Postfix 2.0 以前では、誰でも書き込み可能な親ディレクトリに mailDIR を作成しません。使用する前に、あらかじめ作成しておく必要があります。親ディレクトリの書き込み権限によっては、Postfix が自力で mailBOX ファイルを作成できる場合もありますが、事前に mailBOX ファイルを作成しておく方が安全です。

仮想メールボックス配信エージェントについて詳しくは、virtual(8) のマニュアルページを参照してください。

Postfix以外のメール保存場所: 分離ドメイン、非UNIXアカウント

ここではPostfix 仮想メールボックスを設定するまた別の方法を説明します。繰り返しますが、ホストされているすべてのアドレスは独自のメールボックスを持つことができます。 ただし、virtual(8) 配信エージェントを制御するほとんどのパラメータは使えなくなりました。有効なパラメータはvirtual_mailbox_domainsvirtual_mailbox_maps のみです。これらのパラメータは、不明な受信者宛てのメールを拒否するために必要です。

最終的な配信には Postfix とは別のソフトウェアが使われていますが、すべてが連携して動作するようにするには、Postfix の概念もいくつか知っておく必要があります。この両者をつなぐ役割についての詳細な背景については、ADDRESS_CLASS_README ファイルで定義されているvirtual mailbox domainクラスを参照してください。

この節では、Postfix から見て物事がどのように見えるべきかについて説明します。 Cyrus または Courier maildropに関する具体的な情報については、CYRUS_README または MAILDROP_README を参照してください。

以下に示すのは、Postfix 以外の配信エージェントに配信するホスト型ドメイン example.com の例です。

 1 /etc/postfix/main.cf:
 2     virtual_transport = ...see below...
 3     virtual_mailbox_domains = example.com ...more domains...
 4     virtual_mailbox_maps = hash:/etc/postfix/vmailbox
 5     virtual_alias_maps = hash:/etc/postfix/virtual
 6 
 7 /etc/postfix/vmailbox:
 8     info@example.com    whatever
 9     sales@example.com   whatever
10     # 以下の行をコメントアウト解除するとすべてのアドレスでメールを
11     # 受け取るキャッチオールを実装するよう設定することができます
12     # @example.com      whatever
13     ...他ドメインの仮想メールボックス...
14 
15 /etc/postfix/virtual:
16     postmaster@example.com postmaster

注意:

virtualファイルを更新した後は"postmap /etc/postfix/virtual"のコマンドを、vmailboxファイルを更新した後は"postmap /etc/postfix/vmailbox"のコマンドを、main.cfのファイルを更新した後は"postfix reload"のコマンドをそれぞれ実行してください。

メールの転送ドメイン

メーリングリスト

自動応答


トップページに戻る