元々メールはsylpheedを使っていたけれど、年始の休暇に使い始めたbogofilterはなかなかいい感じ。
使っている組み合せ:
- sylpheed 2.2.10
- bogofilter 1.1.3
- prepare.rb 1.7 (kakasiの出力をUTF-8に再変換する修正を加えた)
- nkf 2.0
- kakasi 2.3.4
いろいろ試したけれど、bogofilterのunicodeサポートを止めてコンパイルしたりしても、
- nkf -eでEUC_JPに変換
- さらにkakasiで処理し
- bogofilterに渡す
いまの処理はだいたい次のような流れになっている。
- nkfでISO-2022-JPやASCIIなメールをEUC_JPに変換
- kakasiで分かち書きされた状態に変換
- 全体をUTF-8に再変換
- bogofilterでチェック、学習
で、これを行なうシェルスクリプトを作ってsylpheedに追加した。
#!/bin/ksh
PATH=${HOME}/bin:/usr/local/bin:$PATH
export PATH
cat $1 | prepare.rb | bogofilter
prepare.rbは~/binに、bogofilterなどはxstowを使っていて、/usr/local/bin にシンボリックリンクがある。
他にもallow用、deny用にスクリプトが必要なので最後を"bogofilter -n"に書き換えたりしたスクリプトをsylpheedに登録している。
prepare.rb (Kazuto Tominagaさん作)は、いろいろ欲しい機能があったので最後にnkf -wでUTF-8に変換するだけの改造を入れて使わせて頂いています。
どれくらいこの効果があるのか計る事は難しいけれど、base64でエンコードされたスパムメールは確かに来ている。
いま確認したところだと、全体がbase64されていてcatしても内容がわからない日本語メールを、そのままbogofilterに渡してもspamだと判定しちゃうので、すぐに効果があるとか、ないとかはいえないかな。
だけど、spamと判定されない条件もあるように思えて、これをbogofilterの前段で展開してくれる機能は大切だと思う。
bogofilterでbase64を展開して、単語を切り出そうとしても、kakasi使わないと役には立たないだろうし。
スパムメールを十分に学習したいまでは、受信したメールをまずbogofilterで処理するようにすることができて楽になった。
万が一間違ってspamボックスにメールを送り込んだ時のために、定期的にspamボックスをチェックして既読マークをつけているけれど…。 いままでのところは一件だけ間違って家のブロードバンドルーターが定期的に送ってくる通過したポート別のアクセス先、アクセス元のIPアドレスのリストだけがspamボックスに入っていた。
便利だけれど、使い始めからいきなりbogofilterに処理を先にさせてはいけない。
まずはルールベースでメールを振り分けるようにして順番に。
いまのところDBも爆発的な大きさになっていないし、何も考えずに使った最初はbase64のコードをそのまま読み込んでいるようにも見えて、収集つかなくなっちゃったけれど、いまは快適です。
$ du -ks ~/.bogofilter/wordlist.db 6052 /home/yasu/.bogofilter/wordlist.db
0 件のコメント:
コメントを投稿