bsfilter

bsfilter はスパムに多く含まれる単語の統計をとり、 来たメールがスパムかどうかを判定するためのフィルターです。 これを qmail サーバで使ってみます。

4.10-STABLE には ports で mail/bsfilter がありますが、 うちはOSがちょっと古かったため手動でインストールしました。

用意するもの

参考サイト


ruby のインストール

ruby の新しいバージョンが入っていなければインストールします。 いつものように configure, make, make install です。
% tar zxvf ruby-1.8.1.tar.gz
% cd ruby-1.8.1
% ./configure
% make
% su
Password:
# make install
# exit
# make clean

デフォルトでは /usr/local/{bin,lib,man} にインストールしますので、 変更する必要がある場合は configure で --prefix=(どこどこ) と 指定してください。例えば、/usr/local/ruby-1.8.1 にインストールするなら、
% ./configure --prefix=/usr/local/ruby-1.8.1
です。

bsfilter のインストール

bsfilter は ruby スクリプトなので、インストール作業は特にありません。 bsfilter-1.0.3.tgz を解凍して、bsfilter-1.0.3/bsfilter/bsfilter をパスの通っている所に置けばOKです。

新しい ruby をインストールした場所に注意してください。 例えばもし、/usr/local/ruby-1.8.1 にインストールしたとすると、 bsfilter の最初の1行を次のように書き変えるとよいでしょう。
(旧) #! /usr/bin/env ruby

(新) #! /usr/local/ruby-1.8.1/bin/ruby

bsfilter の使い方

準備

まず、bsfilter にクリーンなメールとスパムメールの学習をさせます。 これからわかるように、自分にとってスパム であるメールのサンプルを持っている必要があります。

クリーンメールの学習
% bsfilter --add-clean ~/Maildir/inbox/*
--add-clean は -c でも構いません。 ターゲットとなるメールは適宜変更してください。

スパムメールの学習
% bsfilter --add-spam ~/Maildir/spam/*
--add-spam は -s でも構いません。 ターゲットとなるメールは適宜変更してください。

単語ごとにクリーン、スパムな確率を求める
% bsfilter --update
--update は -u でも構いません。

以上で準備は終了です。

テスト

準備が終ったらテストしてみましょう。 bsfilter にメールを食わせて見ると、スパムである確率が帰って来ます。
% bsfilter ~/Maildir/inbox/1
combined probability /home/xxx/Maildir/inbox/1 1 0.123

標準入力から判定するには、status を表示させます。 スパムなら 0, クリーンなら 1 を返します。
% bsfilter < ~/Maildir/inbox/1; echo $status
1
% bsfilter < ~/Maildir/spam/1; echo $status
0

設定ファイル

スパムの確率がどれくらいなら、「スパム」と判定するかなどの設定が必要です。 デフォルトでは、~/.bsfilter/bsfilter.conf がその設定ファイルになります。 例えば、スパム確率 0.9 以上なら「スパム」と判定することにするならば、 ~/.bsfilter/bsfilter.conf に以下のように書きます。
spam-cutoff 0.9

判定が間違っていたら

クリーンなのにスパムと判定された、 または逆にスパムなのにクリーンと判定されたという場合は、 手動で次のようにして判定を訂正します。 例えば前者の場合は、スパムリストから削除して クリーンリストに追加します。 対象となるメールファイルの名前を hogehoge とします。

クリーンなのにスパムと判定された
% bsfilter --sub-spam --add-clean hogehoge
または
% bsfilter -S -c hogehoge

スパムなのにクリーンと判定された
% bsfilter --sub-clean --add-spam hogehoge
または
% bsfilter -C -s hogehoge

qmail と連動させる

qmail と連動させて、受け取った瞬間にスパムかどうかを判定させ、 スパムならスパム用ディレクトリ送りにするための設定です。 まず、~/.qmail-spam に次のように書きます。
./Maildir/spam/

qmail の maildir 形式を使っている場合は、 ~/Maildir/spam/ にメール受信ディレクトリを作っておきます。
% /var/qmail/bin/maildirmake $HOME/Maildir/spam

最後に、~/.qmail に、次のように書きます。
| /var/qmail/bin/condredirect (ユーザ名)-spam /usr/local/bin/bsfilter
./Maildir/
これで、スパムと判定されたメールはすべて ~/Maildir/spam/new/ に行きます。 /usr/local/bin/bsfilter の箇所では、 bsfilter をインストールした先をフルパスで指定してください。

日日の学習

新たなサンプルを学習させるには、「準備」で行ったことを繰り返します。
% bsfilter -c ~/Maildir/inbox/*
% bsfilter -s ~/Maildir/spam/new/*
% bsfilter -u
自動的に学習させるには、crontab に書いておくとよいでしょう。

捕物統計

bsfilter を設置してからの結果を、 (都合により)このページの一番下に示します。 初期の学習数は、 で、スパム確率 0.90 でスパムと判定することにしています。

それぞれの項目の意味は、

です。

FreeBSD の部屋


Last modified: Wed Apr 20 15:53:26 JST 2011

Stats from 2005/03/17 to 2006年 2月23日 木曜日 12時44分54秒 JST
clean: 0
spam: 13932
escape: 639
mistake: 0