Postfixのバーチャルドメイン

2010.10.02 0:10
 Postfixはなんでもかんでもかなり簡単にできてうれしい限りです。無理やりPOPサーバーを作るよりも新しいメールアドレスはいつも使っているメールアドレスに転送してしまった方が、設定もいらないし同じメーラーで読めるしいいことだらけのような気がします。そんなわけで、今回はPostfixを使ったメール転送の方法を紹介します。
 前提として、Postfixが正常に動いていることが条件で、最低でも一つのドメイン(メールアドレス)で送受信が既にできていること。まだその設定が終わっていない方は、こちらから設定してみてください。

mail_transfer.jpg 上記のように送信されてきたメール、つまり自分のメールサーバーが受信したメールの行き先をいろいろとコントロールすることができます。PostfixのMTAとしての役目は、
メールを受信する(mydestinationで指定されたドメインのメールを受信する。)
メールを受信した後に、指定の場所に転送する。
というのが主な機能(というよりもこれがすべての機能)です。Postfixでは、通常/etc/postfix/main.cf内のmydestinationで設定されたドメインが最終着地地点となります。ここで着地できなかったメール、つまり受信できなかったメールは、エラーとして返すか、また他のMTAへ送られます。エラーとして返すのは通常の動作ですが、よそのMTAに送られるというのはメール送信の踏み台になってしまうのでこれはあらかじめ防止しておいた方がいいです。そんなわけですから、結局は自分のサーバーがメールの終着地点となります。
 しかし、終着した場合にもそれぞれの行き先をコントロールすることができます。

2つの違うドメインのメールアドレスを1つのメールボックス(1人のユーザー)に配信する

 先に前提を説明した通りに、既にあなたのメールサーバーでは1つのドメインで1人のユーザーが利用可能になっていると思います。その時にもう一つの違うドメインで同様に受信をしたいという場合があります。そのような時は、/etc/postfix/main.cfの1行に新しいドメインを加えるだけでOKです。
mydestination = example.com, lily, localhost.localdomain, localhost, example.net
コンマで区切って追加するドメインを加えてゆきます。確か半角で区切ってもよかったと思います。設定後はもちろん、
# /etc/init.d/postfix restart
で再起動してください。これだけで、<ユーザー名>@example.netでも<ユーザー名>@example.comでも同様に受信することができます。(届くことは届きますが、ひょっとしたらエラーメールとともに...ということになるかもしれません。)

2つの違うドメインのメールアドレスを2つの違うメールボックス(それぞれ違うユーザー)に配信する

 実際はこちらの使い方の方がニーズが多いと思います。2つ違うドメインがあれば、2人の違うユーザーにそれぞれ配信するということの方が一般的であると思います。example.comはaaaに。example.netはbbbにといった具合です。こういう場合は、バーチャルドメインという非常に便利な機能がpostfixに備わっています。
 この設定において注意すべき点は、バーチャルドメインで使用するドメインは必ず、上記の設定部分のmydestinationから外しておくことです。これを忘れるとダメです。
 システムの歴史的な経緯として、そもそもは1つのマシンには1つのドメインで名前がつけられているというのがその本来の姿でした。(もっと昔は、1つのマシンに1つのホスト名でした。ドメインという概念がなかったのです。)そのため1つのサーバーで複数のドメインを使用する場合は、バーチャルドメインという比較的新しい技術でもって実現する他ありません。バーチャルドメインは、その歴史的な経緯から、1つのメインドメインの代用として使用しますので、そのメインのドメインの設定を抜いたり削除したりすると機能しなくなります。つまりメインのドメイン(mydestinationで方向付けされたドメイン)のゴーストみたいな感じで機能するわけです。そんなわけでバーチャルドメインで設定されたドメインは、DNSサーバーなどで同じマシンに向けてIPアドレスを設定しておかなくてはいけません。(これはまた別項で)
 2つのドメインを1つのメールサーバーで使用する際には、virtual_alias_domains、virtual_alias_mapsを使って設定します。まずは、お馴染みの/etc/postfix/main.cfの設定です。/etc/postfix/main.cfにバーチャルドメインの設定を明示的に書き込まないといけません。以下のように追加設定します。
virtual_alias_domains = example.net, example.org
virtual_alias_maps = hash:/etc/postfix/virtual
 virtual_alias_domainにはバーチャルドメインとして使用するドメインを記述します。複数羅列する際には先ほどのようにコンマで区切って設定します。virtual_alias_mapsは上記のままでよいと思います。
 この場合、メインドメインは、example.comとしてmydestinationに記述されているものとします。
 そして、virtual_alias_mapsに指定されたパスにファイルを作成します。もし/etc/postfix/virtualというファイルがない場合は手動で作成してください。オーナーはrootで、パーミッションは644でいいです。
# touch /etc/postfix/virtual
# chown root. /etc/postfix/virtual
# chmod 644 /etc/postfix/virtual
というような感じです。

 さて、/etc/postfix/virtualの書き方です。vimなどで開いて編集します。
# Virtual Domainの設定
info@example.net info@gmail.com
というように書きます。このバーチャルドメインの設定の場合は、@以前の文字列は何でも構いません。適当な文字列でよいです。特にユーザー名である必要もありません。@以下がきちんとvirtual_alias_domainsに設定されていれば、そのドメインを含んだメールアドレスはすべて受信できます。
 編集が終わったら保存して、postmapしておきます。
# postmap /etc/postfix/virtual
ファイル設定に問題がなければ次のプロンプトが表示されます。問題があったら、何らかのエラーメッセージがでるはずです。もちろんこの場合もpostfixを再起動させておきましょう。
 これでバーチャルドメインinfo@example.netは、info@gmail.comに転送されます。バーチャルドメインで受け取ったメールはこのようにして任意の方向へ転送することができるわけです。









プロフィール



  • Name :: 山上オサム ♂(39)
  • Hobby :: 武術
  • Work :: Web Designer