Spam wordの出現回数で点数をつける

Spamassassinで怪しい単語(spam word)の出現回数で点数をつけられないかいろいろ試行錯誤したけど、metaとtflagsで何とかできそう。

例えば、スパムにありがちな$100などのUSドル表示が多いほどスパムっぽいとすると、~/.spamassassin/user_prefsにfull __US_DOLLAR_SINGLE /\$[0-9.,]{3,}/
tflags __US_DOLLAR_SINGLE multiple
meta US_DOLLAR_MULTI __US_DOLLAR_SINGLE > 2
score US_DOLLAR_MULTI 2.0
を追加してみる。

これは1行目にまず、メールのすべてにおいてドル金額が “$” に続けて数字、カンマ、小数点が3個以上続くものを “__US_DOLLAR_SINGLE” として定義している。ちなみに、ただ “$” または “$[0-9]” だけだとMIMEエンコードされた部分や日本語部分にやたらめったらヒットしまくる。そして定義名の前に “_”(アンダーバー、アンダースコア)が二つついているんだけど、これはルールとして定義しても得点としては計算しない定義に用いられる。得点に加算しないルールなんて作っても意味ないじゃん、と思うんだけど meta で使うんだな、これが。

2行目は “tflags” でルール定義のタイプを “multi” に設定している。 “multi” を設定すると、ルール(この場合は “__US_DOLLAR_SINGLE”)が合致するたびにヒットするようになる。これで、1行目の定義に “__” がなければドル金額表示があるだけヒットするようになる。これはこれで便利なんだけど、メールのヘッダーにヒットする回数だけ表示されてちょっとうざい。でも、ヒット数と得点を比例させたい場合はこれしか方法はないんじゃないかな。特に比例させる必要はなさそうだし、誤検出もちらほらあるからこのような設定はしていない。

3行目は “__US_DOLLAR_SINGLE” が2回より多く(3回以上)ヒットした場合に有効となるルール “US_DOLLAR_MULTI” を定義している。ここがミソで、”__US_DOLLAR_SINGLE” の検出回数で発動させることができる。ここは “2” を調整することで大体うちに届くスパムは、ドル金額が書いてある場合は3回以上は書かれている。

4行目は “US_DOLLAR_MULTI” に対するスコア。

ここで、1行目の定義を “/buy|sale|purchase|bargain|off|click/i” みたいによく届くスパムに多い怪しい単語を並べておくと、それらの出現頻度でスコアをつけるようにもできる。デフォルトのルールでは引っ掛けにくい学位取得スパムはこれでやっつけてる。

これでちょっと様子を見て、hamとspamの区別がはっきりしてきたらある程度のスコア以上のメールはばっさりと削除することにしようかな。

[12/18 update]大枠はこれでいいんだけど、これだとhamが誤検出されてしまうことが発覚! 改善策はSpam wordの出現回数で点数をつける(2)で!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です