SpamAssassinに学習させましょう -2005年05月12日
誤検知はけっこうあります。 送る方も引っ掛かり難いように内容を微妙に変え
て送って来ます。 その都度、家族からメールを受け取って学習させるのも手間
です。
そこでWebメールから学習用のフォルダにメールを移動させて、そのフォルダ
の中身を定期的にスクリプトで学習させます。
(SquirrelMailのプラグインに似た処理が出来る物がありますが、思った動きを
してくれなかったので自作です)
ルール:
「Ham」にはスパムじゃないのにスパムと判定されて「Spam」や「Doubt」に振り
分けられてしまったメールを入れて「$HOME/smbhome」に「.Ham」って名前の空
ファイルを作ります。
「Learn」にはスパムなのに「受信箱」や「Doubt」に入ってしまったメールを入
れて「$HOME/smbhome」に「.Spam」って名前の空ファイルを作ります。
「.Ham」及び「.Spam」はユーザーが任意で学習を有効にしたい時に作成します。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
(修正 2005.05.27)
今までのスクリプトを短い間隔で起動し、大量の学習を一気におこなうと後続の
スクリプトとバッティングします。(但し処理は正常に行われています)
排他処理で回避しました。 文字が濃い緑の部分が前回からの修正部分です。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
では作業です。
|
[root@station ~]# su - user1
[user1@station ~]$ mkdir Maildir/.Ham
[user1@station ~]$ chmod 700 Maildir/.Ham
[user1@station ~]$ mkdir Maildir/.Learn
[user1@station ~]$ chmod 700 Maildir/.Learn
[user1@station ~]$ exit
[root@station ~]# vi sh/sa-learn_check.sh
#!/bin/sh
PASSWD="/etc/passwd"
FLGHAM=".ham"
FLGSPAM=".spam"
PROG="sa-learn"
PROGDIR="/usr/bin"
LOCK="/tmp/sa-learn_check.lock"
clean_up () {
local pid
[ -L $LOCK ] || return 1
pid=$(ls -l $LOCK | sed 's/.*-> //')
if [ $$ -eq $pid ]; then
rm -f $LOCK > /dev/null 2>&1
fi
}
trap clean_up EXIT
[ -L $LOCK ] && exit 1
ln -s $$ $LOCK > /dev/null 2>&1
while read LINE; do
USERNAME=`echo $LINE | cut -d':' -f 1`
HOMEDIR=`echo $LINE | cut -d':' -f 6`
### Ham Learn Section
if [ -f $HOMEDIR/smbhome/$FLGHAM ]; then
if [ -d $HOMEDIR/Maildir/.Ham/cur ]; then
ls -l $HOMEDIR/Maildir/.Ham/cur | (
while read MAILFILE; do
set -- $MAILFILE
if [ -f $HOMEDIR/Maildir/.Ham/cur/$9 ]; then
su $USERNAME -s "/bin/bash" -c "$PROGDIR/$PROG --ham $HOMEDIR/Maildir/.Ham/cur/$9 >> $HOMEDIR/smbhome/sa-learn_ham.log"
su $USERNAME -s "/bin/bash" -c "mv -fb $HOMEDIR/Maildir/.Ham/cur/$9 $HOMEDIR/Maildir/new/"
fi
done
)
fi
if [ -d $HOMEDIR/Maildir/.Ham/new ]; then
ls -l $HOMEDIR/Maildir/.Ham/new | (
while read MAILFILE; do
set -- $MAILFILE
if [ -f $HOMEDIR/Maildir/.Ham/new/$9 ]; then
su $USERNAME -s "/bin/bash" -c "$PROGDIR/$PROG --ham $HOMEDIR/Maildir/.Ham/new/$9 >> $HOMEDIR/smbhome/sa-learn_ham.log"
su $USERNAME -s "/bin/bash" -c "mv -fb $HOMEDIR/Maildir/.Ham/new/$9 $HOMEDIR/Maildir/new/"
fi
done
)
fi
fi
### Spam Learn Section
if [ -f $HOMEDIR/smbhome/$FLGSPAM ]; then
if [ -d $HOMEDIR/Maildir/.Learn/cur ]; then
ls -l $HOMEDIR/Maildir/.Learn/cur | (
while read MAILFILE; do
set -- $MAILFILE
if [ -f $HOMEDIR/Maildir/.Learn/cur/$9 ]; then
su $USERNAME -s "/bin/bash" -c "$PROGDIR/$PROG --spam $HOMEDIR/Maildir/.Learn/cur/$9 >> $HOMEDIR/smbhome/sa-learn-spam.log"
su $USERNAME -s "/bin/bash" -c "mv -fb $HOMEDIR/Maildir/.Learn/cur/$9 $HOMEDIR/Maildir/.Trash/new/"
fi
done
)
fi
if [ -d $HOMEDIR/Maildir/.Learn/new ]; then
ls -l $HOMEDIR/Maildir/.Learn/new | (
while read MAILFILE; do
set -- $MAILFILE
if [ -f $HOMEDIR/Maildir/.Learn/new/$9 ]; then
su $USERNAME -s "/bin/bash" -c "$PROGDIR/$PROG --spam $HOMEDIR/Maildir/.Learn/new/$9 >> $HOMEDIR/smbhome/sa-learn-spam.log"
su $USERNAME -s "/bin/bash" -c "mv -fb $HOMEDIR/Maildir/.Learn/new/$9 $HOMEDIR/Maildir/.Trash/new/"
fi
done
)
fi
fi
done < $PASSWD
rm -f $LOCK
|
|
※sa-learn_check.shのダウンロードはこちらから
定期的に実行します -2005年05月12日
作成したスクリプトを定期的に実行します。
|
[root@station ~]# chmod 700 sh/sa-learn_check.sh
[root@station ~]# crontab -e
*/15 * * * * /root/sh/sa-learn_check.sh | nkf -j
|
|
例は15分毎ですが、サーバーの負荷とメールの使用頻度を考慮して決めて下さい。
これを動かすと
「Ham」に入れたメールが「スパムじゃない」学習の後、「受信箱」に移動します。
「Learn」に入れたメールが「スパムメール」の学習の後、「.Trash(ゴミ箱)」に移
動します。 使って1ヶ月が経過しますが、メールの消失は無いので大丈夫だと思い
ますが、無保証のスクリプトですので、覚悟してから使って下さい(怖)
初期バージョンは消失やメールが消せなくなりました(泣) これはバージョン3です(笑)
なお、POP3のメーラーは一定期間サーバーにメールを残す設定にしていないと学
習させたい時に移動させるメールが無くなってしまうのでとても面倒な作業になりま
す。 私は2週間残す設定で使っています。
|