hmatch: メールに含まれる単語で判定する SPAM フィルタ

著者: 早川 仁 <hmatch@hykw.tv>

$Id: index.html,v 1.4 2006/05/10 07:12:04 cz Exp $

hmatch とは

hmatch は、受信したメールの本文に含まれる単語に「特定の単語」が含まれていた場合に点数を加算していき、その点数が100点を超えた場合に SPAM と判定するフィルタです。最近は日本語の SPAM が非常に増えてきており、SpamAssassin, Bogofilter, bsfilter などで認識しきれない状況に辟易したために作られました。

フィルタとして利用されることを想定しているため、「特定の単語」と「加算する点数」をあらかじめ TSV ファイル(タブ区切り)に登録しておき、標準入力に渡されたメールを走査して合計点数を計算し、SPAM 判定結果と合計点数をヘッダに追加したメール全体を標準出力に出力するだけです。

hmatch の使い方

まずは hmatch.rb を適当な場所(/usr/local/bin 等)にインストールし、TSV ファイル($HOME/.hfilter/hmatch.tsv 決めうち(笑))を作成します。

% mkdir ~/.hfilter
% touch ~/.hfilter/hmatch.tsv

筆者の最新の ~/.hfilter/hmatch.tsv ファイル (シンボリックリンクのため、常に最新)

メールを hmatch.rb にパイプで食わすと ~/.hfilter/hmatch.tsv の中身に応じて、X-hmatch: GREY もしくは X-hmatch: SPAM というヘッダと、X-hmatch-score: 合計点数 というヘッダを付加して返します。

hmatch.tsv ファイルの書式は「単語」タブ「加算ポイント」で、正規表現も使えます。

例([\t]は実際にはタブです)
^突然のメール [\t] 50
人妻.*不倫 [\t] 90

筆者の ~/.procmailrc のうち、SPAM 対策関連は以下のようになっています。hmatch により、ようやく false negative がほぼ0となりました。

:0 fw
| /home/cz/cvs/hfilter/hcatcher.rb

:0
* X-hcatcher: GREY
{
  :0
  * < 1000000
  {
    :0 fw
    | /home/cz/cvs/hfilter/hfilter.rb
    :0
    * ^X-hfilter: SPAM
    /dev/null

    :0 fw
    | /home/cz/cvs/hfilter/hmatch.rb
    :0
    * ^X-hmatch: SPAM
    .misc.spam/

    :0 fw
    *!^X-Spam.*
      |/usr/bin/spamc

    :0
    * ^X-Spam-Status: Yes
    .misc.spam/

    :0 fw
    | /usr/local/bogofilter/bin/bogofilter -p -e

    :0
    * ^X-Bogosity: Spam
    .misc.spam/
    :0
    * ^X-Bogosity: Unsure
    .misc.unsurespam/

    :0 fw
    | /usr/local/bin/bsfilter -a -j kakasi --pipe --insert-flag --insert-probability

    :0
    * ^X-Spam-Flag: Yes
    .misc.spam/
  }
}

関連リンク集

更新履歴

2005/08/09初期リリース