図4●.forwardファイルの内容
ホーム・ディレクトリに作成する。「#〈ユーザー名〉」には利用するユーザーのログイン名を記す。
図5●.qmailファイルの内容
qmailを使っている場合は.qmailファイルをホーム・ディレクトリに作成する。
図6●mbox方式を利用している場合のprocmailの設定
ホーム・ディレクトリに.procmailrcファイルとして保存する。これはEvolutionを用いた例。
図7●Maildir方式を利用している場合のprocmailの設定
ホーム・ディレクトリに.procmailrcファイルとして保存する。
写真1●Evolutionでメール・フォルダを作成
メニューから[ファイル]-[新規]-[Folder...]を選択し,フォルダ名に「Spam」と入力する。
写真2●Spamメールのヘッダーの例
「X-SpamProbe:」がSPAMとなっていることが分かる。
図8●SpamProbeが学習するときのメールの流れ
スパムは学習後に削除し,誤認識メールはFetchNoSpamフォルダに移動する。
図9●SpamProbeの学習用スクリプト(mbox形式用)
これはEvolutionでの設定例。もし,スパム・メール受信用フォルダとスパム学習用フォルダが異なる場合は,SPAM_MBOXのパスを変更する。
写真3●Evolutionのメール・フォルダの設定を変更する
mbox形式の場合は「Index body contents」のチェックを外しておく。
図10●SpamProbeの学習用スクリプト(Maildir形式用)
MAIL_DIRはユーザーが作成したMaildirディレクトリを指定する。
図11●SpamProbeが毎日学習するようにcronに追加
設定例では毎日午前4時30分にspamlearnが実行される。
図12●クリーン・アップをcronに追加
設定例では毎日午前5時10分にクリーン・アップが実行される。

 インストールが完了したら,メールが届いたときに自動的にprocmailにメールを渡して処理できるようにする。MTA*にSendmailやPostfixを使っている場合は,ホーム・ディレクトリに.forwardファイル(図4[拡大表示])を作成する。図4中の<#ユーザー名>には,利用しているユーザーのログイン名を記しておく。qmailを利用している場合は,ホーム・ディレクトリに.qmailファイル(図5[拡大表示])を作成する。

 次にprocmailの設定を行う。SpamProbeを使っていると,正当なメールとスパムを誤認識することもある。スパムを誤認識して正当なメールと判断する場合はまだ良いが,正当なメールがスパムと誤認識されてしまい振り分けの際に削除されてしまったら問題だ。

 そこでprocmailの設定の際,スパム(実際にはスパムと認識されたメール)をSpam用のフォルダまたはファイルに一定期間保存しておいてから,定期的にファイルを削除するようにしよう。こうすることで,誤認識した場合でも正常なメールを探し出すことが可能になる。

 設定は次の通り。まずホーム・ディレクトリに.procmailrcのファイルを作成する。ファイル内容はmbox形式の場合は図6[拡大表示]のようにし,Maildir形式の場合は図7[拡大表示]のようにする。作成したら,そのファイルに実行権限を与える。

$ chmod 700 .procmailrc

 最後にメールを保存しておくフォルダを作成する。フォルダの作成はメール・クライアントで行うと良い。ここではEvolutionを例にする。

 作成するフォルダはスパムを格納するSpamフォルダだ。Evolutionのメニューで[ファイル]-[新規]-[Folder...]を選択し,「ローカルフォルダ」(mbox形式)またはMaildir形式のフォルダの中に,新しくSpamフォルダを作成する(写真1[拡大表示])。

 これでメールが届くと,スパムと正当なメールに分配される。自分あてにスパムと正当なメールを送信してみよう。

 また,分配されたメールのヘッダーにはスパム度を示す「X-SpamProbe:」が追加される。メールのヘッダーを閲覧してSpamフォルダに分配されたメールがスパムであることを確認しよう(写真2[拡大表示])。同様に受信箱のメールが正当なメールであることも確認しておく。

自動的にメールを学習させる

 SpamProbeでは,学習させることで検出時の精度が向上する。そこで,自分あてに届いたスパムを用いて,自動的に学習させる方法を紹介する。自動学習させる手順は次の通りだ(図8[拡大表示])。

 先に設定したように,届いたスパムはSpam用フォルダに格納される。また,誤認識したメールを正当なメールとして学習させるために,NoSpamフォルダを用意し,ここには誤認識した正当なメールを入れられるようにしておく。SpamProbeが自動学習した後には,スパムは削除,誤認識した正当なメールはFetchNoSpamフォルダに移動する。

 ここでもEvolutionを利用している場合を想定して説明する。自動学習処理用のスクリプトを作成し,それを/usr/local/bin/ディレクトリ内に「spamlearn」というファイル名で保存する。/usr/local/bin/ディレクトリはルート権限がないと書き込めないため,ルート権限を得てからスクリプトを作成する必要がある。mbox形式の場合は,spamlernスクリプトを図9[拡大表示]のように記述する。

 次にEvolution上で誤認識した正常なメールを格納しておくNoSpamフォルダと,そのメールを学習後に移動するFetchNoSpamフォルダを作成する。

 Evolutionではmbox形式を用いている場合にSpamProbeを使用するためには,次の設定を施す必要がある。まず,Evolution上からSpamフォルダなどを左クリックし,[プロパティ]を選択する。そうして,現れたウインドウの「Index body contents」のチェックを外す(写真3[拡大表示])。

 mbox形式を利用している場合は,もう一つ注意事項がある。図9のスクリプトではSpamフォルダに届いたメールを,SpamProbeに学習させた後で削除する。後述するcronによって毎日spamlearnスクリプトを実行すると,Spamフォルダ内のメールは毎日削除される。そのため,誤認識された正常なメールを見逃してしまう可能性が高くなる。このような不安がある場合は,スパムを受信するメール・フォルダとSpamProbeの学習用のメール・フォルダにあらかじめ分けておく。

 Maildir形式の場合には,spamlernスクリプトを図10[拡大表示]のように作成する。続いて,先ほどと同様に,Evolution上でNoSpamフォルダとFetchNoSpamフォルダを作成する。

 Maildir形式では各メール・フォルダに新着メールを保存しておくnewディレクトリ,確認後のメールを保存しておくcurディレクトリ,一次ファイルを保存するtmpディレクトリの3つが作成される。

 procmailで分配したメールはnewディレクトリに保存される。その後,メール・クライアントで対象のディレクトリを開いた(メールをチェックした)ときに,メールはnewからcurディレクトリに移動される。図10のスクリプトでは必ずcurディレクトリにあるスパムを学習の対象としているため,mbox形式のようにチェックしていないメールが消されることはない。

 spamlernスクリプトを作成したら,そのスクリプトに実行権限を与える。

# chmod 755 spamlearn

 試しに,スパムをSpamフォルダに,正当なメールをNoSpamフォルダにコピーして,spamlearnを実行してみる。

$ spamlearn

 Spamフォルダ内のメールが削除され,NoSpamフォルダ内のメールがFetchNoSpamフォルダに移動されていれば正常に動作している。

 最後に,1日に1度SpamProbeが自動学習するようにcronを設定する。

$ crontab -e

と実行し,図11[拡大表示]のように設定を追加する。

データベースのクリーン・アップ

 SpamProbeは学習量が増えるほど,内部に備えるデータベースのサイズが大きくなる。そこで,データベース内の不必要なデータを削除するクリーン・アップを定期的に行うようにする。

$ spamprobe cleanup

 cronで毎日自動的に起動するようにしておく場合は,

$ crontab -e

とし,図12[拡大表示]のように設定を追加する。

(ライター 福田 和宏)