SpamAssassinに日本の spamを学ばせる
spamc/spamdの 導入成功に気をよくして、さらに spamを排除すべく、「未承諾広告」と かいう subjectのメールが spamとして判定される可能性を高めてやろう、と いう気になった。
そもそも、 SpamAssassin の判定基準の書き方など全く知らなかったので、 すでに同じ試みをしている人はいないだろうか、と Google で検索してみた。 その結果、 TLEC のサイトに掲載 されている設定例 を発見した。このファイルをそのまま使わせていただいてもいいのだが、せっ かくなのでこのファイルを参考にして自分の環境に合ったものを作ることにし た。このファイルを眺めて、 Subjectなどは、 MIME-decodeされた後に与えられた正規表現と 比較されているらしい、 ということが分かった。実はこの部分がよく分からなかったので、これが分かっ てずいぶんとやる気が出てきた。
判定ルールの詳しい書き方は Mail::SpamAssassin::Conf に書かれている のでここには書かないが、基本的には各ルールを定義し、その説明を記述し、 そのデフォルトのスコアを設定してやる、という感じである。また、複数のルー ルの ANDや ORをとって、その結果に基づいてスコアを足したりひいたりする 新たなルールを作ることもできる。正規表現については、日本語の文字列を記 述して ISO-2022-JPで保存した後、^[$Bや ^[(Jなどを取り除き、後は Perlが 正しく理解してくれるように必要に応じてエスケープするなどしてやればいい ようだ。ということで、とりあえずは以下のようなルールを作って、 local.cf として入れてみた。
# 未承諾/未承認 header MISHOUDAKU_MISHOUNIN Subject =~ /L\$>5(Bz|G')/ describe MISHOUDAKU_MISHOUNIN Subject contains mishoudaku or mishounin score MISHOUDAKU_MISHOUNIN 1.0 # 広告 header KOUKOKU Subject =~ /9-9p/ describe KOUKOKU Subject contains koukoku score KOUKOKU 1.0 # ※, etc. header JA_STAR Subject =~ /(\"\(|![y!v]|\*)/ describe JA_STAR Sujbect contains Japanese star-like character score JA_STAR score 0.5 meta JA_ADV MISHOUDAKU_MISHOUNIN && KOUKOKU && JA_STAR describe JA_ADV Subject indicates Japanese ad score JA_ADV 2.0 # 配信 body HAISHIN /G\[\?\./ describe HAISHIN Contains haishin score HAISHIN 0.1 # 購読 body KOUDOKU /9XFI/ describe KOUDOKU Contains koudoku score KOUDOKU 0.1 # 登録 body TOUROKU /EPO\?/ describe TOUROKU Contains touroku score TOUROKU 0.1 # 停止/中止 body TEISHI_CHUUSHI /(Dd|Cf);_/ describe TEISHI_CHUUSHI Contains teishi or chuushi score TEISHI_CHUUSHI 0.1 # 解除/削除 body KAIJO_SAKUJO /(2r|:o)=\|/ describe KAIJO Contains kaijo or sakujo score KAIJO 0.1 meta JA_UNSUB_INST ( KOUDOKU || HAISHIN || TOUROKU ) && ( KAIJO_SAKUJO || TEISHI_CHUUSHI ) describe JA_UNSUB_INST May contain Japanese unsubscription instruction score JA_UNSUB_INST 1.0
これをインストールして試してみると、ちゃんと「未承諾広告☆」がある メールでは、スコアが上がるようになった。 難しいのは、 scoreをどれくらいの値にしてやればいいか、という点だと 思うが、これは経験的なものが大きいような気がする。しかし、 SPamAssassin についてくる 50_scorelist.cfを見てみると、かなり細かい値 が設定されていて、なんだか何かしらの根拠がありそうな気もしないでもない。
今回いろいろと試していく中で気づいたのだが、 Subjectが日本語だとそ れだけでそこそこスコアが上がるようなデフォルトになっていたり、 ISO-2022-JPなメールにはよく登場しそうでありながら、欧米言語のメールに は登場しなさそうな文字列でスコアが上がってしまったり、ということがある ようだ。おそらく欧米人の使い方では問題はないのだろうが、日本語圏にいる と、もう少しチューニングしてやらないといけないのかな、という気になった。 とは言っても、日本語メールに関してほとんど誤認識はなく、今は満足してい るのだが。