アーカイブ

POPFile

7/4、POPFile v0.22.5がリリースされたとの知らせを受け取りました。

この新しいバージョンの解説には、DBエンジンとしてSQLite2を使うようになったこと、日本語処理に関するあらゆる改善、そしてユーザインターフェース”Nihongo”の環境の改善も挙げられています。

私の環境では、これ以前のバージョンで判定率99.8%なので何の問題も感じていないのですが、さらに改善したというのであればそれは歓迎です。

POPFile v0.22.5の入手はこちらから。
http://popfile.sourceforge.net/wiki/download

今回のアナウンスには、SourceForge.netの’Community Choice Awards’ for 2007について触れていました。以下のリンクを訪れますと ‘Best Project for Communications’カテゴリーにノミネートされているのを見ることができます。

よろしければどうぞ。

http://sourceforge.net/awards/cca/vote.php

昨日のこと、Thunderbirdでメールを取得しようとすると、8000件とか表示された。唖然。私の場合、メールを取得中にメーラーが異常終了した とか、VPNあるいはSSLトンネルの通信が不意に途切れたというようなケースで、メーラーとサーバのメールボックスの同期関係が失われちゃう。ああ、 すっかり全部読み込み直しなんだな…。サーバでの保存期間をもっと短くしておけばよかったか…。

いや、問題はメールの保存期間ではない。 そのメールのほとんどがSPAMだもの。8000件中、少なくとも7000件はSPAM。それを再fetchしてごみ掃除をするなんて鬱陶しい・・・。

普段、私 のSPAM対策環境は三段構え。サーバでKaspersky Antispam(95%以上判断)、取得経路にPOPFile(私にとってのSPAMを判断)、最後にメーラーのSPAMフィルタ(前者を信じてゴミ箱 に投げ込む)。

サーバにメールが配送された時点で95%は完了している。ただ、サーバ管理者のポリシーから、それらのメールは削除されず、「これは SPAMですよ」というマーキングがしてあるだけ。だから8000通もサーバに残っているわけで、同様の理由でメール通知関連の機能は一切使っていない。

GMailのSPAMハンドリングは便利だが、私にとってGMailは「別系統」であるところに価値を感じているので、メーラからGMailにアクセスするという使い方はしていない。

で、 本題に戻って、8000通も再取得せずになんとかしたい。事前に消えていればかなり便利じゃない?もちろんtelnetで手動でPOPプロトコルをたたく のは十分可能なんだが、8000通もやるのは現実的ではない。そう、欲しいのは、「マジックハンド」のような、POPのDELEコマンドを器用に使えるツールだ。

フリーのツールを探してみたら、Spam Mail Killerというのが見つかった。

http://www.forest.impress.co.jp/lib/inet/mail/antispam/spamkiller.html

ス パムなどの迷惑メールをPOPサーバーから自動で削除するメールチェッカー。タスクトレイに常駐して一定時間おきにPOPサーバーをチェックし、あらかじ め指定した削除条件にあうメールがPOPサーバーにあればサーバーから自動削除。残りを新着メールとしてサウンドやタスクトレイアイコンの点滅で通知す る。削除条件には送信者、宛先、Return-Pathなどに含まれるメールアドレス、およびメールヘッダーの任意の文字列を複数指定できる。・・・ 複数メールアカウント対応で、削除条件の設定画面では新着メールのヘッダーを参照しながら設定できるようになっている。

おお、ゴージャスな機能がついているね。しかも最近アップデートされたようだ。いわゆるBlacklist方式でSPAM対策することを目的に作りこまれて いるので、このツールだけでSPAM対策は完結しない。私の場合、サーバに配送された時点でほとんどの判断が終わっているので、メールヘッダの記載を指定 するだけでかなり十分に機能する。Spamassassinを仕込んでいる人にも有効だろう。条件に正規表現も書けるところがまたイイ。

超便利だわ、これ。
標準ツールに決定。

Screen Shot 2015-09-12 at 13.23.52POPFileはいったいどのようにしてこれほどの高い精度でメールを正しく分類できるのだろうか? その秘密はベイジアンフィルターにある。POPFileはこのベイジアンフィルターという数学理論を採用してメールを解析しているのだ。

ベイジアンフィルターの基礎となっているベイズ理論(Bayes Theory)は、古く18世紀の牧師であり数学者であったトーマス・ベイズ(Thomas Bayes)という英国人によって考え出された原理だ。

ベイズは、「物事を判断する確率は、その物事の観察者にとっての不確かさである」と説き、神の存在でさえ数学的に示すことができると述べたそうだ。この考え方で物事を推定することをベイズ推定(Bayes Estimation)という。

簡単に言うと、新たなできごとを予測する際には、すでに起きている事実と、観察者自身の経験を考慮に入れることにより、かなり正確に推測できる、という考え方である。実生活では当たり前っちゃー当たり前だが、数学的にやるとなると簡単そうには見えない。

たとえば、あなたに宅配便で小ぎれいな小包が届いたとしよう。それが何かうれしいプレゼントか、そうでないかを予測することだろう。単純に確率を述べるなら、いちかばちか、50パーセントという確率だというのもあながち悪いとはいえない。でも、どこか実際的ではない。

実際には、その小包の大きさ、重さ、差出人、内容に関する記載事項などという観察に基づく「事実」と、過去の「経験」に基づく確率、つまりプレゼントだと思ったらそうでなかったという確率、あるいは期待通りだった確率を考え合わせるからだ。これを考慮に入れてはじめて、実際の結果にかなり近い予測が可能となる。

この考え方で正しい分類を予測するために、POPFileは最初にいくらかユーザーのトレーニングを受けると、それらのメールから学習する。

つまり、添付ファイルやHTMLのタグやコメントを取り除き、残されたヘッダと本文をコーパス(corpus)と呼ばれる単語群に分解する。 そして、分類されるメールの共通点を知るために、出現頻度の高いものを重み付けし、こうしてメールにおける各単語の出現と各バケツに分類された確率を計算できるようにコーパスデータベースを構築する。

新たなメールを受け取ると、POPFileはそのコーパスデータベースに基づいて、「バケツ」への分類に影響を及ぼす単語を抽出し、その単語の有無や出現回数などから計算して、いずれのバケツに分類するかを決定する。

その作業の過程で、POPFileは未知の単語にも遭遇するわけで、それによってセルフトレーニングを行うため、ユーザが間違いを指摘しない限り、自然に精度の高いコーパスデータベースができあがっていく。 間違った分類をしたことを指摘される(つまり手動で再分類される)と、POPFileはそのデータベースを訂正する。これにより、POPFileは「観察者の判断」を学習し、分類精度を上げることができるのだ。

ためしにPOPFile UIの「履歴」メニューから、spamに認定されたメールの「件名」をクリックしてみて欲しい。すると、メールヘッダと本文のあちこちがバケツと同じ色にされて表示されている。

さらに、ページの下のほうから「単語の頻度を表示」「単語の確率を表示」というリンクをたどると、各メールの分類に大きな影響を及ぼした単語が順に表示されており、大変興味深い。

POPFileのデータベースにスパムで使われる単語が十分蓄積されていくにつれ、業者はスパムらしからぬ単語を使ってメールを送らない限り、その判定をすり抜けることは難しくなっていく一方だ。

しかし、そのようなメールでは、スパム業者の目的を達することはできないだろう。スパムのフィルタリングの技術が向上するにつれ、彼らのビジネス上の目的が立ち行かなくなり、ついにはスパムメールという手段をあきらめてくれるようになればよいのだが。

(この文章はiNTERNET Magazine 2004/3, p.105に掲載された文に若干加筆したものです)

少し前の話ですが、POPFile 0.20.0b(for Windows)がリリースされています。0.20.0aは試さなかったのですが、このリリースになって、わたしも0.20系にアップグレードしました。少なくともWindows版は、非常にスムーズにアップデートできましたし、動作も何の不安もなく粛々と実行されています。

ダウンロード (mirrorサイトでは、一部行き渡っていないところもあります。が、順に試せばダウンロードできました)

0.19の時のようなパッチをあてなくても日本語が選択できます。また、設定項目が若干増えていますが、難しいことは特にないように思いました。

・「言語を選択してください」

「Japanese」を選択できます。(or「Nihongo」)

・「POP3同時接続の許可」

→ しかし、パフォーマンス最適化のメリットを受けるためには、ここは「いいえ」のほうが良いようですが、あまり気になりませんし、マルチアカウントユーザなので、「はい」にしています。「いいえ」にした場合、メールチェック中に設定UIは有効にはならないなどの制限があります。

・「POPFileのメッセージをコンソールウィンドウに出力しますか?」

→ ごちゃごちゃするのはいやなので「いいえ」にしています。

・「POPFile のアイコンを Windows システムトレイに表示しますか?」

→ ダブルクリックすると設定などの画面が出ますので、「はい」に。

なお、CROSS Platform Version(Linux含む)の場合には、以下のPerlモジュールをCPANからゲットし、インストールする必要があります。

BerkeleyDB

Text::Kakasi (if you want Japanese language support)

Encode (if you want Japanese language support)

Have fun!(謎

(add your comments!!)

先日のPOPFileに関する記事は、MLやblogからの参照など、大反響でした。やはり、皆さんSPAM対応は大変なんですね。そこで、一部から「鍛え方が最初はわかりにくい」との声がありますので、続編として「鍛え方/TIPS」を書きます。

POPFileの鍛え方

POPFileは教えてやらないと賢くなりません。また、次々と新しいSPAMも出現しますので、メーラのほうで、「spam」判定されたものを「ゴミ箱」に行くように自動分類している場合でも、「ゴミ箱」を見て、消されるべきでないメールが投げ込まれていないかどうかチェックしたり、あるいはその逆に、「spam」判定されなかった不要なメールを、正しく判定するように「教える」必要があります。

それで、最初は結構頻繁に、メールチェックの後、タスクバーの蛸のマークをダブルクリックしてPOPFileの設定ページを開き、判別を教えてやる作業を行うわけです。

  1. 「履歴」画面を見て、「inbox」でフィルタした一覧を出します。
  2. その中で、SPAM扱いして欲しいメールを見つけ、「spam」に変更して「再分類」をクリック。

  3. 次に、「履歴」画面を見て、「spam」でフィルタした一覧を出します。
  4. SPAM扱いされては困るメールを見つけ、「inbox」に変更して「再分類」クリック。
  5. もっと多くのバケツを設定している場合は、バケツごとにこの作業を繰り返すことになります。

TIPS

  • 「設定」画面で「履歴 1ページに表示するメールの数:」をざっと見通しやすい数にしておくと良い。私は50にしてある
  • 「設定」画面で「履歴を残す日数:」は多くてもあまり意味はなさない。私は1日にしてある。
  • 「バケツ」設定画面の「分類精度」のリセットボタンで、精度測定をリセットしてみると、だんだん賢くなっている様子を実感できて結構幸せ。

p.s.この話題に関する執筆、セミナー依頼、大中小規模導入支援依頼などは大歓迎です(と言っておくテスト

p.s.2 日本語向けの対応パッチを作ってくれているjunyaさん(どうもありがとう!)の日記はこちら→http://d.hatena.ne.jp/jishiha/

(add your comments!!)

中国語、英語、韓国語などいろんな国からSPAMが毎日じゃんじゃん押し寄せます。これをいちいち消し、さらにフィルタを設定するのに、これまでトータルで何時間費やしてきたでしょうか。そんな数日前のこと、この記事を見て、POPFileを導入してみました。

このソフトは、POPのプロキシとしてPCに常駐し、POPでGETしてくるメールの中からSPAMを識別して、メールそのもののSubjectやX-ヘッダにその識別結果「バケツ名」を挿入してくれるというものです。SPAMなら、メーラのフィルタで「ゴミ箱」へ直行させればOK。認定ミスがあれば、WEBの管理画面でそれを教えることができます。また、プライオリティの高いメールを判別させる目的にも使えます。2日間ほどで、まるで浄水器をとりつけたような快適ぶり。ぜひお勧めしたいですね。

■ これが役に立つ人

・POPプロトコルでメールを取ってきている(複数アカウントOK)

・Windowsのメーラを使っている(Macでもいいみたい)

・SPAMが来る人。韓国、中国、英語圏からざくざく、もOK。

・kazaのようにSPAMを趣味で集めている人にも役立つ(笑

■ ウィルスチェッカーとの共存は?

全く問題なし。ウィルスチェッカーは110番ポートを監視していますから。

■ 複数アカウントあるのだが。

構いません。POPFileはPOPのプロキシとして働きますので、特定のアカウントの情報を設定する必要もありません。

■ セキュリティは大丈夫か?

デフォルトで、POPFileへのリモートからの接続を禁止していますので、これさえONにしなけりゃ大丈夫でしょう。

■ 精度は?

毎日上がっていますよ。最初は、SPAMはどれなのか教えていくわけで、情報が少ないうちはSPAMではないものをSPAMだと判断してしまうこともあるわけなんですが、その都度教えていけば、2日もあればすごい賢くなります。

■ 導入時のメーラーの変更点は?

仮にPOP Serverが「mail.example.ne.jp」、そしてIDが「foo」だったとすると、POP Serverは「127.0.0.1」に、そしてIDは「mail.example.ne.jp:foo」と変更します。それだけ。あとは、X-Text-Classificationヘッダを見て「spam」だったらゴミ箱へ振り分けるようフィルタ(自動ふりわけ)を仕込むなど自由自在。

■ 他のスパムフィルタとの違いは?

bogofilter, spamasassin などありますよ。弊社でもユーザがおり、楽しんでいます。でも、これはオンフライで完結すると言う点と、導入が簡単だということでしょうかね。あと、POP用ですからIMAPな人は使えません。

■ パッチなどの導入ページが英語でさあ…

という方にショートメモを書きます。参考までに私の設定も例として挙げます。

インストール


  1. POPFileのダウンロードページから「popfile-0.19.1-windows.zip」をダウンロードし、インストールします。
  2. POPFile 0.19.1 の日本語化(Windows)ページから「popfile_jpn.exe 」をダウンロードし、インストールします。
  3. 「Run POPFile in Background」で立ち上げます。
  4. タスクトレイに蛸のマークが出ますのでダブルクリックすると設定画面が出てきます。あるいは、http://127.0.0.1:8080/を開きます。
  5. Configurationタブのメニューで、Languageを「Nihongo」を選択します。これでメニューはすべて日本語になります。
  6. メーラの設定を変えます。これで、メールをチェックすると、POPFile経由でメールチェックするようになり、管理画面のほうの「履歴」にメールのフィルタ状況が見えます。これをもとに、学習させていくわけです。


ご参考:okdtの「設定/Configuration」


  • 「バケツ」メニューから、バケツはinboxとspamの二つだけにしました。スパムかそうでないかだけ判断されれば良いと思いました。
  • 「設定」ユーザインターフェースのskinは「tinydefault」。
  • 「設定」履歴は50にしました。ざっと見たほうが学習もさせやすいので。ちなみに「履歴」のページで振分けを学習させるとき、バケツごとのフィルタリングは便利ですよ。
  • 「設定」-電子メールへのテキスト挿入機能で、Subjectを変更されるのはうっとおしいのでオフにしました。
  • また、不要なのでX-POPFile-Link ヘッダーもオフにしました。
  • 「設定」TCPコネクションタイムアウトは、重いサーバがあるので180にしました。原因不明のno responceなどが出る場合はここを増やすと解決したので。
  • 「設定」ログ出力は動作が安定してからは「コンソール」にしました。
  • 「マグネット」今のところ出番はありません。これを使わなくても十分判別してくれているので。


cf.POPFileのインストール/POPFile 0.19.1 の日本語化(Windows)ページ

メールチェックしてSPAMが判別されるたびに、しばらく管理画面に見入ってしまう自分がそこにいますよ。某嬢の言うところの「G」ホイホイを覗き込んでいる感覚ですかね。(w

お試しあれ。

(add your comments!!)