ロゴ:

ヘルプの目次
このヘルプについて
 
エンドユーザ向けヘルプ
クライアントヘルプ
Webアクセスヘルプ
スクリーンリーダー
フォーム
用語
コンテナ
 
管理者向けヘルプ 管理者向けヘルプ
サーバの管理
インターネットサービス
カスタマイズツール
 
Advertising banner:
 
 A178
 
SMTPメールルールを使用したスパムの処理



SMTPメールルールについて
572004_44255_0.png注意
SMTPメールルールの設定は、フィルタリング用ドキュメントと 基本的なコーディングについて十分理解してから行うようにしてください。
SMTPメールルールでは、以下の動作を設定できます。
• 以前のインターネットサービスにあらかじめ設定されていたスパム処理ルールを置き換える
• メッセージをHIGH(高)、MEDIUM(中)、LOW(低)の3段階で評価するX-SPAM-Warningヘッダを挿入する
• ファイルがスパムである可能性を数値で表すX-SPAM-Levelヘッダを挿入する
• スパムテストに不合格であったことを示す X-SPAM-Testsヘッダを挿入する
• 変数によるルールを設定する(慣習的にrules.MailRulesファイルの先頭で定義)
• ルールによる動作を設定する(慣習的にrules.MailRulesファイルの後半で定義)
• SMTPのクロスポストとBCCに対してさまざまな制限を適用する
メールルールは、以下のタイミングで適用できます。
• 任意のヘッダが受信される前
• 各ヘッダが受信されたとき
• ヘッダの末尾を示す表示に達したとき
• 各HTMLアドレスと画像のリンクが処理されたとき
• 各添付ファイルのヘッダを受信したとき
• 添付ファイル一式の最後のヘッダに達したとき
• 各HTMLアドレスと画像のリンクが処理されたとき
• メッセージ本文の末尾を示す表示に達したとき
• メッセージの末尾を示す表示に達したとき
SMTPメールルールのファイルはすべて、管理者デスクトップの[Internet Services]フォルダ内の[Filters]フォルダにあります。メールルール用のファイルは、標準のフィルタリング用ファイルとは名前で区別されており、必ず「rules」で始まる名前になっています。メールルール用のファイルを利用すると、自分のサイトでスパムやジャンクと思われるメールを処理する方法をカスタマイズできます。インターネットサービスには、以下の4つのルール用ドキュメントがあらかじめ作られています。
• rules.AttachementBlockドキュメント(添付ファイルによるフィルタリング用)
• rules.SubjectBlockドキュメント(件名によるフィルタリング用)
• rules.SMTPDebugドキュメント
• rules.MailRulesドキュメント(メールルールによるフィルタリング用)



SMTPメールルールの仕組み
各SMTPメールルールはどれも、以下のような基本構成になっています。
• テストを実行するためのヘッダ
• 実行するテストの内容
• テストが成功した場合に行われる動作
ヘッダとテストは、常にコロン(:)によって区別されます。
以下は、単純なメールルールの例です。
X-Mailer:"Millennium Mailer" SET $spamlevel +=75
このうち、
X-Mailer:このルールを実行するヘッダです
• 実行されるテスト:X-Mailerヘッダに「Millennium Mailer」というデータが含まれているかどうか
• 実行される動作:スパムレベル($spamlevel)変数の値を75加算する
SMTPメールルールのヘッダ部
SMTPメールルールのヘッダ部は、ルールが実行されるエンベロープ内のヘッダフィールドを示します。例えば、To、From、Subject、Date、Return-Path、X-headersなどのヘッダがあります。ヘッダ部で使用される文字の意味は以下の通りです。


^
ヘッダが処理される前にこのルールを適用します。この文字は、スクリプトの変数を初期化するのに役立ちます。
*
このルールをすべてのRFC-2822ヘッダに適用します。この文字は、すべてのヘッダで特定の値を調べるのに役立ちます。
"(空白)
最後のヘッダが処理されてからこのルールを適用します。この文字は、他のルールによって処理されたデータに対して動作を実行するのに有効です。
@
添付ファイル一式の最後のヘッダに達したときにこのルールを適用します。
<
<Aと<IMGのリンクを含むHTMLメッセージがパースされたときにこのルールを適用します。
>
メッセージ本文の末尾に達したときにこのルールを適用します。
.
メッセージの末尾に達したときにこのルールを適用します。この文字は、他のルールによって処理されたデータに対して動作を実行するのに有効です。

SMTPメールルールのテスト部
テスト部には、特定のヘッダで実行するテストの内容を記述します。通常、ルールのスクリプト言語では、テストは以下の3種類に区分されます。
• 単純式
• 正規表現式
• 条件式
単純
単純式は二重引用符("")で囲まれた文字列で、この文字列をRFC-2822ヘッダのデータ内で適用します。文字列の大文字と小文字は区別されません。文字列には、次のような単純なワイルドカードを含めることができます。
• 疑問符(?):任意の1文字を表します
• アスタリスク(*):任意の文字列を表します
引用符で囲んだ文字列の前に「NOT」を入れ、テストを反対の意味にすることができます。例えば、次のRFC-2822ヘッダをルールによって処理する場合を見てみましょう。
Date:Tue, 11 Feb 2003 16:27:41 -0500
Date:"Feb 2003" spam
条件がTRUEならば、メッセージをスパムと認定します。
Date:"Tue, 11 Feb 2003 16:27:41 -0500" spam
条件がTRUEならば、メッセージをスパムと認定します。
Date:NOT "200?" spam
条件がFALSE(TRUEでない)ならば、メッセージをスパムとは認定しません。
Date:"*Feb*" spam
条件がTRUEならば、メッセージをスパムと認定します。
正規表現式と拡張正規表現式(regexpとeregexp)
正規表現式は、一致する文字列のパターンを記述する一般的な方法です。通常、正規表現式はUnix環境で使用され、単純式より詳細な一致パターンを利用できます。また、一致したデータを、後で使用できるよう変数に保存できます。インターネットサービスは拡張正規表現式(eregexp)にも対応していますが、同じ検索を行う場合は、正規表現式の方が倍の速さで処理できます。
例1
From: regexp:".*@[0-9]+\\..*" spam
最初の部分のドメイン名がすべて数字であるかどうかをチェックし、そうであればスパムと認定します。
例2
Subject: regexp:"[A-Z\\?\\!\\.\\,0-9]+" spam
件名がすべて数字と句読点付きの大文字であるかどうかをチェックし、そうであればスパムと認定します。
例3
Content-Type: regexp:".*name=\"\\(.+\\)\"" SET $attname="\\1"
Content-Typeヘッダ内の添付ファイル名を見つけ、(ウイルス対策などのために)他のルールで使用できるよう$attname変数に保存します。
また、「regexp:条件」以外に、以下の式を利用できます。
eregexp:拡張正規表現式の構文が利用できます。
eregexpi:拡張表現式の構文が利用できます。大文字と小文字が区別されません。
拡張正規表現式を利用すると、現在の正規表現式の構文よりもはるかに強力な照合処理を実行できますが、速度は遅くなります。eregexpiは、[Aa]など以下のような構文を含む正規表現式を記述している場合に使用する必要があります。例えば、以下のような記述が可能です。
eregexp:"[Vv][Ii][Aa][Gg][Rr][Aa]"
この式は以下のように書き換えることもできます。
eregexpi:"viagra"
条件式
条件式は、変数の状態をテストしたり、あらかじめ備わっている機能を利用したりする場合に使用します。条件式は常に「IF()」の形式で記述します。このは、変数のテストを行うか、あらかじめ備わっている関数を呼び出すときに使用します。条件式の例をrules.MailRulesファイルからいくつか見てみましょう。
^:IF (@istrustedip($senderip)) DONE
この式は、
• 信頼できるIPの一覧のIPアドレスが登録されていれば、ルールの処理を省略します
• 任意のヘッダが受信される前に(^)、既存の変数である差出人のIPアドレス($senderip)が信頼できるIP一覧にあれば、DONE動作を行います(これ以上の処理を省略します)
From: if (@isspamaddress($from)) SET $spamlevel += 101 AND $spamtests += "FROM_IN_SPAM_FILTERS;"
この式は、
From名がスパムアドレスの一覧に登録されているかどうかをチェックします
Fromヘッダの処理で、Fromのアドレスがスパムアドレスの一覧にあれば、100を超える値にスパムレベルを設定し、その理由を$spamtests変数に追加します。
SMTPメールルールの動作
RFC-2822ヘッダがルールに一致してテストが行われると、動作が実行され、インターネットサービスによる処理方法が変更されます。ルールで実行できる動作は以下の3種類です。
• 受信したメッセージを変更する
• メッセージを完全に削除する
• ルールのシステムの動作を変更する
受信メッセージを変更する動作
受信したメッセージを変更できる動作は以下の4種類です。


SPAM
メッセージをジャンクとして識別し、マシンが生成したメッセージであることを伝えるフラグを立てます。
DISCARDHEADER
現在のヘッダを破棄します。[表示]>[インターネットヘッダの表示]を選択してもヘッダは表示されなくなります。
INJECT
FirstClassで配信されたメッセージにRFC-2822ヘッダを挿入します。ヘッダを表示するには、[表示]>[インターネットヘッダの表示]を選択します。
REPLACE
FirstClassで配信されたメッセージのRFC-2822ヘッダを差し替えます。ヘッダを表示するには、[表示]>[インターネットヘッダの表示]を選択します。

メッセージを拒否する動作
受信したメッセージを拒否できる動作は以下の2種類です。


DISCARDMESSAGE
「552 Delivery Failed」の不達メッセージを生成します。
不達メッセージを送信せず、気づかれないようにメッセージを削除するには、「SET$lsSpammer = 1」を使用します。これによって、不達メッセージが生成されなくなります。
NDN
SMTPエラーを生成して送信サーバに不達メッセージを送信します。

ルール処理を変更する動作
ルール処理を変更する動作は以下の2種類です。


SET
後でルールが処理するための変数を設定します。
DONE
メッセージに対してルールによる処理がこれ以上行われないようにします。

メールルールでの動作例を見てみましょう。
# スパムスコアが[低]のメッセージにアイコンを設定
# 管理者が設定できる変数をここで定義
:IF ($LowSpamMin <= $spamlevel && $spamlevel <= $LowSpamMax) INJECT "X-FC-Icon-ID:23050"
このルールは、すべてのヘッダを処理した後、spamlevel変数がLOW(低)であればX-FC-Icon-IDヘッダを追加します。これによって、FirstClassのアイコンが設定されます。
06092010_122716_1.png注意
メッセージの属性に影響を及ぼすX-FCヘッダは、formID、IconID、forms dataなど数多くあります。これらの属性は、SMTPで送信されたメッセージをインターネットサービスが表示するときに確認できます。
^:IF (1) SET $CrosspostLimit=$Form.Config.2606.Number AND $CrosspostIncr=5 AND $XpostSpamLevel=20 AND $XpostSpamIncrVal=5
このルールは、ヘッダを処理する前に ^ を記述することによって、後の処理で利用されるさまざまな変数を設定します。これらの変数を変更して、このルールで異なった動作を実行できます。
Subject:IF (@inblocklist($subject)) DISCARDMESSAGE
rules.SubjectBlockファイルに不適切な語句を登録している場合に、このルールは不達メッセージを送信せず、不要な内容を削除します。このルールは、Subjectヘッダに達したときにrules.SubjectBlockファイルに登録されている語句があるかをチェックし、もしあれば不達メッセージを送信せずにメッセージを削除します。



rules.MailRulesの使用
rules.MailRulesファイルを使用して、スパムや不必要なメールを管理するための高度な設定を実行できます。このドキュメントには、調査対象のRFC-2822定義エンベロープヘッダ、そのヘッダの内容のテスト項目、それにテスト成功時の動作を指定する行が記述されています。
rules.MailRulesファイルの構文は、インターネットサービスのスクリプトとHeaderMatchドキュメントのスクリプトの組み合わせで構成されており、インターネットサービスのコード規則に詳しい管理者用に作られています。また、インターネットサービスのスクリプトの式は、C言語やJavaScriptに近い構文になっています。さらに、メールルールのコンポーネントによって、メールの受信時にRFC-2822定義のヘッダを利用できます。インターネット(SMTP)メールを定義するRFCには、主に次の2種類があります。
• RFC-2821
2つのSMTPサーバがお互いにやり取りする方法、およびメッセージの差出人と受信者を定義します。また、メールが受信者から許可されるか拒否されるかを定義します。
[宛先]フィールドと[差出人]フィールドは、そのメッセージの送信者または受信者と一致している必要はありません(また、スパムとも関係ありません)。
• RFC-2822(およびRFC 2045~2049)
送信者と受信者の間でやり取りされる電子メールの形式を定義します。通常、RFC-2822に準拠したメッセージは、エンベロープと呼ばれるいくつかの行があり、その後ろに空白行とメッセージの本文があるという構成になっています。例:
Subject:出張報告
このうち、
Subject:RFC-2822準拠のエンベロープヘッダです
:(コロン):すべてのエンベロープヘッダの後に付けられます
出張報告:このエンベロープヘッダの内容です。
標準的なエンベロープヘッダ(To、From、Subject、Dateなど)だけでなく、ユーザ定義の拡張ヘッダを設定できます。定義するヘッダは、「X-」で開始する必要があります。例:
X-OriginalArrivalTime:11 Feb 2003 00:38:15.0656 (UTC) FILETIME= [DD6C4E80:01C2D165]
rules.MailRulesで可能なことと不可能なこと
rules.MailRulesファイルには、以下の3種類の行を記述できます。
• 空白行
空白行には特別な意味はありません。ファイルを読みやすくするために使用できます
• コメント行
コメント行は「#」で開始します。これも読みやすくするために使用します
• ルール行
以下の内容はrules.MailRulesファイルに記述できません。
• SMTP通信(RFC-2821)の処理と受信者の処理を行うインターネットサービスのスクリプト(メッセージを拒否して不達メッセージを送信する処理を除く)
• MIMEのデコード(RFC-2045+)(rules.AttachmentBlockでMIME添付ファイルをブロックできます)
rules.Mailrulesファイルのデフォルト動作
rules.MailRulesドキュメントは、ご利用のシステムを保護するようにあらかじめ設定されていますが、ご利用のニーズに合わせて編集できます。デフォルトのrules.MailRulesドキュメントには、以下の内容が記述されています。
• 信頼済みのサイト、IPアドレス、および電子メールアドレスをルール処理の対象外とするルール
• クロスポストの制限値(宛先数が15を越えるメッセージをスパムと判断)
7202010_20004_0.png注意
ご利用のシステムでクロスポストをスパムと判断する場合は、日常的にメールを受信するメーリングリストを信頼できるアドレスの一覧に追加しておく必要があります。その理由は、メーリングリストには多数の宛先が含まれている可能性があるためです。
• IPアドレスがスパム発信元のIP一覧に登録されている場合に、そのメッセージを拒否して不達メッセージを送信
[インターネットの基本設定]フォームの[迷惑メール/スパム]タブの設定とスパムスコアに基づいて、メッセージを拒否して不達メッセージを送信するか、警告/ジャンク/スパムヘッダや警告用アイコンをメッセージに挿入します。
• スパムスコアが100~:メッセージを拒否して不達メッセージを送信するか、警告を表すヘッダと以下の赤い警告アイコンを挿入し、
61003_25638_2.png
重要度を[ジャンク]に設定します。
• スパムスコアが[高](50~100):警告を表すヘッダと以下の赤い警告アイコンを挿入し、重要度を[ジャンク]に設定します。
• スパムスコアが[中](25~50):警告を表すヘッダとスパムレベルを表すヘッダを挿入し、以下のオレンジ色の警告アイコンを挿入します。
61003_25629_1.png
• スパムスコアが[低](10~25):警告を表すヘッダとスパムレベルを表すヘッダを挿入し、以下の緑色のアイコンを挿入します。
61003_25619_0.png
SMTP通信について
rules.MailRulesファイルを理解するためには、SMTP通信について知ることが重要です。メッセージはSMTP通信によって配信され、SMTP通信が行われるタイミングと順番はさまざまなルールで設定された動作内容によって決まります。下図は、単純なRFC-2822準拠のメッセージがSMTP経由でインターネットサービスに配信されるときに行われる動作を時系列でまとめたものです。SMTP通信では、以下のような動作が実行されます。
SMTP conversation 1.png
SMTP conversation 2.png
あるルールファイルを例にとって、メッセージ処理の様子を見てみましょう。ここでは、rules.MailRulesファイルに以下のルールを記述しているとします。
# メッセージが信頼済みIPアドレスから発信されていれば次の動作を実行
^:IF (@istrustedip($senderip)) DONE
# 管理者が設定できる変数をここで定義
^:IF (1) SET $spamMax=50
# Receivedヘッダでスパム配信者をチェック
Received: regexp:"\\[0-9][0-9]*\\.[0-9][0-9]*\\.[0-9][0-9]*\\.[0-9][0-9]*\\)" SET $IP = "\\1"
Received:IF (isspamip($IP)) NDN
# 件名をチェック
Subject:IF (@inblocklist($subject)) SET $spamlevel += 50
Subject:"  " SET $spamlevel += 25
Subject:IF (@allcaps ($subject)) SET $spamlevel += 25
# errors-toがスパムである可能性が低い場合
Errors-To:"*@*" SET $spamlevel -= 20 AND $spamtests += "-ERRORS_TO;"
# 任意のヘッダにViaguraという単語がある場合はジャンクとして識別
*:"Viagra" SET $spamlevel += 25
# ヘッダの最後で処理されたスパムレベルに対応するルール
:IF ($spamlevel >= $spamMax) NDN 550 "Sorry, your message has triggered a spam block, please contact the postmaster."
このrules.MailRulesファイルがメッセージをどのように処理するのかを見てみましょう。他のメールサーバがインターネットサービスに接続すると、DATAコマンドが送られるまでSMTPによるやり取りが続きます。メッセージの残りの部分は以下のように処理されます。
^ルールが実行されます。
$spamMaxを50とし、送信元メールサーバが信頼済みIPであれば、すべてのルール処理を停止します。
SMTPチャネルに到達すると * ルールが実行され、「user@is.com」が「Viagra」と比較されます。一致しなければ何も起こりません。
From:user@is.com
SMTPチャネルに到達すると * ルールが実行され、「user@is.com」が「Viagra」と比較されます。一致しなければ何も起こりません。
Subject:HELLO  OUT  THERE!
SMTPチャネルに到達すると、「"Subject:IF (@inblocklist($subject)) SET $spamlevel + = 50"」のルールが実行され、何も起こりません。
「"Subject:"  " SET $spamlevel + = 25”」のルールが実行され、$spamlevelが25になります。
「"Subject:IF (@allcaps($subject)) SET $spamlevel += 25”」のルールが実行され、$spamlevelが50になります。
*ルールが実行され、「HELLO OUT THERE!」が「Viagra」と比較されます。一致しなければ何も起こりません。
• "<CRLF>"
空白行に到達すると""ルールが実行され、「:IF ($spamlevel >= &$SpamMax) NDN 550 "Sorry your message has triggered a spam block, please contact the postmaster"」のルールが実行されます。
ここでは、$spamlevelが50であるため、メッセージは拒否され、不達メッセージが返されます。送信元のメールサーバはこの不達メッセージを確認して、接続を停止します。
他のメッセージが送信されると、この処理が再度行われます。
構文
rules.MailRulesファイルの基本構文は以下の通りです。
<ヘッダ> ":"1*<空白> <条件> 1*<空白> <動作>
rule.MailRulesスクリプトの構文: <ヘッダ>
::=<RFC822ヘッダ名>(例:From)
::=<RFC2045およびRFC2183添付ファイルヘッダ名>(例:Content-disposition)
::=     '*'は任意またはすべてのヘッダを意味します
::=     '^'は任意のヘッダの前を意味します
::=     '*'(空白)はヘッダの末尾を意味します
::=     '<'はHTMLメッセージの本文にあるリンクを意味します(<A>と<IMG>)
::=     '>'はメッセージ本文内のテキストを意味します
::=     '@'は添付ファイル一式のヘッダの末尾を意味します
::=     '.'はメッセージの末尾を意味します
rule.MailRulesスクリプトの構文: 1*
1以上を意味します
rule.MailRulesスクリプトの構文: <空白>
空白を意味します
::=     ASCII SPACEまたはTABです
rule.MailRulesスクリプトの構文: <条件>
::=     ["NOT" 1*<空白>] <">単純式<"># * と ? に対応し、大文字と小文字を区別しない
::=     ["NOT" 1*<空白>] "regexp:"<">正規表現式<"># 完全な正規表現式で、タグ付けした置換用グループを含む
::=     ["NOT" 1*<空白>] "eregexp:"<">拡張正規表現式<"># 拡張正規表現式で、タグ付けした置換用グループを含む
::=     ["NOT" 1*<空白>] "eregexpi:"<">拡張正規表現式<"># 大文字と小文字を区別しない拡張正規表現式で、タグ付けした置換用グループを含む
::=     "IF" *<sp> "(" <式> ")"
rule.MailRulesスクリプトの構文: <式>
•     <式>            ::=     ["("] <項> [<関係> <式>] [")"]
•     <項>                          ::=     [<否定>] <lhs> [<条件> <lhs>]
•     <否定>                           ::=     "NOT" | "!"
•     <lhs>                           ::=     <定数> [<演算子> <lhs>] | [<増分> | <減分>] <変数> [<演算子> <lhs>] | <関数> | <式>
•     <定数>              ::=     <数値> | <文字列>
•     <数値>                        ::=     ["+" | "-"] <8進数> | <10進数> | <16進数>
•     <8進法>                 ::=     "0" 1*<8進数>
•     <8進数>   ::=     "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7"
•     <10進法>                       ::=     1*<10進数>
•     <10進数> ::=     <8進数> | "8" | "9"
•     <16進法>   ::=     "0" ["X" | "x"] 1*<16進数>
•     <16進数>             ::=     <16進数> | ["A" | "a"] | ["B" | "b"] | ["C" | "c"] | ["D" | "d"] | ["E" | "e"] | ["F" | "f"]
•     <関数>              ::=     "@' 1*<英字> "(" [<引数リスト>] ")"
•     <引数リスト>                       ::=     <引数> ["," <引数リスト>]
•     <引数>              ::=     <定数> | <変数>
•     <演算子>                        ::=     "+" | "-" | "*" | "/" | "&" | "^" | "%"
•     <増分>                          ::=     "++"
•     <減分>                          ::=     "--"
•     <条件>   ::=     "==" | "!=" | "|" | "&" | "~=" | "![=]~" | "=[=]~" | <lt> | <gt> | <le> | <ge>
•     <lt>                            ::=     "LT" | "<"
•     <gt>                            ::=     "GT" | ">"
•     <le>                            ::=     "LE" | "<="
•     <ge>                            ::=     "GE" | ">="
•     <関係>            ::=     <and> | <or>
•     <and>                           ::=     "AND" | "&&"
•     <or>                            ::=     "OR" | "||"
rule.MailRulesスクリプトの構文: <動作>
•     ::= <set> *[1*<空白> AND 1*<空白> <set>]
•     ::= "BCC" <ローカルアドレス>
•     ::= "BLACKLIST" [<秒単位の時間>]
•     ::= "DISCARDHEADER"
•     ::= "DISCARDMESSAGE"
•     ::= "DONE"# このメッセージのルール処理を停止
•     ::= "INJECT" <"><ヘッダ>":"<値><"># (\1 や \2のような置換グループを含めることが可能)
:IF ($LowSpamMin <= $spamlevel && $spamlevel <= $LowSpamMax) INJECT "X-SPAM-Warning:Low"
ヘッダの末尾に達したときのスパムスコアが「LOW(低)」と[MEDIUM(中)]の間である場合に、このメッセージのインターネットヘッダに「X-SPAM-Warning:LOW」というヘッダを挿入します。
::= "NDN" <エラーコード> [1*<空白> <文字列>]   # DONEの意味になる
:IF ($spamlevel > $HighSpamMax && $XtremeCausesNDN == 1) NDN 550 「申し訳ありませんが、あなたのメッセージはスパムとしてブロックされました。メール管理者にお問い合わせください。」
ヘッダの末尾に達したときのスパムスコアが「HIGH(高)」より大きく、かつ不達メッセージを送るように設定している場合、SMTPエラーコード550と設定したテキスト(「申し訳ありませんが、あなたのメッセージはスパムとしてブロックされました。メール管理者にお問い合わせください。」)とともにメッセージを拒否します。
•     ::= "REPLACE" <"><ヘッダ>":"<値><"> # (\1 や \2のような置換グループを含めることが可能)
•     ::= "SPAM" # SET $priority=junk AND $machinegenerated=1の省略表現
•     ::= "STRIKE"
:IF ($MedSpamMax < $spamlevel) SPAM
ヘッダの末尾に達したときのスパムスコアが[MEDIUM(中)]より大きい場合に、このメッセージをスパムと判定します。
変数
rules.MailRulesファイルは、変数を使用して各種機能を有効にします。変数はプレースホルダで、1つのメッセージが処理されている間データを保持できます。変数は条件式でテストし、SETで指定できます。メールルールには、あらかじめ備わっているものとユーザが定義するものの2種類があります。
あらかじめ備わっている変数
あらかじめ備わっている変数は、ルールのシステムによって定義され、処理中のメッセージに関するデータを保持します。この変数によって、処理中のメッセージに関する情報をメールルールが使用できるようになります。この変数についてよく理解して正しく使用しなければ、誤解が起こったり、誤った結果が発生したりすることになります。例えば、To:ヘッダが受信される前に「#To」を使用すると、 0の値が返されてしまいます。
あらかじめ備わっている変数のうち、SET動作を利用してメッセージの属性を変更できるものは以下の通りです。(R)は読み取り専用、(RW)は読み書き可能であることを表します。


変数
$AcceptableHTMLParseErrors (RW)
数値または識別子。
この変数からデータを読み取ると、[メールの詳細設定]フォームで設定されている現在値またはデフォルト値が返されます。
(HTML本文が処理される前に)この変数にデータを書き込むと、許可されるHTML出力が変更され、クライアントで表示するためにサーバに送信されます。新しい値を指定するには、以下の2つの方法があります。
1) 許可する警告とエラーの数を合計した数値を、10進数か16進数で指定する。
2) 1つまたは複数の識別子を指定する(識別子については、この表の後で説明します)。複数の識別子は「+」または「|」で区切ります。大文字と小文字は区別されません。
$AuthCanRelay (R)
"1"、"0"
$Authenticated (R)
"1"、"0"
$#BADRCPTTO (R)
<無効なRCPT TOアドレスの数>
$#Bcc (R)
<Bcc: 受信者の数>
$#BODY (R)
<メッセージ本文の文字数>
$#BYTESXFERED (R)
SMTP DATAコマンドの起動後に表示されるバイト数
$#Cc (R)
<Cc: 受信者の数>
$Form.Config.<フィールドID>.<書式> (R)
<フィールドID>と<書式>の組み合わせにより異なる
<フィールドID>は、インターネットサービスのフォームのフィールドを表す番号です。
<書式>は、「Number」「String」「Checkbox」のいずれかです。
$Form.GlobalPrefs.<フィールドID>.<書式> (R)
<フィールドID>と<書式>の組み合わせにより異なる
<フィールドID>は、[サイトの基本設定]フォームのフィールドを表す番号です。
<書式>は、「Number」「String」「Checkbox」のいずれかです。
$From (R)
<From:ヘッダの内容>
$HandleBareLFInViolationOfRFC5321 (RW)
"1"、"0"
この変数を1に設定すると、正しいCRLFシーケンスではなくLFのみで文章が終わっている電子メールを、FirstClassインターネットサービスが解析できるようになります。rules.SMTPDebugで以下のように使用することをお勧めします。
X-Mailer:"Kayako Fusion" SET $HandleBareLFInViolationOfRFC5321 = 1
$HaveReplyTo (R)
"1"、"0"
$HaveResentReplyTo (R)
"1"、"0"
$#IMG (R)
<メッセージ内の<img>リンクの数>
$InAttachment (R)
"1"、"0"(インターネットサービスが添付ファイルのヘッダを処理している間にこのルールを実行する場合は、1にします)
$IsNewsArticle (R)
"1"、"0"
$IsSpammer (RW)
"1"、"0"
$IsSubmission (R)
"1"、"0"
$MachineGenerated (RW)
"1"、"0"
$MessageID (R)
<Message-IDヘッダの内容>
$MyIP (R)
<このホストのIPアドレス>
$Priority (RW)
"Normal"、"Urgent"、"Bulk"、"Junk"
$#RCPTTO (R)
<RCPT TOアドレスの数>
$Sender (R)
<MAIL FROM:の内容>
$SenderIP (R)
<送信SMTPホストのIPアドレス>
$Subject (RW)
<subjectヘッダの内容>
$#To (R)
<To: 受信者の数>
$#URL (R)
<メッセージ内の<a>リンクの数>

$AcceptableHTMLParseErrorsで指定できる識別子と対応する値は、以下の通りです。


識別子
説明
All
0xffffffff
警告またはエラー。
AnyError
0x0000ffff
すべてのエラー。
AnyWarning
0xffff0000
すべての警告。
ErrNotWellFormed
0x00000002
1つまたは複数の構文エラーを含むHTML。
ErrTableError
0x00000004
1つの表内に1つまたは複数の構文エラーを含むHTML。
ErrUnknownTags
0x00000001
HTMLの仕様で定義されていない<tag>を含むHTML。
WarnBadEmbeddedContent
0x01000000
<embed>タグを含むHTML。
WarnBadImages
0x00020000
Webサーバ上の画像への参照を含むHTML。
WarnEmbeddedApps
0x00400000
<applet>タグまたは<object>タグを含むHTML。
WarnExternalCSS
0x00010000
外部のCSSスタイルシートへの参照を含むHTML。
WarnForms
0x00080000
form、button、fieldset、input、isindex、keygen、label、select、textareaのうち、いずれかのタグを含むHTML。
WarnFrameSets
0x00100000
<frame>タグまたは<frameset>タグを含むHTML。
WarnIFrames
0x00200000
<iframe>タグ、<ilayer>タグ、または<legend>タグを含むHTML。
WarnImageMaps
0x00800000
<area>タグもしくは<map>タグを含むHTML、または<optgroup>タグと<option>タグを含むHTML(これらのタグが<select>タグの外側にある場合)。
WarnScriptTags
0x00040000
<script>タグを含むHTML。
WarnUnsupportedTags
0x80000000
有効ではあるもののサポートされていないタグ(base、basefont、bgsound、bidi override、blink、colgroup、layer、marquee、multicol、nobreak)を含むHTML。

例:
値を不適切な画像または表のエラーに設定する場合は、以下のどちらかを使用します。
$AcceptableHTMLParseErrors = 0x00020004
または
$AcceptableHTMLParseErrors = WarnBadImages + ErrTableError
ユーザ定義の変数
ユーザが定義する変数は、$anytextをルールに挿入して定義します。変数の値を設定してから変数を使用してください。例えば、以下のルールを使用する場合、
:IF ($myvar > 50) NDN 550 "Go Away"
以下のルールを作っておく必要があります。
^:IF (1) SET $myvar = 51
このルールがないと$myvarに値が設定されないため、ルールが実行されなくなります。
関数
関数を使用すると、インターネットサービスにあらかじめ備わっている機能を利用して、アドレスがフィルタリング用ドキュメントにあるかどうかを確認するなどのテストを実行できます。関数は条件式で使用され、関数によってさまざまな値が返されます。関数を独自に定義することはできません。利用可能な関数とその構文は以下の通りです。


関数
構文
返される値
@inblocklist
@inblocklist(<文字列>または<変数> [, case])
# caseは「yes」「no」「true」「false」のいずれかです。デフォルトは「no」です。
この関数は、[Filters]フォルダ内にあるrules.SubjectBlockドキュメントで指定された文字列が存在するかどうかをチェックします。
TRUE (1)またはFALSE (0)
@inwordlist
@inwordlist(<リスト名>, <文字列>または<変数> [, case])
# caseは「yes」「no」「true」「false」のいずれかです。デフォルトは「no」です。
@inblocklistと似ていますが、個別のリスト名を<リスト名>に入れて使用できます。リスト名は「lists.」で始まる名前にする必要があります。case引数を「TRUE」、「YES」、または0以外の数値にした場合は、大文字と小文字を区別できます。
TRUEまたはFALSE
@isallcaps
@allcaps(<文字列>または<変数>)
TRUEまたはFALSE
@islocaladdress
@islocaladdress(<文字列>または<変数>)
TRUEまたはFALSE
@isrecipient
@isrecipient(<文字列>または<変数>)
TRUEまたはFALSE
@isspamaddress
@isspamaddress(<文字列>または<変数> [, リスト名])
オプションの<リスト名>に入れるリストの名前は、「lists.」で開始し、ドメイン名を(1行に)記述する必要があります。ドメイン名にワイルドカードを使うことはできません。
TRUEまたはFALSE
@isspamip
@isspamip(<文字列>または<変数> [, リスト名])
オプションの<リスト名>に入れるリストの名前は、「lists.」で開始し、IPアドレスの値かマスクを(1行に)記述する必要があります。
TRUEまたはFALSE
@istrustedaddress
@istrustedaddress(<文字列>または<変数> [, リスト名])
オプションの<リスト名>に入れるリストの名前は、「lists.」で開始し、ドメイン名を(1行に)記述する必要があります。ドメイン名にはワイルドカードを使うことはできません。
TRUEまたはFALSE
@istrustedip
@istrustedip(<文字列>または<変数> [, リスト名])
オプションの<リスト名>に入れるリストの名前は、「lists.」で開始し、IPアドレスの値かマスクを(1行に)記述する必要があります。
TRUEまたはFALSE
@punctcount
@punctcount(<文字列>または<変数>)
句読文字とは、空白文字でも英数字でもない印刷可能な文字のことです。
<文字列>または<変数>に含まれる句読文字の数
@rcptto
@rcptto(<数値>または<変数>)
(0から始まる)引数の要求に応じて、N番目の有効なRCPT TO値を含む文字列
@seenheader
@seenheader(<文字列>または<変数>)
TRUEまたはFALSE
@wordcount
@wordcount(<リスト名>, <文字列>または<変数> [, case])
# caseは「yes」「no」「true」「false」のいずれかです。デフォルトは「no」です。
case引数を「TRUE」、「YES」、または0以外の数値にした場合は、大文字と小文字を区別できます。
<文字列>に指定した語句が<リスト名>のファイルまたはドキュメントに含まれる数

以上の関数は、以下のインターネットサービスの命令文と同じように動作します。
•     @split(...)
•     @substr(...)
•     @length(...)
•     @indexof(...)
•     @upper(...)
•     @lower(...)
•     @rand()
SET動作
SET動作を利用すると、多くのブール演算子をルールのテスト部分に簡単に記述できます。
<set>
::=     "SET" 1*<空白> <変数> *<空白> "=" *<空白> <値> *[ 1*<空白> "AND" 1*<空白> <変数> *<空白> "=" *<空白> <値> ]
いくつかの例を以下に記します。
•     <not>
•     ::=     "NOT" | "!"
•     <and>
•     ::=     "AND" | "&&"
•     <or>
•     ::=     "OR" | "||"
•     <gt>
•     ::=     "GT" | ">"
•     <lt>
•     ::=     "LT" | "<"
•     <ge>
•     ::=     "GE" | ">="
•     <le>
•     ::=     "LE" | "<="
SETの変数コンポーネントで使用する構文
<set>動作の<変数>コンポーネントによって、あらかじめ定義されている変数と独自に定義する変数の両方を使用できるようになります。
::=     "SET" 1*<空白> <変数> *<空白> "=" *<空白> <値> *[ 1*<空白> "AND" 1*<空白> <変数> *<空白> "=" *<空白> <値> ]
あらかじめ定義されている変数は<builtin>です。独自に定義する変数については、テキストだけの変数は<alpha>、テキストと数値を組み合わせた変数は<alphanum>です。
::=     "$" ["{"] <builtin> or 1<alpha>*<alphanum_> ["}"]
SETの値コンポーネントで使用する構文
<set>動作の<>コンポーネント(<動作>スクリプトの小区分)によって、値を返すシステム関数が定義されます。
::=     "SET" 1*<空白> <変数> *<空白> <引数オプション> *<空白> <値> *[ 1*<空白> "AND" 1*<空白> <変数> *<空白> <引数オプション> *<空白> <値> ]
<引数オプション>              ::=     "=" | "/=" | "*=" | "-=" | "+=" | "%="  # 値が<文字列>の場合は =」と「+=」だけが有効。



rules.AttachmentBlockドキュメント
rules.AttachmentBlockファイルを使用して、疑わしい添付ファイルがユーザのメールボックスに届かないようにすることができます。このファイルで設定した条件に合致するファイルが添付されたインターネットメールが届くと、そのファイルは除去されてテキストに差し替えられます。
rules.AttachmentBlockファイルの書式は簡単です。ブロックしたい添付ファイルの種類を1つずつ入力してください(例:*.com、*.exe、*.scr、APPL:????)。
ある種類のファイルをすべて合致させるには、任意の文字を表すワイルドカード(*)を使用してください。添付ファイル名のある特定の位置の1文字に合致させるには、任意の1文字を表すワイルドカード(?)を使用してください。
特定の拡張子の添付ファイルをブロックする設定は、[グループ権限]フォームの[セキュリティ]タブでも実行できます。ただし、この方法を利用した添付ファイルのブロックは、組織単位またはユーザグループで設定するため、インターネットサービス経由のメールの添付ファイルはブロックされません。
サーバでブロックされた添付ファイルはFirstClassクライアントソフトウェアではダウンロードできませんが、インターネットサービスを利用して、他の(FirstClass以外の)メールサーバにメッセージをリダイレクトまたは自動転送できます。転送後は、POP3またはIMAP4を利用してそのメッセージを受信できます。



rules.SubjectBlockドキュメント
rules.SubjectBlockファイルに好ましくない単語や語句を登録して、受信メールの[件名]フィールドにそれらの単語や語句が含まれていないか調べることができます。インターネットサービスは、rules.MailRulesドキュメントを使用して、登録した単語や語句を含むメールにスパムスコアを付けます。そのメールをユーザに届く前にブロックするか、ユーザが自分のメールルールで処理できるようにタグを挿入できます。
見つけられたメールは、[インターネットの基本設定]フォームの[迷惑メール/スパム]タブにある[メールルール]タブで[rules.SubjectBlockに登録の件名を拒否]を有効にしない限り、ご利用のサイトから自動的に削除されることはありません。その代わりに、rules.SubjectBlockファイルに登録した単語や語句がメッセージの[件名]フィールド内で見つかると、インターネットサービスはそのメッセージにスパムスコアを追加し、該当する場合はジャンクメールとして分類します。この処理によって、問題のないインターネットメールが誤って配信されないようになります。また、スパムと思われるメールを自分のサイトで処理する方法を管理者が決められるようになります。
インターネットサービスが付与する値とスコアは、rules.MailRulesファイルで設定されているルールに基づきます。例えば、以下のルールの場合、
Subject:IF ($Form.Config.2605.Checkbox == 0 && @inblocklist($subject)) SET $spamlevel += 100 AND $spamtests += "SUBJECTBLOCK;"
以下の2つの内容を調査できます。
• メッセージの[件名]フィールドに、rules.SubjectBlockファイルで登録された単語があるかどうか
および
• [rules.SubjectBlockに登録の件名を拒否]が無効になっているかどうか
両方ともTRUEであれば、スパムスコアが100追加されます。
rules.SubjectBlockファイルに追加登録する方法
rules.SubjectBlockの書式は簡単です。1行ごとに1つずつ単語を入力してください。コメントを追加するには、行の先頭に#を入れてください。例:
# 以下はブロックする不適切用語
Viagra
Free mortgages
Get rich
ADV:
@inblocklist機能は、デフォルトでは大文字と小文字の区別なく実行されます。大文字と小文字を区別するには、「true」パラメータを使用して「@inblocklist($subject, true)」のように入力ください。
また、より詳細な条件を設定したブロックリストを作成してメッセージの[件名]以外のフィールドを調べ、SMTPルールに基づいてそのルールに応じたスコアを付けることも可能です。この方法については、後で説明します。
rules.MailRulesでrules.SubjectBlockファイルを使用する方法
rules.MailRulesファイルには、rules.Subjectファイルに登録した好ましくない単語や語句が[件名]フィールドに含まれているかを調べるルールが記述されています。また、サイトにダメージを与えるためにスパム配信者が使用するトリックを見つけるためのルールも記述されています。
必要に応じて、自分でルールを追加したり、行の先頭に#を付けてデフォルトのルールを無効にしたりできます。例えば、以下のような記述が可能です。
# Subject:IF ($Form.Config.2605.Checkbox == 0 && @inblocklist($subject)) SET $spamlevel += 100 AND $spamtests += "SUBJECTBLOCK;"
以下は、インターネットサービスがメールの[件名]フィールドを調べるために使用するルールで、デフォルトのrules.MailRulesファイルに記述されているものです。
-----------------------
# ここから件名のテスト
•     Subject:IF ($Form.Config.2605.Checkbox && @InBlockList($Subject)) NDN 550 "$sorry"
rules.SubjectBlockのリストに登録されている単語が件名に含まれているか、また[rules.SubjectBlockに登録の件名を拒否]が有効になっているかを調べます。両方ともTRUEであれば、不達通知が送信されます。
•     Subject:IF ($Form.Config.2605.Checkbox == 0 && @inblocklist($subject)) SET $spamlevel += 100 AND $spamtests += "SUBJECTBLOCK;"
rules.SubjectBlockのリストに登録されている単語が件名に含まれているか、また[rules.SubjectBlockに登録の件名を拒否]が無効になっているかを調べます。両方ともTRUEであれば、スパムスコアが100追加されます。
•     Subject: regexp:"^$" SET $spamlevel += 10 AND $spamtests += "SUBJ_HAS_NO_SUBJECT;"
件名が空白であるかを調べます。件名がないメッセージはスパムである確率が高くなります。両方ともTRUEであれば、スパムスコアが10追加されます。
•     Subject:"     " SET $spamlevel += 20 AND $spamtests += "SUBJ_HAS_SPACES;"
件名に余分な空白があるか調べます。スパム配信者は、「Hi...Remember me?(任意の数のスペース)」のような件名を使うことがありますが、こうした件名は余分な空白があるため、このルールで見つけ出すことができます。両方ともTRUEであれば、スパムスコアが20追加されます。
•     Subject:IF (@allcaps($subject)) SET $spamlevel += 25 AND $spamtests += "SUBJ_ALL_CAPS;"
件名がすべて大文字で書かれているかを調べます。件名にすべて大文字が使われているメールはスパムである確率が高くなります。TUREであれば、スパムスコアが25追加されます。
•     Subject: eregexpi:"(^|[^[:alnum:]])(v|\\\\/)[^[:alnum:]]{0,2}[i1l\|!¡ÌÍÎÏìííîï][^[:alnum:]]{0,2}[a@ÀÁÂÃÄÅÆàáâãäå][^[:alnum:]]{0,2}g[^[:alnum:]]{0,2}r[^[:alnum:]]{0,2}[a@ÀÁÂÃÄÅÆàáâãäå]($|[^[:alnum:]])"SET $spamlevel += 101 AND $spamtests += "SUBJ_VIAGRA;"
•     Subject: eregexpi:"x[^[:alnum:]]{0,2}[a@][^[:alnum:]]{0,2}n[^[:alnum:]]{0,2}[a@][^[:alnum:]]{0,2}x" SET $spamlevel += 101 AND $spamtests += "SUBJ_XANAX;"
•     Subject: eregexpi:"d[^[:alnum:]]{0,2}r[^[:alnum:]]{0,2}u[^[:alnum:]]{0,2}g[^[:alnum:]]{0,2}s" SET $spamlevel += 100 AND $spamtests += "SUBJ_DRUGS;"
この3つのルールでは、「Viagra」「Xanax」「drugs」という単語を別々に調べます。このような件名は、スパムフィルタをすり抜けて人の目に留まるようにスパム配信者が意図して付けたものです。行番号30か31がTRUEであればスパムスコアが101追加されます。行番号32がTRUEであればスパムスコアが100追加されます。
•     Subject:IF (@PunctCount($Subject) >= 5) SET $spamlevel += 10 AND $spamtests += "EXCESS_PUNCT;"
件名に5個以上の句読点があるかを調べます。句読点が多い件名のメールはスパムである確率が高くなります。TRUEであれば、スパムスコアが10追加されます。
•     Subject:IF (@WordCount("lists.Rude", $Subject) > 1) SET $spamlevel += 100 AND $spamtests += "SUBJ_RUDE_WORDS;"
[Filters]フォルダ内のlists.Rudeドキュメントに登録された単語が、2つ以上件名に含まれているかを調べます。TRUEであれば、スパムスコアが100追加されます。



rules.SMTPDebugをカスタムルールに使用する方法
アップグレード中に上書きされない独自のメールルールをrules.SMTPDebugに追加できます。このドキュメントは、接続ベースのログ変数を使用してSMTPのデバッグを行うための一時的なルールを作成するためのものですが、それ以外の用途にも使用できます。
このドキュメント内ではあらゆるメールルールを使用でき、このドキュメント内のルールはrules.MailRulesドキュメントのルールより前に実行されます。
設定できるデバッグログレベルは以下の通りです。


ルール
変数
目的
SMTPサーバ
$SMTPServerLogging
[ログ]タブにあるSMTPサーバのボタンと同じデバッグレベルを設定します。
メールデコード
$MailDecodingLogging
[ログ]タブにあるメールデコードのボタンと同じデバッグレベルを設定します。
MIMEデコード
$MIMEDecodingLogging
[ログ]タブにあるMIMEデコードのボタンと同じデバッグレベルを設定します。

例1
# 送信者のIPが123.123.123.123のときに完全なSMTPメッセージのログを取得する
^:IF ($SenderIP == 123.123.123.123) SET $SMTPServerLogging = 5
例2
# 件名が「Susanからのテストメッセージ」である場合に完全なSMTPメッセージのログを取得し、MIMEとメッセージのデコードを有効にする
# 「Subject:」ヘッダより前に受信されたメールヘッダのログは取得されない
Subject:IF ($Subject == "Susanからのテストメッセージ" SET $SMTPServerLogging = 5 AND $MailDecodingLogging = 5 and $MIMEDecodingLogging = 5



スパムのスコアについて
スパムスコアは、[rules.MailRules]ファイルの設定と、[インターネットの基本設定]フォームの[迷惑メール/スパム]タブにある[メールルール]タブで設定するスパムレベルに従って、インターネットサービスが受信メッセージに対してフラグを立てる方法を定義します。SMTPサーバが自分のサイトにメッセージを配信すると、インターネットサービスはrules.MailRulesファイルのルールを使用して、さまざまな基準に従ってそのメッセージにスコアを付けます。例えば、クロスポストの制限値、メッセージのヘッダ、内容などの基準があります。
インターネットサービスでは、ほとんどのFirstClassサイトに適用できるスパムスコアがあらかじめ設定されています。自分のサイトに適用するスパムスコアを変更したい場合は、[メールルール]タブZでスパムレベルをカスタマイズできます。
例えば、通常のメッセージがスパムとして扱われてしまうことが多い場合は、スパムスコア「低」の[最小]を100に、[最大]を125にします(他のスパムスコアもこれに合わせて変更します)。このように設定すると、インターネットサービスは、スコアが99になるまで特別な処理を行いません。また、[スパムスコアが[高]を超えたら拒否]を有効にしていて、ほとんどのメッセージがインターネットサービスによって拒否されてしまう場合は、[スパムスコア「高」]の値を上げてください。
スパムスコアのルール
スパムスコアは、以下のルールに従って付けられます。
• rules.SubjectBlockに登録されている語句がメールヘッダに含まれる場合は、100加算されます
• 件名に5つ以上連続で空白が含まれている場合は、20加算されます
• 件名がすべて大文字の場合は、25加算されます
• [ERRORS_TO]フィールドが有効な場合は、20減算されます
• メーラ(Mailer)は2種類に区分され、最初のグループには75、2番目のグループには25スコアが加算されますこれは、スパムメーラとして有名なFloodgate、Group Mail、Millenium Mailer、Automail、JMail、eGroups Message Posterなどがメーラとして使用されている場合に適用されます
• Message-IDヘッダがなく、そのメッセージが「サービスを停止したメーラ」(AT&T Message Center Version 1JMailなど)から送信されたものではない場合は、50加算されます
• Subjectヘッダがなく、そのメッセージが「サービスを停止したメーラ」から送信されたものではない場合は、50加算されます
• Dateヘッダがなく、そのメッセージが「サービスを停止したメーラ」から送信されたものではない場合は、25加算されます
• Subjectが空白の場合は、10加算されます
• 「Viagra」や「Xanax」などの単語が件名に含まれる場合は、101加算されます
• 麻薬関連の単語が件名に含まれる場合は、100加算されます
• 句読点が5つ以上連続で件名に含まれる場合は、10加算されます
• X-Speedi-Jobヘッダがメッセージに含まれる場合は、100加算されます
• X-Ssi-Jobヘッダがメッセージに含まれる場合は、100加算されます
• X-Originating-IPヘッダがメッセージに含まれ、そのヘッダ内の一部にインターネットサービスのIPアドレスがある場合は、101加算されます
• X-CS-IPヘッダかX-IPヘッダがメッセージに含まれる場合は、5加算されます
• rules.SubjectBlockファイルに登録されている語句がメッセージ本文に含まれ、[rules.SubjectBlockに登録の件名を拒否]がチェックされていない場合は、100加算されます
• lists.BodyList1ファイルに登録されている語句がメッセージの本文に含まれている場合は、50加算されます
• 「CAN-SPAM Act」や類似の語句がメッセージ本文に含まれている場合は、100加算されます
• 「Viagra」や「Xanax」などの単語がメッセージ本文に含まれる場合は、101加算されます
• 「free」という単語がメッセージ本文に含まれ、文字と文字の間に句読点が挿入されて偽装されている場合は、101加算されます
• 「unsubscribe(登録解除)」リンクがHTMLメッセージの本文にある場合は、50加算されます
• HTMLメッセージの本文で、文字数が10未満なのにリンク(<Aまたは<IMG)が1つまたは複数ある場合は、101加算されます
• スパムメッセージを示す1つまたは複数のリンクがHTMLメッセージの本文にある場合は、101加算されます



ジャンクのスコアについて
インターネットサービスは、スパムスコアが[高](51~100)以上のメッセージをジャンクメールとして識別します。また、メッセージのPrecedenceヘッダの内容に従って、メッセージをジャンクメールとして識別するかどうかを判断します。送信者がメッセージの重要度を[ジャンク]に設定すると、メールの重要度が[ジャンク]に設定されます。
一部のメーリングリスト用プログラムでは、送信するメッセージにPrecedenceヘッダを設定します。下の表は、インターネットサービスがPrecedenceヘッダとFirstClassの重要度をどのように対応付けするかを表したものです。


優先度
FirstClassの優先度
special delivery
Urgent
first-class
Normal
list
Bulk
bulk
Bulk
junk
Junk

インターネットサービスがメッセージのスパムスコアを上げ、ジャンクメールとして識別する条件は以下の通りです。
件名または本文にrules.Subjectblockファイル内の単語が含まれており、かつそのメッセージをブロックして不達通知を送信するよう設定されていない場合
• 「Viagra」「Xanax」「drugs」などの単語が件名に含まれている場合。
• 件名または本文に[Filters]フォルダにあるlists.Rudeファイル内の単語が2つ以上含まれている場合
• [Filters]フォルダ内のlists.x-mailer-1ファイルに登録されているX-Mailerヘッダが検出された場合
• スパム配信者が使用する特定の「X-」ヘッダが検出された場合
• 「米国の2003年アンチスパム法(CAN-SPAM Act)に準拠しているためスパムではない」といった偽りの免責条項が本文に記載されている場合
• 「Viagra」や「free」などの単語が本文に含まれている場合
• 添付ファイル名が検出され、そのファイル名とメールの件名がともに[Filters]フォルダ内のlists.VirusNetskyAttachmentファイルに登録されている場合
• メッセージの閲覧者を追跡するためにスパム配信者が使用する画像へのURLが本文に含まれている場合
• ドメイン名が「.biz」で終わるURLが本文に含まれている場合
• 実際のサーバとは異なるサーバにあるかのように見せかける画像へのURLが本文に含まれている場合
• 実際のリンク先とは異なるサイトへのリンクであるかのように見せかけるURLが本文に含まれている場合



自分専用のブロックリストの作成
自分専用のブロックリストを作成して、FirstClassのサイトのスパムメールが届かないようにすることができます。このブロックリストはrules.SubjectBlockドキュメントと同じように動作します。このドキュメントの設定をrules.MailRulesドキュメントに適用して、インターネットサービスで特定の動作(スパムスコアの追加、差出人への不達通知の送信など)を実行できます。ただし、このブロックリストには、メッセージの[件名]フィールドだけでなくさまざまなフィールドをチェックできる機能もあります。
自分専用のブロックリストでチェックできる内容は以下の通りです。
• 不快な単語や語句
• X-Mailerヘッダ(スパム配信者が使用したメーラ)
• サービスを停止したメーラ(スパム配信者のメーラではないため、メッセージIDのヘッダがメッセージに追加されません)
• IPアドレス
• ウイルスメールの件名
• ウイルスメールの添付ファイル名
すべてのルールドキュメントと同じように、リストドキュメントも[Filters]フォルダに保存し、「lists」という名前の後に固有名を付ける必要があります。例:
• lists.myreallybadlist
• lists.mymoderatelybadlist
• lists.questionablebadlist
rules.MailRulesでリストファイルを使用する方法
デフォルトのrules.MailRulesファイルには、ブロックリストに登録されている好ましくない単語や語句がメッセージのフィールドの内容にあるかをチェックするルールが記述されています。ここで言うブロックリストとは、rules.SubjectBlockファイル、rules.AttachmentBlockファイル、および自分専用の全ブロックリストのことです。
デフォルトでは、[Filters]フォルダ内に基本的なリストドキュメントが作られており、rules.MailRulesドキュメントにハードコードされたルールと連動してさまざまなスパムをブロックします。例えば、lists.VirusNetskySubjectドキュメントとlists.VirusNetskyAttachmentドキュメントは、rules.MailRulesドキュメント内にある以下のルールから呼び出されます。
@:IF(@length($attname) &&@InWordList("lists.VirusNetskySubject",$Subject) &&@InWordList("lists.VirusNetskyAttachment",$attname))NDN550"No worms allowed"
このルールでは、lists.VirusNetskySubjectドキュメントに登録されている件名か、またはlists.VirusNetskyAttachmentドキュメントに登録されている添付ファイル名をインターネットサービスが検出すると、差出人に(メッセージ付きの)不達通知が送信されます。[Filters]フォルダには他にも類似のリスト用ドキュメントがあり、関連するメールルールによって呼び出されます。
独自のリストを作成する場合は、関連するメールルールをrules.MailRulesドキュメントに記述する必要があります。このためには、既存のルールを編集するか、または新しくルールを作成します。例えば、以下のリストを[Filters]フォルダ内に作成したとします。
• lists.reallybadwordsドキュメント:スパムレベルを100追加
• lists.moderatelybadwordsドキュメント:スパムレベルを50追加
• lists.questionablebadwordsドキュメント:スパムレベルを25追加
この場合は、以下のように、上の3つのルールをrules.MailRulesファイルに記述します。
Subject:IF (@inwordlist("lists.myreallybadlist", $subject)) SET $spamlevel += 100 AND $spamtests += "SUBJECT_IN_LIST;"
Subject:IF (@inwordlist("lists.mymoderatelybadlist", $subject)) SET $spamlevel += 50 AND $spamtests += "SUBJECT_IN_LIST2;"
Subject:IF (@inwordlist("lists.myquestionablelist", $subject)) SET $spamlevel += 25 AND $spamtests += "SUBJECT_IN_LIST3;"
スパムレベルの値を変更したい場合は、[メールルール]タブで設定するか、ファイルを直接設定します。



ユーザ作成のメールルール
FirstClassのユーザは、適切な権限を与えられていれば、自分のメールボックスおよびルールの作成権限を持つ会議室に対して個人用のメールルールを作成できます。
インターネットサービスは、スパムテストに不合格となったメッセージにX-SPAM-xxxxヘッダを挿入します。ユーザは、自分のメールルールを使用してこのヘッダをチェックし、スパムと思われるメッセージを保管したり、削除したりできます。
例えば、ユーザが下図のような警告アイコンが付いたメッセージを受信すると、
61003_25638_2.png
そのユーザは、このメッセージのインターネットヘッダを表示してスパムレベルを確認し、そのメッセージがスパムと判定された理由を調べることができます。下図は、X-SPAM-warningヘッダが「HIGH(高)」になっているメッセージのインターネットヘッダの例です。
11503_123810_2.png
メールルールをSMTPルールと併用すると、管理者とユーザの双方が、システム上でインターネットのスパムを効率よく処理できるようになります。



ジャンクメール処理の基本設定について
ユーザが[基本設定]フォームでジャンクメールを[受信直後に削除する]に設定すると、「ジャンク」と判断されたメッセージはすべて自動的に削除されます。デフォルトでは、(スパムレベルが50より大きい)「HIGH(高)」と判定されたすべてのメッセージが対象となります。

 

Copyright(C) 2002-2018 FC Management Co. All Rights Reserved