版权声明:
本文版权归作者所有,如其他个人、第三方网站或媒体报刊等需转载全文或节选,为支持我们的工作,请务必注明如下信息:
文档所有者:Ext
mail Dev Team;
文章原始出处: http://www.
extmail.org/
forum/thread-10393-1-1.html
项目首页: http://www.extmail.org
如果因此而给您带来麻烦,请您原谅,谢谢合作。
感谢 Extmail 团队成员 <hzqbbc、chifeng、wxd5981>
感谢 xueron
关于此文
版 本:0.10
作 者:Liu shaobo <liushaobo (at) extmail (dot) org>
项目主页: http://www.extmail.org
个人主页: http://wiki.extmail.org
创建日期:2009-4-12
最后修改:2010-11-23
变更说明:
2009-8-9 修改一处笔误 # cd /
var/lib/mysql , 原来为# cd /usr/lib/mysql ;
2009-6-26 感谢hzqbbc 采用hzqbbc提供的
maildroprc文件,支持调用
ExtMail
多语言过滤器解码器;
2009-5-6 感谢jgh2008 修改
#import DEFAULT ,原来为 import DEFAULT;
2009-5-6 感谢hzqbbc 修改 #
dspam_train
extmail
spam_2/ easy_ham_2/ ,原来为#
dspam_train
dspam spam_2/ easy_ham_2/;
本次DSPAM和
EMOS结合的项目由liushaobo主持,hzqbbc配合完成,本文档以EMOS 1.4为基础,
测试通过。而同类RHEL 4/5 及同系列CentOS 4/5均可基于本文档进行配置使用,具体RPM包
下载路径见下文。
编写本文的初衷,是为了提高反垃圾
邮件效果,并克服
dspam初期训练、配置的各种困难过程,减轻系统管理员的负担,架设一个全功能,全自动的反
垃圾邮件系统;
本文档由Extmail项目组负责解释,并根据Extmail项目的建设和发展,适时予以更新。
DSPAM 的特点:
DSPAM是一个专为企业设计的可扩展并且基于开放源码的垃圾邮件过滤器.在正确配置系统,过滤成功率达99.5 % - 99.95%。 DSPAM支持多种MTA,并还可以部署作为一个独立的SMTP设备。对于软件开发商而言,DSPAM的核心引擎( lib
dspam )可以很容易地直接引入其过滤器系统,目前,DSPAM已经应用到350000个邮箱中。
DSPAM是很流行的防垃圾工具之一,DSPAM能够学习每个
用户的不同邮件的习性:根据这些习性告诉过滤器什么是垃圾邮件。这就使得即使在一个很庞大的系统中,DSPAM仍为每个用户提供高精确度的、智能的过滤功能。并提供了一个能够学习每个用户的邮件习性的管理维护功能,这些习性可能会有些误判。
目前DSPAM支持的存储包括SQLite,Berkeley DB,MySQL,PostgreSQL,Oracle和hash。可以与任何的MTA (Mail Transfer Agent)S
endmail,
Postfix, Exim, Courier, Communigate Pro, 和 QMail 工作。
DSPAM的缺点就是依赖用户长时期培训才能取得非常高的垃圾邮件捕获率,不过经过我们的努力,可以减轻甚至克服这个问题。
相关软件的下载站点:
http://mirror.extmail.org/yum
相关 rpm 包
dspam-3.8.0-10ext.i386.rpm
lib
dspam-3.8.0-10ext.i386.rpm
dspam-mysql-3.8.0-10ext.i386.rpm
perl-GDGraph-1.44-1.ext.noarch.rpm
perl-GDTextUtil-0.86-1.ext.noarch.rpm
perl-GD-Graph3d-0.63-2.ext.noarch.rpm
mini_httpd-1.19-1ext.i386.rpm
dspam-
web-3.8.0-10ext.i386.rpm
extmail-1\[1\]\[1\].1.0.tar.gz
20050311_spam_2.tar.bz2
20030228_easy_ham_2.tar.bz2
dspam-trained-data.sql.gz
dspam.pm
dspam.cf
文档目录
一、配置
dspam
二、Postfix的配置
三、DSpam模块做为SpamAssassin的插件
四、安装 ExtMail
五、训练DSPAM
六、配置DSPAM Web 界面
备注:
Dspam常见问题解答:(本文档在安装中遇到的问题大部分都有提到)
http://www.extmail.org/forum/thread-10451-1-1.html
Dspam使用效果调查:(请使用dspam的朋友能够贴出一个月后的效果)
http://www.extmail.org/forum/thread-10552-1-1.html
Dspam_WebUI for Nginx配置:
http://www.extmail.org/forum/thread-22976-1-1.html
一、配置 dspam
1、安装
dspam
以下为软件的存放目录:/root/rpm ,安装和配置全部以root身份进行
# cd /root/rpm
# rpm -ivh lib
dspam-3.8.0-10ext.i386.rpm
# rpm -ivh
dspam-3.8.0-10ext.i386.rpm
# rpm -ivh
dspam-mysql-3.8.0-10ext.i386.rpm
2、创建
dspam所需的数据库
# cd /usr/share/
dspam/sql/mysql/
# mysql -u root -p -e "create database
dspam"
Enter password:
# mysql -u root -p -e "grant all on
dspam.* to
dspam@localhost identified by '
dspam'"
Enter password:
# mysql -u
dspam -p
dspam dspam < mysql_objects-4.1.sql
# mysql -u
dspam -p
dspam dspam < virtual_users.sql
3、DSPAM的token数据库的定时清理:
# crontab -e
加入以下内容:
0 0 * * * /usr/bin/mysql -u
dspam -p'
dspam'
dspam < /usr/share/
dspam/sql/mysql/purge-4.1.sql
0 0 * * * /usr/bin/
dspam_logrotate -a 30 -d /var/spool/
dspam/data
4、配置
dspam.conf 文件,内容如下:
# vi /etc/
dspam/
dspam.conf
Home /var/spool/
dspam
StorageDriver /usr/lib/libmysql_drv.so
TrustedDeliveryAgent "/usr/sbin/sendmail"
OnFail error
DeliveryHost 127.0.0.1
DeliveryPort 10024
DeliveryIdent localhost
DeliveryProto SMTP
Trust root
Trust
dspam
Trust extmail
TrainingMode teft
TestConditionalTraining on
Feature whitelist
Algorithm graham burton
Tokenizer chain
PValue bcr
WebStats on
Preference "signatureLocation=headers" # 'message' or 'headers'
Preference "showFactors=off"
AllowOverride trainingMode
AllowOverride spamAction spamSubject
AllowOverride statisticalSedation
AllowOverride enableBNR
AllowOverride enableWhitelist
AllowOverride signatureLocation
AllowOverride showFactors
AllowOverride optIn optOut
AllowOverride whitelistThreshold
MySQLUIDInSignature on
MySQLServer /var/lib/mysql/mysql.sock
MySQLUser
dspam
MySQLPass
dspam
MySQLDb
dspam
MySQLCompress true
MySQLConnectionCache 10
Notifications off
PurgeSignatures 14 # Stale signatures
PurgeNeutral 90 # Tokens with neutralish probabilities
PurgeUnused 90 # Unused tokens
PurgeHapaxes 30 # Tokens with less than 5 hits (hapaxes)
PurgeHits1S 15 # Tokens with only 1 spam hit
PurgeHits1I 15 # Tokens with only 1 innocent hit
LocalMX 127.0.0.1
SystemLog on
UserLog on
Opt out
MaxMessageSize 1048576
ServerPort 10028
ServerQueueSize 32
ServerPID /var/spool/
dspam/
dspamd.pid
ServerMode auto
ServerPass.Relay1 "secret"
ServerParameters "--user extmail --deliver=innocent,spam"
ServerIdent "localhost.local
domain"
ClientHost 127.0.0.1
ClientPort 10028
ClientIdent "secret@Relay1"
ProcessorURLContext on
ProcessorBias on
5、启动
dspam 后台进程:
# chkconfig
dspamd on
# /etc/init.d/
dspamd start
查看
dspam启动进程
# ps aux |grep
dspam
dspam 18407 0.0 0.5 5452 1344 pts/0 S 19:16 0:00 /usr/sbin/
dspamd --daemon
root 18412 0.0 0.2 5140 668 pts/0 S+ 19:17 0:00 grep
dspamd
二、Postfix的配置
1、main.cf 修改以下内容:
# cd /etc/postfix
# vi /main.cf
变动内容如下:
smtpd_client_restrictions =
permit_
sasl_authenticated,
permit_mynetworks,
check_client_access pcre:/etc/postfix/
dspam_filter_access
header_checks = regexp:/etc/postfix/header_checks
# Content-Filter
#content_filter = smtp:[127.0.0.1]:10024
2、过滤进来的邮件
# vi
dspam_filter_access
加入以下内容:
/./ FILTER lmtp:[127.0.0.1]:10028
3、设置邮件标题过滤管理
# vi header_checks
加入以下内容:
/^(X-DSPAM-.*)/ IGNORE
/^(X-Spam-.*)/ IGNORE
4、修改 master.cf 以下内容:
# vi master.cf
127.0.0.1:10025 inet n - n - - smtpd
-o content_filter=
-o local_recipient_maps=
-o relay_recipient_maps=
-o smtpd_restriction_classes=
-o smtpd_client_restrictions=
-o smtpd_helo_restrictions=
-o smtpd_sender_restrictions=
-o smtpd_recipient_restrictions=permit_mynetworks,reject
-o mynetworks=127.0.0.0/8
-o strict_rfc821_envelopes=yes
-o smtpd_error_sleep_time=0
-o smtpd_soft_error_limit=1001
-o smtpd_hard_error_limit=1000
-o receive_override_options=no_unknown_recipient_checks,no_header_body_checks
5、重启postfix :
# /etc/init.d/postfix restart
三、DSpam模块做为SpamAssassin的插件:
SA增加DSpam插件,根据邮件头上
dspam的结果增减不同的分数
1、复制
dspam.pm 模块
# cd /usr/lib/perl5/vendor_perl/5.8.5/Mail/SpamAssassin/Plugin
# cp /root/rpm/
dspam.pm ./
2、编辑 local.cf 文件
# cd /etc/mail/spamassassin/
# cp /root/rpm/
dspam.cf ./
# vi local.cf
在下面增加以下内容
include
dspam.cf
3、编辑 init.pre 文件:
# vi init.pre
在下面增加以下内容
loadplugin Mail::SpamAssassin::Plugin::
dspam
四、安装 ExtMail
说明:
Extmail 1.0.9正式加入垃圾邮件举报功能,主要基于(xueron)的补丁包,并进行了一定的调整,使该功能可以兼容DSPAM及Spamassassin两种内容过滤软件的训练。Extmail1.1.1加入(stvictor)提供的spamassassin举报功能,感谢!
1、安装 ExtMail 1.1.1
# cd /var/www/extsuite/
# mv extmail extmail-bak
# tar zxvf /root/src/extmail-1.1.1.tar.gz
# mv extmail-1.1.1extmail
2、设置 webmail.cf
# cd extmail
# cp webmail.cf.default webmail.cf
# vi webmail.cf
主要变动的内容见下:其它变动根据实际情况修改
SYS_SPAM_REPORT_ON = 1
SYS_SPAM_REPORT_TYPE =
dspam
3、设置maidrop的全局过滤
以下的maildroprc 文件同时支持调用ExtMail 多语言过滤器解码器,如果用户已建立自定义过滤规则,则此条全局规则无效(以用户为准)。
# vi /etc/maildroprc
# Decoder for high quality key word filtering
logfile "/var/log/maildrop.log"
# Author: hzqbbc <
[email protected] > - ExtMail Dev Team
DECODER="/var/www/extsuite/extmail/tools/decode -v"
if ((/^(
From|Sender|Return-Path):.*MAILER\-DAEMON/))
{
BADSENDER=1
}
# Auto deliver to Junk mailbox support if there is no custom
# mailfilter, need test command and correct PATH env
`test -f $HOME/.mailfilter && exit 1 || exit 0`
# No customize filtering rules
if ( $RETURNCODE == 0 )
{
if (/^X-Spam-Flag:.*YES/ || /^X-DSPAM-Result:.*Spam/)
{
exception {
to "$HOME/Maildir/.Junk/."
}
}
}
添加maildrop
日志文件:
# touch /var/log/maildrop.log
# chown vuser.vgroup /var/log/maildrop.log
五、训练 DSPAM
# cd /root/rpm
# tar xvfj 20050311_spam_2.tar.bz2
# tar xvfj 20030228_easy_ham_2.tar.bz2
#
dspam_train extmail spam_2/ easy_ham_2/
训练完成后会显示:
TRAINING COMPLETE
Training Snapshot:
dspam
TP: 1314 TN: 1401 FP: 0 FN: 83 SC: 8 NC: 0
SHR: 94.06% HSR: 0.00% OCA: 97.03%
Overall Statistics:
dspam
TP: 1314 TN: 1401 FP: 0 FN: 83 SC: 8 NC: 0
SHR: 94.06% HSR: 0.00% OCA: 97.03%
2、不训练的办法 (建议使用)
为了进一步降低管理员的工作量,我们进行了大量的测试和摸索工作,目前提供一个简单的缩减训练周期和工作量的方法。 我们提供一个已经预先训练好的
dspam数据库文件(mysql only),该库是由3000封ham+3000封spam训练而成,用户只要在新的
dspam系统里导入该数据库,原理上就可免除初期搜集最新spam及最新ham并进行训练的痛苦。
备注:
导入Dspam数据库后,在Dspam-web的History界面并不会有历史记录。这个数据库文件只包含Dspam的特征库。
安装方法:
# cd /root/rpm
# gzip -d
dspam-trained-data.sql.gz
# cd /var/lib/mysql
# rm -rf
dspam/ (备注:如果没有
dspam的库,可以不用执行)
# mysql -u root -p -e "create database
dspam"
# mysql -u root -p -e "grant all on
dspam.* to
dspam@localhost identified by '
dspam'"
# mysql -u
dspam -p
dspam dspam < /root/rpm/
dspam-trained-data.sql
六、配置DSPAM Web 界面
1、安装相关的rpm包:
# rpm -ivh perl-GDTextUtil-0.86-1.rf.noarch.rpm
# rpm -ivh perl-GDGraph-1.44-1.rf.noarch.rpm
# rpm -ivh perl-GD-Graph3d-0.63-2.rf.noarch.rpm
# rpm -ivh mini_httpd-1.19-1ext.i386.rpm
# rpm -ivh
dspam-web-3.8.0-10ext.i386.rpm
备注:因为我是以 EMOS 为基础,里面包含了 perl-GD ,如果没有安装 perl-GD 的, 请自行安装
2、创建
dspam-web
认证用户:
# cd /usr/share/
dspam/webui/
cgi-bin
# echo "extmail" > admins
# htpasswd -c .htpasswd extmail
输入认证密码
New password:
Re-type new password:
Adding password for user extmail
3、启动
dspam-web 守护
# service
dspam-webd start
这实际是启动了mini_httpd进程,查看 mini_httpd 是否启动正常:
# ps aux |grep mini
dspam 18580 0.0 0.3 4152 820 ? Ss 20:05 0:00 mini_httpd -C /etc/
dspam/webui.conf
root 18582 0.0 0.2 5316 668 pts/0 S+ 20:05 0:00 grep mini
4、重启 apache
# /etc/init.d/httpd restart
5、
访问
dspam-web
http://mail.example.com/
dspam
输入你在 .htpasswd 文件中创建的用户和密码