2019/07/28 CentOS7.2





Postfixで特定ドメイン宛のメールだけドメイン付け替えをする


特定ドメイン宛のメールだけ、送信元のメールドメインの付け替えを行います。




別項「送信時にメールアドレスのドメインを付け替える」の方法ではメールドメインの付け替えを宛先によって制御できません。
宛先に関係なく、全ての送信メールのアドレスのドメイン部分を付け替えてしまいます。

対策としては2つ。
1つめは、変換専用サーバを用意してそこを中継すること。()
2つめは、マルチインスタンスによってPostfixを複数台起動させておくこと。(上図)
結局、どちらもメールルーティングで別のPostfixを経由する、という必要があります。

Postfixのマルチインスタンス起動については、別項「マルチインスタンスを構成する」で解説しています。
同じくドメインのメール付け替えについても別項「送信時にメールアドレスのドメインを付け替える」で解説しています。
このページでは、説明は省いてコマンドや設定項目のみ並べます。




Postfixをマルチインスタンスで構成する




1.SELinuxを無効にします

#setenfoce 0

再起動のためコンフィグも設定しておきます。
/etc/selinux/config
 SELINUX=disabled



2.コマンドを実行して、Postfixの設定を変更していきます


Postfixのマルチインスタンス設定は、設定コマンドが用意されてます。
以下のコマンドを実行します。

#postmulti -e init

#postmulti -I postfix-sub -e create


3.子インスタンスの設定ファイルを編集します


子master.cfを編集し、10025番ポートで起動するよう設定します。

/etc/postfix-sub/master.cf
#smtp      inet  n       -       n       -       -       smtpd (コメントアウト)
10025      inet  n       -       n       -       -       smtpd


子main.cfを編集し、ローカルIPアドレスに対してバインドするようにします。

/etc/postfix-sub/main.cf
#  master_service_disable = inet  (コメントアウト)


4.子インスタンスを有効化します

有効化されることで親インスタンスの起動に合わせて自動起動します。

#postmulti -i postfix-sub -e enable



5.子インスタンスの起動試験をします

#postmulti -i postfix-sub -p start
#postmulti -i postfix-sub -p status
#netstat -ant

正常に起動でき、ポート10025が開いていることを確認します。


6.可能であれば再起動試験を行います

可能であれば再起動して、親インスタンスと子インスタンスがセットで起動するかをチェックします。

#service postfix restart




子インスタンスディレクトリで、ドメインのマッピングファイルを作成します。



1.ドメイン付け替え用のマッピングファイルを作成

#vi /etc/postfix-sub/sender_canonical

sender_canonicalファイルに、付け替えるドメインのマッピングを記述します。
ここでは、旧ドメインexample.comの送信アドレスを、新ドメインabc-group.comへ変換する場合です。
新ドメイン、新ドメインの順です。
<内容>
@example.com  @abc-group.com



作成したあとは、ハッシュを生成します。
#postmap sender_canonical


2.ドメイン付け替えのファイルを指定

子インスタンスのmain.cfを設定します。
/etc/postfix-sub/main.cf
設定パラメータはsender_canonical_mapsの1つのみです

@sender_canonical_classes = envelope_sender, header_sender (デフォルト)
Asender_canonical_maps = hash:/etc/postfix/sender_canonical
Blocal_header_rewrite_clients = permit_inet_interfaces (デフォルト)

@とBはデフォルト値なので記述しなくても、動作に変化はありません。
Aでマッピングファイルを指定しています。
Bは自分自身からメールを受け取る予定なので、ローカルアドレス通信のみ対象とします。


3.特定ドメイン用の転送ファイルを作成

子インスタンスのメール中継を設定します。
子インスタンス用のtransportファイルを設定します。
ここでは特定ドメイン(abc-corp.com)宛のメールは、abc-corp.comメールサーバへ転送することとします。

#vi /etc/postfix-sub/transport

abc-corp.com  : 192.168.1.250



#postmap /etc/postfix-sub/transport

子インスタンスのmain.cfを設定します。
/etc/postfix-sub/main.cf

transport_maps = hash:/etc/postfix-sub/transport


最後に、リロードして設定を反映させます。
#systemctl reload postfix

もしあなたがtelnetによるSMTP試験が得意なら、ここでドメイン付け替えの試験をしてもいいでしょう。





親インスタンスのtransportファイルを記述します



内容は「特定ドメイン宛(ここではabc-corp.com宛)のメールは、ローカルの子インスタンスへ」
「それ以外のメールは上位メールサーバ192.168.1.200へ転送」とします。


ドメイン振り分け用の転送ファイルを作成

#vi /etc/postfix/transport

abc-corp.com  :127.0.0.1:10025
*  : 192.168.1.200



#postmap /etc/postfix/transport

なおこのとき、子インスタンスの転送先アドレスには127.0.0.1を使用します。
192.168.1.100、などのように外部と通信できるアドレスを使用しても、ドメイン付け替えが実行されません。
待ち受ける子インスタンスのmain.cfで、local_header_rewrite_clientsが「ローカルのみ許可」に設定されているためです。

親インスタンスのmain.cfを設定します。
/etc/postfix/main.cf

transport_maps = hash:/etc/postfix/transport


最後にリロードして反映させます。
#systemctl reload postfix

その他、inet_interfacesやmynetworksやrelayhostなど、メールリレーに関する基本的な設定は出来ているものとします。





試験

root@example.comから、root@example.net宛のメールの、到着文


送信者アドレスはオリジナルのexample.comドメインが維持されています。



root@example.comから、root@abc-corp.com宛のメールの、到着文


送信者アドレスはグループ企業ドメインの、abc-group.comアドレスに付け替えられています。


同じメールアドレスから送信しても、宛先によって送信元ドメインを付け替えることが可能となりました。
.







prev.gif