PIPE(8) PIPE(8) 名前 pipe - Postfix 外部コマンドへの配送 書式 pipe [generic Postfix daemon options] command_attributes... 解説 pipe(8) デー モ ン は Postfix キューマネージャから外部コマンドへのメッ セージ配送要求を処理します。このプログラムは master(8) プロセス マ ネー ジャから起動されることを想定しています。 送 信者アドレスや受信者アドレス、次に渡すホスト名のようなメッセージの属 性は、外部コマンドが実行される前に展開されるコマンドラインマクロとし て 指定することができます。 pipe(8) デーモンはキューファイルを更新し、受信者を終わったものとしてマーク するか、キューマネージャに後で再び試行するように通知します。配送状態 の レポートは bounce(8)、defer(8) または trace(8) デーモンの適切なものに送 られます。 単一受信者への配送 外部コマンドには一つの配送要求につき一つ以上の受信者を扱えないものが あ ります。このような配送方法の例は、ページャ(ポケットベル)、 FAX マシンが あります。 Postfix が1つの配送につき複数の受信者に送らないようにするには、次のよう に Postfix main.cf ファイルで指定します transport_destination_recipient_limit = 1 こ こで transport は Postfix master.cf エントリの pipe ベースな配送方法 の1番目のカラムにある名前です。 コマンド属性の文法 外部コマンドの属性は master.cf ファイルのサービスの定義の最後で与えられ ます。文法は次のとおりです: chroot=pathname (オプション) プロセスのルートディレクトリと作業ディレクトリを指定されたディレ クトリに変更します。この変更は user 属性で指定された権限への切り 替えとオプションの directory=pathname ディレクティブが実行される 前に起こります。失敗すると配送は遅延されます。 この機能はPostfix 2.3で使えます。 directory=pathname (オプション) 外部コマンドを実行する前に指定されたディレクトリに変更し ま す。 ディレクトリは user 属性 (以下参照) で指定されたユーザがアクセス できなければいけません。デフォル ト の 作 業 ディ レ ク ト リ は $queue_directory です。失敗すると配送は遅延されます。 この機能はPostfix 2.2で使えます。 eol=string (オプション、デフォルト: \n) 出力レコードの区切り文字。たいていは \r\n または \n のどちらかを 使 います。普通のC形式のバックスラッシュエスケープシーケンスが認 識されます: \a \b \f \n \r \t \v \ddd (最大3つの8進数) お よ び \\。 flags=BDFORhqu.> (オプション) オプションのメッセージ処理フラグ。デフォルトではメッセージは変更 せずにコピーされます。 B それぞれのメッセージの最後に空行を加えます。これは前に 空 行がある場合のみに "From " 行を認識するようなメールユーザ エージェントが必要とします。 D エンベロープ受信者アドレスを持つ "Delivered-To: recipi- ent" メッセージヘッダを前に付加します。注意: これが働くた めには transport_destination_recipient_limit が 1 でな け ればいけません。 この機能はPostfix 2.0で使えます。 F "From sender time_stamp" エンベロープヘッダをメッセージ本 体の前に付加します。これは、例えば UUCP ソフトウェアな ど により求められます。 O Postfix に与えられた受信者アドレスを持つ "X-Original-To: recipient" メッセージヘッダを前に付加します。注意: これが 働 く ためには transport_destination_recipient_limit が 1 でなければいけません。 この機能はPostfix 2.0で使えます。 R Return-Path: メッセージヘッダをエンベロープ送信者アドレス に付加します。 h コマンドライン $recipient ドメイン名や $nexthop ホスト名 を小文字に変換します。これは UUCP での配送に推奨されま す 。 q コマンドライン $sender や $recipient アドレスのローカル部 分 (最も右側の @ 文字の左側のテキスト) にある空白や他の特 殊 文字を RFC 822 の 8 ビット透過バージョンに従って引用符 が付けられます。これは UUCP や BSMTP での配送に推奨されま す。 結果は Postfix sendmail(1) メール投函コマンドによるコマン ドライン受信者のアドレスのパースと互換です。 q フラグはアドレス全体だけに影響をおよ ぼ し 、$user や $extension、$mailbox コマンドラインマクロといった部分アド レス情報には影響しません。 u コマンドライン $recipient ローカル部分 (最も右側の @ 文字 の 左側のテキスト) を小文字に変換します。これは UUCP での 配送に推奨されます。 . "." で始まる行の前に "." を付けます。これは例えば、 BSMTP ソフトウェアで必要です。 > ">" を "From " で始まる行の前に付加します。これは例えば UUCP ソフトウェアなどにより求められます。 null_sender=replacement (デフォルト: MAILER-DAEMON) $sender コ マンド行マクロを展開する際、および From_ や Return- Path: メッセージヘッダを生成する際に、通常は配送状態通知で使われ る null 送信者アドレスを指定されたテキストで置き換えます。 null 送信者を置き換えるテキストが空ではない文字列であれば、コマ ンドライン引数でのアドレスの引用符について q フラグの影響を受 け ます。 null 送 信者を置き換えるテキストはからにもできます; この形式は Postfixにメールを返すコンテンツフィルタに推奨されます。空の送 信 者 アドレスはコマンドライン引数でのアドレスの引用符について q フ ラグの影響は受けません。 注意: null送信者アドレスは無警戒なソフトウェアが簡単に解釈ミスを 起こします。例えば、pipe(8) デーモンが次のようなコマンドを実行し ます: command -f$sender -- $recipient (bad) 送信者アドレスがnull文字列の場合、この command は -f オプショ ン の値を間違って解釈します。正しい解釈をさせるには、$sender を単独 で 1つの引数として指定します: command -f $sender -- $recipient (good) この機能はPostfix 2.3以降で使えます。 size=size_limit (オプション) この制限(バイト単位)よりも大きなサイズのメッセージは配送できない ものとして送信者に返送されます。 user=username (必須) user=username:groupname 外部コマンドを username で指定された権限で実行します。ソフトウェ アは root 権限またはメールシステム所有者権限の外部コマンドを拒否 し ま す。groupname が指定されると、対応するグループ ID が user- name のグループ ID のかわりに使われます。 argv=command... (必須) 実行されるコマンド。これは最後のコマンド属性として指定されなけれ ばいけません。コマンドは直接実行されます。つまり、シェルのメタ文 字はシェルコマンドの解釈を受けません。 コマンド引数ベクトルでは、次のマクロが認識されて、Postfix キュー マネージャ配送要求から得た対応する情報に置き換えられます。 ${name} の形式に加えて、$name や $(name) も認識されます。単一 の $ がほしいときは $$ を指定します。 ${client_address} こ のマクロはリモートクライアントネットワークアドレスに展 開されます。 これはPostfix 2.2以降で使えます。 ${client_helo} このマクロはリモートクライアント HELO コマンドパラメー タ に展開されます。 これはPostfix 2.2以降で使えます。 ${client_hostname} このマクロはリモートクライアントホスト名に展開されます。 これはPostfix 2.2以降で使えます。 ${client_protocol} こ の マ クロはリモートクライアントプロトコルに展開されま す。 これはPostfix 2.2以降で使えます。 ${extension} こ のマクロは受信者アドレスの拡張部分に展開されます。たと えば user+foo@domain というアドレスであれば、拡張部 分 は foo です。 ${extension} を含むコマンドライン引数は、コマンドライン引 数と同じ数の受信者に展開されます。 この情報は u フラグによって小文字に変換されます。 ${mailbox} このマクロは受信者アドレスのローカル部分全体に展開され ま す 。 たとえば user+foo@domain ならば mailbox は user+foo です。 ${mailbox} を含むコマンドライン引数はコマンドライン引数と 同じ数の受信者に展開されます。 この情報は u フラグによって小文字に変換されます。 ${nexthop} このマクロは次に渡すホスト名に展開されます。 この情報は h フラグによって小文字に変換されます。 ${recipient} このマクロは受信者アドレス全体に展開されます。 ${recipient} を含むコマンドライン引数はコマンドライン引数 と同じ数の受信者に展開されます。 この情報は hqu フラグによって引用符が付けられたり、小文字 に変換されます。 ${sasl_method} このマクロはメッセージの受信中に使われたSASL認証メカニ ズ ムに展開されます。 SASL認証なしにメッセージが受け取られる と空文字列が渡されます。 これはPostfix 2.2以降で使えます。 ${sasl_sender} このマクロはメッセージの受信中に使われたSASL送信者名 ( つ まりRFC 2554でいう元の送信者) に展開されます。 これはPostfix 2.2以降で使えます。 ${sasl_username} こ のマクロはメッセージの受信中に使われたSASLユーザ名に展 開されます。 SASL認証なしにメッセージが受け取られると空文 字列が渡されます。 これはPostfix 2.2以降で使えます。 ${sender} このマクロはエンベロープの送信者アドレスに展開されます。 デフォルトでは null送信者アドレスは MAILER-DAEMON に展 開 されます; これは上に書かれている null_sender 属性で変更で きます。 この情報は q フラグによって引用符が付けられます。 ${size} このマクロは Postfix から見たメッセージサイズに展開され、 これはほぼ配送されるメッセージのサイズになります。 ${user} このマクロは受信者アドレスのユーザ名部分に展開されます 。 た とえば、アドレス user+foo@domain のユーザ名部分は user です。 ${user} を含むコマンドライン引数はコマンドライン引数と 同 じ数の受信者に展開されます。 この情報は u フラグによって小文字に変換されます。 標準 RFC 3463 (拡張状態コード) 診断 コマンド終了状態コードは <sysexits.h> の定義の慣例に従うことが期待さ れ ます。終了状態 0 は通常の成功終了を意味します。 Postfixバージョン2.3以降ではRFC 3463形式の拡張状態コードをサポートし て い ます。コマンドがゼロ以外の終了状態で終わり、コマンドの出力が拡張状態 コードで始まっている場合は、この状態コードがゼロ以外の終了状態に優先 し ます。 問 題や処理は syslogd(8) に記録されます。不正なメッセージファイルはキュ ーマネージャが詳細な検査をするために corrupt キューに移動できるようにマ ークされます。 セキュリティ このプログラムは2つの性格を必要とします。1) プライベート Postfix キュー や IPC メカニズムへのアクセス と 2) 特定ユーザとしての外部コマンドの 実 行。それゆえ、セキュリティに注意を払う必要があります。 設定パラメータ pipe(8) プロセスは限られた短時間しか動かないため、main.cf への変更は自 動的に拾われます。この変更を早くしたければ "postfix reload" コマンド を 使ってください。 以 下 の 文 章 はパラメータの概要のみを提供します。例を含む詳細は post- conf(5) を参照してください。 リソースと速度の制御 下の文章で、transport は master.cf エントリの最初のフィールドです。 transport_destination_concurrency_limit ($default_destination_concur- rency_limit) 指定された transport を使った、同じ配送先への並列配送の数を制 限 し ます。この制限は Postfix キューマネージャによって強制されます 。 transport_destination_recipient_limit ($default_destination_recipi- ent_limit) 指定された transport を使った、メッセージ配送ごとの受信者数を 制 限 します。この制限は Postfix キューマネージャによって強制されま す。 transport_time_limit ($command_time_limit) 指定された transport を使った、外部コマンドへの配送時間を制限 し ます。この制限は pipe 配送エージェントによって強制されます。 その他の制御 config_directory ('postconf -d' の出力を参照) Postfix main.cf および master.cf 設定ファイルのデフォルト の 場 所。 daemon_timeout (18000s) ビルトイン監視タイマーによって終了するまでの、Postfix デーモンプ ロセスが要求を扱うことができる時間。 delay_logging_resolution_limit (2) ロ グ に小数点以下の遅延の値を記録する際の、小数点以下の最大の桁 数。 export_environment ('postconf -d' の出力を参照) Postfix プロセスが非 Postfix プロセスに渡す環境変数のリスト。 ipc_timeout (3600s) 内部通信チャネルを使った情報の送受信の時間制限。 mail_owner (postfix) Postfix キューおよびほとんどの Postfix デーモンプロセスを所有す る UNIX システムアカウント。 max_idle (100s) Postfix デーモンプロセスが終了するまでに次のサービス要求を待つ最 大時間。 max_use (100) Postfix デーモンプロセスが終了するまでの接続要求の最大数。 process_id (read-only) Postfix コマンドまたはデーモンプロセスのプロセス ID。 process_name (read-only) Postfix コマンドまたはデーモンプロセスのプロセス名。 queue_directory ('postconf -d' の出力を参照) Postfix トップレベルキューディレクトリの場所。 recipient_delimiter (empty) ユーザ名と拡張アドレス (user+foo) の間の区切り。 syslog_facility (mail) Postfix ロギングの syslog facility 名。 syslog_name (postfix) 例 えば "smtpd" が "postfix/smtpd" となるようにするために syslog レコードのプロセス名の前に付けられるメールシステムの名前。 関連項目 qmgr(8), キューマネージャ bounce(8), 配送状態レポート postconf(5), 設定パラメータ master(5), 一般的なデーモンオプション master(8), プロセスマネージャ syslogd(8), システムロギング ライセンス The Secure Mailer license はこのソフトウェアと一緒に配布されなければ い けません。 作者 Wietse Venema IBM T.J. Watson Research P.O. Box 704 Yorktown Heights, NY 10598, USA PIPE(8)