bsfilter はスパムに多く含まれる単語の統計をとり、 来たメールがスパムかどうかを判定するためのフィルターです。 これを qmail サーバで使ってみます。
4.10-STABLE には ports で mail/bsfilter がありますが、 うちはOSがちょっと古かったため手動でインストールしました。
用意するもの
参考サイト
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 は 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 にクリーンなメールとスパムメールの学習をさせます。 これからわかるように、自分にとってスパム であるメールのサンプルを持っている必要があります。クリーンメールの学習
--add-clean は -c でも構いません。 ターゲットとなるメールは適宜変更してください。
% bsfilter --add-clean ~/Maildir/inbox/*
スパムメールの学習
--add-spam は -s でも構いません。 ターゲットとなるメールは適宜変更してください。
% bsfilter --add-spam ~/Maildir/spam/*
単語ごとにクリーン、スパムな確率を求める
--update は -u でも構いません。
% bsfilter --update
以上で準備は終了です。
テスト
準備が終ったらテストしてみましょう。 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-spam に次のように書きます。
./Maildir/spam/
qmail の maildir 形式を使っている場合は、 ~/Maildir/spam/ にメール受信ディレクトリを作っておきます。
% /var/qmail/bin/maildirmake $HOME/Maildir/spam
最後に、~/.qmail に、次のように書きます。
これで、スパムと判定されたメールはすべて ~/Maildir/spam/new/ に行きます。 /usr/local/bin/bsfilter の箇所では、 bsfilter をインストールした先をフルパスで指定してください。
| /var/qmail/bin/condredirect (ユーザ名)-spam /usr/local/bin/bsfilter
./Maildir/
新たなサンプルを学習させるには、「準備」で行ったことを繰り返します。自動的に学習させるには、crontab に書いておくとよいでしょう。
% bsfilter -c ~/Maildir/inbox/*
% bsfilter -s ~/Maildir/spam/new/*
% bsfilter -u
bsfilter を設置してからの結果を、 (都合により)このページの一番下に示します。 初期の学習数は、で、スパム確率 0.90 でスパムと判定することにしています。
- クリーンメール = 3600 くらい
- スパムメール = 4600 くらい
それぞれの項目の意味は、
です。
- clean はクリーンと判定されたクリーンメール
- spam はスパムと判定されたスパムメール
- escape はスパムなのにクリーンと判定された逃亡メール
- mistake はクリーンなのにスパムと判定された誤認逮捕メール
Stats from 2005/03/17 to
2006年 2月23日 木曜日 12時44分54秒 JST
clean: 0
spam: 13932
escape: 639
mistake: 0