オルタナティブ・ブログ > オープンソースでいこう >

Linux、Network、Securityを旗頭にしている技術者社長の日記

SpamAssassinのこと

»

SpamAssassinというソフトがあります。最近私はユーザ会結成を呼びかけたりして少し深く関わっているので、数回に分けてこのソフトを紹介してみたいと思います。

spamの暗殺者(assassin)という恐ろしげなネーミングのとおり、うまく調整したらほとんどのスパムメールを捕捉してくれます。昔のSpamAssassinのWebサイトには忍者の漫画風のロゴがありました。忍者と暗殺者は違うぞ、でも海外での理解はこんなんだろうな、などと重いながらも、なんとなく親しみを感じて、私はこれで一発で気に入ってしまったのでした。

スパム対策は、とても難しいです。ウィルスと違って、登録ずみのパターンと照合するという方法だけでは判定しきれません。「出会い」ということばが含まれているから即スパムと判断すべきではないのです。送信元IPアドレス、送信パターン、メール内容、メールの形式的特徴などなど、届いたメールに関するさまざまな特徴にもとづいてスパムかどうかを判断することになります。

SpamAssassinはいったん届いて受け取ってしまったメールをチェックします。受け取る前にチェックする方式もいくつか考案されているので、それらと組み合わせるのが現実的な対策だろうと思います。興味がある方はグレイリスティンングや流量制限などのキーワードでググってください。

SpamAssassinはPerlで書かれています。だから正直なところ重いです。なぜPerlで書いてあるのか。それは、Perlの強力なパターンマッチ能力(正規表現)をフルに活用しているからです。たとえば「出会い」と「男性」と「女性」などの単語がすべて出現したメールはスパムと判断する、といったルールが書けるんです。

さらにベイズフィルタというしくみも持っています。メールのヘッダや本文のワードごとにスパムらしさの確率を算出しておき、新着メールでの出現パターンからそのスパムらしさを判定する、というしくみです。適切に作られたデータベースを使えば、大半のスパムはこれだけでも検出できてしまいます。

その他にも、SpamAssassinはスパムに関するインターネット上のデータベースサービスを検索する機能なども持っています。

つまり、ひとつか少数の判断基準で判定してしまうのではなく、数十数百の判断基準を組み合わせて総合的にスパム判定を行うタイプのソフトです。

ただ泣き所がありました。日本語メールを日本語として判断できないロジックになっていたのです。英語のスパムと比較すると明らかに検出精度が低く、新しい相手からのメールがスパムと判断されることが多かったのです。

でもSpamAssassinはオープンソースで手を入れることができます。Perlなら少しはわかるし、困ったなら自分でやってみようという気持ちで、私は改良に取り組みました。

(つづく)

Comment(0)