REGEXP_TABLE(5) REGEXP_TABLE(5) 名前 regexp_table - Postfix 正規表現テーブルの書式 書式 postmap -fq "string" regexp:/etc/postfix/filename postmap -fq - regexp:/etc/postfix/filename <inputfile 解説 Postfix メールシステムはアドレスの書き換えやメールのルーティングをする ためのテーブルをオプションで使います。これらのテーブルは通常は dbm また は db 形式です。 代わりに検索テーブルに POSIX 正規表現形式で指定することができます。この 場合、それぞれの入力がパターンのリストと比較され、マッチしたものが見 つ かると対応する結果が返されます。 あなたの Postfix システムがサポートしている検索テーブル形式を知るには、 "postconf -m" コマンドを使います。 検索テーブルをテストするには、上の書式に記述したように "postmap -fq" コ マンドを使います。 テーブルの書式 Postfix 正規表現テーブルの一般的な形式は: /pattern/flags result pattern が入力文字列にマッチすると、対応する result の値を使いま す。 !/pattern/flags result pattern が入力文字列にマッチしなかった場合、対応する result の値 を使います。 if /pattern/flags endif 入力文字列が pattern にマッチしたときのみ、 if と endif の間のパ ターンに対して同じ入力文字列がマッチします。if..endif はネストで きます。 注意: if..endif の内部のパターンの前に空白をつけないでください。 if !/pattern/flags endif 入力文字列が pattern にマッチしなかったときのみ、 if と endif の 間のパターンに対して同じ入力文字列がマッチします。if..endif はネ ストできます。 空行とコメント 空行や空白だけの行は無視され、行頭の非空白文字が `#' で始まる 行 も同様です。 複数行テキスト 論理行は非空白字文字で始まります。空白で始まる行は前の論理行を継 続します。 それぞれのパターンはペアのデリミタで括られた POSIX 正規表現です。正規表 現 の文法は 4.4BSD では re_format(7) に、Solaris では regex(5) に、そし て Linux では regex(7) に記述されています。他のシステムではそれ以外のド キ ュメント名かもしれません。表現のデリミタは空白や特別な意味を持つ文字 を除いてどの文字も使えます (伝統的にスラッシュが使われます)。正規表現は 空白を含むことができます。 デ フォルトではマッチは大文字・小文字の区別をせず、また改行は特別な文字 として扱われません。この動作はフラグによって制御され、これは一つ以上 の 文字をパターンの後に付けることで切り替わるトグルになっています: i (デフォルト: on) 大文字・小文字の区別をするかどうかを切り替えます。デフォルトでは 大文字・小文字を区別しません。 x (デフォルト: on) 拡張表現文法フラグを切り替えます。デフォルトでは、拡張表現文法の サポートは有効です。 m (デフォルト: off) 複数行モードフラグを切り替えます。このフラグが on になっていると 、 ^ および $ メタキャラクタは、それぞれ入力文字列の最初と最後に 加えて、直後および直前の改行文字にマッチします。 テーブル検索順序 入 力文字列にマッチするパターンが見つかるまで、パターンはテーブルに指定 された順に適用されます。 それぞれのパターンは入力文字列全体に適用されます。場合によって、文字 列 は クライアントのホスト名全体であったり、クライアントの IP アドレス全体 、もしくはメールアドレス全体になったりします。従って、親ドメインや親 ネ ットワーク検索は行なわれませんし、 user@domain メールアドレスは user と domain という構成要素に分割されたり、user+foo が user と foo に分割され ることはありません。 テキスト置換 $1, $2, etc. を使って、マッチした表現の部分文字列を result の文字列で置 き換えることも可能です。result の文字列中のマクロは、後に空白が続かない 場合に ${n} や $(n) を必要とするかも知れません。 注 意: 否定パターン (! が前につくもの) は表現がマッチしなかった時に結果 を返すため、その否定パターンに対しては置換は使えません。 SMTPD ACCESS マップの例 # 送信者が指定するルーティングを使えなくします。これは他のドメインに # メールをリレーするのであれば必須です。 /[%!@].*[%!@]/ 550 Sender-specified routing rejected # postmaster は OK、こうすることで彼らの問題を直す方法について # 我々に話すことができます。 /^postmaster@/ OK # 外行きの majordomo 爆発の防止 if !/^owner-/ /^(.*)-outgoing@(.*)$/ 550 Use ${1}@${2} instead endif ヘッダフィルタマップの例 # これらはかつてジャンクメールに共通でした。 /^Subject: make money fast/ REJECT /^To: friend@public\.com/ REJECT BODY FILTER MAP の例 # CPU サイクル節約のために、最初に base 64 エンコードされたテキストを # スキップします。 ~^[[:alnum:]+/]{60,}$~ OK # ここにあなた自身の body パターンを置いてください。 関連項目 postmap(1), Postfix 検索テーブルマネージャ pcre_table(5) PCRE テーブルの書式 cidr_table(5) CIDR テーブルの書式 README ファイル DATABASE_README, Postfix 検索テーブルの概要 作者 regexp テーブル検索コードは元々次の人によって書かれました: LaMont Jones lamont@hp.com コードは次の人により貢献された PCRE 辞書に基づくものでした: Andrew McNamara andrewm@connect.com.au connect.com.au Pty. Ltd. Level 3, 213 Miller St North Sydney, NSW, Australia 次の人により採用され、適応されました: Wietse Venema IBM T.J. Watson Research P.O. Box 704 Yorktown Heights, NY 10598, USA REGEXP_TABLE(5)