                フィルタリング

------------------------------------------------------------
1	フィルタリングということの概要
1.1	fml の投稿メールのフィルタリング機能を有効にする
1.2	カスタマイズ
1.3	弾けないもの

2	投稿メールのフィルタリング事例
2.1	Message-Id: がないものを reject
2.2	Subject:に特定のパターンがあったら拒否する
2.3	Subject:に特定のパターン(大文字小文字を問わず)があったら拒否する
2.4	received: 行のどこかに spam.co.jp というドメインを含んでいたら拒否
2.5	本文にhttp-equiv=3DContent-Type なHTMLをつけてくる迷惑なメールは拒否
2.6	From: のドメインが Message-ID に含まれていないなら拒否
2.7	前者３つ全部
2.8	sendmail の PICKY_HELO_CHECK と組み合わせる
2.9	ヘッダ情報の容量制限の設定ってのはあるんでしょうか？
2.10	To: とか Cc: にメーリングリストがないのはSPAMだ！
2.11	EnvelopeFilterは厳し過ぎる。VBscriptだけ弾きたい
2.12	Notes で「Duplicated Message-ID」になるケース
2.13	特定のアドレスを拒否する(e.g. spam mails)
2.14	勝手についてしまう signature を取る

3	Q & A
3.1	"one line body" じゃないのにはじかれちゃうぞ？;-)

4	フィルタリング機構の内部構造
4.1	配送メールへのフィルタリング
4.2	signature かどうか？を判定する
4.3	特定のフィールドの内容によっては拒否する
4.4	警告するだけにする

5	ContentHandler
5.1	フィルタルールの事例
5.2	解説 by the original author 

6	ユーザレベルでのフィルタリング
6.1	メール関係の Filtering FAQ
6.2	MH slocal Interface

7	改造
7.1	たわけたHTMLメール対策
7.2	In-Reply-To: や References: をつけないREPLYメールを返すMUA対策

Appendix A	postfix のフィルタイング
Appendix A.1	メール本文のフィルタ body_checks ディレクティブ
Appendix A.2	ヘッダのフィルタ header_checks
Appendix A.3	Content Filter

Appendix B	Sendmail specific topics
Appendix B.1	PerlMX
------------------------------------------------------------


1	フィルタリングということの概要

フィルタリングといっても

1. ユーザレベルでのフィルタリング (=> 6)
   つまり
	スプールへ書き込む
	例: MTA -> フィルタ -> /var/mail/ とか MailDir/

	何かのプログラムを起動する
	例: MTA -> フィルタ -> fml

	これは一般にはＭＬの話ではなく自分宛のSPAMメールを弾くや自動で
	フォルダーを変えるようなことです。

2. fml 自身が入力されたメールを解析して弾く => 4.1

	MTA -> fml (-> フィルタ -> 配送する/しないを決める)
	   ＊ つまり ()内は全部fmlの内部動作

の２つの意味合いがあります。fml的にフィルタリングというのは主に後者 2. 
のことを指しています。

前者 1. については情報へのポインタだけ示すことにします。
See also: 6 

1.1	fml の投稿メールのフィルタリング機能を有効にする

	$USE_DISTRIBUTE_FILTER = 1;

makefml config で

   メインメニュー -> セキュリティ -> USE_DISTRIBUTE_FILTER -> ON

1.2	カスタマイズ

config.ph にフィルタリングの設定を書くことができます。例:

	&DEFINE_FIELD_PAT_TO_REJECT('subject', 'FREE|SEX|ADULT|XXX');
	&DEFINE_FIELD_PAT_TO_REJECT('subject', '/FREE|SEX|ADULT|XXX/');
	&DEFINE_FIELD_PAT_TO_REJECT('from', 'ADULT');

1.3	弾けないもの

パラグラフ(空行と空行の間)ごとに判定しているので、弾けないものがありま
す。ようするにフィルタが見ているのは

	コマンドのパラグラフらしい

	最後のパラグラフはsignature(だろうから除外して考える)

	日本語のはいっているパラグラフらしい

のような各パラグラフがどのようにみえるか？をチェックしています。

例えばこれは弾けない例です。内容としては「コマンドメールとシグニチャア」
ですが、一つのパラグラフにいろいろ書いてある普通のメールにみなしてしま
います。
    # help
    *----------------------------*
    　　しぐにちゃあ
    *----------------------------*
    ~.q
    
2	投稿メールのフィルタリング事例

2.1	Message-Id: がないものを reject

	&DEFINE_FIELD_PAT_TO_REJECT('message-id', '^\s*$');

2.2	Subject:に特定のパターンがあったら拒否する

Subject: に FREE SEX ADULT XXX のいづれかの文字列が入っていたら
	SPAMとみなして捨てる(でもこれするとFreesoftも捨てちゃうね;-)
	最初と最後の / はあってもなくてもよいです。/ 以外は使わないで下さい

	&DEFINE_FIELD_PAT_TO_REJECT('subject', 'FREE|SEX|ADULT|XXX');
	&DEFINE_FIELD_PAT_TO_REJECT('subject', '/FREE|SEX|ADULT|XXX/');
	&DEFINE_FIELD_PAT_TO_REJECT('from', 'ADULT');

2.3	Subject:に特定のパターン(大文字小文字を問わず)があったら拒否する

	Adult も ADULT も大文字小文字に関係なく許否。/i というperlで
	おなじみの形式を使います。/ 以外は使わないで下さい。

	&DEFINE_FIELD_PAT_TO_REJECT('subject', '/free|sex|adult|xxx/i');

2.4	received: 行のどこかに spam.co.jp というドメインを含んでいたら拒否

$DISTRIBUTE_FILTER_HOOK = q#
    if ($e{'h:received:'} =~ /from spam.co.jp/) {
	return 'from a host in spam blacklist';
    }
#;

2.5	本文にhttp-equiv=3DContent-Type なHTMLをつけてくる迷惑なメールは拒否

$DISTRIBUTE_FILTER_HOOK = q#
    if ($e{'Body'} =~ /http-equiv=3DContent-Type/) {
	return 'mail with appended HTML documents';
    }
#;

2.6	From: のドメインが Message-ID に含まれていないなら拒否

$DISTRIBUTE_FILTER_HOOK = q#
   local($domain) = (split(/@/, $From_address))[1];
   if ($e{'h:message-id:'} !~ /$domain/i) {
	return 'Message-Id conflicts your From: address';
   }
#;

2.7	前者３つ全部

例: (not tested ;-)
○ received: 行のどこかに spam.co.jp というドメインを見つけたら拒否する。
○ 本文に http-equiv=3DContent-Type なHTMLをつけてくる迷惑なメール
   は reject する
○ From: のドメインが Message-ID にも含まれているかどうか？
   含まれていないならメールの偽造とみなして reject

$DISTRIBUTE_FILTER_HOOK = q#
    if ($e{'h:received:'} =~ /from spam.co.jp/) {
	return 'from a host in spam blacklist';
    }

    if ($e{'Body'} =~ /http-equiv=3DContent-Type/) {
	return 'mail with appended HTML documents';
    }

   local($domain) = (split(/@/, $From_address))[1];
   if ($e{'h:message-id:'} !~ /$domain/i) {
	return 'Message-Id conflicts your From: address';
   }

#;

2.8	sendmail の PICKY_HELO_CHECK と組み合わせる

    # PICKY_HELO_CHECK
    if ($e{'h:x-authentication-warning:'} !~ /Host \S+ claimed to be \S+/) {
	$r = "Your SMTP session or your host config is invalid";
    }

でもメールを出す人が virtual domain とかだとバソバソ reject されて困っ
ちゃうだろう ＃それでも構わないという人は使ってみよう(強引)

2.9	ヘッダ情報の容量制限の設定ってのはあるんでしょうか？

いまのサイズ制限はヘッダと本文と全部含んだ長さについてです。
ヘッダの長さだけをチェックするというオプションは今はないです。

ヘッダが十分大きくてひっかかる場合はどうせ今のチェックと同じだし、
ヘッダは普通で本文がでかい場合には、どうせヘッダの大きさは誤差でしょう
という感じです。＃そのあいだの微妙な場合はかんがえてないといえばない

2.10	To: とか Cc: にメーリングリストがないのはSPAMだ！

fml-support: 06389
fml-support: 07286

SPAM メールを弾くために

To: および Cc: 行に ML のアドレス (大文字/小文字は区別しない) が入って
なければ，そのメールを拒否する

$USE_DISTRIBUTE_FILTER = 1;
$DISTRIBUTE_FILTER_HOOK = q#
    if (($e{'h:to:'} !~ /$MAIL_LIST/i) && ($e{'h:cc:'} !~ /$MAIL_LIST/i)){
        return 'Not addressed to mailing list';
    }
#;

2.11	EnvelopeFilterは厳し過ぎる。VBscriptだけ弾きたい

1. Content-Type: に .vbs .js .jse .exe とあるメール
2. 元のメールは badarticle というファイルに保存して 
3. ＭＬにはアナウンスを流す。
   「ウィルスぽいものが来たので、ＭＬに流さずに別途ファイルに落した」 

    # check attatchment of VB script and others :-)
    $START_HOOK .= q#
        if ($Envelope{'Body'} =~ /Content.*\.(vbs|js|jse|exe)/i ||
    	$Envelope{'Body'} =~ /filename=.*\.Pretty Park\.exe/i ) {
    	my($savefile) = "$FP_TMP_DIR/badarticle.$PCurrentTime";
    	if (open(SAVE, "> $savefile")) {
    	    print SAVE $Envelope{'Header'};
    	    print SAVE "\n";
    	    print SAVE $Envelope{'Body'};
    	    close(SAVE);
    	    $Envelope{'Body'}  = 'WARNING: incoming mail is ignored ';
    	    $Envelope{'Body'} .= 'since it may be with virus.';
    	    $Envelope{'Body'} .= "\n\n";
    	    $Envelope{'Body'} .= "This article is saved in\n";
    	    $Envelope{'Body'} .= $savefile;
    	    $Envelope{'Body'} .= "\n\n";
    	    $Envelope{'Body'} .= "-- $MAIL_LIST maintainer\n";
    	}
    	else {
    	    &Log("system error: pass this article through");
    	}
        }
    #;

2.12	Notes で「Duplicated Message-ID」になるケース

Q: Notesのメールでテンプレートか何かを使うと同じMessage-IDになるのため
  「Duplicated Message-ID」になるケースはどうする？

これは直しようがないです;-) NOTES担当に文句をいいましょう 

2.13	特定のアドレスを拒否する(e.g. spam mails)

メインのルーチンに飛ぶ前に reject するコードなら入っています(2.1 gamma
206以降)。$REJECT_ADDR_LIST (デフォールトは $DIR/spamlist) に perl の
正規表現で書いたアドレスから来たメールには何もしないで reject するよう
になります。この場合配送、コマンド、自動登録すべての場合にそこへいく前
に reject します。

   \S+@spam.org (spam.org のアドレスは全部許否)
   manager@\S+  (あらゆるサイトの個人を代表しないアドレスは拒否)

みたいな形式です。なおデフォールトの $REJECT_ADDR はこれとは別に適用さ
れます。

2.14	勝手についてしまう signature を取る

(料金を下げるかわりにそういうことをするとか最初に明言しているサービス
ならともかく)そもそもメールの本文をいじるなんてとんでもない話ですね

これができるということは内容の改竄もできるし機密保持も存在していないわ
けです。ということは通信の秘密に関してモラルがない企業ということではな
いでしょうか？

その部分を削るHOOKの例:

$SMTP_OPEN_HOOK = q#
	local($uja);
	for (split(/\n/, $e{'Body'})) {
	   next if /=+/ .. /\-+/;
	   $uja .= "$_\n";
	}

	$e{'Body'} = $uja;
#;

3	Q & A

3.1	"one line body" じゃないのにはじかれちゃうぞ？;-)

元々はコマンド(に見えるもの)をはじくために作られました。
でもこんなのも弾かれてしまいます。

    64MB
    
    日本語のパラグラフ
というのは最後のパラグラフは signature だろうと思って判定を無視してい
るからです。つまりこの場合は最初の
    64MB
部分だけを判定してます。

TODO: そういうわけでこれにどう対応するか？ですが

ここ全部 signature 

   最後のパラグラフは @ か ＠ か :// を含んでいたら signature とみなす。
   そうでないなら、最後のパラグラフもフィルタのターゲットにする

ようにするといいのかなとかおもっているのですが、どうでしょうね？

References: fml-support: 08062

4	フィルタリング機構の内部構造

4.1	配送メールへのフィルタリング

	$USE_DISTRIBUTE_FILTER

をセットすると、配送処理に入る直前(&Distribute ルーチンの先頭)で 
%Envelope のデータ群(ヘッダやメール本文)に対してフィルタリング操作をか
けます。そして問題のある内容のメールの配送をしないなどができるようにな
ります。

	$USE_DISTRIBUTE_FILTER

をセットしただけのデフォールトでは(現在(97/12/14))次のようなメールは 
reject します。

	○ 本文が何もないメール
	○ help や unsubscribe などの英語一行メール
	○ %echo ふがほげ の行
	   1999/02/24からはこの行がひっかかった時点で拒否
	   これ以前はあるパラグラフがこの行そのものの時のみ拒否
	   つまり『空行＋%echoなんとか行＋空行』の時だけだった
	○ Message-Id: が朗かに addr-spec でないのは SPAM メール

   [options]

	$FILTER_ATTR_REJECT_COMMAND (default 0)

	○ #unsubscribe などのコマンドをはじく

	$FILTER_ATTR_REJECT_2BYTES_COMMAND (default 0)

	○ ２バイト英文字ではじまる行を拒否
	   例: ＵＮＳＵＢＳＣＲＩＢＥ ほえほえ

これ以外の高度なチェックは

	$DISTRIBUTE_FILTER_HOOK (for post)
＃ $REJECT_DISTRIBUTE_FILTER_HOOK でも可能です(obsolete)。
＃ 同様に $REJECT_COMMAND_FILTER_HOOK もありますが obsolete

	$COMMAND_FILTER_HOOK (for command)

で直接 perl の構文で %e (%Envelope) ハッシュの変数を使って記述して下さ
い。HOOK 内部では $e{'h:from:'} などでハッシュにアクセスして下さい。
＃このために独自の言語とかをまた新たに導入するのは面倒だとおもうので
＃perl で生書きです。

この HOOK では次のようなことを期待しています。

	reject する場合は reject の理由を含む文を return する
	そうでないなら 何も返さない (return ''; など)

この reject の理由はログに残されます。また、

	$FILTER_NOTIFY_REJECTION

という変数が設定されていれば、その理由をそのメールの送り主に送り返しま
す。デフォールトでは単に無視するだけです。

4.2	signature かどうか？を判定する

fml-support: 08182
    if ( メール本文が 1 paragraph のみ ) { 
    	ちぇっくしてみる (signature なしかな)
    }
    elsif ( メール本文が 2 paragraphs ) {
    	最後のパラグラフをちぇっくしてみる (本文 と signature かな？)
    
      if ( 引用ぽいかな？ ) {
    
      }
      elsif ( 最後のパラグラフは 
    	  @ とか :// とか TEL: とか FAX: とかを含んでいる？ 
    	account＠domain なんかもためしてみよう？ ) {
      }
    
    }	

4.3	特定のフィールドの内容によっては拒否する

	&DEFINE_FIELD_PAT_TO_REJECT(ヘッダフィールド, 正規表現, REASON)

という関数は EnvelopeFilter 中で使われる %REJECT_HDR_FIELD_REGEXP とい
うハッシュの内容を設定できます。これはあるフィールド(例えば Subject:)
の特定の内容について reject します。Case Sensitive です。ADULT と書く
と adult にマッチしません。
XXX "reason"はまだ実装されていません。

4.4	警告するだけにする

弾くのではなく、警告を与えるだけで投稿は許して良いという意味なんでしょ
うか？

フィルタリング機構はそういうためのものではありません。
弾くために作られています。
なので、むりくり HOOK を使うと(たぶん)できるようなきがします。

$START_HOOK = q#
   if ($USE_DISTRIBUTE_FILTER) {
        &EnvelopeFilter(*e, 'distribute');
        undef $DO_NOTHING;
    }
#;

説明: EnvelopeFilter() の結果だけは利用するけど:-)
      $DO_NOTHING をリセットしてしまえばひっかかってもひかからなくても
      この後普通のＭＬプロセスになるから

5	ContentHandler

5.1	フィルタルールの事例

multipart の各ブロックに対し処理を行なうので、良く考えないと
期待と違う動作をします。

◯ text/plain と text/html からなるメールの html 部分を落す

  &ADD_CONTENT_HANDLER('multipart/.*', 'text/html', 'strip+notice');

◯ 普通のテキストメール はOK
	text/plain + text/html は html 部分を叩き落す
	text/plain + text/html + それ以外(謎の添付ファイル) は
	最初の text/plain 以外は落す。

  &ADD_CONTENT_HANDLER('multipart/.*', 'text/plain', 'allow');
  &ADD_CONTENT_HANDLER('multipart/.*', 'text/html', 'strip+notice');
  &ADD_CONTENT_HANDLER('multipart/.*', '.*/.*', 'strip');

5.2	解説 by the original author 

Author: t-nakano@marimo.org

# [Example]
# add them at the last of config.ph (but before the last "1;").
#

&ADD_CONTENT_HANDLER('multipart/.*', 'text/plain',   'allow');
&ADD_CONTENT_HANDLER('multipart/.*', '.*/.*',        'reject');
&ADD_CONTENT_HANDLER('text/plain',   '.*/.*',        'allow');
&ADD_CONTENT_HANDLER('!MIME',        '.*/.*',        'allow');

&ADD_CONTENT_HANDLER(type, subtype, action);
	type		メール全体のMIMEタイプ
	subtype		multipartの時のそれぞれのブロックのタイプ
	action		マッチした時に起こすべきアクション

例
  &ADD_CONTENT_HANDLER('multipart/.*', 'text/plain',   'allow');
  MIME multipartのメールがきたら text/plain の部分だけを通す

  &ADD_CONTENT_HANDLER('multipart/.*', '.*/.*',        'reject');
  MIME multipartのメールがきたらすべて拒否

'/' で区切って perl の正規表現で表記できます。
!MIME は MIME 以外(その他)です。

各パート毎にその動作を指定できます。動作は、

allow			配信許可

	allow はそのエンティティの multipart を分解してしまいます。
	つまり allow にすると multipart でないメールになります。

allow+multipart		許可し、multipart のエンティティは multipart
			のまま残す

	allowと異なりこの場合はmultipart はそのまま通します。

strip			該当パートは削除

	つまり一部分切り落として配送されます

strip+notice		該当エンティティは切り落とし投稿者に返される

	1. 一部分切り落として配送される (stripと同じ)
	2. 投稿者に切り落としたと知らせる

reject			このパートがあればメール配信拒否

	つまり、一箇所でもマッチする場所があればメール全体を拒否

が選択できます。

6	ユーザレベルでのフィルタリング

UNIXなら procmail (http://www.procmail.org/) や mailagent, MHの slocal 
などをはじめそういうものは世の中いっぱいあります。

一般論として

	UNIXの場合は toolbox oriented なOSなので、フィルタリングプログ
	ラムに下請けにだすことでフィルタをする。
	つまりそういう設定を ~/.forward などに書くわけです。

	それ以外のOSではメールソフト（クライアント）に内蔵されている機
	能を使うことが多い。つまり自分のソフトになければそこで終り
	＃UNIXのようなこともできないわけじゃないんだろうけど多分とても大変

6.1	メール関係の Filtering FAQ

メール関係の Filtering FAQ というものもあります。URLは

	http://www.ii.com/internet/faqs/launchers/mail/filtering-faq/

plaintext version は

	ftp://rtfm.mit.edu/pub/usenet/news.answers/mail/filtering-faq

[procmail faq]

    Html and text version of pm-tips

	http://www.procmail.org/jari/pm-tips.html
	http://www.procmail.org/jari/pm-tips.txt

    Other procmail docuemts

        Era's exellent procmail pages (including procmail faq) are at:

	http://www.iki.fi/~era/procmail/links.html
	http://www.iki.fi/~era/procmail/mini-faq.html

6.2	MH slocal Interface

ここでは slocal を用いたやりかたを述べます。

	~/.forward に
	"|/usr/local/lib/mh/slocal -user username || exit 75"

と書きます。よく名前を聞く slocal ってやつですね。
slocal では、設定は  ~/.maildelivery で設定します。

例：
To: username@domain (uja) 宛のメールはＭＬ宛とみなす。
それ以外は全部スプールに落す（普通の挙動）
＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿
#field   pattern   action  result    string
To     uja  |    R    "/fml-DIR/fml.pl /fml-DIR /fml-DIR"

# drop to the personal mail-spool
default  -       >       ?      /var/mail/fukachan
＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿

この場合 PIPE で fml.pl へ渡すとき UNIX FROM がおちてしまうのかもしれ
ませんが、自動的に fml.pl が適当な値（uidから割り出した値）を補正しま
す。

7	改造

7.1	たわけたHTMLメール対策

現在では汎用 multipart フィルタとして ContentHandler があります
See also: 5 

古い形は以下の通りです。この変数は ContentHandler でも上位互換で
有効です。

	$HTML_MAIL_DEFAULT_HANDLER = 'strip'; (default "")

ユーザからのメールでMIME/Multipartは中身を問わず一番最初のマルチパート
ブロックだけを残して後はぶったぎる。つまり中身が一緒のplainとHTML部分
を持つメールが来たらplain部分だけを残そうとする。でも常に正しい処理か
どうかは不明(大抵正しそうだが)。

	$HTML_MAIL_DEFAULT_HANDLER = 'strip'; (default strip)

値は strip か reject で、デフォールトはstrip。
strip はHTML部分を切りとってMLに流す。
rejectはMLには流さずHTMLメールは拒否すると送り主にメールを送る。

[互換性] $AGAINST_HTML_MAIL が古い変数名。この変数を設定していても互換
性の保証のために'strip'モードで動く。cf/MANFESTでは未定義。

7.2	In-Reply-To: や References: をつけないREPLYメールを返すMUA対策

	$AGAINST_MAIL_WITHOUT_REFERENCE = 1; (default 0)

非常〜〜に後ろ向きなオプション
Eudora 等の In-Reply-To: References: をつけてくれないMUA対策
0. Subject: にTAGをつけることは前提(not default)
1. Message-ID: はＭＬ独自のものをつける
2. Subject: Re: [elena 00100] のようなTAGを解析する
ことでＭＬ全体のスレッドの一貫性を疑似的に強制する。
元々あった Message-ID: は X-Original-Message-ID: に移動される
(2.2A#28はbugでつけてない, fixed in 2.2A#29)

Appendix A	postfix のフィルタイング

Appendix A.1	メール本文のフィルタ body_checks ディレクティブ

postfix-19991231-pl08 には "body_checks" directive が導入されました。
まさにメール本文チェック用です。

XXX: This feature is also available in Postfix snapshot 20000528.

Appendix A.2	ヘッダのフィルタ header_checks

    [/etc/postfix/main.cf]
    header_checks = regexp:/etc/postfix/header_checks
    
    [/etc/postfix/header_checks]
    /^Subject.*ILOVEYOU/  REJECT

Appendix A.3	Content Filter

Postfix snapshot 20000529 以降で実装。postfix-users より引用
詳しくは www.postfix.org なり過去メールを探して読んでね

    Subject: Postfix Full Content Filtering Support
    To: postfix-users@postfix.org (Postfix users)
    Message-Id: <20000530222608.0EEB345659@spike.porcupine.org>
    Date: Tue, 30 May 2000 18:26:08 -0400 (EDT)
    From: wietse@porcupine.org (Wietse Venema)
    
          ..................................
          .            Postfix             .
       ------smtpd \                /local-----
          .         -cleanup->queue-       .
       -----pickup /    ^       |   \smtp------
          .             |       v          .
          .           smtpd    smtp        .
          .           10026     |          .
          ......................|...........
                        ^       |
                        |       v
                    ....|............
                    .   |     10025 .
                    .   inspector   .
                    .               .
                    .................
    
Appendix B	Sendmail specific topics

Appendix B.1	PerlMX

	http://www.ActiveState.com/Products/PerlMx/
    ActiveState releases PerlMx 1.0  
    
    PerlMx is a mail filter engine designed to operate under sendmail. 
    Beginning with v8.10, sendmail provides scriptable hooks into all 
    stages of an e-mail transaction, allowing custom actions on any 
    aspect of the transaction, including the content of the message 
    itself. PerlMx allows these hooks to be written in Perl, making for 
    rapid prototyping, debugging, and deployment of custom e-mail 
    filtering solutions.


		INDEX

.maildelivery                              ...   6.2 
$COMMAND_FILTER_HOOK                       ...   4.1 
&DEFINE_FIELD_PAT_TO_REJECT                ...   4.3 
$DISTRIBUTE_FILTER_HOOK                    ...   4.1 
$FILTER_ATTR_REJECT_2BYTES_COMMAND         ...   4.1 
$FILTER_ATTR_REJECT_COMMAND                ...   4.1 
$FILTER_NOTIFY_REJECTION                   ...   4.1 
$REJECT_ADDR                               ...   2.13 
$REJECT_ADDR_LIST                          ...   2.13 
$REJECT_COMMAND_FILTER_HOOK                ...   4.1 
$REJECT_DISTRIBUTE_FILTER_HOOK             ...   4.1 
signature                                  ...   2.14 
slocal                                     ...   6.2 
spam mails                                 ...   2.13 
$USE_DISTRIBUTE_FILTER                     ...   4.1 
