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 検査をこれ以上おこなわないようにします。また、受信者
全てに影響を与えます。
この機能は 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... を付けて応答し、指定がなければ一般的なエラー メ
ッセージで応答します。
注意: このアクションは現在のメッセージの検査をこれ以上おこなわな
いようにします。また、受信者全てに影響を与えます。
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)