2003年06月30日

bogofilter(1)

セキュリティとカテゴリに銘打っておきながらいきなりスパム退治ネタから(笑)

bogofilter自体は以前に↓のサイトを見て知っていたんですが、導入したのはほんの先日だったりします。

bogofilterに関する詳しいことは上のサイトを見て頂くことにして、ここでは自分なりの運用の仕方なんかを載せてみます

というわけで運用ですが、まずインストールはbogofilter.orgから最新版のSRPMを持ってきて自分でビルドしてさっくりrpm -ivhでさっくりインストール

本当は↓を使ってみたかったんですが、下のpatchにあるバージョンと本家にあるバージョンが違ったのと、入れるとパッチ依存になりそうなんであっさり断念。

  • これはなに?
    bogofilter で処理中のメッセージがiso-2022-jpの場合に kakasiのわかち書き (kakasi -w)を使用するようにするパッチです。出力 (~/.bogofilter/{spam,good}list.db)はeuc-jpに変換しています。
    さて、これで何が嬉しいかというと、kakasiで単語を分割するので、日本語の単語についてもそれなりにデータベースに登録されることです。以下がオリジナルとの差分詳細です。
    iso-2022-jpなパートに対してkakasiのわかち書きを行う
    iso-2022-jpなパートを出力時(データベース登録時)にeuc-jpへ変換
    ワードサイズの最大長を256文字(半角)に変更(オリジナルは30文字)
    iso-2022-jp Bエンコーディングのsubject,to,fromをデコード(ただし継続行は不可) (kakasi-0.2パッチのみ)
で、普通に
SPAM : nkf -Zme | kakasi -w | bogofilter -s
それ以外 : nkf -Zme | kakasi -w | bogofilter -n

として使うことにしました。

ちなみにオプションは次の通り

  • nkf
    -Z X0208中の英数字と若干の記号をASCIIに変換する。-Z1 はX0208間隔をASC
    -m MIME を解読する。
    -e EUCコードを出力する。
  • kakasi
    -w 分かち書きをします。
  • bogofilter
    -s 入力されたものをSPAM辞書に登録
    -n 入力されたものを普通メール辞書に登録
    -S 入力されたものをSPAM辞書から削除
    -N 入力されたものを普通メール辞書から削除
    -v 詳細情報の表示
    -u 判定したメールを自動的に反映(辞書に登録)

なので普通のメールを間違ってSPAMとして登録してしまった場合は

nkf -Zme | kakasi -w | bogofilter -Sn

SPAMメールを間違って普通の辞書に登録してしまった場合は

nkf -Zme | kakasi -w | bogofilter -Ns

で修正できるので気楽に登録してもいいですが、SPAMはじきはすべて辞書に寄るのでSPAMはもちろん普通のメールもたくさん登録させておかないとヒット率はよくありません。
(SPAM辞書だけ覚えさせた状態で判定させるとすべてのメールがSPAMとして判定されますし(笑))

あと添付ファイルが大きいメールを食わせると飛躍的に辞書のサイズがふくれあがります(苦笑)<BASE64のエンコード部分もいちいちすべて辞書登録しているからだと思います
↑BASE64エンコード部分は可能なら削除して食わせた方が処理は軽くなりそうです<逆にウィルスメールなどはエンコードごと食わせるとよささそうですね

長くなったので続きはまた後日

Posted by Takuchan at 2003年06月30日 18:09 | トラックバック(0)