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

◆ Live配信スケジュール ◆
サイオステクノロジーでは、Microsoft MVPの武井による「わかりみの深いシリーズ」など、定期的なLive配信を行っています。
⇒ 詳細スケジュールはこちらから
⇒ 見逃してしまった方はYoutubeチャンネルをご覧ください
【4/18開催】VSCode Dev Containersで楽々開発環境構築祭り〜Python/Reactなどなど〜
Visual Studio Codeの拡張機能であるDev Containersを使ってReactとかPythonとかSpring Bootとかの開発環境をラクチンで構築する方法を紹介するイベントです。
https://tech-lab.connpass.com/event/311864/

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

アバター画像
About サイオステクノロジーの中の人 14 Articles
サイオステクノロジーで働く中の人です。
ご覧いただきありがとうございます! この投稿はお役に立ちましたか?

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

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


ご覧いただきありがとうございます。
ブログの最新情報はSNSでも発信しております。
ぜひTwitterのフォロー&Facebookページにいいねをお願い致します!



>> 雑誌等の執筆依頼を受付しております。
   ご希望の方はお気軽にお問い合わせください!

Be the first to comment

Leave a Reply

Your email address will not be published.


*


質問はこちら 閉じる