1月 13

sendmail+cyrus-imapd+maildrop+bsfilterで快適spamフィルタリング

Tag: Mail, maildropTOSHI @ 20:12:24

今までもprocmailで落とし込んで使っていたわけだけど、初心者な人が書き方教えて!っていってきたのでどうしたものかと悩む。procmailってすごい変な設定ファイルの書き方だから、いちいちどれがどの意味って教えるの大変だし、他のプログラムを読み出してそっちがエラー起こした時の処理がアレだとあったし、最終的にdeliverに流し込む時に余計なFrom行があって削ったりしないといけないし。
で変わりになるものがないかと調べたら、maildropでdeliverに落とし込むやり方があったので、一から設定する際の備忘録に。

まず、大前提は既に sendmail+cyrus-imapd でメール環境ができていること。あぁもちろんmaildropのインスコも。
次に、bsfilterを動かせる環境にして(rubyや必要なライブラリのインストールは略)、予めclean/spamメールを分けて準備しておくこと。

んでは、本題。

bsfilterに予め準備したclean/spamメールを学習させる。
bsfilter.orgの使い方(IMAP編)を参考にというかほとんどまんま ,bsfilter/bsfilter.conf を作ってimap鯖と通信して学習させるための準備。パスワード書いちゃうの嫌なら書かないなり、600にするなり。dbはお好きなように。

db gdbm
imap-server localhost
imap-auth cram-md5
imap-user username
imap-password password

で、コマンドライン指定して学習させる。

% bsfilter -c –imap INBOX.clean
% bsfilter -s –imap INBOX.spam
% bsfilter -u

bsfilterの準備が出来たので、受信するメールにmaildropでbsfilterかましてdeliver落とすようにする。
まず、.forward はmaildrop実行するだけの記述。

"| exec /usr/local/bin/maildrop || exit 75"

maildropの設定ファイルである .mailfilter で、bsfilterを通した後に振り分け設定。私は最終的なメールの振り分けをsieveに任せてるのでコメントアウトしてるが、sieve分からない人には、ここでヘッダ見て振り分けさせたほうが楽かもしれない。最後にこのファイルのpermissionを0600に(こうしないとmaildropに怒られるよくある詰まりどころ)

SHELL=/bin/sh
DELIVER="| /usr/local/cyrus/bin/deliver -a $LOGNAME"
USERID="$LOGNAME"

#logfile "$HOME/.maildrop.log"

xfilter "/usr/local/bin/bsfilter –pipe –insert-flag –auto-update"

#if (/^X-Spam-Flag: Yes/)
#{
#  to "$DELIVER -m spam $USERID"
#}

to "$DELIVER $USERID"

spamが通過されたり、not spamがspam判定されて捨てられたりした時は、該当メールをどっかに移動してコマンドラインで学習しなおし。例えば、spamが通過してたりしたら、メールを INBOX.newspam に移してこんなかんじ?

% bsfilter -u -C -s –imap INBOX.newspam

コメントをどうぞ