bsfilter をデータベースを共有して使ってみる
個人的には、ベイジアンフィルタのデータって個人で持つべきと思っているんですが、共有したいという要望があったのでやってみた必要最低限なメモ。やり方があってるのかどうかわからんですけど。ちなみに、MTA は postfix で。OS は、CentOS 5.3 です。bsfilter は、/usr/local/bin に入れました。まず、useradd なんぞで、bsfilter 実行専用ユーザーを作る。uid は適当です。
# useradd -u 6666 -g mail -d /usr/local/etc/bsfilter -s /sbin/nologin bsfilter
んで、ホームディレクトリ作成。
# mkdir /usr/local/etc/bsfilter
# chown -R bsfilter:mail /usr/local/etc/bsfilter
# chmod -R 2770 /usr/local/etc/bsfilter
su(1) で、bsfilter ユーザーになる。
# su - bsfilter --shell=/bin/bash
/usr/local/etc/bsfilter/bsfilter.conf を作成。中身は、
homedir /usr/local/etc/bsfilter/spamdb
のみ。そして、/usr/local/etc/bsfilter/spamdb を準備。
$ mkdir /usr/local/etc/bsfilter/spamdb
$ chmod -R 2710 /usr/local/etc/bsfilter/spamdb
http://bsfilter.org/ を参考に、こんな感じでデータベースを準備。
$ bsfilter --config-file /usr/local/etc/bsfilter/bsfilter.conf --mbox --add-clean clean_na_yatsura
$ bsfilter --config-file /usr/local/etc/bsfilter/bsfilter.conf --mbox --add-spam spam_na_yatsura
$ bsfilter --config-file /usr/local/etc/bsfilter/bsfilter.conf --update
root に戻って、visudo(8) で、/etc/sudoers を編集。
ALL ALL=(bsfilter) NOPASSWD:/usr/local/bin/bsfilter
という感じの行を追加して、
Defaults requiretty
という行があれば、# つけてコメントするか、削除しておく。んで、こんな感じの /etc/procmailrc を用意する。
PATH=/bin:/usr/bin:/usr/local/bin
LOGFILE=/dev/null
:0 fw
| /usr/bin/sudo -u bsfilter /usr/local/bin/bsfilter --config-file /usr/local/etc/bsfilter/bsfilter.conf --pipe --ignore-header --insert-flag --insert-probability
そして、/etc/postfix/main.cf に、以下のような行を用意。
mailbox_command = /usr/bin/procmail
後は、postfix を reload。
# postfix reload
自分宛にメール送ってみて、
X-Spam-Flag: No
X-Spam-Probability: 0.000000
とか付いてればOK。追加学習は、
# su - bsfilter --shell=/bin/bash
とかした後、http://bsfilter.org/ を参考に、
$ bsfilter --config-file /usr/local/etc/bsfilter/bsfilter.conf --sub-clean --add-spam mail_file
とかする。sudo(8) 使って、bsfilter 呼んでいるあたりが微妙かも。んでも、
「等」とか書いてあるし、/etc/procmailrc でもいいのかなと…。
# useradd -u 6666 -g mail -d /usr/local/etc/bsfilter -s /sbin/nologin bsfilter
んで、ホームディレクトリ作成。
# mkdir /usr/local/etc/bsfilter
# chown -R bsfilter:mail /usr/local/etc/bsfilter
# chmod -R 2770 /usr/local/etc/bsfilter
su(1) で、bsfilter ユーザーになる。
# su - bsfilter --shell=/bin/bash
/usr/local/etc/bsfilter/bsfilter.conf を作成。中身は、
homedir /usr/local/etc/bsfilter/spamdb
のみ。そして、/usr/local/etc/bsfilter/spamdb を準備。
$ mkdir /usr/local/etc/bsfilter/spamdb
$ chmod -R 2710 /usr/local/etc/bsfilter/spamdb
http://bsfilter.org/ を参考に、こんな感じでデータベースを準備。
$ bsfilter --config-file /usr/local/etc/bsfilter/bsfilter.conf --mbox --add-clean clean_na_yatsura
$ bsfilter --config-file /usr/local/etc/bsfilter/bsfilter.conf --mbox --add-spam spam_na_yatsura
$ bsfilter --config-file /usr/local/etc/bsfilter/bsfilter.conf --update
root に戻って、visudo(8) で、/etc/sudoers を編集。
ALL ALL=(bsfilter) NOPASSWD:/usr/local/bin/bsfilter
という感じの行を追加して、
Defaults requiretty
という行があれば、# つけてコメントするか、削除しておく。んで、こんな感じの /etc/procmailrc を用意する。
PATH=/bin:/usr/bin:/usr/local/bin
LOGFILE=/dev/null
:0 fw
| /usr/bin/sudo -u bsfilter /usr/local/bin/bsfilter --config-file /usr/local/etc/bsfilter/bsfilter.conf --pipe --ignore-header --insert-flag --insert-probability
そして、/etc/postfix/main.cf に、以下のような行を用意。
mailbox_command = /usr/bin/procmail
後は、postfix を reload。
# postfix reload
自分宛にメール送ってみて、
X-Spam-Flag: No
X-Spam-Probability: 0.000000
とか付いてればOK。追加学習は、
# su - bsfilter --shell=/bin/bash
とかした後、http://bsfilter.org/ を参考に、
$ bsfilter --config-file /usr/local/etc/bsfilter/bsfilter.conf --sub-clean --add-spam mail_file
とかする。sudo(8) 使って、bsfilter 呼んでいるあたりが微妙かも。んでも、
引用:bsfilter / bayesian spam filter / ベイジアン スパム フィルタ
~/.procmailrc等から呼び出し、
「等」とか書いてあるし、/etc/procmailrc でもいいのかなと…。
若干本文修正。
・useradd にユーザー名が書いてなかった。
・手順にもよりますが、以下、追加&修正。
# chown -R bsfilter:mail /usr/local/etc/bsfilter
# chmod -R 2770 /usr/local/etc/bsfilter
・/etc/procmailrc の内容を修正。但し、--ignore-header は使い方次第なのでなくても構わない。
by *生保単独* (2010-09-13 13:48)