鷹の島

Debian GNU/Linux 等に関する Unix 系の設定メモ

メールフィルタリング

IMAP を本格的に運用するため、spam チェックと procmail の振り分けを全てサーバ上で行なおうと思います。

うちは Debian に慣れる前にメールサーバの構築を行ったので、全て(qmail+vpopmail+courier-imap)がソースからインストールされている状態になっています。

今回やる事は、(1)fetchmail でプロバイダのメール受信 → (2)procmail でローカルのアカウントに配信 → (3)bsfilter で spam チェック → (4)procmail で振り分け、です。

fetchmail はメールの受信を行なうプログラム。procmail はメールの振り分けを行なうプログラム。bsfilter は spam チェック用のベイジアンフィルタ。大雑把に、こんな感じの機能が付いています。

何でこんなに大袈裟な事をするのかと言うと、プロバイダの複数のメールとサーバに直接届くメールとを同じ bsfilter で処理させたかったからです。アカウントが少ない人はこんな大袈裟な事をする必要はありません。

まず、(1)と(2)の設定から。~/.fetchmailrc を用意して普通に受信する設定と procmail に渡す設定をします。簡単なので省略。~/.procmailrc はローカルに適当に作ったアカウントに転送するだけの設定を記述しました。こんな感じ。

:0
*
! hogehoge@example.com

これで、(1)(2)は完了。次は(3)。

hogehoge@example.com に到着したメールを bsfilter でフィルタリングします。.qmail を使って設定するのですが、vpopmail の .qmail は、/var/vpopmail/domains/example.com/hogehoge/ に配置するみたいです。内容はこんな感じ。bsfilter でチェックして、spam なら、spam アカウントへ転送。そうでなければ、procmail に渡す。

| /var/qmail/bin/condredirect spam /usr/local/bin/bsfilter --auto-update
| /usr/bin/procmail -m ./.procmailrc

でもって、最後の(4)。.procmailrc も、.qmail と同じディレクトリに配置します。ここ /var/vpopmail/domains/example.com/hogehoge/.procmailrc 。内容はこんな感じ。

PATH=/usr/bin:/bin:/usr/local/bin
HOME=/var/vpopmail/domains/example.com/hogehoge
MAILDIR=$HOME/Maildir
DEFAULT=$HOME/Maildir/
LOGFILE=$MAILDIR/procmail.log
LOCKFILE=$MAILDIR/procmail.lock

:0
* ^X-ML-Name:.*vim-jp
$HOME/Maildir/.vim-jp/

振り分けの設定は適当にご自由に。上記の設定は vim-jp という ML 用のメールを vim-jp というディレクトリに移動するというものです。どれにもマッチしないメールは DEFAULT ディレクトリにいきます。

仕上げに spam メール受信用の spam@ドメイン というアカウントを作っておきます。spam メールはどんどんここに入って来る事でしょう。判定ミスがあった場合は、サーバにログインして処理させないといけなくてちょっと面倒なので、自動で更新出来るような設定をしたい所ですが、今回はもう燃え尽きたのでまた今度。

ちなみに、bsfilter の学習ファイルは、 /var/vpopmail/domains/example.com/.bsfilter/ に配置されるようです。上述の .qmail の設定を行なっておけば、全てのアカウントで同じ学習ファイルが再利用出来るので、一人でしか使っていない場合は結構便利なんじゃないかなと思っています。ていうか、今回はそれが目的だったわけだし。

これで fetchmail を cron で動かすようにすれば、プロバイダのメールが spam チェックされつつ IMAP で利用出来るようになります。便利!

で、色々テストしていた所、spam 判定されたメールが queue に戻って暫く待ってからまた再送されるという謎の現象が発生してしまいました。同じ spam メールがいっぱい届く。ムキー。

色々苦労して調べた所、うちで使ってる vpopmail が 5.3.8 とかいうやたら古いバージョンだったので、それが原因の様子。早速最新の 5.4.0 を落としてきてコンパイルしてインストールしました。ちゃんと動くようになった。よかった。

Posted by Kyosuke Takayama at 2004-07-22 (Thu) 21:36