(注:記事は執筆時の情報に基づいており,現在では異なる場合があります)

 SpamProbeは送られてきたメールがスパム・メールか否かを判断するソフトウエアである。スパム・メールと正しいメールの“ふるい分け方”を随時学習していくことでその精度が向上するのが特徴だ。

 電子メールを利用していると迷惑なのが,広告や勧誘などの内容を勝手に送りつけてくるスパム・メール(不要で迷惑なメール)である。個人ユーザーのメール・ボックスだけでなく,ネットワークやサーバーの資源を浪費するスパム・メール(以下,スパム)は,今や社会問題になっている。問題が深刻化するにつれて政府が対策に乗り出すなどしているが,スパムは一向に減らないようだ。

図1●SpamProbeのインストール手順
図2●受信メールの流れ
受信したメールはprocmailによって振り分けられる。
図3●procmailのインストール
procmailはhttp://www.procmail.org/からダウンロードできる。

 個人が行える対策としては,メール・クライアントなどの自動振り分け機能を使ってスパムを除外する方法がある。例えば,件名に「広告」が含まれる場合はゴミ箱に入れるなどだ。Linux上でもprocmailというフリーソフトを用いることで,メールの振り分けを行える。procmailは正規表現も使えるのでさらに細かい設定が可能だ。

 しかしスパムを配信する側も工夫を凝らしているので,そう簡単には除外できない。例えば「広告」を見つけたら排除するようにしていても,「広★告」は排除できない。それに対応させるためには,振り分け条件を細かく設定する必要がある。

 ここで紹介するSpamProbeは,メールをスパムか,そうでないメール(ここでは正当なメールと呼ぶ)かを自動判断するソフトウエアだ。SpamProbeならフィルタ条件を利用者がいちいち追加しなくても,「ベイジアン・フィルタ」というアルゴリズムを用いて,スパムを自動検知できる。ベイジアン・フィルタは,スパムに使われる単語と使われない単語をチェックすることにより,メールの“スパム度”を数値化し,しきい値を超えたものを除外する仕組みである。

 ベイジアン・フィルタの特徴は,学習機能を備えることだ。実際のスパムと正当なメールを用いて学習させることにより,スパムの検出率を上げられる*1。SpamProbeのスパム検出率は学習したメールの量や質にもよるが,9割以上である。場合によっては99%以上の検出率になることもある(誤認識率が限りなく0%に近づく*2)。

SpamProbeのインストール

 SpamProbeは,図1[拡大表示]のようにインストールする。インストールが完了したら,(スパム度を算出する基になる)データベースを保存しておくディレクトリを作成する。

$ mkdir ~/.spamprobe

 インストールが終わったら,SpamProbeにスパムと正当なメールを読み込ませて,学習させる。

 例えば,メール・クライアントに「Evolution」を使用している場合は次のように行う。まず,スパム用のフォルダ「Spam」と正当なメール用のフォルダ「NoSpam」を新しく作成する。現在までに受信したメールの中でスパムと正当なメールをそれぞれ100通程度,作成したフォルダにコピーする。

 このとき,メール保存形式にmbox形式*の「ローカル配信」を用いているのなら,移動したスパムは~/evolution/local/Spam/mboxファイルに,正当なメールは~/evolution/local/NoSpam/mboxファイルに保存される。

 一方,Maildir形式*を用いている場合は~/<メール・クライアント側で設定したメール・ボックスのディレクトリ(通常は,Maildirディレクトリ)>/Spam/cur/および,~/<メール・クライアント側で設定したメール・ボックスのディレクトリ>/NoSpam/cur/というディレクトリ内に保存されている。

 SpamProbeに学習させるには,mbox形式の場合,

$ spamprobe spam ~/evolution/local/Spam/mbox
$ spamprobe good ~/evolution/local/NoSpam/mbox

と入力する。Maildir形式の場合,

$ spamprobe spam ~/〈指定したMaildirディレクトリ〉/Spam/cur/
$ spamprobe good ~/〈指定したMaildirディレクトリ〉/NoSpam/cur/

と入力する。

 学習させたら,実際にメールを読み込ませてみよう。調べたいメールを用意し,次のように実行する。mbox形式の場合は,

$ spamprobe -m receive <mbox形式のファイル名>

一方Maildir形式の場合は,

$ spamprobe receive <メールのファイル名>

と入力する。mbox形式の場合は1つのファイルに複数のメールが保存されているため,保存されているすべてのメールが調査の対象になる。結果は,いずれのメール・ボックスの場合も,

GOOD 0.0000000 7a89788c1848d844a74dd3bd90efd5c2
SPAM 1.0000000 750e564b38789f1c04ee948e306d8771

というように表示される。

 最初の項目が「GOOD」なら正当なメール,「SPAM」ならスパムと判断されたことになる。2項目に書かれた数字は,スパムである可能性の割合(スパム度)で表している。0に近いほど正当なメール,1に近いほどスパムである可能性を示している。

procmailを使ってスパムを排除する

 SpamProbeはメールのスパム度を調べるだけで,実際にスパムと正当なメールの振り分けはしない。実際のメールの振り分けにはprocmailというフリーソフトを用いると良い(図2[拡大表示])。Red Hat Linux9など最近のディストリビューションではprocmailがインストールされるが,使用しているシステムにprocmailがインストールされていない場合は図3[拡大表示]のようにインストールする。

 また,RPMパッケージを利用している場合に,インストールの有無を調べるには次のように実施する。パッケージ名が表示されればインストールされている。

$ rpm -q procmail
(次回に続く)