まずは、bogofilter ってなんざんしょ? C言語で書かれたspamフィルタ。ベイジリアンフィルタ方式のspamフィルタと言うべきか。では、ベイジリアンフィルタって何だろう?
ベイズ理論を応用した学習型フィルタである。ベイズ理論とは、過去に起きた現象の発生頻度から未来の出来事の発生頻度を予測するという理論。これにより、学習型フィルタではスパムメールを振り分ける際にメールの特徴を覚え、以降送られてくる同様のスパムメールを自動的にスパムと判断して振り分ける。うん、そうそうSpamAssassinも同じベイジリアンフィルタである。確か、SpamAssassinはPerlスクリプトだったような気がする(^^ゞ
俺の説明では不十分って言う場合は、公式サイト http://www.bogofilter.org/
ここでも見てよ。 あまし詳しくはわからんが受信メールに含まれているtokenに点数をこの野郎てめえで付けてspamか否かを判断するらしい(^^ゞ
これ単独よりも、SpamAssassinと組み合わせたりするとパワーが出るようだ。だけど、スピードも検出率もSpamAssassinよりも優れているように思える。うん、俺が使う限りではSpamAssassinははっきり言ってあまし頭良くないぜぇ〜(ーー;)SpamAssassinがやっぱ速度的に問題があるのは、やはりPerlスクリプトであるという事が考えられる。まあ、常識ながらPerlインタプリタとCコンパイラの違いが有るだろう。
1.DB3が必要、DB3以前のモジュールは駄目なのょ( ̄ー ̄)ニヤリッ
この野郎、生意気にDB3を使う。したがって、DB3は必須(結構最新のバージョンの方が良いようだ)。
俺の場合は、Laser5Linux SecureServer6.9へインストールしたため、DB3の最新パッケージ が無かったので、ソースからインストした。
/usr/includeのdb.hがdb2以前の物だとconfigureエラーが出るので気をつけること。 したがって、db3の最新バージョンが望ましい。俺の場合は、ソースからインストした。
ソースの場合は、以下を参照。 sleepycat
のDB3最終バージョン db-3.3.11.tar.gz をコンパイルする。
# tar zxvf db-3.3.11.tar.gz
# chown -R root.root db-3.3.11
# cd db-3.3.11
# cd build_unix
# ../dist/configure
# make
# make install
db.hを上書きする。
# cd /usr/include
# cp /usr/local/BerkeleyDB.3.3/include/db.h ./
2.bogofilterをインストする
ここ
から、ソースを落としてくる。2004年5月現在、 bogofilter-0.91.0.tar.gz が最新であった。
$ tar zxvf bogofilter-0.91.0.tar.gz
$ cd bogofilter-0.91.0
$ ./configure
$ make
$ su password : xxxxxxxxxxxxx
# make install
3.さて、実際にprocmailからbogofilterを利用する
俺の場合は、postfixから procmail
を呼び出して同時に制御させてる。 メル鯖のpostfixディレクトリの procmailrc の中身は以下、
# vi /etc/postfix/procmailrc
DEFAULT=/var/spool/mail/$LOGNAME
:0fw | /usr/local/bin/bogofilter
-u -e -p -l
:0: * ^X-Bogosity: Yes
.spam/.
:0fw | /usr/bin/spamc
:0: * ^X-Spam-Status: Yes
{
:0cw
| /usr/local/bin/bogofilter -Ns
:0 .spam/.
}
まあ見れば解ると思うが、この場合前半はbogofilterを通して後半ではさらにSpamAssassinを通して検出精度を上げている。
bogofilterは、デーモンとして起動させるタイプのモジュールではない。したがって、その都度起動させるわけだが、その動作は高速である。
4.実際にbogofilterが動いているか確かめる
まあ、早い話bogofilterはmaillogをにらんでれば動いているか?動いてないかが解るようになっている。
しかし、受信したメールヘッダーに以下のような X-Bogosity: のような印が有れば動いてる証拠。
X-Bogosity: No, tests=bogofilter,
spamicity=0.000000, version=0.91.0
X-Spam-Checker-Version: SpamAssassin 2.63 (2004-01-11) on michi.kozupon.com
X-Spam-Status: No, hits=-1.1 required=7.0 tests=AWL,ISO2022JP_BODY,
ISO2022JP_CHARSET,QENCPTR2,X_MAILER_PRESENT autolearn=ham
version=2.63
X-Spam-Level:
Status:
5.bogofilterは、覚えさせないとだめな奴(ーー;)
この野郎インストールしただけではデータベースがないので全てスパムではないと判断してしまうようだ。
ベイジリアンフィルタを十分に活用するには、スパムメール、ノンスパムメール共にかなりの学習データが 必要であるようだ。数千通のオーダーらしい。ちと気が遠くなるが・・・・(ーー;)
bogofilterにスパムメールを覚えさせる。
@ スパムメールを学習させる
● テキスト単体で指定する
$ bogofilter -svI .spamdir/spam1.txt
● ディレクトリ直下のテキストを全て指定する
$ ls .spamdir | xargs bogofilter -svI
A ノンスパムメールを学習させる
● テキスト単体で指定する
$ bogofilter -nvI .nonspamdir/nonspam1.txt
● ディレクトリ直下のテキストを全て指定する
$ ls .nonspamdir | xargs bogofilter -nvI
もちろん、学習させた方が精度が上がる。手っ取り早く精度を上げるには、 http://www.spamarchive.org/
(スパム置き場)から大量に拾って来ても良いかもしれない。
B spamか否かをチェックするには、こうする。
$ bogofilter -vI spammail
以上
|