2009年3月18日水曜日

PostfixでメールのToやFromを書き換える方法

タイトルのようなことをちょっとやったのでメモ。
Postfixでアドレスを書き換える為にはカノニカルアドレスマッピングという機能を使用。

参考 : Postfixアドレス書き換え

設定例をいくつかメモります。

おまじない的にやること

Postfix 2.2系の場合

特に無し。
書き換えルールを設定ファイルに記述していけばOKみたい。

Postfix 2.3系の場合

local_header_rewrite_clients = static:all
をmain.cfに書く。

2.3系ではデフォルトでは、
local_header_rewrite_clients = permit_inet_interfaces
となっているようで、$inet_interfacesにマッチしたクライアントIPアドレス以外からのメールに対して書き換えが行われないようです。

とりあえず、2.2系と同じ動作にするには、
local_header_rewrite_clients = static:all
としておけばいいみたい。

実際の設定例

main.cf
# 書き換えるアドレスの対象
canonical_classes = envelope_sender, envelope_recipient, header_sender, header_recipient

# 送信者、受信者双方に適用
canonical_maps = regexp:/etc/postfix/canonical.regexp

# 送信者のみ書き換え対象
# sender_canonical_maps = regexp:/etc/postfix/sender_canonical.regexp

# 受信者のみ書き換え対象
# recipient_canonical_maps = regexp:/etc/postfix/recipient_canonical.regexp

とか書いて、
/etc/postfix/canonical.regexp
/^hogehoge/ fugafuga

とかしておくと、
エンベロープ送信者アドレス、エンベロープ受信者アドレス、
メッセージヘッダの送信者アドレス、メッセージヘッダの受信者アドレス、
マッチしたもの全てを書き換えます。

From: hogehoge@example.com
が、
From: fugafuga@example.com
こんな感じに書き変わるというわけです。

置換したい対象を制限する場合は、
canonical_classesの中身を指定すれば良いです。

メッセージヘッダーのToアドレスだけ書き換えたい場合は、
canonical_classes = header_recipient
という感じ。

ちなみに、.forwardとかで呼びだされるプログラムには、もちろん書き換え済みのアドレスが入ります。
非常に便利!

0 件のコメント:

久しぶりにブログを書く

最初ログインできなくて焦った。 いや、ログインはできたのだが、ログイン後に自分のブログの管理画面に遷移できず、新しいブログを作成する画面になってしまったからビビッてしまった。 どうやら、Google+(現在はサービス終了)に紐づいたプロフィールを設定しているとこのような状況に陥る...