Postfix XCLIENT Howto


XCLIENT SMTP 拡張の目的

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

  1. アクセス制御のテスト。SMTP サーバアクセスルールは、決定が リモートクライアントによってのみ引き起こされる場合は確認するのが 困難です。アクセスルールのテストを容易にするために、認証された SMTP クライアントテストプログラムには、SMTP セッションで流される SMTP クライアントのホスト名、ネットワークアドレス、およびその他の クライアント情報といった、SMTP サーバが持つ情報を上書きする機能が 必要です。

  2. メールを上流メールサーバからダウンロードして SMTP でローカルの MTA に入れるクライアントソフトウェア。ローカル MTA の SMTP サーバ アクセスルールの利点を得るため、クライアントソフトウェアはリモート クライアント名やクライアントアドレスなどの SMTP サーバが持つ情報を 上書きする機能が必要です。このような情報はたいてい上流サーバの Received: メッセージヘッダから抜き出せます。

  3. フィルタ後のアクセス制御とロギング。インターネット-> フィルタ->MTA 形式のコンテンツフィルタアプリケーションでは、 メール中継およびその他のアクセス制御を MTA に委譲できれば、フィルタを 簡単にすることが可能です。これは特にフィルタが SMTP コマンドの透過型 プロキシとして働く場合に便利です。これには SMTP クライアントホスト 名やネットワークアドレス、その他の MTA が持つ情報をフィルタが 上書きできる必要があります。

XCLIENT コマンドの文法

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

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

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

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

xclient-command = XCLIENT 1*( SP attribute-name"="attribute-value )

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

注意1: NAME および HELO 属性で文法的に有効なのは最大 255 文字です。 クライアントは SMTP コマンドの制限である 512 文字を超える XCLIENT コマンドを 送ってはいけません。制限の超過を避けるため、クライアントは複数の XCLIENT コマンドを使ってください。

注意2: [UNAVAILABLE]、[TEMPUNAVAIL] および IPV6: は大文字でも小文字でも、 混在したものでも指定できます。

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

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

XCLIENT の例

最初の例では、XCLIENT コマンドを通して SMTP セッション情報を全て 渡すことで、クライアントはメール生成システムのふりをします。クライアントに よって送られる情報は太字で示されます。

220 server.example.com ESMTP Postfix
EHLO client.example.com
250-server.example.com
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-XCLIENT NAME ADDR PROTO HELO
250 8BITMIME
XCLIENT NAME=spike.porcupine.org ADDR=168.100.189.2 PROTO=ESMTP 
250 Ok
XCLIENT 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 763402AAE6
QUIT
221 Bye

2つ目の例では、EHLO または HELO コマンドの前に XCLIENT コマンドを 送ることで、クライアントはメール生成システムのふりをします。これは真似の 現実性を上げますが、サーバがサポートしている XCLIENT オプションを あらかじめ知っておく必要があります。

220 server.example.com ESMTP Postfix
XCLIENT NAME=spike.porcupine.org ADDR=168.100.189.2
250 Ok
HELO spike.porcupine.org
250 server.example.com
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 CF1E52AAE7
QUIT
221 Bye

セキュリティ

XCLIENT コマンドは監査証跡や SMTP クライアントアクセス権限を変えて しまいます。このコマンドの使用は認証された SMTP クライアントに制限 しなければいけません。しかし、XCLIENT コマンドはそれ自身のアクセス制限 メカニズムを上書きすべきではありません。

SMTP 接続キャッシュ

XCLIENT 属性は SMTP セッションが終わるまで持続します。1つのセッションが 異なる SMTP クライアントを代表してメールを配送するのに使われるのであれば、 XCLIENT 属性はそれぞれの MAIL FROM コマンドの前に適切にリセットされる必要が あります。