{{tag>postfix manimani.cc linux}} # postfix をマルチインスタンス化する 複数ドメインのメール転送を1つの postfix で運用する場合、インバウンドはともかくアウトバウンドの ip アドレスが1つしか指定できないので、どちらか一方の名前解決が正逆不一致になってしまいます。じゃあ postfix プロセスを複数動かせばいいんじゃね? というおはなし。 [postmulti(1)](http://www.postfix.org/postmulti.1.html) や [Managing multiple Postfix instances on a single host](http://www.postfix.org/MULTI_INSTANCE_README.html) あたりを参考にやっていきます。 ## 既存設定のバックアップ とりあえず既存設定を待避しておきます。 ``` # cd /etc # tar -cpvf ~/170617.postfix.tar ./postfix ``` ## マルチインスタンス設定の追加 それ専用のコマンドがあります。 ``` # postmulti -e init ``` 実行すると main.cf に2行だけ追記されるようです。 # diff -rup ~/postfix /etc/postfix diff -rup /root/postfix/main.cf /etc/postfix/main.cf --- /root/postfix/main.cf 2017-04-13 20:10:27.000000000 +0900 +++ /etc/postfix/main.cf 2017-06-17 15:12:49.124969630 +0900 @@ -702,3 +702,5 @@ smtp_tls_session_cache_timeout = 3600s #smtpd_tls_loglevel = 1 #smtpd_tls_session_cache_database = btree:/etc/postfix/smtpd_sesscache #smtpd_tls_session_cache_timeout = 3600s +multi_instance_wrapper = ${command_directory}/postmulti -p -- +multi_instance_enable = yes ## インスタンスの作成 これも `postmulti` コマンドで行います。 ``` # postmulti -I <インスタンス名> -G mta -e create ``` インスタンス名は 'postfix-' で始まる名前にしないと `postmulti: fatal: New instance name must start with 'postfix-'` とかって怒られます。`-G mta` は、作成する postfix インスタンスが所属するグループ名を指定します。インスタンスが3つも4つもある時は、グループに対して一括でオペレーション(起動停止等?)ができるようです。 ## 作成したインスタンスの設定 インスタンスを作成すると、指定したインスタンス名のディレクトリが /etc/postfix-XXXX のような形で作成され、中に main.cf と master.cf が置かれています。細かい設定は環境にあわせて適宜編集……なんですが、1つだけ。 ``` master_service_disabled = inet ``` デフォルトですべての tcp/ip リスナーが無効化されているので、大抵の場合は `inet` の部分を削除する必要があると思います。 ``` master_service_disabled = ``` ## 作成したインスタンスの有効化、起動、停止等 ### 有効化 ``` # postmulti -i <インスタンス名> -e enable ``` `systemctl enable XXX` みたいなもんですね。これで `systemctl start postfix` 等で起動した時に、同時にこのインスタンスも起動するようになります。ちなみにこのコマンドで、作成したインスタンス側の main.cf に以下の1行が追記されます。 ``` multi_instance_enable = yes ``` ### 単独起動 ``` # postmulti -i <インスタンス名> -p start ``` ### 状態確認 ``` # postmulti -i <インスタンス名> -p status ``` ### 単独停止 ``` # postmulti -i <インスタンス名> -p stop ``` こんな感じですね。最後に postfix 本体の再起動を実行して、作成したインスタンスが同時起動するかを確認します。 ``` # systemctl restart postfix # postmulti -i <インスタンス名> -p status ```