|
||
|
宛先により配送先を振り分けるメールサーバ他のパターンはPostfixでメールサーバを構築する(解説)も参照してください。インバウンドにしろアウトバウンドにしろ、メールは宛先によってサーバを振り分けたいことがよくあります。 たとえば学校など、生徒用メールサーバと教員用メールサーバは分かれているが、外部からは一台のサーバで受け付けることがよくあります。 送信時も、企業がメールを送信するとき、グループ企業用のメールは別のLANへ向かって送信し、その他のメールは外部へと転送することがよくあります。 これら「配送制御」を主に担うサーバをメールハブと呼びます。またその動作から「メールルーティング」などとも呼ばれます。この辺りの名称はあまり定められていないようです。 条件 メールアドレスの@マーク以降を見て、指定されたサーバに転送します。 不明なドメインのメールについてはデフォルトでは転送しません。 メールをドメイン別へ振り分けるが、自身はメールを溜めこまない。 この図の中のノートパソコンを、外部の不特定多数のクライアントとみなすことも、内部のクライアントとみなすこともできます。 内部のクライアントとみなす場合は、インターネット向けの経路がないことになります。 この場合、Postfix以外にすでに動作しているメールサーバdomainA、domainBがあるものとします。 ・Postfixをインストールする ・Postfixを設定する ・Transportリストを記述する ・Telnetでメールの転送を確かめる Postfixをインストールするpostfixがインストールされているか確かめ、見つからなければPostfixをインストールします。#rpm -q postfix (Postfixとバージョン番号が表示されるか?) 表示されなければ #yum install postfix としてインストールします。リポジトリへ接続できることが条件です。 インストールしても、Postfixは起動しません。一見起動したように見えますが、statusを見ると起動してません。 これはデフォルトでSendmailが起動しているので、すでに25番ポートが使用されているからです。 sendmailを止めてPostfixを起動させます。 #service sendmail stop (Sendmailを止めます) #chkconfig sendmain off (自動起動を止めます) #service postfix start (Postfixを起動させます) #chkconfig postfix on (自動起動を有効にします) #service postfix status (動作を確認します) 「telnet localhost 25」などとして25番ポートのPostfixへアクセスできるか確認します。 ファイアウォールも確認しておきましょう。 Postfixを設定する次にPostfixの設定ファイルを編集します。/etc/postfix/main.cfを次のように編集します。 myhostname ホスト名として相手のSMTPに名乗るメールサーバ名です。礼儀でしょう。 指定するのは必ずFQDN名です。ドットの無いマシン名だけではダメです。 基本的にどんな名前でも構いませんが、相手のメールサーバとかぶってはいけません。拒否られます。 値を指定しない場合、hostsファイルから自分で解決する。 検証環境でお互いに指定しないと、対抗のメールサーバとデフォルト名で重複する可能性があります。 相手と重複しなければ、指定しなくても動作します。 myhostname = mail.example.local mydomain myhostnameとほぼ同様です。 指定するのは、myhostnameのドメイン部分です。 mydomain = example.local inet_interface どのIPアドレスへサービスをバインドするかです。 デフォルトはlocalhostへバインドされていますので、メールサーバ自身しかPostfixへアクセスできません。 とりあえず全てのIPアドレスへサービスを提供しましょう。 inet_interface = all mynetworks これはメールを外部へ中継することを許す送信元を指定します。 許された相手なら、どこへでもメールを中継してしまいます。気を付けましょう。 なにも指定されていなければ、同一セグメントのクライアントからは許可です。 しかし今回の場合は振り分け制御が目的なので、明示的に信頼するアドレスを自身に制限して、知らないアドレス宛てのメール中継はしないように設定します。 mynetworks = 127.0.0.0/8 relay_domains 中継を許可する宛先ドメインを記述します。このドメインなら不特定多数の相手から中継を受け付けます 今回は、example.localとそのサブドメイン宛の中継を許可することにします。 relay_domains = example.local example.localと記述すれば、サブドメインも全て許可されます。 Postfixの中継可否の流れは 1.信頼されたクライアント(mynetworks、mynetworks_style)からは、全ての宛先に対して中継。 2.信頼されていないクライアントからでも、宛先がrelay_domainsに対してなら中継。 となります。 中継の意味には、自分自身のメールボックスも含まれます。だからrelay_domainsに自ドメインが含まれていないとローカル配送(自分宛てのメールを受信・保存)も行われなくなります。 relay_domainsになにも指定しない場合relay_domainsには$mydestinationが含まれます。 transport_maps 配送先リストファイルを指定します。 このパラメータはデフォルトでは無いので、追記する必要があります。 transport_maps = hash:/etc/postfix/transport ファイルの冒頭に「hash:」を記述するのを忘れないように。 このファイルの中に、メールのルーティングルールを記述します。 Transportリストを記述するルーティングルールとなる、転送リストを記述します。中継が行われるときに初めて使用されます。 中継が許可されているメールをどこへ送るかを記述するのであって、中継可否そのものは行われません。 中継可否はrelay_domainsとmynetworksで制御されます。 mynetworksはなんでも転送。ただしその後はtransportファイルに従う。と覚えます。 #vi transport example.local :[192.168.1.100] sub.example.local :sub.example.local .example.local :[mailtrans.example.local] example.local :[mail.example.local] @example.local宛のメールはmail.example.localのAレコードに対して配送されます。 [ ]でくくると、Aレコードとして処理されます。IPアドレス、ホスト名を記述します。 sub.example.local :sub.example.local @sub.example.local宛のメールは、submail.example.localのMXレコードに対して配送されます。 直接記述すると、MXレコードで解決されます。ドメイン名を指定できますが、ホスト名、IPアドレスは記述できません。 .example.local :[mailtrans.example.local] 冒頭にドットを付けた場合、サブドメインを意味します。 sub1.example.localやtest.example.localなどexample.localのサブドメインのアドレスは、mailtrans.example.localのAレコードに対して送信されます。 この場合は先にsub.example.localが指定されているため、それ以外のサブドメインが対象になります。 ファイルを記述したら、ハッシュ化し、Postfixに再読み込みさせます。 #postmap transport #service postfix reload リストを変更したら、必ずハッシュ化、再読み込みを行いましょう。 時間経過とともに自然読み込みを待ってもいいですが、それでは試験結果が曖昧になります。 Telnetでメールの転送を確かめるTelnetでSMTPの挙動を確認します。メールサーバ上でメールのログを監視します。 #tail -f /var/log/maillog ローカルホスト以外の端末から、「telnet CentOSサーバ 25」として直接SMTPサービスにログインし、SMTPコマンドを実行します。 太字部分が入力内容です。 宛先のメールは、外部のインターネットメールを使用します。 220 localhost.localdomain ESMTP Postfix helo localhost 250 localhost.localdomain mail from: user1@example.local 250 2.1.0 Ok rcpt to: user@example.local 250 2.1.5 Ok data 354 End data with <CR><LF>.<CR><LF> helo postfix . 250 2.0.0 Ok: queued as 0625633CC90 quit 221 2.0.0 Bye tailで監視している/var/log/maillogの内容で Jan 29 18:43:24 localhost postfix/smtp[3075]: D420533CC90: to=<user@hogehoge.net>, rely=[宛先のメールサーバ:25], delay=1.4, delays=1/0.03/0.18/0.2, dsn=2.0.0, status=sen (250 OK) という内容が出れば成功です。 同様のコマンドでsub.example.local宛のメール、abc.example.local宛のメールが正しく配送されるかを確認します。 そしてそれ以外の宛先のメールでも試験し、(relay_domainsに基づき)中継が拒否されることを確認します。 もし「reject」というログが出力されれば、転送が禁止されています。 思い通りにいかない場合は、各コンフィグの初歩的な記述ミス(スペースの有無、綴りミス)、宛先アドレスの確認、DNSサーバの確認を行います。 |
|