postfix マルチインスタンス

古都の老兵
2026-02-10
2026-02-10

はじめに

 メールサーバーを運用していると、受け付けるポート等で処理を変えたり、サーバーに複数のIPを持たせて送信するIPを分散したいというような事がでてきたりますが、postfixは複数のpostfixを起動させることができるマルチインスタンス機能を標準で持っています。

マルチインスタンスの初期化

# postmulti -e init

/etc/postfix/main.cf に以下の2行が追加されます。

 :
 :
multi_instance_wrapper = ${command_directory}/postmulti -p --

multi_instance_enable = yes 

インスタンスの追加

# postmulti -I postfix-2501 -e createaa~4までの4台存在している事も確認できます。

/etc/postfix/main.cf に更に1行追加され

multi_instance_directories = /etc/postfix-2501

/etc/postfix-2501/ ディレクトリが作成され、main.cf と master.cf ファイルも同時に作成されます。
また、追加したインスタンスが使用するスプールやデータ用のディレクトリ、今回のケースだと /var/spool/postfix-2501 と /var/lib/postfix-2501 が作成されます。

インスタンスの確認

# postmulti -l
-               -               y         /etc/postfix
postfix-2501    -               n         /etc/postfix-2501

 y/n は有効になっているかどうかのステータスで、上記の場合だと作成したpostfix-2501は無効な状態になっています。

 その他の postfix の設定については目的に応じて設定しましょう。

マルチインスタンスでの運用

有効化と無効化

 作成しただけでは無効(disable)な状態ですので、有効化する必要があります。有効化、無効化するには、

# postmulti -e enable -i postfix-2501
# postmulti -l
-               -               y         /etc/postfix

postfix-2501    -               y         /etc/postfix-2501
# postmulti -e disable -i postfix-2501
-               -               y         /etc/postfix
postfix-2501    -               n         /etc/postfix-2501

 ファイルへの設定は、/etc/postfix-2501/main.cf に以下の行が操作されます。

multi_instance_enable = yes

インスタンスの削除

 インスタンスを削除してしまいたい場合

# postmulti -e destroy -i postfix-2501

個々のインスタンスの起動

 それぞれのインスタンスを個別に起動、停止したい場合には、

# postmulti -i postfix-2051 -p start
# postmulti -i postfix-2501 -p status
postfix-2501/postfix-script: the Postfix mail system is running: PID: 1614

 全体を再起動したいような場合は、通常のpostfixの再起動のように

# systemctl restart postfix
# postmulti -a -p status
postfix/postfix-script: the Postfix mail system is running: PID: 1210
postfix-2501/postfix-script: the Postfix mail system is running: PID: 1614

 で行う事ができます。また、全てをリロードしたい場合は次の通りです。

# postfix reload

メールキューの確認

 マルチインスタンスはキューもそれぞれ別に管理されている為、個別に確認する必要があります。

# postqueue -p -c /etc/postfix-2501
Mail queue is empty

  postfix の postsuper 等のコマンドについては -c でインスタンス名を付ける事でそのインスタンスの状態を見る事ができます。付けない場合は、ディフォルトのpostfixになります。1つずつ見るのが面倒な場合は次のようなワンライナーを使うと良いでしょう。

# for cf in /etc/postfix*; do   echo "=== Queue for $cf ===";   postqueue -p -c "$cf";   echo; done
=== Queue for /etc/postfix ===
Mail queue is empty

=== Queue for /etc/postfix-2501 ===
Mail queue is empty

最後に

 postfixは設定がシンプルで分かりやすく機能もそれなりに強力なMTAですが、それでも出来る事には限界があります。単体では難しいような場合やpostfixを機能毎に分けたいような場合でもマルチインスタンスで1台のサーバーで容易に実現する事ができるのではないでしょうか。