« キャプテン | メイン | 東秀 »

June 28, 2003

スパムと戦ってみる

ここ数年の spam の量は本当にひどく、仕事にも差し支えるため Eric S. Raymond による bogofilter をテスト導入。bogofilter は最近流行の Bayesian Filtering を実装したもので、ユーザーの負荷を低く抑えつつ高確率で spam をフィルタリングが行え、かつ誤りが非常に少ないのが特徴である。また、基本的にルールベースのスパムフィルタを行うSpamAssassinより高速に動作する。今回は、テキストのトークンへの分割の際日本語に関しては kakashi を利用して前処理を行うように改良されたものを利用した。

bogofilter を効率的に運用するためには、質のよい spam, non-spam データベースが重要となるわけだが、通常 spam アーカイブを個人的にもっている人は少ないと思われるので、そういう場合には SpamArchive.org などを利用するといい。

以下、松岡研の人向けメモ。試してみるなら自己責任で。

bogofilter-0.13.7.1+kakashi-0.2 を ~sakae/ 以下にインストール。ユーザーが増えてきたら /usr/local 以下にインストールするかもしれないが、バージョンアップが頻繁でデータベースの形式が変更された際の影響が大きいため、各自でメンテナンスするほうがいいかもしれない。

spam リストとして SpamArchive の最近の5000通と non-spam リストとして spam 除去済みの cluster-team のメーリングリスト(5000通)と spam 除去済みの papi のメーリングリスト(700通)を食わせたものを ~sakae/{spamlist,goodlist}.db として置いておく。初期データベースとしてそこそこ質が高いと思われるが、日本語 spam はデータベースに入っていない。

なお、この時点でのデータベースのテストとして SpamArchive からデータベース作成に使用していないメールでテストした場合、539通中、538通を spam と判定。正答率99.8%。spam 除去済みの cluster-users のメールをテストしたところ568通中、0通を spam と誤判定。誤答率0%。matsulab 6772通でも誤答率0%。spam フィルタでは誤答率が低いことが何よりも重要である。


ちなみにコマンドラインでの spam チェックは以下のように行う。

% bogofilter -vI mail
X-Bogosity: Yes なら spam、 No なら non-spam である。

spam をデータベースに食わせるには、

bogofilter -s < spammail

non-spam をデータベースに食わせるには、
bogofilter -n < nonspammail

とすればよい。-I で入力ファイルを指定することもできる。spammail, nonspammail には mbox 形式のものでも Maildir 形式の1メール1ファイルのものでも問題なく食ってくれる。

spam じゃないのに spam と判定されてしまったものに関しては、

% bogofilter -SnI nonspammail
とすることで spam 率を下げる。

逆に spam なのに non-spam と判定されてしまったものに関しては、

% bogofilter -NsI spammail
で、spam 率を上げる。

松岡研ではメールフィルタとしてmaildropを標準的に利用しており、以下のようにしておくと maildrop を利用できる(今はなくてもよかったっけ?)。

$ cat .forward
"|IFS=' ' && mda=/usr/local/courier/bin/maildrop && test -x $mda && exec $mda || exit 75 #username"

maildrop から bogofilter を利用するには以下のようにする。

$cat .mailfilter
PATH="/usr/local/courier/bin:/usr/bin:/usr/local/bin"
MAILDIR="${HOME}/Maildir"
DEFAULT="${MAILDIR}/"

xfilter "/path/to/bogofilter -e -p -l"
if (/^X-Bogosity: Yes, tests=bogofilter/)
{
to $MAILDIR/.Spam
}

$ chmod 600 .mailfilter


フィルタリング時に自動的に spam/no-spam list を更新したい場合には -u もつける。bogofilter を信用した上で、かつ spam を見たくもない人は to /dev/null としてしまってもいいかもしれない。

投稿者 sakae : June 28, 2003 03:04 PM

トラックバック

このエントリーのトラックバックURL:
http://sakae.org/mt3/mt-tb.cgi/797

このリストは、次のエントリーを参照しています: スパムと戦ってみる:

» PassiveなSPAM対策 from Ogawa::Memoranda
Sakae's Monologues: スパムと戦ってみる メールサーバの管理はもう絶対にしないという意志を確固としたものにするために、この2月からすべてのメールは産総研のサービスするメールサーバ... [続きを読む]

トラックバック時刻: June 30, 2003 07:30 PM

» PassiveなSPAM対策 from Ogawa::Memoranda
Sakae's Monologues: スパムと戦ってみる メールサーバの管理はもう絶対にしないという意志を確固としたものにするために、この2月からすべてのメールは産総研のサービスするメールサーバ... [続きを読む]

トラックバック時刻: July 1, 2003 07:04 AM

» PassiveなSPAM対策 from Ogawa::Memoranda
Sakae's Monologues: スパムと戦ってみる メールサーバの管理はもう絶対にしないという意志を確固としたものにするために、この2月からすべてのメールは産総研のサービスするメールサーバ... [続きを読む]

トラックバック時刻: July 1, 2003 07:13 AM

コメント

最近来るspamはベイジアンフィルタ避けの為か、
意味不明の英文字羅列単語を間に挟んだものが
増えているんだけど、こいつらもうまく排除できる?

投稿者 ふくち : June 28, 2003 04:26 PM

メールの本文以外にヘッダや URL などもデータベースに蓄えられているようなので、効果あると思いますよ。まだ、テストし始めたばかりで確認してませんが。ヘッダにはランダムな文字列あったりしませんよね?

ただ、ランダムな文字列はデータベースを太らせてしまうだけでしょうから、むやみにデータベースに突っ込むのも考え物ですね。

投稿者 sakae : June 28, 2003 05:11 PM

Trackback pingを二発打ってしまった。すまぬ。

投稿者 (o) : June 30, 2003 07:38 PM

ACM TechNewsがspamicity=1.0(SPAM度100%)でSPAM判定された。初期データベースに食わせたSPAM集に含まれていたのか?

投稿者 sakae : July 1, 2003 06:47 AM

コメントしてください

TypeKey へのサイン・インを確認しました、 さん、コメントしてください。 (TypeKey からサイン・アウト)

(いままで、ここでコメントしたとがないときは、コメントを表示する前にこのウェブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)


情報を登録する?