ローカルのメールスプールにメールをためない設定(メールサーバーに転送)

通常、cron の実行結果などのシステムからのメール(主に root 宛のメールなど)は、ローカルのメールスプール(/var/mail や /var/spool/mail) に保持されます。

うちのサーバー群は、それぞれ cron で「自動アップデート」や「バックアップ」を定期実行するため、これらのシステムからのメールが各サーバーのローカルのメールスプールに溜まっていきます。(サーバー以外のクライアントとして利用しているマシンにも設定できます。)

このメールスプールを cron で定期的に削除してもよかったのですが、「自動アップデート」や「バックアップ」の結果を知るために、各サーバーの設定を変更し、ローカルのメールスプールへメールを配信するのではなく、ドメインのメールサーバーに送信(転送)するように設定しました。

今回は、ドメインのメールサーバーの設定ではなく、各サーバーの postfix (/etc/postfix/main.cf) を設定します。

スポンサーリンク

null クライアント

各サーバーの postfix にローカルのメールスプールへメールを配信するのではなく、ドメインのメールサーバーに送信(転送)するように設定します。これにより、各サーバーは自分のローカルのメールスプールへメールを配信しなくなります。

今回紹介する設定を行った postfix は、ドメインのメールサーバーへメールを送信(転送)ができるだけの状態となります。ネットワークからのメール受信はせず、ローカルのメールスプールにメールを配信することはできません。このようなマシンを「null クライアント」と呼びます。

/etc/postfix/main.cf の設定

postfix の null クライアントの設定は、公式に例が載っていています。特に難しいことはなくこの通りやれば問題ありません。

http://www.postfix.org/STANDARD_CONFIGURATION_README.html#null_client

この例では、自身のドメイン名は example.com で、サーバーの代表(1台)の名前は srv1.example.com であるとします。いつものように、例ではデフォルト設定から変更のあるパラメータのみ記載しています。

myhostname = hostname.example.com
myorigin = $mydomain
inet_interfaces = loopback-only
mydestination =
relayhost = $mydomain

<キーポイント解説>

inet_interfaces :
loopback-only を指定することで、ネットワークからのメール受信を行わないようになります。
mydestination :
空にすることで、ローカルのメールスプールにメールを配信しなくなります。
relayhost :
example.com ドメインのメールサーバーにすべてのメールを転送します。MXレコードがない場合は、実際のメールサーバー名(メールサーバーの完全修飾ドメイン名)を設定します。

動作確認

設定を行ったマシン(サーバー)で、以下のコマンドを実行。または、cron で「echo “null client test”」などを実行させてみましょう。

echo "This is null client test." |mail -s "test mail" -r root root

メールサーバでメールが受信できれば設定完了です。cronの場合はホスト名がついてくるので、どのサーバーからのメールかはわかりやすいですが、ホスト名がついてこないメールがある場合は、見分け方を考える必要があります。一度目的のメールを受信しておくのがよいでしょう。