応用

最終更新日:2006-03-12

ここでは、メールサーバを構築する場合において、ありがちな構成での例を実際に挙げながら、Postfixによるその構築方法について示します。

1.DMZ上にスルーサーバ(社外メールサーバ)を構築する例。

以下の図のように、DMZ上にメールサーバ(社外メールサーバ)を配置して、インターネットからのメールをすべてここで受けてから、ファイヤーウォール下の社内メールサーバにリレーする場合の設定です。

この構成のメリットは、ユーザアカウントの登録は内部メールサーバだけにしておく事で、DMZに配置するスルーMailサーバにはユーザのアカウントを登録する必要が無い事です。 インターネットに公開されているのはスルーメールサーバなので、クラッカーから攻撃を受けるのは常にこのスルーメイルサーバですが、万一、クラッキングによってスルーメールサーバが乗っ取られた場合でも、直ちにユーザ情報が盗まれたりパスワードを盗まれる危険性が低くなります。(DMZで使うメールサーバソフトと社内のメールサーバソフトを全く別のソフトで構築するとより効果的です。) 反面、余分なサーバを構築する必要がありコストが膨らみます。(コストを抑える為にDNSとMailサーバを一緒にしてしまうこともあります。)
DMZに置くメールサーバでは受け付けたメールた直ちに社内メールサーバへ転送するのが目的となり、通常はここにはデータは保存されません。 
Postfixによる上図の構成はは以下の設定になります。(社内メールサーバは通常のメールサーバとして構築してください)
(DMZ-Mailサーバの /etc/postfix/main.cf )
# dmz-ms.example.jp の main.cfの内容
#
myhostname = dmz-ms.example.jp
mydomain = example.jp
myorigin = $mydomain
inet_interfaces = all
mydestination = localhost.$mydomain, localhost
mynetworks_style = subnet
mynetworks = 10.1.1.0/24, 127.0.0.0/8, 192.168.1.0/24
relay_domains = example.jp
relayhost = [192.168.1.5]
# relay_recipient_maps = hash:/etc/postfix/relay_recipients
alias_maps = hash:/etc/postfix/aliases
alias_database = hash:/etc/postfix/aliases
message_size_limit = 0
mailbox_size_limit = 0
(内部メールサーバの main.cf の内容)
mydomain = example.jp
myhostname = ms.example.jp
myorigin = $mydomain
inet_interfaces = all
alias_maps = hash:/etc/postfix/aliases
alias_database = hash:/etc/postfix/aliases
mydestination = ms.example.jp, example.jp , localhost, localhost.example.jp
mynetworks_style = subnet
mynetworks = 192.168.1.0/24, 127.0.0.0/8
relayhost = [10.1.1.4]
message_size_limit = 0
mailbox_size_limit = 0
ここでの設定で重要な部分は、スルーメイルサーバにおいて、mydestination の設定に ドメイン名の"example.jp" を含ませない事です。
mydestination に自分のドメインを設定してしまうと、そのドメイン宛のメールをローカルに届いた(この場合には dmz-ms.example.jpに届いた)メールと判断してまい、そのままローカルの宛先に配送してしまいます。 その結果スルーメールサーバ上には(ユーザ登録されていないので)そんな宛先が無いためにエラーメールとなってしまいます。 これを避けるために mydestination には自分のドメインを含ませないようにします。
relay_domains の値として "example.jp" とすることで、 "@example.jp" 宛のメールであった場合には relayhost で指定した内部メールサーバへメールを転送するようになります。
そして、内部メールサーバの ms.example.jp では、mydestination として "example.jp" が含まれているので "@example.jp" 宛のメールを受け取ると自分宛のメールとして判断します。また同じように内部メールサーバでも relayhost を指定しているので、 自分のドメイン(@example.jp)以外の宛先のメール(内部のユーザから外部宛のメールなど)を受信するとそれを relayhost で指定したメールサーバへ転送するよになります。 なおファイヤーウォールで、内部メールサーバからインターネット上のメールサーバに直接配信させる事を許しているなら、relayhost の指定は不要です。(個人的はこのように内部メールサーバから直接配信できる構成をお勧めします)

2.ローカル以外のメールをすべてハブサーバに転送する構築例

支店の規模が大きいなどの理由でメールサーバを複数台で運用するようなケースでは、センター側にハブとなるメールサーバを置いて、社内メールデータのサーバ間のやり取りを必ずハブサーバ経由で行うようにしたケースがあります。このような場合には、/etc/postfix/main.cf の以下の部分を編集します。(ハブサーバは通常の設定で構いません)
(支店1の設定内容)
# 支店側 main.cf の内容
#
mydomain = example.jp
myhostname = ms2.example.jp    
myorigin = $mydomain
inet_interfaces = all
relayhost = [192.168.1.5]
alias_maps = hash:/etc/postfix/aliases
alias_database = hash:/etc/postfix/aliases
fallback_transport = smtp:[192.168.1.5]
mydestination = ms2.example.jp, example.jp , localhost, localhost.example.jp
local_recipient_maps =
mynetworks_style = subnet
mynetworks = 192.168.1.0/24, 192,168.10.0/24, 127.0.0.0/8
以上で、ローカルで処理できないあて先のメールが届いた場合には、ハブのメールサーバへとメッセージが転送されてハブサーバで処理されるようになります。
ハブサーバの設定は以下の通りです。
# ハブメイルサーバ main.cf の内容
# ms.example.jp の main.cfの内容
#
mydomain = example.jp
myhostname = ms.example.jp
myorigin = $mydomain
inet_interfaces = all
alias_maps = hash:/etc/postfix/aliases
alias_database = hash:/etc/postfix/aliases
mydestination = ms.example.jp, ms2.example.jp, example.jp , localhost, localhost.example.jp
mynetworks_style = subnet
mynetworks = 192.168.1.0/24, 192.168.10.0/24, 192.168.20.0/24, 127.0.0.0/8
message_size_limit = 0
mailbox_size_limit = 0

Home

Mailwebmaster@robata.org

Copyright© 1998-2003 ROBATA.ORG