こんにちは。サイオステクノロジー OSS サポート担当何敏欽です。
システム要件で、Postfix で特定の From メールアドレスからメールを受信した際に、エンベロープ From とヘッダ From を書き換えたい時ってありますよね。例えば下記のようにしたい場合、どのように設定すればいいかを説明します。
エンベロープFromとヘッダFromを書き換
受信の Return-Path と From suika@hoge.sios.com ↓ 変換後 受信の Return-Path と From banana@test.sios.com
今回は RHEL7.4 で検証および確認していきます。なお、postfix の基本設定の説明を割愛します。 Postfix設定パラメータ を確認すると、sender_canonical_maps と local_header_rewrite_clients パラメータを使用する必要があります。設定してみます。
#/etc/postfix/main.cf に下記の設定を追記。 [root@RHEL7]#vim /etc/postfix/main.cf sender_canonical_maps = hash:/etc/postfix/sender_canonical local_header_rewrite_clients = static:all #/etc/postfix/sender_canonical を作成して、変換したいメールアドレスを記述。 [root@RHEL7]#vim /etc/postfix/sender_canonical suika@hoge.sios.com banana@test.sios.com #設定を反映させるには、下記のコマンドを実行。 [root@RHEL7]# postmap /etc/postfix/sender_canonical [root@RHEL7]# systemctl restart postfix #restart の代わりに reload を実行しても問題ない。 [root@RHEL7]# service postfix reload
設定はこれで完了ですが、送信元アドレスが suika@hoge.sios.com のメールのエンベロープ From とヘッダ From を banana@test.sios.com に書き換えるかどうかを確認してみます。
送信元アドレス suika@hoge.sios.com からメールを送ってみます。
[suika@RHEL7 ~]$ mail momo@hoge.sios.com Subject: test test test . EOT
メールの中身を確認してみます。ちゃんと Return-Path と From は設定通り banana@test.sios.com になっていることを確認できます。
Return-Path: <banana@test.sios.com> ★ X-Original-To: momo@hoge.sios.com Delivered-To: momo@hoge.sios.com Received: by RHEL7.4.hoge.sios.com (Postfix, from userid 1004) id AB9D11871469; Fri, 26 Nov 2018 14:43:51 +0900 (JST) Date: Fri, 26 Nov 2018 14:43:51 +0900 To: momo@hoge.sios.com Subject: test User-Agent: Heirloom mailx 12.5 7/5/10 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-Id: <20181026054351.AB9D11871469@RHEL7.4.hoge.sios.com> From: banana@test.sios.com ★ test test
maillog を確認してます。ちゃんと from は banana@test.sios.com になっていることを確認できます。
Nov 26 14:43:51 RHEL7 postfix/pickup[23967]: AB9D11871469: uid=1004 from=<suika> Nov 26 14:43:51 RHEL7 postfix/cleanup[23974]: AB9D11871469: message-id=<20181026054351.AB9D11871469@RHEL7.4.hoge.sios.com> Nov 26 14:43:51 RHEL7 postfix/qmgr[23968]: AB9D11871469: from=<banana@test.sios.com>, size=442, nrcpt=1 (queue active) ★ Nov 26 14:43:51 RHEL7 postfix/local[23976]: AB9D11871469: to=<momo@hoge.sios.com>, orig_to=<momo>, relay=local, delay=0.03, delays=0.02/0.01/0/0, dsn=2.0.0, status=sent (delivered to maildir) Nov 26 14:43:51 RHEL7 postfix/qmgr[23968]: AB9D11871469: removed
特殊な記号を含むメールアドレス
-
- postfix で「”」ダブルクオート (DQUOTE) で囲まれたメールアドレスをどう扱いますか。例えば下記のように、特殊記号「@」がメールアドレスのローカルパートに含まれるメールアドレスがあるとします。
"mo@mo"@hoge.sios.com
RFC 2822 によりますと、「”」ダブルクオート (DQUOTE) は特殊記号を囲む場合に使われており、DQUOTE + 文字列 + DQUOTE が特別な意味を持ちます。atom 内で許可されていない文字を含む文字列でも、「”」ダブルクオートでくくられた quoted-string の形式であれば表すことができます。
Postfix におけるダブルクオートの扱いも RFC 2822 に準拠しており、特殊記号「@」などがメールアドレスのローカルパートに含まれる場合などにダブルクオートを使用します。
なお、「”mo@mo”@hoge.sios.com」 宛にメールを送信すると、maillog では「”」ダブルクオート (DQUOTE) を除いて記録されます。
-
- postfix で「-」ハイフンで始まるメールアドレスをどう扱いますか。例えば下記のように、特殊記号「-」がメールアドレスのローカルパートに含まれるメールアドレスがあるとします。
-test@hoge.sios.com
Postfix におけるデフォルトで – (ハイフン) から始まるメールアドレスが拒否されますので、「-test@hoge.sios.com」 宛にメールを送信すると、maillog では「501 5.1.3 Bad recipient address syntax」が記録されます。
「-」ハイフンで始まるメールアドレスの配信を許可したい場合、「allow_min_user = yes」の設定を行う必要があります。
おまけ
例えば下記のように、特殊記号「@」に続き「:」がメールアドレスのローカルパートに含まれるメールアドレスがあるとします。
"@:"@hoge.sios.com
「”@:”@hoge.sios.com」宛にメールを送信すると、postfix の仕様上、「@」から「:」までの文字列を削除する仕様となっており、maillog ではローカルパートが空の宛先にメールを送信するように見えます。
Nov 26 16:23:50 RHEL7 postfix/smtp[23987]: AB9D11871640: to=<@hoge.sios.com>, orig_to=<@:@hoge.sios.com>, relay=127.0.0.1[127.0.0.1]:10026, delay=4.3, delays=0.02/0.01/3/0.1, dsn=2.0.0, status=sent (250 successfully send message(s))
#postfix-2.10 のソースコード src/trivial-rewrite/rewrite.c より抜粋 102 void rewrite_tree(RWR_CONTEXT *context, TOK822 *tree) 103 { ... 139 /* 140 * Strip source route. 141 */ 142 if (tree->head->type == '@' 143 && (colon = tok822_find_type(tree->head, ':')) != 0 144 && colon != tree->tail) 145 tok822_free_tree(tok822_sub_keep_after(tree, colon));
例えば「”@test:”@hoge.sios.com」宛にメールを送信する場合、「@test:」は削除されるため、「@hoge.sios.com」宛にメールを送信します。
以上で Postfix のエンベロープ From とヘッダ From を書き換え、特殊な記号を含むメールアドレスの扱いについて説明しました。