バーチャルドメイン環境の Postfix にて、メールアドレスのドメインごとに HELO (EHLO) の値を変更する
バーチャルドメイン環境のような、同一サーバ上で複数のシステムが稼働し、
それぞれのシステムごとに違ったメールアドレスからメールが送信される場合のおはなし。
Postfix は、デフォルトでは HELO (EHLO) にはホスト名をそのまま名乗りますし、 main.cf の “smtp_helo_name” に記述があればその値が適応されます。送信されるメールのドメインがひとつの場合はそのドメインと同じ HELO を設定すれば良いのですが、複数のメールドメインが同一サーバから送信される場合は、ひと工夫が必要になります。
なぜわざわざこんな事をしなくちゃならないのかというと、たとえば3つのドメインからメールが送信される場合、HELO をどれかひとつに設定しても、残りの2つはメールドメインと HELO が一致しないため、 CBL 等のブロックリストに入ってしまったり、迷惑メール検知フィルタにひっかかってしまうのです。
じゃあ初期設定でいいやと localhost.localdomain のままで運用なんてしちゃうと、一発でブロックリスト入りです・・・!
そんな場合にコレ。こんな環境、わりとありそうなのに日本語のサイトにはこの技術情報ない気がするので、日本のどこかにいる自分と同じような境遇のサーバ管理者が一人でも救われると良いなぁと思って、ブログ記事にしまっす!
今回のゴール
postfix から送信される [email protected]、[email protected]、[email protected] をそれぞれ、送信メールアドレスごとに HELO パケットを対応させる。
まずは Postfix のバージョン確認
# postconf | grep mail_version
にて、Postfix のバージョンを確認します。mail_version = 2.7 以上であれば、問題ありません。
2.7未満の方は、今回使いたい sender_dependent_default_transport_maps パラメタが postfix 2.7 からのサポートとなりますので、バージョンアップ願います。 CentOS 6 なんかだと 2.6.6 がデフォルトで入っているのでご注意を。バージョンアップ方法については割愛いたします。
main.cf 編集
/etc/postfix/main.cf にて、main.cf の最終行に下記を追記します。
#デフォルトのhelo応答パケット smtp_helo_name = aaa.com #bbb.com、ccc.com応答用 sender_dependent_default_transport_maps = hash:/etc/postfix/bbb_relay_maps,hash:/etc/postfix/ccc_relay_maps
main.cf にて、デフォルトの helo 応答と
sender_dependent_default_transport_maps のマッピング場所を設定します。
マッピングファイル作成
/etc/postfix/bbb_relay_maps を作成し、
@bbb.com out_bbb:
/etc/postfix/ccc_relay_maps を作成し、
@ccc.com out_ccc:
をそれぞれ記述します。
@bbb.com から送信されるメールは master.cf の out_bbb: を、
@ccc.com から送信されるメールは master.cf の out_ccc: の記述を参照する設定です。
master.cf 編集
/etc/postfix/master.cf の、
※smtp inet n – n – – smtpd の行の下あたりに以下を追記します。
smtp inet n - n - - smtpd #bbb.com送信メール用 out_bbb unix - - n - - smtp -o smtp_helo_name=bbb.com #ccc.com送信メール用 out_ccc unix - - n - - smtp -o smtp_helo_name=ccc.com
master.cf にて、
out_bbb 用(@bbb.com からの送信メール) は helo を bbb.com に、
out_ccc 用(@ccc.com からの送信メール) は helo を ccc.com に、
それぞれ書き換える設定です。
ようやくマッピング!
ここまできたらあとちょっと。
postmap コマンドにてマッピング用データベースを作成します。
# postmap hash:/etc/postfix/bbb_relay_maps # postmap hash:/etc/postfix/ccc_relay_maps
を実行し、マッピングを追加してください。
また、マッピング後、念のため
# ls -al /etc/postfix | grep relay_maps
を実施し、bbb_relay_maps.db、 ccc_relay_maps.db が作成されていることを確認してください。
Postfix 再起動
# service postfix restart
にて、Postfix を再起動したら、ようやく helo がメールアドレスごとに変更されます。
メール受信して確認してみてくださいな!
今回は aaa.com は “smtp_helo_name” の値を適用させましたが、
もちろん aaa.com 用にマッピングしても OK です。
ブロックリスト入りしちゃってる方は、作業後、解除申請をお忘れなきよう・・・!