Modifierプラグイン |
Modifierプラグインはメッセージの各パーツを変更します(テキストをメッセージ本文に追加する、疑わしい添付ファイルをリネームするなど)。Dr.Web Modifierは基本正規表現、拡張正規表現、およびPerl互換正規表現に対応しています。 Modifierプラグインの設定ファイル内で指定できるルールには4つの種類があります。 1つ目はメッセージ全体に適用されるルールです。
例: GlobalRules = select message, notify rule プレフィックスadmin_および.msg拡張子がDr.Web Notifierによって自動的に挿入されます。
stopコマンドはルールの処理を中断します。アクションは既に処理されているルール(pass、accept、rejectなど)、また最後に実行されたコマンドに応じて適用されます。 acceptはpass + stopとほとんど同じです。ただしacceptはローカルルールでは処理を中断し、グローバルルールではpassと同じになります。 passはdiscardおよびtempfailよりも優先されます。ただしrejectは最優先され、メッセージの処理を中止し、以後の全てのアクションは実行されません(notifyを除く)。 これらのコマンドは、通知に挿入する追加のテキストフィールドで補完する必要があります。 各メールメッセージは、MIMEオブジェクト、そのヘッダと内容、マルチパートメッセージ内に添付されたMIMEオブジェクトから成っています。それぞれのパートに対して、削除、署名追加、テキストの置き換えや変更などの異なるアクションを実行することが出来ます。他の種類の全てのルールが別々のエレメント、またはエレメントのセットに適用されます。 各コマンドの前にselect、or、and、nand、norのインストラクションの内の1つを指定する必要があります。各コマンドの後には選択のパラメータを指定します。 2つ目は別々のエレメントに適用されるルールです。
メッセージのルートMIMEエレメントを選択します。
select mime(prologue), select mime.prologue select mime(body), select mime.body select mime(epilogue), select mime.epilogue これらのコマンドで様々なMIMEオブジェクトを選択します。括弧のあるコマンドは指定されたエレメントを含んだMIMEオブジェクトを選択しますが、ドットのあるコマンドはエレメントそのものを選択します。 例: select mime(headers) Content-type "x-video" remove このコマンドはメッセージから全てのvideoエレメントを削除します。 select mime.headers Content-type "x-video" remove このコマンドは全てのvideoエレメントからデータタイプに関する情報を削除します。複合MIMEパートを選択できるのは、それがメッセージそのものである場合のみです。
select mime(prologue) regular_expression select mime(body) regular_expression select mime(epilogue) regular_expression これらのコマンドは、指定したテンプレートに一致するテキストを持ったエレメントを選択します。
select recipient <regular_expression> これらのコマンドは、受信者と送信者に関する情報を持ったエントリを選択します。この情報はエンベロープからとられます。必要な記号のシーケンスが見つかった場合、select senderおよびselect receiverコマンドがselect messageコマンドとして処理されます。 例: 以下のコマンドを使用して、管理者に対するメッセージの最後にグリーティングを追加することが出来ます。 select recipient "root@localhost", append_text "hello, root" 複数の条件によってエレメントを選択する必要がある場合、該当する論理演算子を使用してルールを組み合わせることが出来ます。
これらの演算子はマルチパートMIMEのオブジェクトの選択にのみ使用することができ、そのようなオブジェクトの別々のパートには使用できないので注意してください。 html中に"<script"という文字列があるMIMEパートを選択: select mime(headers) Content-type html and mime(body) "\<script" 2つの別々のルールが順番に適用されます。1つ目でContent-typeヘッダ内の全てのhtmlエレメントを選択し、2つ目でそのエレメントの中から"<script"記号のセットを持つものが選択されます(大文字小文字は無視されます)。
例: select mime(headers) Content-type html nand mime(body) "\<script" 最初の条件によってContent-typeヘッダ内の全てのhtmlエレメントが選択されます。2つ目の条件によって"<script"という文字列を持つエレメントがそこから除外されます。 例: select mime(headers) Content-type html or mime(body) "\<script" 最初の条件によってContent-typeヘッダ内の全てのhtmlエレメントが選択されます。2つ目の条件によって"<script"という文字列を持つエレメントが選択に加えられます。 例: select mime(headers) Content-type html nor mime(body) "\<script" 最初の条件によってContent-typeヘッダ内の全てのhtmlエレメントが選択されます。2つ目の条件によって"<script"という文字列を持たないエレメントが選択に加えられます。 後続のルールの前にselectを指定すると、前回の選択が解除されます。 例: select mime(headers) Content-type html select mime(body) "\<script" 最初の条件によってContent-typeヘッダ内の全てのhtmlエレメントが選択されます。2つ目の条件によって最初の選択が解除され、"<script"という文字列を含むエレメントのみが選択されます。 演算子が指定されていない場合、後続のルールは全て無視され選択には変更が加わりません。 例: select mime(headers) Content-type html mime(body) "\<script" 選択は最初の条件でのみ行われ、Content-typeヘッダ内のhtmlエレメントのみが選択されます。 Modifierプラグインとvaderetroプラグインに互換性を持たせるには、メッセージヘッダ内の検索に比較命令">n"および"<n"を使用してください。ヘッダが整数を含み(例:X-Drweb-SpamScore "30")、あるルールに一致する(例:select mime(headers) X-Drweb-SpamScore "<50")場合、そのヘッダにModifierルールを適用することが出来ます。 この場合は、select mime(headers) X-Drweb-SpamScore "\<50"ルールでもX-Drweb-SpamScore "<50"ヘッダのエレメントが選択されるので、"<"記号の前にバックスラッシュは必要ありません。 select_mimesコマンドを使用して、MIMEオブジェクトをそのヘッダによって選択することが出来ます。ヘッダとオブジェクトを同じ条件で選択する必要がある場合に、これによってプラグインの動作を早めることが出来ます。オブジェクト全体を選択したい場合は、そのオブジェクトからエレメントを1つだけ選択してください。 3つ目は選択したエレメントを変更するためのルールです。 このルールはMIMEオブジェクトの内容にのみ適用されます。
replace_all new_text これらのコマンドは、テキストを他のテキストと置き換えます。 例: 添付されているファイルの拡張子をリネームします。 select mime.headers Content-disposition "filename=.*\\.exe",\ or mime.headers Content-type "name=.*\\.exe",\ replace "\\.ex_" "\\.exe",\ pass これらのコマンドはマルチパートメッセージのパートには使えません。つまり、2つのサブオブジェクトを持ったマルチパートMIMEオブジェクトから成るメッセージに対しては select message replace_all «text» というコマンドは有効ではありません。マルチパートオブジェクト自体は他のオブジェクトのコンテナであり、データを含まないからです。 replaceおよびreplace_allコマンドに対しては、関数呼び出しをexpression_for_replacementおよびnew_textとして使用することが可能です。それらは${func_name}として指定することが出来ます。関数の引数は現在のregular_expression_to_be_replacedです。 以下の関数に対応しています。
例: select mime.headers "Subject" "^.*$", replace_all "old:${self} new:${lc}" 指定されたパターンに一致するメッセージのSubjectヘッダ(例:"This is Subj")を"old:This is Subj new:this is subj"で置き換えます。 例: select mime.body ".*", replace "Upper:${uc}" "http://\\S+" 指定されたパターンに一致する、メッセージ本文からのいくつかのテキスト(例:"Text1 http://vasya.pup.kin Text2")を"Text1 Upper:HTTP://VASYA.PUP.KIN Text2"で置き換えます。 例: select mime.body ".*", replace "http://check-url.com?url=${urlencode}" "http://\\S+" 指定されたパターンに一致する、メッセージ本文からのいくつかのテキスト(例:"Visit http://vasya.com?id=3")を"Visit http://check-url.com?url=http%3A%2F%2Fvasya%2Ecom%3Fid%3D3"で置き換えます。
このコマンドは、ルートMIMEオブジェクト以外の全ての種類の選択されたオブジェクトを削除します。 例: removeコマンドは以下のようなルール内では使用できません。 GlobalRules = select mime(body) "text", remove, pass GlobalRules = select mime(body) "script", remove, pass
append_text prepend_html append_html これらのコマンドは、選択したMIMEオブジェクトにプレーンテキストかhtmlを加えます。 例: select message append_html "<h1>checked by anti-spam</h1>" [[7b:]encoding] これらのコマンドは、オプションのパラメータencodingによってセットされたエンコーディング、およびプレフィックス"7b:"によってセットされた7-bit context transferエンコーディングでメッセージに署名を付けます。 ある特定のエンコーディングにテキストを挿入する必要がある場合、言語ファイル(.lng拡張子)をソースとして使用することが出来ます。.lngファイルから必要な文字列を選択するには$1, $2 ... $nパラメータを使用してください。nは.lngファイル内の文字列の番号です。 例: .lng ファイルが以下のような場合、 1 = string1 2 = some other string ... append_text $2 はappend_text "some other string" コマンドと同じになります。 値そのものか「ファイル」タイプのルックアップのみ使用できるLookupsLiteタイプの値を介してルックアップを使用することも可能です。 例: append_text "lookup:file:path_to_file" 以下のコマンドでヘッダをメッセージに追加することが出来ます。 select message, addheader "foo:bar" このコマンドは、fooという名前でbarという値のヘッダを、選択したメッセージエレメントに追加します。ヘッダの名前と値はコロンで区切って列挙します。 4つ目はif/else構造を作成するためのルールです。
パラメータ値に正の整数を使用することができ、一度にいくつのルールをスキップする必要があるかを指定します。 例: 実行ファイルが添付されたメッセージを全て拒否したい場合、以下のコマンドを使用してください。 mime(header) Content-type "executable" goto(n) 1 reject 上記のコードは以下のように実行されます。 selection=find(mimes with content type "*executable*") if(selection){ reject mail; } if [not] found .... else .... endifコマンドを使用することも可能です。 例: select mime.headers "X-DrWeb-SpamState" "yes",\ if found,\ select mime(headers) Content-type "image",\ remove,\ endif,\ 上記のコマンドによって、Vaderetroプラグインがスパムと判定したメッセージから全ての画像を削除することが出来ます。 正規表現内で引用符を使用する場合、複数の"\"記号でそれらをエスケープする必要があります。現在のバージョンでは、引用符のエスケープに"\"記号が6個必要です。 例: GlobalRules = select mime.headers Subject ".*\\\\\\"", if found, reject, endif また、各メッセージのスコアをチェックすることも出来ます。処理の始めにメッセージに割り当てられる最初のスコアは0になります。if score、add_score、set_scoreコマンドを使用して、プラグインが処理の間にこのスコアをチェック、変更することが出来ます。"if score"は"if found"コマンドと同じ働きをしますが、チェックするのはメッセージスコアのみです(それより前の"select"コマンドの結果は無視します)。 例: .... if found,\ set_score 10,\ endif,\ メッセージに新しいスコア10を設定します(それが条件に抵触しない場合)。 例: .... add_score 11,\ メッセージのスコアに11加えます。 例: .... if score >100,\ reject,\ else,\ add_score -5,\ endif メッセージスコアが100よりも大きい場合、このメッセージは拒否されます。それ以外の場合、スコアから5を引きます。 if score 引数は空白無しの1つの文字列として指定し(例えば< 100ではなく<100)、比較演算子および整数の引数を含んでいる必要があります。 以下の比較演算子を使用することが出来ます。
整数の引数は、-20億~+20億の間の32bit整数です。メッセージの処理中にスコアがオーバーフローする場合があり、それにより他のモジュールが正しく動作しなくなることがあります。そのため、ルール内で無意味に大きいスコア値を使用することは推奨できません(例えばadd_scoreパラメータに2000000000を指定するなど)。 選択したMIMEオブジェクトにテキストを加えた後、選択は破棄されます。 表1.オブジェクト選択肢と実行可能な処理(コマンド)
例: - 複数の条件によってエレメントを選択する GlobalRules = select mime(headers) Content-type "text", and mime(body) "typical spam",\ - そのようなエレメントが見つかったら、メッセージを破棄する goto(n) 1,\ discard,\ - それ以外の場合、実行ファイルを全て選択しそれらを削除する select mime(headers) Content-disposition ".exe",\ remove,\ - メッセージ本文に署名を追加する select message, append_text "checked!" goto(n) 1,\およびdiscard,\の後ろに空白を置くと、ルールが実行されないので注意してください。 メッセージにhtmlファイルを追加する GlobalRules = select message, append_html "lookup:file:/maild-files/somehtml.html" 選択したユーザからのメッセージを削除する GlobalRules = select mime(headers) From "weirdohacker@server.net", if found, reject, endif メッセージを転送する GlobalRules = select mime.headers To "someaddress@my-net.com", replace_all "anotheraddress@my-net.com" この例では、元のメッセージはsomeaddress@my-net.comに送信され、そのコピーがanotheraddress@my-net.comに送信されます。 メッセージを元の受信者に送信したくない場合は以下のルールを使用してください。 - 特定の条件によってメッセージを選択する GlobalRules = select mime.headers Subject "Help",\ if found,\ select mime.headers To "someaddress@my-net.com",\ if found,\ - 選択したメッセージを特定のアドレスに転送する redirect "anotheraddress@my-net.com",\ - 選択したメッセージが誤って元の受信者に送信されないよう、そのメッセージを削除する discard,\ endif,\ stop,\ endif,\ メッセージを件名に応じて転送する GlobalRules = \ - サポート部門へのメッセージをチェックする select mime.headers Subject "support|bugreport[s]|help",\ if found,\ - テンプレートが見つからない場合、以下のコマンドが渡されます select mime.headers To "@company.com", \ if found,\ redirect "support@company.com",\ endif,\ pass, \ endif,\ - クライアントがオーダーを望んだ場合、以下のコマンドが実行されます select mime.headers Subject "price|buy|order",\ if found,\ select mime.headers To "@company.com", \ if found,\ redirect "sell@company.com",\ endif,\ pass, \ endif,\ - その他のトピック select mime.headers To "@company.com", \ redirect "inbox@company.com",\ pass 添付された実行ファイルを検索してそれらをリネームする select mime.headers Content-disposition "filename=.*\\.exe", or mime.headers Content-type "name=.*\\.exe",\ replace "\\.ex_" "\\.exe",\ pass |