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 )

注意1: 属性値は255文字よりも長くてはいけません (特定の属性はさらに 短くなければいけないものもあります)。またコントロール文字や非 ASCII 文字、空白、その他メッセージヘッダで特別な文字を含んでもいけません。 これを破る属性が将来できた際には、 RFC 1891 に書かれている xtext エンコードを使うべきです。

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

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

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

XFORWARD サーバ応答コードは以下の通りです:

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

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 コマンドの完了後にリセット されるので、情報が漏れる可能性はありません。