Bogofilter を CentOS でつかってみる。


ども。これまたつまらない記事ですよーと。

とりあえず、巷ではスパム判定に Spamassassin を使うことが多いようですが、
今回は高速なスパム判定ツールとして、Bogofilter を使ってみました。

今回行ったのは、
自分宛に来たメールを、メインPCとノートPCの間で同期を行わせ、
かつ、スパム判定を行い、スパムメールを振り分ける。ということです。

メール数が7000通以上あり、学習時間もどうにかしなければいけませんし、
スパム業者に私のメールアドレスは大人気のようで、かなりの数が来ます。

そんなわけで今回 Bogofilter を使ってみました。
結論から言いますと、Spamassassin と比較してかなり高速です。
自分のPC間でメールを同期しようと考えている人には良いのかもしれません。

余談ですが、外部のPOP3 メールの受信は fetchmail を回しておけば可能です。
メールの転送の方が圧倒的に早いので、
転送が使える場合はそっちを使った方が良いかと思います。


手順:
注: 既に IMAP サーバを Maildir 形式で構築済みであることを前提とします。
まだ構築されていない方は
メールサーバー構築(Postfix+Dovecot) – CentOSで自宅サーバー構築
を参照して、構築してください。

 

01.bogofilter と nkf と procmail をインストール。

yum install –y bogofilter nkf procmail

もしインストール出来ない場合、
RPMforgeリポジトリ導入(RPMforge) – CentOSで自宅サーバー構築
ここを見て、RPMForge リポジトリを追加すると良い感じになるかと思います。

 

02.kakasi をインストール。

wget http://kakasi.namazu.org/stable/kakasi-2.3.4.tar.gz
tar zxvf kakasi-2.3.4.tar.gz
cd kakasi-2.3.4
./configure && make && make install
cd ..
rm –rf kakasi-2.3.4*

 

03.仕分けを行いたいユーザに
スパムメール用のメールボックスを作成しておく。

以下 「.Junk\ E-mail/」 と出てくる部分は、
Windows Live メールをクライアントとして使用する際に、「迷惑メール」のフォルダとして「Junk E-mail」というフォルダが使われることに合わせての設定です。

ご使用予定のクライアントソフトに合わせて、「.(フォルダ名)」に適宜読み替えていただければ幸いです。

また、これ以降出てくる 「USERNAME」という表記は、すべてそのユーザ名に読み替えてください。

(仕分けを行いたいユーザのカレントディレクトリに移動。)
cd ~

cd Maildir
mkdir –p .Junk\ E-mail/new
mkdir –p .Junk\ E-mail/cur
mkdir –p .Junk\ E-mail/tmp
chmod –R 700 .Junk\ E-mail
chown –R USERNAME .Junk\ E-mail

 

04.ユーザのホームディレクトリにおまじないを書いておく。

.forward (ダブルコーテーションも入力する必要があります)

"|IFS=” && exec /usr/bin/procmail -f- || exit 75 #USERNAME"

.procmailrc

PATH=/bin:/usr/bin:/usr/local/bin
MAILDIR=$HOME/Maildir
DEFAULT=$MAILDIR/
SHELL=/bin/sh
LOCKFILE=$HOME/.maillock
LOGFILE=$MAILDIR/procmail.log

:0 HB
* ? nkf -mQ -e | kakasi -w | /usr/bin/bogofilter
.Junk\ E-mail/cur/.

 

05.自己学習するように cron にスクリプトを投げておく。

(cron.daily とかだとうまくいかないので、 crontab で登録掛けてください。)
~/bogofilter-learn

#!/bin/bash
PATH=/usr/bin:/bin:/usr/local/bin

find "~/Maildir/cur" -type f -ctime -2 -exec sh -c ‘cat "{}" 2>/dev/null | nkf -mQ –e | kakasi -w | bogofilter -n’ ‘;’ > /dev/null
find "~/Maildir/.Junk E-mail/cur/" -type f -ctime -2 -exec sh -c ‘cat "{}" 2>/dev/null | nkf -mQ –e | kakasi -w | bogofilter -s’ ‘;’ > /dev/null


とりあえずこんな感じ。

最後に 参考にしたページ。というか、データのかき集め元。

ではでは。


 

関連記事