postfix をマルチインスタンス化する
複数ドメインのメール転送を1つの postfix で運用する場合、インバウンドはともかくアウトバウンドの ip アドレスが1つしか指定できないので、どちらか一方の名前解決が正逆不一致になってしまいます。じゃあ postfix プロセスを複数動かせばいいんじゃね? というおはなし。
postmulti(1) や Managing multiple Postfix instances on a single host あたりを参考にやっていきます。
既存設定のバックアップ
とりあえず既存設定を待避しておきます。
# 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