2019/07/20 CentOS7.2





Postfixで送信時にメールアドレスのドメインを付け替える


Postfixでメール送信時に自ドメイン名を別ドメイン名に付け替える設定です。




どのような用途で用いるかと言えば、メールドメインの移行などで使えます。
新旧メールドメインが並行運用されており、内部は旧ドメインで依然運用しているが、外部への送信には
新ドメイン名を使用する。
こうすればシステム移行が段階的に進められます。
(宛先によってドメイン付け替えを変更する場合は、別項「特定ドメイン宛のメールだけドメイン付け替えをする」で解説しています)

メールのFrom部分(と、Return-Path部分)が書き換えられます。
相手が何も考えずメール返信をしてくれても、自然と新ドメインが使用されます。

本家情報
http://www.postfix-jp.info/trans-2.3/jhtml/ADDRESS_REWRITING_README.html
http://www.postfix-jp.info/trans-2.3/jhtml/postconf.5.html#sender_canonical_classes




マッピングファイルを作成します。
#vi /etc/postfix/sender_canonical

sender_canonicalファイルに、付け替えるドメインのマッピングを記述します。旧ドメイン、新ドメインの順です。
<内容>
@old.example.com  @new.example.com



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


main.cfを設定します。
設定パラメータは3つのみです

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



@はデフォルト値なので記述しなくても、動作に変化はありません。
Bは、デフォルト値permit_inet_interfacesを、permit_mynetworksへ変更してます。
 こう設定することで、mynetworksに記述されたクライアントからのメール送信については、ドメイン付け替えの対象とします。


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



Postfixサービスを再起動し、メール送信試験をしてみます。
送信者のメールアドレスは user1@old.example.com です


ドメイン付け替え設定前

メールのFrom、Returnアドレスが、oldドメインで着信しています。

ドメイン付け替え設定後

メールのFrom、Returnアドレスが、newドメインに付け変わっています。





解説 ドメイン付け替え機能について

Postfixでは、ドメインの付け替えは、メールアドレス書き換え機能の応用です。
(アドレス全体を書き換えるのではなく、ドメイン部分のみ書き換えているだけです)
マッピングを記述すれば、メールのToアドレスやFromアドレスを自由に差し替えることも可能です。

細かい制御のパラメータもあります。
例えば
・送信者アドレス(From系)だけ書き換える。(sender_canonical_maps)
・受信者アドレス(To系)だけ書き換える。(recipient_canonical_maps)
・FromとToの両方を同じルールで書き換える(canonical_maps)
・エンベローブ部のアドレスだけ書き換える(sender_canonical_classes)
などもパラメータで制御できます。

ただ、スパム検知に引っかかる恐れもありますし、あまりややこしいことは避けましょう。
パラメータは似た名前でそろえられているのでわかりやすいです。使用方法も同じです。

送信者アドレスを書き換えるパラメータ
 sender_canonical_classes
 sender_canonical_maps

受信者アドレスを書き換えるパラメータ
 recipient_canonical_classes
 recipient_canonical_maps

両方書き換える
 canonical_classes
 canonical_maps

パラメータについては、Postfix本家でも解説されています。
http://www.postfix-jp.info/trans-2.3/jhtml/ADDRESS_REWRITING_README.html
http://www.postfix-jp.info/trans-2.3/jhtml/postconf.5.html#sender_canonical_classes


付け替え対象のメール指定

(デフォルト)
local_header_rewrite_clients = permit_inet_interfaces
ローカルホスト自身が生成したメールのみアドレス付け替えの対象とします。

(変更後)
local_header_rewrite_clients = permit_mynetworks
mynetworksから送信されてきたメールについて、アドレス付け替え


このページでは「内部の送信メールサーバ」を想定しているので、普通はmynetworks値で信頼されたネットワークやアドレスが指定されているはずです。

もし貴方が(不特定多数からのメール着信を受け付けている)DMZに設置したSMTPサーバでドメイン書き換えを検討している場合は

remote_header_rewrite_domain = static:all  などの使用を検討する必要があるかもしれません。

しかし、セキュリティ的にも重要なサーバでややこしいことをするのはお勧めしません。
メール経路に専用SMTPサーバを挟み込むほうが、後々のトラブルを防げるでしょう。


送信者のsender_canonical_maps、受信者のrecipient_canonical_maps

sender_canonical_mapsは、「送信者アドレス(From)を書き換え対象」とします。
メールのFromがチェックされ、マッピングテーブルで一致したら、処理が行われます。
アウトバウント(社内から社外へ送信)の場合、社内の送信者Fromアドレスが付け替えられます。
インバウンド(社外から社内への受信)の場合、社外の送信者Fromアドレスが付け替えられます。

recipient_canonical_mapsでは、「宛先アドレス(ToやCC)を書き換え対象」とします。
To/CCがチェックされ、マッピングテーブルで一致したら、アドレスが付け替えられます。
アウトバウンド(社内から社外へ送信)の場合、社外への宛先アドレスが付け替えられます。
インバウンド(社外から社内への受信)の場合、社内への宛先アドレスが付け替えられます。


特定ドメイン宛のメールだけ、ドメイン付け替えしたい

例えば新旧メールドメインが並行運用している状態で、以下のようにしたいとします。
・外部(インターネット方面)へメールを送信する場合は従来のドメイン名を使用
・グループ企業へ送信する場合は新ドメイン名を使用


Postfixの設定では「全てのメールについてドメイン名付け替えを実施する」ので、こういうニーズには対応できません。
一番手っ取り早く安全な対策は間に一台、変換専用のメールサーバを設置することでしょう。


どうしても1台のメールサーバで処理したい場合は、別項目で「特定ドメイン宛のメールだけドメイン付け替えをする」を解説しています。








prev.gif