メッセージ

2005年12月13日の記事

2005/12/13(火)SpamAssassin 3.1.0

 おそらく、もっとも知られている電子メール spam フィルタです。
 だいぶ改良はされてきたようですが、日本語の電子メールに関する spam 認識精度の評価はそんなに良くないようです。

 ですが、実際に実験(18時間ほど経過しています 12/13 22:20)してみると、
 spam な電子メールの7割ほどは確実に spam として認識しています。
 すり抜けはありますが、誤認識(spam でないものを spam と認識する)は今のところ全くありません。
 SpamAssassin は、spamc/spamd のペアで動作する spam チェックデーモンとしての動作が可能なので、
 サーバ負荷(オーバヘッド)を減らすためにこれを採用。
 perl がシステムにインストールされていれば、

perl -MCPAN -e shell

 の後、

install Mail::Spamassassin
install Net::DNS
install Mail::SPF::Query

 で spamassassin 本体と一緒にインストールされます。
 Net::DNS と Mail::SPF::Query は spamd が必要とするようです。
 今回は、サーバ負荷軽減のため、spamd を使います。spamd は、こんな感じで起動。
 バーチャルドメインを扱う場合、このようにするとよいでしょう:

/usr/local/bin/spamd -u spamd -d -c -l -r /var/run/spamd/spamd.pid -x --virtual-config-dir=/var/mail/%d/%l/spamassassin/spamd


 SpamAssassin も完全な spam フィルタ(というか、完全なものはあり得ない)ではないので、
 spam なのに spam でないと判定されたり、その逆もあります。
 そのような場合、多くの Web サイトや blog には、

sa-learn --spam -u user@domain filename (spam でないと誤認識したものを spam だと学習させる)
sa-learn --ham -u user@domain filename  (誤ってspam と認識したものを spamでないと学習させる)

  のような形式で、手動学習させるように man sa-learn には書かれていますが、実際は全く期待通りに機能しません。
 実際は、

spamc -L spam -u user@domain < filename (spam でないと誤認識したものを spam だと学習させる)
spamc -L ham -u user@domain < filename  (誤ってspam と認識したものを spamでないと学習させる)

 のようにします。これで、spam フィルタ機能盛り込みの目処が立ちました。