ビュー:

IMSVA では 管理 > IMSVA設定 > SMTPルーティング > メッセージ配信 の設定にしたがって配送ポリシーサービス (imssdps) が配送先を決定し、IMSVA 内の Postfix が配送先にメッセージを配送します。

IMSVA 9.0 と 9.1 では配送ポリシーサービスの仕様が変更されているため、9.0 では1通のメッセージとして配送されていたものが、9.1 ではメッセージが分割され、2通のメッセージとして配送される場合があります。

事象と発生条件

一般的な環境では内部ドメインとそれ以外の宛先では配送先が異なるため、この問題は発生しません

まず発生する条件は以下のとおりです。

  • 1通のメッセージに 管理 > IMSVA設定 > SMTPルーティング > メッセージルール の「受信メッセージ設定」に指定されている内部ドメインと、それ以外のドメインが複数宛先に指定されており、かつ

  • 管理 > IMSVA設定 > SMTPルーティング > メッセージ配信 において、以下のようにすべてのドメインの配送先に特定のメールサーバを指定し、内部ドメインとそれ以外で配送先が同じ場合

    メッセージ配信

例えば内部ドメインに trendmicro.com、すべてのドメイン ("*") の配送先に 172.16.1.1 が指定されているとします。

その上で宛先に trendmicro.com と example.com, example.co.jp のメールアドレスが複数指定されたメッセージを配送した場合、IMSVA 9.0 と 9.1 で次のように動作に違いが生じます。

(C) は SMTP クライアントが発行するコマンド、(S) はそのコマンドに対する SMTP サーバの応答を意味します。

IMSVA 9.0 の場合

SMTP では1通のメッセージに複数の宛先を指定する場合、SMTP クライアント (この場合 IMSVA の Postfix) は SMTP サーバ (配送先メールサーバ、この場合 172.16.1.1) と SMTP 接続を確立後、RCPT TO コマンドを複数回発行し、DATA コマンドでメールデータを送信し、メッセージを配送します。

IMSVA 9.0 では内部ドメインである trendmicro.com のメールアドレスも example.com と example.co.jp のメールアドレスも、すべてひとつの SMTP 接続で RCPT TO コマンドに指定され、1通のメッセージとして配送されます。

...
(C) MAIL FROM:<john@trendmicro.com>
(S) 250 2.1.0 Ok
(C) RCPT TO:<hanako@example.co.jp>
(S) 250 2.1.5 Ok
(C) RCPT TO:<taro@example.com>
(S) 250 2.1.5 Ok
(C) RCPT TO:<lucy@trendmicro.com>
(S) 250 2.1.5 Ok
(C) DATA
(S) 354 End data with <CR><LF>.<CR><LF>
(C) メールデータ
(C) .
(S) 250 2.0.0 Ok: queued as 6005BE151B
(C) QUIT
(S) 221 2.0.0 Bye

メールログ (/var/log/maillog) を確認すると、プロセス ID (30361) が同一であることから1通のメッセージで 172.16.1.1 に配送されていることがわかります。

/var/log/maillog:
May 18 12:10:10 imsva90 postfix/smtp[30361]: B81EC403F: to=<hanako@example.co.jp>, relay=172.16.1.1[172.16.1.1]:25, delay=0.8, delays=0.71/0/0/0.09, dsn=2.0.0, status=sent (250 2.0.0 Ok: queued as 6005BE151B)
May 18 12:10:10 imsva90 postfix/smtp[30361]: B81EC403F: to=<taro@example.com>, relay=172.16.1.1[172.16.1.1]:25, delay=0.8, delays=0.71/0/0/0.09, dsn=2.0.0, status=sent (250 2.0.0 Ok: queued as 6005BE151B)
May 18 12:10:10 imsva90 postfix/smtp[30361]: B81EC403F: to=<lucy@trendmicro.com>, relay=172.16.1.1[172.16.1.1]:25, delay=0.8, delays=0.71/0/0/0.09, dsn=2.0.0, status=sent (250 2.0.0 Ok: queued as 6005BE151B)

IMSVA 9.1 の場合

IMSVA 9.1 では配送ポリシーサービスが内部ドメインとそれ以外のドメイン宛で Postfix に異なる配送方式を指定するため、Postfix は以下のようにふたつの SMTP 接続に分け、2通のメッセージで配送します。

(1通目)
...
(C) MAIL FROM:<john@trendmicro.com>
(S) 250 2.1.0 Ok
(C) RCPT TO:<lucy@trendmicro.com>
(C) DATA
(S) 354 End data with <CR><LF>.<CR><LF>
(C) メールデータ
(C) .
(S) 250 2.0.0 Ok: queued as 5CDE5E151B
(C) QUIT
(S) 221 2.0.0 Bye
(2通目)
...
(C) MAIL FROM:<john@trendmicro.com>
(S) 250 2.1.0 Ok
(C) RCPT TO:<taro@example.com>
(S) 250 2.1.0 Ok
(C) RCPT TO:<hanako@example.co.jp>
(S) 250 2.1.0 Ok
(C) DATA
(S) 354 End data with <CR><LF>.<CR><LF>
(C) メールデータ
(C) .
(S) 250 2.0.0 Ok: queued as 6277CE151E
(C) QUIT
(S) 221 2.0.0 Bye

メールログ (/var/log/maillog) を確認すると、プロセス ID (27352 と 27353) が異なることから2通のメッセージで 172.16.1.1 に配送されていることがわかります。

/var/log/maillog:
May 18 12:25:22 imsva91 postfix/smtp[27352]: 93B01C8040: to=<lucy@trendmicro.com>, relay=172.16.1.1[172.16.1.1]:25, delay=0.52, delays=0.46/0.01/0/0.05, dsn=2.0.0, status=sent (250 2.0.0 Ok: queued as 5CDE5E151B)
May 18 12:25:22 imsva91 postfix/smtp[27353]: 93B01C8040: to=<hanako@example.co.jp>, relay=172.16.1.1[172.16.1.1]:25, delay=0.53, delays=0.46/0.01/0.02/0.04, dsn=2.0.0, status=sent (250 2.0.0 Ok: queued as 6277CE151E)
May 18 12:25:22 imsva91 postfix/smtp[27353]: 93B01C8040: to=<taro@example.com>, relay=172.16.1.1[172.16.1.1]:25, delay=0.53, delays=0.46/0.01/0.02/0.04, dsn=2.0.0, status=sent (250 2.0.0 Ok: queued as 6277CE151E)

回避策

IMSVA 9.1 においても IMSVA 9.0 と同様、1通のメッセージで配送するようにするのであれば以下の作業を実施してください。

  1. Postfix の設定ファイル main.cf を vi で開き、以下のようにパラメータ relay_transport を追記します。

    /opt/trend/imss/postfix/etc/postfix/main.cf:
    relay_transport = smtp
    	
  2. 設定ファイル編集後、次のコマンドを実行してリロードし、設定を反映してください。

    # postfix reload