HEADER_CHECKS(5) HEADER_CHECKS(5) 名前 header_checks - Postfix ビルトインヘッダ・本体検査 書式 header_checks = pcre:/etc/postfix/header_checks mime_header_checks = pcre:/etc/postfix/mime_header_checks nested_header_checks = pcre:/etc/postfix/nested_header_checks body_checks = pcre:/etc/postfix/body_checks postmap -fq "string" pcre:/etc/postfix/filename postmap -fq - pcre:/etc/postfix/filename <inputfile 解説 Postfix は、入ってきたメールのメッセージヘッダ1行またはメッセージ本体1 行を同時に検査する、単純なビルトインコンテンツ検査メカニズムを提供し ま す 。それぞれの入力はパターンのリストと比較され、マッチが見つかると、対 応するアクションが実行されます。この機能は Postfix cleanup(8) サーバ に よって実装されています。 例はこのマニュアルページの "例" セクションを参照してください。 Postfix header_checks または body_checks はワームやウィルスからのメール の氾濫を止めるように設計されています; 添付ファイルをデコードしたりア ー カイブを unzip したりしません。より高度なコンテンツ分析が必要であれば、 以下の README ファイルのセクションで参照されているドキュメントを参照 し てください。 Postfix は4つのビルトインコンテンツ検査クラスをサポートしています: header_checks こ れらは最初のメッセージヘッダ (mime_header_checks で処理される ヘッダは除きます) に適用されます。 mime_header_checks (デフォルト: $header_checks) これらは MIME 関連のメッセージヘッダのみに適用されます。 この機能は Postfix 2.0 以降で使えます。 nested_header_checks (default: $header_checks) これらは添付されたEメールメッセージのメッセー ジ ヘッ ダ (mime_ header_checksで処理されるヘッダは除きます) に適用されます。 この機能は Postfix 2.0 以降で使えます。 body_checks これらはマルチパートメッセージ境界を含む、その他全てのコンテンツ に適用されます。 バージョン 2.0 以前の Postfix では、最初のメッセージヘッダの後の コンテンツは全て body コンテンツとして扱われます。 注 意: メッセージヘッダは、一つのメッセージヘッダが複数行にわたる場合で あっても、同時に一つの論理的ヘッダが検査されます。本体行は常に同時に1行 ずつ検査されます。 テーブルの書式 このドキュメントは header_checks および body_checks ルールが Postfix 正 規表現検索テーブルの形式で指定されることを想定しています。 通 常 、pcre (Perl 互 換正規表現) テーブルでもっともよいパフォーマンスが得られます が、遅い regexp (POSIX 正規表現) テーブルサポートの方がより広く得られま す。あなたの Postfix システムがサポートしている検索テーブル形式を知るに は、"postconf -m" コマンドを使います。 Postfix 正規表現テーブルの一般的な書式は以下で得られます。特定のパタ ー ン やフラグの文法の議論はそれぞれ pcre_table(5) や regexp_table(5) を参 照してください。 /pattern/flags action pattern が入力文字列にマッチすると、対応する action を実行します 。有効なアクションは下のリストを参照してください。 !/pattern/flags action pattern が入力文字列にマッチしなかった場合、対応する action を実 行します。 if /pattern/flags endif 入力文字列が pattern にもマッチする場合に限り、入力文字列 を if と endif の間にあるパターンにマッチさせます。 if..endif はネスト することができます。 注意: if..endif の中のパターンの前に空白を付けないでください。 if !/pattern/flags endif 入力文字列が pattern にもマッチしなかった場合に限り、入力文字 列 を if と endif の間にあるパターンにマッチさせます。if..endif は ネストすることができます。 空行とコメント 空行や空白のみの行は無視され、行頭の非空白文字が `#' で始まる 行 も同様です。 複数行テキスト パ ターン/アクション行は非空白文字で始まります。空白で始まる行は 前の論理行を継続します。 テーブルの検索順序 メッセージ入力のそれぞれの行に対して、パターンはテーブルに指定された 順 に 適用されます。入力行にパターンがマッチすると、対応するアクションが実 行され、次の入力行が検査されます。 テキスト置換 action 文字列にマッチした正規表現の部分文字列の置換は、慣習的な Perl 文 法 ($1, $2, etc.) を使うことで可能です。結果文字列のマクロの後に空白が 続かない場合、${n} や $(n) のように書く必要があるかもしれません。 注意: 否定パターン (! が前につくもの) は表現がマッチしなかった時に結 果 を返し、その否定パターンに対しては置換は使えません。 アクション アクション名は大文字・小文字の区別をしません。他の Postfix ドキュメント では一貫して大文字で示されます。 DISCARD optional text... 配送に成功したと主張して、メッセージを静 か に 破 棄 し ま す 。 optional text が指定されていればそれをログに記録し、指定がなけれ ば一般的なメッセージをログに記録します。 注意: このアクションは現在のメ ッ セ ー ジ の header ま た は body_checks 検査をこれ以上おこなわないようにします。また、受信者 全 てに影響を与えます。メッセージ全体を消さず、受信者1人だけを破 棄するには、 transport(5) テーブルを使って discard(8) サービスに メールを向けてください。 この機能は Postfix 2.0 以降で使えます。 DUNNO このテーブルに検索キーが見つからなかったように見せ、次の入力行を 検査します。このアクションはテーブル検索を短くするのに使われます 。 後方互換性のため、Postfix は OK も受け付けますが、これは (これま でもそうでしたが) DUNNO として扱われます。 この機能は Postfix 2.1 以降で使えます。 FILTER transport:destination キューファイルにコンテンツフィルタ要求を書き込み、次の入力行を検 査します。メッセージ全体が受信された後で、メッセージは指定された 外部コンテンツフィルタを通して送られます。外部コンテンツフィルタ に関するさらなる情報は Postfix FILTER_README ファイルにありま す 。 注意: このアクションは main.cf content_filter 設定を上書きし、そ のメッセージの全ての受信者に影響を与えます。複数の FILTER アクシ ョンが起こると、最後のものだけが実行されます。 この機能は Postfix 2.0 以降で使えます。 HOLD optional text... メッセージを hold キューに置くように手配し、次の入力行を検査しま す。誰かが削除するか配送のために解放するまで、メッセージは hold キューに置かれたままになります。optional text が指定されていれば それをログに記録し、指定がなければ一般的なメッセージをログに記録 します。 hold に置かれたメールは postcat(1) コマンドで調べることができ、 postsuper(1) コマンドで破棄したり解放できます。 注意: $maximal_queue_lifetime や $bounce_queue_lifetime のかなり の割合、もしくはそれ以上の間 hold に留め置かれたメールを解放する には "postsuper -r" を使ってください。 注意: この action はメッセージの全ての受信者に影響を与えます。 この機能は Postfix 2.0 以降で使えます。 IGNORE 現在の行を入力から削除し、次の入力行を検査します。 PREPEND text... 指定された text を持つ行を前に付加して、次の入力行を検査します。 付 加された text 行は PREPEND パターンを引き起こした入力行の前に 出力されます。 注意: o 前に付けられる text は PREPEND アクションを引き起こした入 力のすぐ前に1行で出力されます。 o 付 加 されたtextは入力ストリームの一部とは見なされません: これはheader/bodyチェックやアドレス書き換え を 受 け ず、 Postfixが足りないメッセージヘッダを付加する方法に影響は与 えません。 o メッ セー ジ ヘッダ行の前に text を付加する際、付加される text は有効なメッセージヘッダラベルで始まっていなければい けません。 o こ のアクションは複数行 text を付加するために使うことはで きません。 この機能は Postfix 2.1 以降で使えます。 REDIRECT user@domain キューファイルにメッセージのアドレス書き換え要求を書き、次の入力 行を検査します。メッセージがキューに入った後で、意図された受信者 の代わりに指定されたアドレスに送られます。 注意: このアクションは FILTER アクションを上書きし、メッセージの 全ての受信者に影響を与えます。複数の REDIRECT アクションが指定さ れると、最後のものだけが実行されます。 この機能は Postfix 2.1 以降で使えます。 REPLACE text... カレント行を指定された text で置き換え、次の入力行を検査します。 注 意: メッセージヘッダ行を置き換える場合は、text は有効なヘッダ ラベルで始まっていなければいけません。 この機能はPostfix 2.2以降で使えます。以下の記述はPostfix 2.2.2以 降に適用されます。 注意: o メッセージヘッダ行を置き換える場合は、text は有効なヘッダ ラベルで始まっていなければいけません。 o 置き換えられたtextは入力ストリームの部分に残っていま す。 PREPEND アクションの結果と違い、置き換えられたメッセージ ヘッダはアドレス書き換えを受けたり、Postfixが不足したメッ セージヘッダを追加する方法に影響を与えます。 REJECT optional text... メ ッ セ ー ジ全体を拒否します。optional text が指定されていれば optional text... を付けて応答し、指定がなければ一般的なエラー メ ッセージで応答します。 注意: このアクションは現在のメッセージの検査をこれ以上おこなわな いようにします。また、受信者全てに影響を与えます。 Postfix バー ジョン2.3以降は拡張状態コードをサポートしています。 optional text... のはじめにコードが指定されていないと、 Postfix は "5.7.1" というデフォルトの拡張状態コードを挿入します。 WARN optional text... optional text... を付けた警告をログに記録します (または一般的 な メ ッセージをログに記録します)。このアクションはより徹底的なアク ションを適用する前に、デバッグやパターンのテストをするために使わ れます。 バグ 多くの人が header および body_checks ルールの主な制限を見落とします。こ れらのルールは同時に論理メッセージヘッダ1行または本体の1行を操作し、 そ の1行に対してなされた決定は次の行には持ち越されません。メッセージ本体の text がエンコードされている場合 (RFC2045)、ルールはエンコードされた形で 指定する必要があります。 cleanup(8) デーモン自身によって付加されたメッセージヘッダは検査から除外 さ れ ま す。 そ の よ う なメッセージヘッダには From: や To:、Message- ID:、Date: があります。 cleanup(8) デーモンによって削除されたメッセージヘッダは削除される前に調 べられます。例: Bcc:, Content-Length:, Return-Path:. 設定パラメータ body_checks メッセージ本体行に対するコンテンツフィルタルールを持つ検索テーブ ル。これらのフィルタは同時に最大 $line_length_limit バイトの一つ の物理行を見ます。 body_checks_size_limit $body_checks フィルタリングを受けるメッセージ本体セグメント ( 添 付) ごとの内容量。 header_checks mime_header_checks (デフォルト: $header_checks) nested_header_checks (デフォルト: $header_checks) メッセージヘッダ行に対するコンテンツフィルタルールを持つ検索テー ブル: これらはそれぞれ最初のメッセージヘッダ (MIME ヘッダを含 み ません)、メッセージのどこかにある MIME ヘッダ、そして添 付 メ ッ セージの最初のヘッダに対して適用されます。 注意: これらのフィルタは、メッセージヘッダが複数行にわたっている 場 合 で も 同 時 に 一 つ の 論 理 メ ッ セージヘッダを見ます。 $header_size_limit 文字より長いメッセージヘッダは切りつめられ ま す。論理ヘッダを見ます。 disable_mime_input_processing メールを受け取っている間、MIME 関連のメッセージヘッダを特別扱 い し ま せん; 最初のメッセージヘッダの後にある全てのテキストはメッ セージ本体の一部と見なされます。このことは header_checks は全 て の最初のメッセージヘッダに適用され、body_checks はメッセージの残 りの部分に適用されることを意味します。 注意: この方法で使われると、body_checks は複数行メッセージヘッダ を同時に1行処理します。 例 悪い拡張子名を持つ添付をブロックするヘッダパターン。 /etc/postfix/main.cf: header_checks = regexp:/etc/postfix/header_checks /etc/postfix/header_checks: /^content-(type|disposition):.*name[[:space:]]*=.*\.(exe|vbs)/ REJECT Bad attachment file name extension: $2 特定の HTML ブラウザ脆弱性問題を止めるための本体パターン。 /etc/postfix/main.cf: body_checks = regexp:/etc/postfix/header_checks /etc/postfix/body_checks: /^<iframe src=(3D)?cid:.* height=(3D)?0 width=(3D)?0>$/ REJECT IFRAME vulnerability exploit 関連項目 cleanup(8), Postfix メッセージの正規化とキュー投入 pcre_table(5), PCRE テーブルの書式 regexp_table(5), POSIX 正規表現テーブルの書式 postconf(1), Postfix 設定ユーティリティ postmap(1), Postfix 検索テーブル管理 postsuper(1), Postfix 管理 postcat(1), Postfix キューファイルの内容を表示 RFC 2045, base64 および quoted-printable エンコードルール RFC 2047, 非 ASCII 文のメッセージヘッダエンコード README ファイル DATABASE_README, Postfix 検索テーブルの概要 CONTENT_INSPECTION_README, Postfix コンテンツ検査の概要 BUILTIN_FILTER_README, Postfix ビルトインコンテンツ検査 BACKSCATTER_README, 返送された偽装メールのブロック ライセンス The Secure Mailer license はこのソフトウェアと一緒に配布されなければい けません。 作者 Wietse Venema IBM T.J. Watson Research P.O. Box 704 Yorktown Heights, NY 10598, USA HEADER_CHECKS(5)