基于阈值的贝叶斯自动学习系统,自动学习评分高(垃圾邮件)或评分低(非垃圾邮件)的邮件,在扫描过程中无需用户干预,配置成功后,在邮件头会出现autolearn="yes|no|spam|ham"
1、配置Spamassassin
修改local.cf文件的以下配置:
# vi /etc/mail/spamassassin/local.cf
修改内容如下:
use_bayes 1
use_bayes_rules 1
##指定贝叶斯数据库的目录和权限
bayes_path /var/amavis/.spamassassin/bayes
bayes_file_mode 0770
##启用自动学习
bayes_auto_learn 1
##指定最小学习正常邮件数量
bayes_min_ham_num 200
##指定最小学习垃圾邮件数量
bayes_min_spam_num 200
##指定正常邮件学习的分数
bayes_auto_learn_threshold_nonspam 0.0
## 指定垃圾邮件学习的分数,这里的值可以指定和amavisd的$sa_tag2_level_deflt的值一样
bayes_auto_learn_threshold_spam 5.0
加载自动学习模块
# vi /etc/mail/spamassassin/init.pre
loadplugin Mail::SpamAssassin::Plugin::AutoLearnThreshold
建立贝叶斯目录
# mkdir /var/amavis
# chown -R amavis.amavis /var/amavis
2、建立贝叶斯数据库
同步数据库和日志
# su amavis -c "sa-learn --sync"
下载邮件样本,这里有200封垃圾邮件200封正常邮件,手动学习一下
邮件样本 下载
# tar zxvf ham_spam.tgz
学习垃圾邮件
# su amavis -c "sa-learn -D --showdots --spam --dir spam200/"
学习正常邮件
# su amavis -c "sa-learn -D --showdots --ham --dir ham200/"
查看贝叶斯数据库的tokens
# su amavis -c "sa-learn --dump data"
会出现如下信息:
0.987 1 0 1120834933 9745020815
0.987 1 0 1120842811 7d3d2086eb
0.987 1 0 1120836448 c14fa913d3
"sa-learn --dump data"字段表示的意思:
spam的概率,in_spam,in_ham,时间戳,token
查看贝叶斯数据库的统计
# su amavis -c "sa-learn --dump magic"
会出现如下信息:
0.000 0 3 0 non-token data: bayes db version
0.000 0 200 0 non-token data: nspam
0.000 0 200 0 non-token data: nham
0.000 0 13957 0 non-token data: ntokens
0.000 0 1095652393 0 non-token data: oldest atime
0.000 0 1120901206 0 non-token data: newest atime
0.000 0 0 0 non-token data: last journal sync atime
0.000 0 0 0 non-token data: last expiry atime
0.000 0 0 0 non-token data: last expire atime delta
0.000 0 0 0 non-token data: last expire reduction count
查看贝叶斯数据库的所有内容:
# su amavis -c "sa-learn --dump all"
重启amavisd-new服务
# service amavisd restart