Postfix の From を書き換えと特殊文字が含むメールアドレスの扱いについて

こんにちは。サイオステクノロジー 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 を書き換え、特殊な記号を含むメールアドレスの扱いについて説明しました。

ご覧いただきありがとうございます! この投稿はお役に立ちましたか?

役に立った 役に立たなかった

3人がこの投稿は役に立ったと言っています。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です