1つのサーバで2つのドメインのメールをPostfixで運用する機会があったので、今後のためのメモ。
NICは1つしかないので、仮想IPアドレスを別途追加しました。
仮想IPアドレスの追加手順はOSによって若干違うので、ここでは省略。
【IPアドレス(1)】 AAA.BBB.CCC.DD1 / mail.abc.com 向け
【IPアドレス(2)】 AAA.BBB.CCC.DD2 / mail.xyz.jp 向け
この状態でそれぞれのIPアドレスに対してSMTP接続してメールを送信してみましたが、送信元メールサーバのIPアドレスを確認してみると、両方とも「AAA.BBB.CCC.DD1」になってしまいました。
mail.abc.com の運用は特に問題ないのですが、mail.xyz.jp の運用の場合、送信元のIPアドレスが「AAA.BBB.CCC.DD1」となってしまうため、送信先メールサーバにて IPアドレス→ドメイン のDNS逆引きチェックをされると「送信元のIPアドレスと送信元ドメインがちがうぢゃないか!」と怒られ、メール送信リクエストを拒否されて送信できなくなる可能性があります。
さてどうしようか、と調べてみたら、Postfixでマルチインスタンス、つまり複数のPostfixメールサーバを立ち上げ、それぞれにドメインなどを割り当てることで解決できそう。早速試してみました。
※この手順では、Postfixの postmulti モジュールを利用するため、Postfixのバージョンは 2.6以上である必要があります。
- <手順> モジュールのパスは適宜設定してください。
Postfixが起動中の場合は、一旦停止する。postfix stop - マルチインスタンス構成を行うための初期化。
/etc/postfix/main.cf にマルチインスタンス運用に必要な設定が追加されます。postmulti -e init - 現在設定済みのものとは別となる、”mail.xyz.jp” 向けの “postfix-xyz” インスタンスを作成。
/etc/postfix-xyz/ ディレクトリが作成され、この中に設定ファイル “main.cf” と “master.cf” が作成されます。postmulti -I postfix-xyz -G mta -e create - 3. で作成したインスタンスを mail.xyz.jp 向けに運用するので、このIPアドレスを割り当てます。
/etc/postfix-xyz/main.cf の “inet_interfaces”パラメータにこのIPアドレスを記述します。ドメイン関連情報も記載しておきます。
そのほか mynetworks, mydestinationなどなど各種Postfixパラメータは用途に応じて適宜設定します。inet_interfaces = AAA.BBB.CCC.DD2
myhostname = mail.xyz.jp
mydomain = xyz.jp - 同じく /etc/postfix-xyz/main.cf において “master_service_disable = inet” の記述を以下のように変更。
詳しくはわからないですが、 /etc/postfix-xyz/master.cf 記載のサービスタイプで使えないようにするものを指定するパラメータのようです。デフォルトの記述のままだとすべてのTCP/IPリスナーポートが閉じられてしまうため修正が必要です。master_service_disable = - 作成した “postfix-xyz” インスタンスを利用できるようにする。
/etc/postfix-xyz/main.cf が変更されます。postmulti -i postfix-xyz -e enable - 準備完了したので、Postfix を起動確認。まずは作成した “postfix-xyz” インスタンスを単独で起動。
postmulti -i postfix-xyz -p start
起動確認は次のコマンドで。
postmulti -a -p statusいったん起動した “postfix-xyz” インスタンスを終了。
postmulti -i postfix-xyz -p stop - 2つのインスタンスを同時起動する場合は、通常どおりの起動方法でOK。
postfix start
起動確認は7. と同じですが、下記でも確認できます
postfix status