So-net無料ブログ作成
  • ブログをはじめる
  • ログイン

sendmailのmailertableをPostfixで実現する(配送先ドメインごとにセカンダリ配送先が異なる場合) [postfix]

sendmailのmailertableで

a-domain.localのプライマリ配送先はA、プライマリがダウンしている場合の配送先はB
b-domain.localのプライマリ配送先はC、プライマリがダウンしている場合の配送先はD

というような設定を行っているとする。設定値としては次の通り。

a-domain.local     smtp:[192.168.1.1][192.168.1.2]
b-domain.local     smtp:[172.16.1.1][172.16.1.2]

mailertableの設定をPostfixに移行する場合、プライマリ配送先がダウンしているときのセカンダリ配送先をfallback_relayで指定するが、fallback_relayはすべての配送先に対してのセカンダリ配送先になるため、上記のようにセカンダリ配送先が異なる場合には一般的には設定できない、つまりmailertableをPostfixに移行できないということになってしまう。

が、次のように設定を行えば上記のようなmailertableもPostfix上で同じように動作させることが可能である。

  1. master.cfにドメインごとに使用する配送サービスの定義を新規に作成する
  2. transportでドメインごとの配送先サービスを1.で作成したものを指定する

1. master.cfにドメインごとに使用する配送サービスの定義を新規に作成する
transportファイルでドメインごとに配送先を指定する場合、次のように配送方法定義する。
(一般的なtransportファイルの設定)

domain.local    smtp:[10.1.1.1]
  上記設定の場合、"smtp"はSMTPプロトコルを使って配送するという意味ではなく、「master.cfにsmtpとして定義されているサービスを使用して配送する」ということを意味している。
・master.cfのsmtpサービスの定義
smtp      unix  -       -       n       -       -       smtp
※master.cfには「smtp      inet  n       -       n       -       -       smtpd」というサービスも定義されているが、タイプがinetとなっていることから、TCP/IPソケットでlistenするSMTPサーバのサービスあり、メール配送時に使用するsmtpサービスとは別物である。

smtpサービスはsmtpプログラム(定義の一番右のsmtp)を使用することを示しており、配送時はmain.cfで定義されているsmtpプログラムで使用するオプション定義に従って配送する。smtpサービスで配送する場合にはmain.cfに定義されているfallback_relayを使用する。つまり,transportでsmtpサービスを使用するとすべて同一のfallback_relayを使用することになり、異なるセカンダリ配送先を定義することができない。

そのため、master.cfに次のようにtransportファイル定義する配送先ごとに異なるfallback_relayを使用するよう次の設定を新規に定義する。

relay1    unix  -       -       n       -       -       smtp
        -o fallback_relay=[192.168.1.2]
relay2    unix  -       -       n       -       -       smtp
        -o fallback_relay=[172.16.1.2]

smtpはメール配送時のプログラムであり、"-o"でオプションを指定することができる。オプションでfallback_relayを定義する。
今回はセカンダリ配送先が2つあるので、配送サービスを2つ定義する。

上記のrelay1、relay2は任意の名称で構わないのでわかりやすい名称で定義すればよい。
なお、Postfixでは先頭行が空白である場合には、前行から続きであることを示す。つまり上記は1行で
  smtp -o fallback_relay=[xxx.xxx.xxx.xxx]
の記述と同一である。

2.transportでドメインごとの配送先サービスを1.で作成したものを指定する
1.で作成した配送サービスの定義を使用して、transportファイルに次のように設定する。

a-domain.local     relay1:[192.168.1.1]
b-domain.local     relay2:[172.16.1.1]
a-domain.localは配送サービスrelay1を使用して192.168.1.1に配送する。relay1はfallback_relayとして192.168.1.2が定義されているので、192.168.1.1に配送できなかった場合には192.168.1.2に配送する。
b-domain.localも同様に配送サービスrelay2を使用するので、172.16.1.1に配送できなかった場合には172.16.1.2に配送する。

(おまけ)
master.cfにはfallback_relayを使用しない配送サービスの定義として、デフォルトで次のような設定がされている。

# When relaying mail as backup MX, disable fallback_relay to avoid MX loops
relay     unix  -       -       n       -       -       smtp
        -o fallback_relay=

注意書きに「バックアップMXとしてメールを中継させる場合には、MXのループを避けるためにfallback_relayを無効にすること」と書いてあり、そのための配送サービスの定義として"relay"が用意されている。


nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:パソコン・インターネット

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。

×

この広告は180日以上新しい記事の更新がないブログに表示されております。