HOME | ドキュメント |  ブログ  |  BBS  |  瓦版  | 将棋プロジェクト |  物置小屋   

Procmail IMAPサーバ構築 Sylpheed
 道標
象歩
象歩ブログ
ドキュメント
自転車整備ノート
C/C++
Linux 備忘録
IMAPサーバ構築
はじめに
Courier-IMAPサー~
FetchMail
Procmail
SpamBayes (スパ~
Sylpheed
データベース
小技集
雑記
パソコン整備ノート
不健康日記
不健康日記(2)
不健康日記(3)
Python パイソン
セキュリティ
Vine ヴァイン
Zope2 (ゾープ 2.x 系)
象歩BBS
Web瓦版
将棋プロジェクト
物置小屋
 リンク
Vine Linux
Vine ドキュメント
Vine Linux 3.x FAQ
Vine Linux ドキュメントチーム
search.luky.org Linux関連ドキュメント検索
メーリングリスト vine-users 全文検索
X Japanese Documentation Project
X.org foundation
Vine Linux AMD64対応のメモ
FreeBSDの検索サービス
RPM Guide
Fedora Project Download Server
Jun's Homepage
Legacy Encoding Project
Unix Programming FAQ 日本語訳

SpamBayes (スパムベイズ) 日本語版  [更新日: 2007年03月19日 ]

SpamBayes はベイズ理論を応用した高性能なスパムフィルタです。 運用方法は下記の三通りあります。 今回は procmail のフィルタ (sb_filter) として使います。
詳細は http://spambayes.sourceforge.net/ を参照してください。

結果は この一年の集計 にまとめてみました。

sb_server

POP3 proxy として使います。 プロバイダの POP3 サーバと自分の MUA の間にプロキシとして挟むだけです。

$ /usr/bin/sb_server.py で起動した後、web ブラウザから http://localhost:8880 に入ります。 Status and Configuration 設定欄の Configuration page. をクリックし設定します。

メールを表示する部分だけ 日本語化 日本語化(3) しました。 まず試してみるには一番容易です。

sb_filter

procmail からフィルタとして呼ばれる形式です。 すでに IMAP システムを構築してる場合、 ~/procmailrc の設定にフィルタ定義を追加するだけです。 訓練は cron でシェルスクリプトを起動させます。 今回はこの方式を採用します。

トークン抽出部分を 日本語化(2) しました。

Imapfilter

IMAP フォルダ上のメールをフィルタします。 訓練も IMAP フォルダが対象です。 訓練や振り分けが web ブラウザからビジュアルに操作できます。 ただし、まだα版と書いてあります。 完成すれば運用では一番便利かもしれません。

1. 日本語パッケージ

spambayes-1.0.4 を 日本語化するためのソースとパッチを ここ に置きます。

spambayes-1.0.4.tar.gz  -- オリジナル
spambayes-1.0.4.jp.tgz  -- 日本語版 (ソースとパッチを含む)
spambayes.spec          -- RPM 用スペックファイル
SplitterForU.py         -- 日本語トークン分割モジュール
spambayes-1.0.4.Dibbler-iso2022jp.patch
spambayes-1.0.4.ImapUI-RFC2060.patch
spambayes-1.0.4.ProxyUI-iso2022jp.patch
spambayes-1.0.4.PyMeldLite-iso2022jp.patch
spambayes-1.0.4.classifier.patch
spambayes-1.0.4.tokenizer-iso2022jp.patch

2. 新規データベース作成

sb_filter.py コマンドで、データベースをつくります。 ~/.hammiedb というファイルができます。

$ su -l courier
$ /usr/bin/sb_filter.py -n

3. 訓練用フォルダを作成する

Sylpheed を操作し訓練用フォルダを作ります。 hamspam はデータベースの訓練用です。 unsureSpam は SpamBayes フィルタ出力用です。

--- Courier(IMAP4)
 +-- INBOX
   +-- Trash
   +-- Bayes
     +-- ham
     +-- spam
     +-- unsure
   +-- Spam

IMAP サーバ側の Maildir の中に .Bayes.* ディレクトリが出来ているはずです。

$ ls -lao ~/Maildir
drwx------    9 courier  ./
drwx------    3 courier  ../
drwx------    6 courier  .Bayes.ham/
drwx------    6 courier  .Bayes.spam/
drwx------    6 courier  .Bayes.unsure/
drwx------    6 courier  .Spam/
drwx------    6 courier  .Trash/
drwx------    2 courier  courierimapkeywords/
-rw-r--r--    1 courier  courierimapuiddb
drwx------    2 courier  cur/
drwx------    2 courier  new/
drwx------    2 courier  tmp/

IMAP サーバ側で maildirmake コマンドを使って作成することもできます。

$ su -l courier
$ cd ~/Maildir
$ /usr/sbin/maildirmake .Bayes.ham
$ /usr/sbin/maildirmake .Bayes.spam
$ /usr/sbin/maildirmake .Bayes.unsure
$ /usr/sbin/maildirmake .Spam

4. データベースを「訓練」するスクリプト

次にエディタで ~/.spambayesrc を作ります。

[Storage]
persistent_use_database = True
persistent_storage_file = ~/.hammiedb

Sylpheed を操作し、 .Bayes.ham には正常なメールを、 .Bays.spam にはスパムメールをいれます。 訓練には sb_mboxtrain.py コマンドを使用します。

$ /usr/bin/sb_mboxtrain.py -n -g ~/Maildir/.Bayes.ham/ -s ~/Maildir/.Bayes.spam/

これは適当な名前のシェルスクリプトにして置いたほうが便利でしょう。

5. ProcMail にフィルタを追加する

~/.procmailrc にフィルタを追加します。 (SPAM と UNSURE の定義で、最後の '/' を忘れないように)

PATH=/bin:/usr/bin:/usr/local/bin   # 環境変数の設定
MAILDIR=$HOME/Maildir               # メールディレクトリへのパス
DEFAULT=$MAILDIR/                   # 下記配送条件にマッチしなかった時の配送先
LOCKFILE=$MAILDIR/.lockmail         # ロックファイルのパス
LOGFILE=$MAILDIR/procmaillog        # ログの保存先

### ここから SpamBayes 用に追加  ###
### ↓↓↓↓↓↓↓↓↓↓↓↓↓↓ ###

SPAM=$MAILDIR/.Spam/                # スパムメールの保存先
UNSURE=$MAILDIR/.Bayes.unsure/      # 判別できないメールの保存先
FILTER=/usr/bin/sb_filter.py        # SpamBayes フィルタコマンド

:0 fw:hamlock
| $FILTER

:0
* ^X-Spambayes-Classification: spam
$SPAM

:0
* ^X-Spambayes-Classification: unsure
$UNSURE

### ↑↑↑↑↑↑↑↑↑↑↑↑↑↑ ###
### ここまで SpamBayes 用に追加  ###

# ここから先は個別の振り分けルールを書く

ここまで設定すれば、次に fetchmail (と procmail) が実行された時、 spam と判定されたメールは .Spam フォルダに入れられます。 判定できなかったメールは .Bayes.unsure フォルダに入ります。

もし .Bayes.unsure にメールが配信されたら、 訓練用フォルダ .Bayes.ham または .Bayes.spam に移動します。 また .Spam の中に必要なメールが紛れ込んでいたら、 .Bayes.ham に移動します。 移動はリモートからメーラを使ってもおこなえます。

後は先程の訓練用コマンドを実行するか、 次の自動実行にまかせます。

5. トレーニングを自動実行する

crontab コマンドでエディタを開き。作成します。

$ su -l courier
$ crontab -e

下記は毎日 08:12, 20:12 に起動するように設定したものです。

12 8,20 * * * /usr/bin/sb_mboxtrain.py -n -g ~/Maildir/.Bayes.ham/ -s ~/Maildir/.Bayes.spam/