Advertising banner:
 
 
 A189
 
81203_43854_21.png81203_43840_19.png



SMTP通信について
rules.MailRulesファイルを理解するために重要なことは、SMTP通信について理解することです。SMTP通信によってメッセージは配信されます。また、様々なルールの動作が起こる地点で、ルールが起こる順番にSMTP通信は行われます。下図は、単純なRFC-2822準拠のメッセージがSMTP経由でインターネットサービスに配信される場合に起こる出来事を時系列でまとめたものです。SMTP通信の最中に、次のようなことが行われます。
A189_01.jpg

サンプルのルールファイルでサンプルのメッセージを処理してみましょう。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ファイルがメッセージをどのように処理するのかを見てみましょう。
他のメールサーバがインターネットサービスに接続すると、SMTPによるやり取りがDATAコマンドが送られるまで続きます。メッセージの残りの部分は次のように処理されます。
・^ ルールが実行されます。
$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>"
空白行に到達すると「rule」が実行され、「: IF ($spamlevel >= &$SpamMax) NDN 550 "Sorry your message has triggered a spam block, please contact the postmaster"」のルールが実行されます。
$spamlevelが50であるため、メッセージは拒否され、不達メッセージが返されます。送信元のメールサーバはこの不達メッセージを確認して、接続を停止します。
他のメッセージが送信されると、この処理が再度行われます。



hirosue Shino Web Site