POP File の導入


1.spam filter の必要性

 電話の場合、相手がその時点で受け取れないでしまうと、要件を伝えることが難しくなりますが、メールで送信しておけば、相手の時間が許した時に、内容を確認することができるため、通信手段としては非常に有効です。かつては、PC 以外で使うことはできなかったメールも、携帯電話で使用可能になるやいなや、急速に普及し、今では対応していれば、家庭の電話からの送信も可能となりました。

 このように、使い慣れたものには、非常に便利なメールでありますが、その一方では新たな公害を生み出すこととなりました。広告事業としてのメール送信、嫌がらせとしてのメールボム(爆弾)、いたずら目的のウイルスワーム付きメールなど、メール本来の用途とはかけ離れているものが増加するにつれ、いろいろな場所に被害を与えるようになってきました。

 一部の人は誤解をしているようですが、SPAM メールは、何もアドレスを公開しているから届くわけではありません。考えてみればすぐにわかりますが、英数字を数文字組み合わせた文字列でしかないメールアドレスは、機械的に組み合わせることが出来、その中に実際に利用されているものも含まれることは、容易にあり得る話です。サーバー名についても、同様の事は言えますし、広告をある程度広範囲に出そうとすれば、ユーザーが多く含まれるプロバイダのメールなどは、格好のターゲットともいえます。Excel などを使えば、瞬きをしている間に、数万個のメールアドレスを作り出すことさえ、今の PC にとってはたやすいこととなっています。従って、メールを利用している以上、SPAM メールは届くものである、という認識を持つことが、現状では正しいといえます。

 一日に数件しかメールがこない場合、メールを確認しながら、SPAM メールかどうかの判断をすれば良いわけですが、日に数十件もメールが届くようになると、中身を確認して判断することは、現実的ではなくなります。さらには、SPAM メールだけで数十件にもなれば、とても手動対応などしていられるものではありません。事実、私がもっている、ある有名プロバイダのメールボックスには、平均すると100件もの SPAM メールが届いています。

 このような有害無益な SPAM メールを自動的に分類してくれるものが、spam filter と呼ばれるソフトウェアです。spam filter は、メールに含まれるキーワードから、そのメールが SPAM メールかどうか、ということを判断するもので、SPAM メールと判断されたものに目印を付けるものから、SPAM メールと判断されたものを即削除するものまで、いろいろとあります。

2.POP File

 POP File は spam filter の一つです。正確に言うと、spam filter というより、メール振り分けのためのソフトウェアです。受信したメールに含まれる文字から、振り分けすべき内容を判断し、振り分けするために必要な情報をメールに付加します。メーラー自体でも、振り分け機能を持っていますが、ヘッダ要素に固有となる部分を見極めるところがないと、うまく振り分けできないため、POP File を使うことで、振り分けのルールを明記することができるようになるわけです。特に、SPAM メールは、発信者は不定で、送信形式も様々であり、メーラーの振り分けで対応するのは、かなり困難といえます。正直、SPAM メールは届くたびに、振り分けルールを更新するのは、非常に手間のかかる仕事であり、せっかく登録した振り分けルールが二度と使われることがなかったりすると、閉口させられてしまう次第です。

 詳しい技術は POP File の Web サイトを見ていただきたいのですが、POP File はベイズ理論というものを用いて、振り分けを行っています。これは、メールに含まれる文字列の発生条件から、メールを振り分けするというもので、他の spam filter でも多く用いられています。文字列の発生条件をキーとすることから、POP File は、ある程度のトレーニングを行わないと、実用的に使えるようにはなりません。

 POP File は、メールプロキシとして活動します。簡単にいえば、メーラーとメールサーバーの間で活動するわけです。このため、POP File を使う場合、メーラーの設定変更も必要となります。具体的には、受信メールサーバーの設定を、POP File に向け、認証に使用するアドレスに、相手先メールサーバー名を含むことになります。このため、受信動作中に、どのメールサーバーから受信しているか、分からなくなるという弊害も発生します。

 POP File は、Perl という言語で作成されています(Windows 版のみ、単体のソフトウェアとなっているものがあります)。Perl が利用可能になっていれば、プラットフォームを問わないため、Windows でも Linux でも FreeBSD でも利用可能となっています。日本語メールへの対応が必要となる場合、Perl 側の拡張機能を利用するため、Perl の設定が必要となります。

3.POP File の導入

 

3-1 Perl の設定

 Linux では、多くのディストリビューションで Perl は初期導入されています。しかし、初期導入状態のままで、POP File が使えるようになっている、ということではありません。素の Perl としては利用できますが、各種拡張機能は組み込まれていないので、まずはこの作業からとなります。

 Turbo Linux 10 F で含まれている Perl は Perl 5.8.0 であり、POP File の動作条件(Perl >= 5.7.3)を満たしています。次に拡張機能を組み込むわけですが、ここで二つの注意点があります。一つは、拡張モジュールの組み込みには make が必要であるということ、もう一つは、拡張モジュールの組み込みは、root で行うこと、です。後者は往々にして気づきますが、前者をうっかりすると忘れてしまいます。make は開発環境に含まれていますので、開発環境をインストールしていない場合、Perl の設定をする前にインストールしておく必要があります。


 
3-1-1 Perl shell の起動

 Perl は一般ユーザーでも起動しますが、拡張機能の組み込みは root でしか行えません。root でログインし、下記コマンドを実行すると、Perl の shell となります。

# perl -MCPAN -e shell

cpan shell -- CPAN exploration and modules installation (v1.61) ReadLine support available (try 'install Bundle::CPAN')

cpan>

 誤って一般ユーザーで起動させようとした場合、エラーメッセージが表示され、終了します。

 $ perl -MCPAN -e shell

 Your configuration suggests "/root/.cpan" as your
 CPAN.pm working directory. I could not create this directory due
 to this error: mkdir /root/.cpan: 許可がありません。 at /usr/lib/perl5/5.8.0/CPAN.pm line 516

Please make sure the directory exists and is writable.

$


3-1-2 モジュールの組み込み

 Perl 起動させ、下記のモジュールを組み込みます。区切りが : (コロン)のダブルになっていることと、大文字小文字は区別されるので、入力時に注意が必要です。

     
  1. DBI
  2. DBD::SQLite
  3. Digest::base
  4. Digest::MD5
  5. HTML::Tagset
  6. MIME::Base64
  7. MIME::QuotedPrint
  8. Date::Parse
  9. HTML::Template
  10. Text::Kakasi
  11. Encode

 Perl shell を起動し、install コマンドを実行します。(例:DBD::SQLite をインストール)

 cpan>install DBD::SQLite

 拡張機能のソースが取り込まれ、make が始まります。ソースの取り込みと make には少々時間がかかりますので、気長に待ちましょう。回線速度と CPU パワーがあれば、数分で終わりますが、どちらかが弱いと時間は長くかかります。

 なお、kakasi のインストールには注意が必要です。というのも、kakasi は本体を Perl の外部に持つため、事前に導入しておかないと、Perl に対して組み込めない状態となっています。kakasi の導入には、公式ページから tarball を入手し、rebuild します。

RPM 作成

# rpm -tb kakasi-2.3.4.tar.gz

パッケージインストール

# rpm -ivh /var/src/rpm/RPMS/i586/kakasi-2.3.4-1.i586.rpm
# rpm -ivh /var/src/rpm/RPMS/i586/kakasi-dict-2.3.4-1.i586.rpm
# rpm -ivh /var/src/rpm/RPMS/i586/kakasi-devel-2.3.4-1.i586.rpm

 これで kakasi 本体が導入されたので、続いて Perl へ kakasi モジュールを組み込みます。

 cpan>install Text::kakasi

 以上で、Perl への設定は完了しました。

 

3-2 POP File の導入

 POP File の導入は非常に簡単です。配布されている ZIP ファイルを展開し、実行属性を与えるだけです。あらかじめ、POP File をどのディレクトリに導入するかを決定しておく必要があります。個々のユーザー毎に POP File を導入する場合は、ユーザーのホームディレクトリに導入することが望ましいようですが、すべてのユーザーで共通に使用することとしたので、/usr/sbin/popfile に導入することとしています。/usr/sbin ディレクトリはすでに用意されているので、カレントディレクトリを変更してから、unzip することとなります。なお、/usr ディレクトリは、一般ユーザーからの書き込みを拒否するため、事前に root になっておく必要があります。

 $ su -
 # cd /usr/sbin
 # unzip popfile-0.22.2.zip
# chmod +x popfile.pl

 これで、POP File のインストールは完了しました。

 

3-3 メーラーの変更

 POP File はメールプロキシとして働くため、メーラー側にも対応が必要となります。具体的には、メーラーは POP File にアクセスし、POP File がメーラーに代行して、メールサーバーからメールを受信します。メールサーバーを mail.exsample.com , アカウント を foo とすると、受信メールサーバーとして localhost 、アカウントとして mail.exsample.com:foo と変更します。これで、メーラーは自ホスト上の POP File にアクセスし、POP File はメーラーから送られたユーザー名を分離し、本当にアクセスすべきメールサーバーのアドレスとアカウントを入手し、メールサーバーへ代行アクセスします。メールサーバーからデータが送信されてくると、POP File が検査をし、メーラーへ渡します。

 POP File を経由してメールサーバーへアクセスするようになりましたので、メールを受信する前に、必ず POP File を起動させておく必要があります。これを忘れると、メーラーが自ホストへアクセスしても、誰も返答を帰さないため、タイムアウトまで待たなくてはならない、という問題を発生させることになります。このことは、特に IP Unreachable な場所にて、自動受信を有効にしている場合に、処理待ちが発生することとなり、なかなかつらくなりますので、注意が必要です。

4.POP File のトレーニング

 POP File は、鍛えなければまったく役には立ちません。このため、一般的には数日〜一週間程度の走り込み、否、鍛錬が必要となります。今回は、ある spam メールのたまり場と化している(苦笑)メールボックスがありましたので、このメールボックスからメールを受信することで、鍛錬に変えることができました。このメールボックスには、数百件のメールがたまっていましたが、その 8 割が spam メールでしたので、かなり促成栽培ができました。

 POP File のトレーニングとは、具体的には、分類の誤りを修正してやる、ということです。初期状態では、かなり誤認識しますので、間違った判定を正しいものに手動で変更することで、POP File はより正しい分類を行うようになります。

 POP File の分類結果は、Web ブラウザで確認することができます。Web ブラウザを立ち上げ、http://localhost:8080/ へアクセスすることで、POP File の分類結果を確認することができます。なお、POP File では、分類のことを「バケツ」と呼んでいます。最低限 SPAM と Trust の二つのバケツを作成しておけば、spam filter として機能させることができます。SPAM はその名の通り、 spam メールを分類したもので、Trust は spam メールではない普通のメールと区分するものです。SPAM だけを作成していた場合、spam との誤認識を変更できなくなるため、SPAM とそうでないもの二つのバケツを最低限用意しておく必要があります。

 POP File の管理画面を開くと、すでに SPAM に分類されているものもいくつか見かけましたが、誤認識となっているものも数件ありました。これらを早速 Trust に再分類を行って、POP File に学習させました。500件を超えるメールを与えたことにより、かなり学習してくれました。一般的には、ここまでメールをためてしまうことはないでしょうから、日々の受信の中で鍛えていくことが必要です。なお、以前 Windows で POP File を使用していた時には、一週間程度で、SPAM を分類してくれましたので、当時のメール受信量(50通/日)からすると、300 件程度を受信すると、効果が現れてくるようです。

5.POP File の自動起動

 上記までで、POP File は利用可能となりましたが、起動時にコマンドを実行しなければならないため、うっかり忘れてメーラーを起動させてしまうことが、たびたび発生してしまいました。先にも書きましたが、POP File を起動し忘れてメーラーを立ち上げてしまうと、メーラーが POP File にアクセスしようとしますが、POP File はいないため、タイムアウト待ちになってしまい、やり直すまでしばし待つことになります。このため、起動時に自動的に POP File を立ち上げる処理を追加しておく必要があります。

 POP File の解説ページのどこかに、daemon として POP File を登録する方法が紹介されていたのですが、見つけられなくなったため、起動時に即立ち上げするように、設定してごまかしています(^_^;;

 POP File は、起動時のカレントディレクトリより、各種設定を読み込むため、POP File のインストールディレクトリ以外から起動させると、関連ファイルが見つからない、とメッセージを出して、止まってしまいます。これは、環境変数 POPFile_ROOT および POPFILE_USER を指定することで、インストールディレクトリ以外からの起動にも対応します。そこで、/etc/rc.loccal の末尾に、下記の3行を付け加えました。

 export POPFILE_ROOT=/use/sbin/popfile/
 export POPFILE_USER=/use/sbin/popfile/
 /usr/sbin/popfile/popfile.pl &

 最後の行の を忘れないようにしてください。忘れてしまうと、Local ログインさえできなくなります(コラム参照)

 これで OS 起動時に POP File が自動起動するようになりました。これで POP File を起動させることを忘れてメーラーを起動させても、大丈夫です。POP File が起動しているかどうかは、ps コマンドで確認できます。

$ ps ax | grep popfile
  730 ?           S        0:01    /usr/bin/perl    /usr/sbin/popfile/popfile.pl
1406 pts/0     R        0:00    grep    popfile


Last Update is 2005/07/26. CopyRights Tazoe Kazuya 2005.