Postfix XFORWARD Howto


XFORWARD SMTP 拡張の目的

XFORWARD コマンドは次の問題を目標にしています:

この拡張は別のコマンドとして実装されており、クライアントやメッセージの属性を追加して送るのに使えます。これは MAIL FROM コマンドを使った追加パラメータを渡す形では実装されていません。そうしてしまうと、AUTH などの他の拡張をサポートするためにすでに必要となっている空間では足りず、600文字以上をさらに MAIL FROM コマンド長制限に追加する必要が出てしまいます。

XFORWARD コマンドの文法

クライアント-サーバ間の対話例はこのドキュメントの最後にあります。

SMTP サーバの EHLO 応答における、この拡張に関するキーワードが XFORWARD です。続いて XFORWARD 実装がサポートしている属性の名前が続きます。

XFORWARD コマンドはメール配送処理の途中 (つまり MAIL とドットの間) 以外のどこでも送ることができます。サーバが ESMTP コマンドパイプライニングをサポートしていれば、コマンドをパイプラインさせることもできます。

XFORWARD 要求の文法を以下に示します。大文字と引用符の付いた文字列は終端記号 (terminals) を、小文字の文字列はメタ終端記号 (meta terminals) を、 SP は空白を表します。コマンドや属性名は大文字で書かれていますが、実際には小文字でも構いません。

xforward-command = XFORWARD 1*( SP attribute-name"="attribute-value )

attribute-name = ( NAME | ADDR | PROTO | HELO | SOURCE )

attribute-value = xtext

注意1: 属性値は255文字よりも長くてはいけません (特定の属性はさらに短くなければいけないものもあります)。またコントロール文字や非 ASCII 文字、空白、その他メッセージヘッダで特別な文字を含んでもいけません。

注意2: DNS ホスト名は最大 255 文字までです。XFORWARD クライアントの実装は SMTP コマンドの制限である 512 文字を超えた XFORWARD コマンドを送ってはいけません。

注意3: [UNAVAILABLE] は大文字、小文字、それらの混在のいずれでも構いません。

注意4: XFORWARD サーバの実装は現在の SMTP セッションからの情報と上流のセッションからの情報を混ぜてはいけません。

注意5: バージョン2.3より前のPostfixの実装では、属性値を xtext エンコードしません。これらの古い実装を解釈しようとするサーバでは、エンコードされていない情報を受け取る準備をしておくべきです。

XFORWARD サーバ応答

書式が正しい XFORWARD コマンドを受け取ると、サーバは指定された属性値を保存し、[UNAVAILABLE] という値が指定された属性を消去します。すべての XFORWARD 属性は MAIL FROM コマンドが完了した後で、実際のクライアント情報にリセットされます。

XFORWARD サーバ応答コード

コード 意味
250 成功
421 続行不能、切断中
501 コマンドパラメータ文法の間違い
503 メール処理実行中
550 不十分な認証

XFORWARD の例

以下の例では、クライアントが送る情報を太字で示しています。

220 server.example.com ESMTP Postfix
EHLO client.example.com
250-server.example.com
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-XFORWARD NAME ADDR PROTO HELO
250 8BITMIME
XFORWARD NAME=spike.porcupine.org ADDR=168.100.189.2 PROTO=ESMTP 
250 Ok
XFORWARD HELO=spike.porcupine.org
250 Ok
MAIL FROM:<wietse@porcupine.org>
250 Ok
RCPT TO:<user@example.com>
250 Ok
DATA
354 End data with <CR><LF>.<CR><LF>
...message content...
.
250 Ok: queued as 3CF6B2AAE8
QUIT
221 Bye

セキュリティ

XFORWARD コマンドは監査証跡を変更します。このコマンドの利用は認証されたクライアントに制限しなければいけません。

SMTP接続キャッシュ

SMTP 接続キャッシュは、同じ SMTP セッション内での複数のメッセージ配送を可能にします。XFORWARD 属性は MAIL FROM コマンドの完了後にリセットされるので、情報が漏れる可能性はありません。

参考資料

Moore, K, "SMTP Service Extension for Delivery Status Notifications", RFC 1891, January 1996.