いろんなサーバー設定研究所

インフラエンジニアに役立つ各種設定やTipsを提供します Windows Server、Linux など

*

postfixでメールリレー先を複数指定して配送先を冗長化する方法

   

postfixのメールリレー設定は「relayhost」を利用し配送先サーバーを指定します。

しかし「relayhost」は1つのサーバーしか指定する事ができないため、「リレーが失敗したら別のホストに送信する」といった指定ができません。

※ postfix 2.1など古いバージョンではrelayhostを複数記載する事が出来ましたが、2.2以降は指定ができなくなりました。

MailRrelay

では上の図の様に、IPアドレスやホスト名など決め打ちでリレー先を指定しなければならない場合、プライマリ配送先へのリレーが失敗した際に自動的にセカンダリへリレーするためにはどうしたらよいでしょうか。


master.cf で fallback_relay を利用しよう

master.cfでfallback_relayを行うメール送信プロセスを新規作成し、トランスポートマップで配送制御を行う事で実現可能です。

master.cf にメール送信プロセスを追加する

master.cf には「smtp」というプロセスがデフォルトで存在します。

これをコピーし名前を「smtpDuplication」等に変更したうえで「-o fallback_relay=[<セカンダリ配送先IP>]」を追記します。

smtpDuplication unix – – n – – smtp
-o fallback_relay=[192.168.0.20]

transport_maps に配送先情報を記載する

続いて、トランスポートマップに以下の様な配送設定を記載します。また、この時mail.cfに「relayhost」は指定しないでください。

* smtpDuplication:[192.168.0.10]

先頭の*は全ての配送先を指します。上記の記載をした場合、以下の様な挙動をします。

  1. 192.168.0.10 へメールリレーを試す
  2. 192.168.0.10 へのメールリレーが失敗したら、fallback_relayの192.168.0.20 へリレーする

なおトランスポートマップにはドメインごとに配送先ホストを定義する事が可能ですので、自身の環境にあわせて良きに設定してください。

これでrelayhostで複数のホストが記載できなくても、上記の方法でメール配送/メールリレーの冗長化が実現できました。

postfixユーザーの皆様に幸あれ。

 - Linux