このページではLinux構築した自宅サーバーで使用するPostfixでの、/etc/postfix/virtualによるメールの振分けについて初心者向けに解説します。
お便利サーバー.com+相互リンクサイト内をキーワードで検索
Postfixの設定

Postfixについて

Postfixのファイル構成

設定ファイルmain.cfについて

ホスト名とドメイン名の設定

受信するホスト名の設定

ホスト名毎のメールの振分け

メール転送設定の使い分け

受信/転送に関する設定

セキュリティ関連の設定

"main.cf"の書式チェック

Postfixのコントロール

連携するアプリケーション


ホスト名ごとのメールボックス振分け

Postfix の利用で、 "mydestination" ディレクティブ の記述 受信するホスト名の設定 だけで自 ホスト 宛のメールアドレスを設定した場合、ちょっと困ることがあります。

それは、例えば "tanaka@obenri.com" "tanaka@mail.obenri.com" "tanaka@ugegege.com" など、 アカウント の部分が "tanaka" であるメールアドレス宛のメールデータは、メールアドレスとしてはすべて異なるにも係わらず、ひとつのメールボックス "/var/spool/mail/tanaka" に書き込まれることです。

これらのメールアドレスの利用者がすべて同じ人であれば良いのですが、それぞれのユーザーが別人である場合はちょっと困ったことになります。

もしもアカウント名にこだわりがなければ、例えばユーザーアカウントを、 "t_tanaka" "s_tanaka" のように別々に作成して、メールアドレスごと別にしてしまうという強引な方法もあります。

しかし普遍的なメールアドレスの場合、例えば、 "webmaster@obenri.com" を既にあなたが使っているとすると、 "webmaster@ugegege.com" は別の人に使わせることができなくなってしまうことになります。

こういう場合に役に立つのが、 "virtual_alias_maps" ディレクティブ を利用したメールデータの振分け機能です。

この機能は自ホスト宛のメールアドレスの "@" 以降を検査し、サーバー内の特定のアカウントのメールボックスに書き込む仕組みを提供するもので、 サブドメイン や異なる ドメイン名 をひとつのPostfixで扱うときに、上のような不具合を解消します。

以下に、その使用方法について説明します。

関連セクションへ 関連セクション・ メールサーバーの構築

"virtual_alias_maps"の指定

"/etc/postfix/main.cf" 内に記述する ディレクティブ で、別途作成するメール受信 アカウント 振分け用の データベース を指定します。

デフォルト では "/etc/postfix/main.cf" 内に記述はありませんので、新規に記述します。

記述の場所は任意ですが、ここに記述するメールアドレスの ホスト名 "mydestination" ディレクティブ mydestinationディレクティブについて の記述から除外したほうが良い場合がありますので(後述します)、その記述の直後に記述するといいでしょう。

データーベース名には任意のファイル名を指定することができますが、ここでは "/etc/postfix/virtual_users.db" というファイル名でデータベースを作成するものとします。

この場合、

mydestination = $mydomain, $myhostname
virtual_alias_maps = hash:/etc/postfix/virtual_users

と記述します。

Postfixの構築に
役に立った一冊です

実際に参照するデータベースには末尾に ".db" が付加されますが、"virtual_alias_maps"ディレクティブには ".db" は省略して記述します。

また、 WBEL CentOS インストール される Postfix ではhash形式が標準のデータベース形式として扱われますので、 パラメータの先頭には "hash:" を記述しておきます。

設定を有効にするにはファイルを保存してnanoエディタを終了し nanoエディタでファイルを閉じる 、Postfixの再起動または設定の再読み込みを行ってください Postfixのコントロールについて

関連セクションへ 関連セクション・ メールサーバーの構築

このページの先頭へ↑

メール受信アカウント振り分け用データベースの作成

次に、具体的にメールボックスの振分けを行う データベース を作成しましょう。

例えば以下のような方法で新規に テキスト ファイル "/etc/postfix/virtual_users"を作成してください。

[root@web1 ~]# echo > /etc/postfix/virtual_usersEnter echoコマンドの説明 出力のリダイレクトの説明
[root@web1 ~]#

この"/etc/postfix/virtual_users"をnanoエディタで開き nanoエディタでファイルを開く

[受信対象のメールアドレス] [書き込み先のアカウント]

という書式で記述を行います。

一つの設定は一行で記述し、二つのパラメータの間は空白またはタブで区切ります。

例えば以下のように記述します。

webmaster@obenri.com    webmas_obenri
webmaster@ugegege.com    webmas_ugegege

この設定によって、 "webmaster@obenri.com" 宛てのメールは ユーザーアカウント "webmas_obenri" のメールボックスへ、 "webmaster@ugegege.com" 宛てのメールはユーザーアカウント "webmas_ugegege" のメールボックスへ書き込まれることになります。

記述が終わったら"/etc/postfix/virtual_users"を保存し、nanoエディタを閉じます nanoエディタでファイルを閉じる

次に postmap コマンド を使ってこの テキストファイル バイナリ 形式の データベース "/etc/postfix/virtual_users.db" に変換します。

[root@web1 ~]# postmap /etc/postfix/virtual_usersEnter
[root@web1 ~]# ls -l /etc/postfix/virtual_users.dbEnter lsコマンドについて
-rw-r--r--  1 root  root   12288 4月 16 21:46 /etc/postfix/virtual_users.db
[root@web1 ~]#

次に、 useradd コマンドで書き込み先のユーザーアカウントをそれぞれ作成します。 MUA で受信するためのパスワードも passwd コマンドで設定しておきましょう。

[root@web1 ~]# useradd webmas_obenriEnter
[root@web1 ~]# passwd webmas_obenriEnter
Changing password for user webmas_obenri.
New password: 新しいパスワードを入力します。Enter
Retype new password: もう一度新しいパスワードを入力します。 Enter
passwd: all authentication tokens updated successfully.
[root@web1 ~]# useradd webmas_ugegegeEnter
[root@web1 ~]# passwd webmas_ugegegeEnter
Changing password for user webmas_ugegege.
New password: 新しいパスワードを入力します。Enter
Retype new password: もう一度新しいパスワードを入力します。 Enter
passwd: all authentication tokens updated successfully.
[root@web1 ~]#

以上で設定は終わりです。

この場合、メールアドレス "webmaster@obenri.com" を利用するユーザーのMUAの設定パラメータは以下のようになります。

メールアドレス: webmaster@obenri.com

受信メールサーバー(POP3): mail.obenri.com

送信メールサーバー(SMTP): mail.obenri.com

アカウント名またはユーザー名: webmas_obenri

パスワード: web1.obenri.comシステム上のwebmas_obenriのパスワード

一方、メールアドレス "webmaster@ugegege.com" を利用するユーザーのMUAの設定パラメータは以下のようになります。

メールアドレス: webmaster@ugegege.com

DNSサーバー "mail.ugegege.com" が設定済みであれば、それを設定することもできます。

受信メールサーバー(POP3): mail.obenri.com

送信メールサーバー(SMTP): mail.obenri.com

アカウント名またはユーザー名: webmas_ugegege

パスワード: web1.obenri.comシステム上のwebmas_ugegegeのパスワード

以上が"/etc/postfix/virtual_users"を用いた基本的な「ホスト名ごとのメールの振分け」の設定になります。

関連セクションへ 関連セクション・ メールサーバーの構築

このページの先頭へ↑

"virtual_alias_domains"の使用について

"/etc/postfix/virtual_users.db" は、 構築中のLinuxサーバー が受信するメールアドレスの設定 "mydestination" ディレクティブ 受信するメールアドレスの設定 が評価された後に参照されますから、左側のパラメータ [受信対象のメールアドレス] は必ず"mydestination"ディレクティブで受信が有効になっている ホスト名 のメールアドレスを設定する必要があります。

また、 [書き込み先のアカウント] が存在しない場合は「宛先不明」として処理されますので、同じ名前の アカウント の作成も忘れないようにしてください。

さて、"/etc/postfix/virtual_users.db"の利用については、一つ大きな注意点があります。それは例えば "tanaka@obenri.com" "tanaka@ugegege.com" の振分けにおいて、既に 構築中のLinuxサーバー 上に "tanaka" というアカウントが存在するケース、つまり一般的にいうと、

「メールのアカウント名と同名のアカウントがシステム上に存在する場合」

の扱いが難しくなるということです。

通常 Postfix は、例えば "tanaka@[ホスト名]" 宛てに送られてきたメールデータについて、ホスト名が"mydestination"ディレクティブと一致した場合には、 "@" より前の部分のアカウント名に一致するアカウントを 構築中のLinuxサーバー 上から探し、メールボックスへの保存を試みます。

ところが、"/etc/postfix/virtual_users.db"に有効な設定が存在すると、同名のアカウントへの書き込みを試みる前に"/etc/postfix/virtual_users.db"が参照されるようになります。

そして"/etc/postfix/virtual_users"に記述された上の行から順に評価され、書き込みの条件が一致してメールボックスへの書き込みが終了した段階で処理が終了します。

そして、もしも"/etc/postfix/virtual_users.db"で設定されたどの条件とも一致しなかった場合に、Postfixは 同名のアカウントへの書き込みを試みる ことになります。

ということは、例えば"mydestination"ディレクティブに、

mydestination = $mydomain, $myhostname, mail.$mydomain, ugegege.com

という設定があり、"/etc/postfix/virtual_users"で、

tanaka@obenri.com    tanaka
tanaka@ugegege.com    tanaka_ugegege

という設定を有効にしているとすると、"/etc/postfix/virtual_users"に明示されていない "tanaka@mail.obenri.com" 宛てのメールは、アカウント "tanaka" のメールボックスに書き込まれることになります。

従って、「アカウント "tanaka" は、 "tanaka@obenri.com" 宛てのメール以外は受け付けない。」という設定にしたければ、"/etc/postfix/virtual_users"には、

tanaka@mail.obenri.com宛てのメールは「宛先不明」として処理したいので、存在しないアカウント "no_user" に対して架空の転送処理を行います。
tanaka@obenri.com    tanaka
tanaka@mail.obenri.com  no_user
tanaka@ugegege.com    tanaka_ugegege

と、"mydestination"ディレクティブに記述されているすべてのホスト名について明示的に設定しなければならないことになります。

もちろんこの程度であれば大した面倒でもないのですが、Postfixで扱う ドメイン名 が増えると、"/etc/postfix/virtual_users"にはその都度記述を増やさなければなりません。

例えば"mydestination"ディレクティブが、

mydestination = $mydomain, $myhostname, mail.$mydomain, ugegege.com,
        aa.ugegege.com, okekeke.com, obibibi.com

となった場合、"/etc/postfix/virtual_users"は、

tanaka@obenri.com    tanaka
tanaka@mail.obenri.com  no_user
tanaka@ugegege.com    tanaka_ugegege
tanaka@aa.ugegege.com  no_user
tanaka@okekeke.com    no_user
tanaka@obibibi.com    no_user

「受信をしないためのやむをえない記述」 ばかりになってしまいます。

ここではアカウント "tanaka" に限って説明しているので記述はまだ簡単ですが、メールサーバーを利用するユーザーの数だけこの 「受信をしないための記述」 をしなければならないことを考えると、実際の設定作業は恐ろしく面倒なことになるでしょう。

ところが、 構築中のLinuxサーバー "tanaka" というアカウントが存在せず、 "tanaka@obenri.com" 宛てのメールを受信するアカウントとして "tanaka_obenri" を使うとすれば、"/etc/postfix/virtual_users"の設定は、

tanaka@obenri.com    tanaka_obenri
tanaka@ugegege.com    tanaka_ugegege

だけで済みます。

今度は "tanaka" というアカウントがシステム上に存在しないわけですから、この"/etc/postfix/virtual_users"に記述されていない "tanaka@[ホスト名]" 宛てのメールは書き込み先のメールボックスが存在せず、自動的に「宛先不明」として処理されることになります。

同じ理由から、"mydestination"ディレクティブの記述がいくら増えても、このケースでは"/etc/postfix/virtual_users"への記述の修正や追記の必要はありません。

結局のところ、複数のホスト名を併用する場合の運用のコツは、

「メールアドレスのアカウント名と、サーバー上のアカウントを同じ名前にしないように運用する。」

ということに尽きるかもしれません。

ところでPostfixには、こういったケースに予め対処するため、 "/etc/postfix/main.cf" 内に記述する ディレクティブ として、

「"/etc/postfix/virtual_users"でメールアドレス一致しなかったとき、他のホスト名との評価をせずに宛先不明として処理するホスト名を指定する。」

という働きをする、 "virtual_alias_domains" があります。

デフォルト では "/etc/postfix/main.cf" 内に記述はありませんので、新規に記述します。

記述の場所は任意ですが、ここに記述する ホスト名 "mydestination" ディレクティブ mydestinationディレクティブについて の記述から除外しなければなりませんので、使用する際はその記述の直後に記述するといいでしょう。

例えば、

mydestination = $mydomain, $myhostname
virtual_alias_domains = mail.$mydomain, ugegege.com

という記述を行うと、 "tanaka@mail.obenri.com" 宛てに送られてきたメールは、"/etc/postfix/virtual_users"内に"tanaka@mail.obenri.com"に関する転送設定が記述されていない場合、サーバーシステム内に "tanaka" というアカウントが存在していてもメールボックスに書き込まれることはなく、「宛先不明」として処理されるようになります。

一般に バーチャルホスト としてのメールアドレスはこのような「独立的な」扱いが多いので、メールアドレスのホスト名として後から追加する場合はこのvirtual_alias_domains"に記述しておくほうが良いと思われます。

なお、ここでは"virtual_alias_domains"の記述について、 "/etc/postfix/main.cf" に直接ホスト名を記述しましたが、設定するホスト名が多いときはホスト名のリストファイルを作成して利用することもできます。

また、リストファイルを データベース すれば大量のホスト名をダイナミックに利用することもできます。

もちろん、個人の用途でしたらリストやデータベースに頼る必要はないでしょうから、ここでの説明は割愛します。

関連セクションへ 関連セクション・ メールサーバーの構築

このサイトは既に更新を終了していますが、今のところ店じまいの予定はありません。 リンクフリー ですので、趣味や勉強のためでしたら、引用、転用、コピー、朗読、その他OKです。このサイトへのリンクについては こちら をご覧ください。
Powered by Apache
”Linux”は、Linus Torvalds 氏の各国における登録商標です。”Red Hat”及びRed Hatのロゴおよび Red Hat をベースとしたすべての商標とロゴは、各国におけるRed Hat, Inc. 社の商標または登録商標です。その他のプログラム名、システム名、製品名などは各メーカー、ベンダの各国における登録商標又は商標です。
www.centos.org - The Community ENTerprise Operating System