2022年8月、ホームページを全面リニューアルしました! 情報を分かりやすくお伝えできるサイト作りを目指してまいります。

スパム撃退、bogofilterの方が頭良いしはやいじゃん!

まずは、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.xxxxxxx.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:

ちなみに、※印の部分はSPAMではないと言う記述だが、新しいバージョンになってからは、X-Bogosity表示が以下のように No→Ham に変わったようだ。
X-Bogosity: Ham, spamicity=0.000000, version=1.2.1

その他、判定不可能というlogもある。
X-Bogosity: Unsure, spamicity=0.520000, version=1.2.1


5.bogofilterは、覚えさせないとだめな奴(ーー;)

この野郎インストールしただけではデータベースがないので全てスパムではないと判断してしまうようだ。 ベイジリアンフィルタを十分に活用するには、スパムメール、ノンスパムメール共にかなりの学習データが 必要であるようだ。数千通のオーダーらしい。ちと気が遠くなるが・・・・(ーー;) bogofilterにスパムメールを覚えさせる。

① スパムメールを学習させる

● テキスト単体で指定する

$ bogofilter -svI .spamdir/spam1.txt

● ディレクトリ直下のテキストを全て指定する

$ ls .spamdir | xargs bogofilter -svI

② ノンスパムメールを学習させる

● テキスト単体で指定する

$ bogofilter -nvI .nonspamdir/nonspam1.txt

● ディレクトリ直下のテキストを全て指定する

$ ls .nonspamdir | xargs bogofilter -nvI

もちろん、学習させた方が精度が上がる。手っ取り早く精度を上げるには、 http://www.spamarchive.org/ (スパム置き場)から大量に拾って来ても良いかもしれない。

③ spamか否かをチェックするには、こうする。

$ bogofilter -vI spammail


6.Bogofilterで捕らえたSPAMメールのヘッダー
Bogofilterが捕らえたスパムメールのヘッダーを以下に示す。

From info@worldcup2010.net Tue Feb 16 21:42:53 2010
Return-Path: <info@worldcup2010.net>
X-Original-To: hoge@xxxxxxx.com
Delivered-To: hoge@xxxxxxx.com
Received: from localhost (localhost.localdomain [127.0.0.1]) by hiro.xxxxxxx.com (Postfix) with ESMTP id 5992211C019
for <hoge@xxxxxxx.com>; Tue, 16 Feb 2010 21:42:53 +0900 (JST)
X-Virus-Scanned: amavisd-new at xxxxxxx.com
Received: from hiro.xxxxxxx.com ([127.0.0.1])
by localhost (hiro.xxxxxxx.com [127.0.0.1]) (amavisd-new, port 10024)
with ESMTP id 9C2sVBL0oJj9 for <hoge@xxxxxxx.com>;
Tue, 16 Feb 2010 21:42:53 +0900 (JST)
X-Greylist: delayed 80576 seconds by postgrey-1.32 at hiro.xxxxxxx.com; Tue, 16 Feb 2010 21:42:52 JST
Received-SPF: spf-none
Received: from cpanel13.newmediaexpress.com (cpanel13.newmediaexpress.com [203.174.82.218])
by hiro.xxxxxxx.com (Postfix) with ESMTP id 0AB9411C018
for <hoge@xxxxxxx.com>; Tue, 16 Feb 2010 21:42:50 +0900 (JST)
Received: from [127.0.0.1] (helo=webmail.educare.sg)
by cpanel13.newmediaexpress.com with esmtpa (Exim 4.69)
(envelope-from <info@worldcup2010.net>)
id 1NgwQh-0005IR-Bk; Mon, 15 Feb 2010 16:35:43 +0800
Received: from 203.82.80.69 ([203.82.80.69])
(SquirrelMail authenticated user lisha@educare.sg)
by webmail.educare.sg with HTTP;
Mon, 15 Feb 2010 16:35:43 +0800
Message-ID: <fdb593885aa9ffaf3616852c2d8cd209.squirrel@webmail.educare.sg>
Date: Mon, 15 Feb 2010 16:35:43 +0800
Subject: AWARD FROM SOUTH AFRICA SOCCER WORLD CUP 2010
From: “SOUTH AFRICA SOCCER WORLD CUP 2010” <info@worldcup2010.net>
Reply-To: wsouthafrica2010@yahoo.co.nz
User-Agent: SquirrelMail/1.4.19
MIME-Version: 1.0
Content-Type: text/plain;charset=iso-8859-1
Content-Transfer-Encoding: 8bit
X-Priority: 3 (Normal)
Importance: Normal
X-AntiAbuse: This header was added to track abuse, please include it with any abuse report
X-AntiAbuse: Primary Hostname – cpanel13.newmediaexpress.com
X-AntiAbuse: Original Domain – xxxxxxx.com
X-AntiAbuse: Originator/Caller UID/GID – [47 12] / [47 12]
X-AntiAbuse: Sender Address Domain – worldcup2010.net
To: undisclosed-recipients:;
X-Bogosity: Spam, tests=bogofilter, spamicity=0.999961, version=1.2.1

Dear Winner
Please do see to the attached documents for your claim options.

以上

コメント