Debian3.1(sarge)でSpamAssassinは、迷惑メイルであるスパムと、迷惑でないメイルのハムに出てくる傾向を学習させることができるようになったようです。
そこで今回は、SpamAssassinに学習させる方法について話したいと思います。
■利用している楽曲
-今日の曲
--I'd Rather Drink Muddy Water / Antoinette Montague from Music4iPod
--Gonna Be / Chrissy
-今日のBGM
--Agnus Dei___edited / Fumitaka Anzai
おうちサーバでは、メイルのウィルスチェックとスパムチェックをsendmailと連携させたMailScannerで行っています。
ウィルスチェックについては他の機会に譲るとして今回はスパムチェックについてです。
Debianの一つ前のDebian 3.0(woody)では、MailScannerとsendmailの連携は未サポートでしたが、Debian 3.1(sarge)では、MailScannerのバージョンが4.41.3となり、ちゃんとサポートされています。
sendmailは、メイルを受信するとMailScanner用のスプールに置きます、それをMailScannerが取り出して、ウィルスチェックとスパムチェックを行った後に、sendmailの配信用のスプールに置くことより、メイルの配信が行われます。
MailScannerは、スパムチェックのために現在は 、The Apache SpamAssassin ProjectとしてApacheの一員となったSpamAssassinを利用します。スパムメイルと認識した場合には、メイルのサブジェクトに{Spam?}と識別子を入れることができます。ちなみにSpamAssassinの最新版は3.1ですが、Debian 3.1(sarge)でのSpamAssassinのバージョンは3.0.3です。
SpamAssassinは、spamdというdeamonとしても利用することができますが、おうちサーバではMailScannerからの呼び出しでしか利用していないので、daemonは止めています。デーモンで運用したい場合には/etc/default/spamassassinにENABLED=1にすることによりデーモンで運用されるようになります。
SpamAssassinは、Bayesianフィルターを利用してスパムの見分けを行うので、スパムかそうでないか分かっているメイルを読み込ませることにより、学習させることができます。学習はsa-learnコマンドによって行います。SpamAssassin単体では、ユーザのホームのファイル(~/.spamassassin)に学習データが置かれるのですが、MailScannerで利用される時のデータは、/var/lib/MailScanner/に格納されます。
そこで、スパムと分類されたメイルをmbox形式でJunkというファイルに用意して、またスパムぽいけどスパムでは無いメイルをHamというファイルに用意して
# sa-learn --spam --mbox --dbpath=/var/lib/MailScanner/ Junk
# sa-learn --ham --mbox --dbpath=/var/lib/MailScanner/ Ham
とすることにより、学習を行うことができます。
これで、はじめは弱かった日本語のスパムや、ソニースタイルなどリンクが多くてスパムに認識されていたメイルが正しく分類されるようになりました。