bogofilter
簡介
Bogofilter 是一個會區分正常及垃圾郵件的過濾器,透過讀取郵件的標頭及內文然後用數學統計的技巧來判斷,這個程式可以透過使用者的分類與糾正來學習,以提高辨識準確度。
這個統計技巧就是知名的 Bayesian 演算法,而此演算法被正式用於垃圾郵件偵測源至於 Paul Graham 在 2002 年八月發表的文章 'A Plan For Spam' Gary Robinson 也於他的 weblog Rants( 2002 九月) 提出一些對於區分 Spam 及 Ham 的建言,Bogofilter 的主要演算法使用了 f(w) parameter 及 Fisher inverse chi-square 技術,在 Paul Graham 的新文章 'Better Bayesian Filtering (January 2003)' 又提出了更多有用的補強。
Bogofilter 是透過 Mail Delivery Agent script 來運作,依據用 BerkeleyDB 存放的 wordlists 來區分是否為垃圾郵件(spam or ham)。 Bogofilter 可以處理純文字及 HTML,支援 multi-part mime 郵件及解譯 base64, quoted-printable, 和 uuencoded 文件並忽略附件,像是圖片檔。
Bogofilter 是使用 C 撰寫。 支援平台: Linux, FreeBSD, Solaris, OS X, HP-UX, AIX, RISC OS, SunOS, OS/2 …
安裝
可以由 Bogofilter 網站 http://bogofilter.sourceforge.net/ 取得 tarball 安裝,若您是 Debian 使用者,您可以這樣安裝:
[root]# apt-get install bogofilter
設定
首先您要看看您的 MDA 的設定是否會直接呼叫 procmail,若不會的話,您可以在 ~/.forward 裡面呼叫 procmail ,下面是我的 .forward 設定:
$ cat .forward "| /usr/bin/procmail /home/andrew/.procmailrc"
此設定的意思是,(請想像)將送達的郵件送入水管,然後送入使用 home/andrew.procmailrc 設定檔的 procmail。您要使用時請修正您的 .procmailrc 路徑。
接下來我們來看看 .procmailrc 的設定:
PATH=/home/andrew/bin:/usr/bin:/bin
MAILDIR=/home/andrew # you'd better make sure it exists
DEFAULT=$MAILDIR/mbox # completely optional
LOGFILE=$MAILDIR/procmail.log # recommended
LOCKFILE=$HOME/.lockmail
# 透過 bogofilter 過濾郵件,將郵件打上 spam 標籤且
# 更新 word lists
:0fw
| /home/andrew/bin/bogofilter -u -e -p -v
# 假使 bogofilter 運作失敗,回傳此郵件到 MTA 佇列,讓 MTA
# 等會重新嘗試傳送
# 75 is the value for EX_TEMPFAIL in /usr/include/sysexits.h
:0e
{ EXITCODE=75 HOST }
# 將有 spam 標籤的郵件放入垃圾郵件夾
:0:
* ^X-Bogosity: Yes, tests=bogofilter
mail/IN.spam
使用
初次使用需要將你的郵件夾送入 bogofilter 做學習,最簡單的方法就是將挑出的垃圾郵件夾(spam.mbox)及沒有垃圾郵件的郵件夾(ham.mbox)餵給 bogofilter:
bogofilter -s < spam.mbox bogofilter -n < ham.mbox
這樣 bogofilter 就會產生 wordlists,以後遇到垃圾郵件也可用此方式依依餵給 bogofilter 學習。
補充
若餵錯的話,可以用這個方式修正:
bogofilter -Sn #反註冊 spam 並標記為 ham bogofilter -Ns #反註冊 ham 並標記為 spam