Dspam-Amavis-new-SpamAssassin-Clamav for EMOS
版权声明:
本文版权归作者所有,如其他个人、第三方网站或媒体报刊等需转载全文或节选,为支持我们的工作,请务必注明如下信息:

文档所有者:Ext mail Dev Team;
文章原始出处: http://www.extmail.org/forum/thread-10393-1-1.html
项目首页: http://www.extmail.org
如果因此而给您带来麻烦,请您原谅,谢谢合作。
感谢 Extmail 团队成员 <hzqbbc、chifeng、wxd5981>
感谢 xueron
关于此文
版  本:0.1
作  者:Liu shaobo <liushaobo (at) extmail (dot) org>
项目主页: http://www.extmail.org
个人主页: http://www.extmail.org
创建日期:2009-4-12
最后修改:2009-6-26

变更说明:
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/
2009-6-26 感谢hzqbbc    采用hzqbbc提供的maildroprc文件,支持调用ExtMail 多语言过滤器×××
2009-8-9   修改一处笔误 # cd / var/lib/mysql , 原来为# cd /usr/lib/mysql

本次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的核心引擎( libdspam )可以很容易地直接引入其过滤器系统,目前,DSPAM已经应用到350000个邮箱中。

DSPAM是很流行的防垃圾工具之一,DSPAM能够学习每个 用户的不同邮件的习性:根据这些习性告诉过滤器什么是垃圾邮件。这就使得即使在一个很庞大的系统中,DSPAM仍要为每个用户提供高精确度的、智能的过滤功能。并提供了一个能够学习每个用户的邮件习性的管理维护功能,这些习性可能会有些误判。

DSPAM的缺点就是依赖用户长时期培训才能取得非常高的垃圾邮件捕获率,不过经过我们的努力,可以减轻甚至克服这个问题。

相关软件的下载站点:
http://mirror.extmail.org/yum
相关 rpm 包
dspam-3.8.0-10ext.i386.rpm
libdspam-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使用效果调查:

http://www.extmail.org/forum/thread-10552-1-1.html


一、配置 dspam
1、安装dspam
以下为软件的存放目录:/ root/rpm ,安装和配置全部以root身份进行
# cd /root/rpm
# rpm -ivh libdspam-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_objects-4.1.sql 和 virtual_users.sql 两个文件增加下面一行内容到最上面, 提示输入mysql 密码时请输入dspam
use dspam;
# mysql -u dspam -p < mysql_objects-4.1.sql
Enter password:

# mysql -u dspam -p < virtual_users.sql
Enter password:

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.localdomain"
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两种内容过滤软件的训练。目前仅仅实现了Dspam的训练支持,Spamassassin训练还在研究中,如有朋友熟悉SA的训练,请与我们联系,指导我们如何做训练与 Webmail的接口脚本,感谢!

1、安装 ExtMail 1.1.0
# cd /var/www/extsuite/
# mv extmail extmail-1.1.0
# tar zxvf /root/src/extmail-1\[1\]\[1\].1.0.tar.gz
# mv extmail-1.1.0 extmail

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 < hzqbbc@hzqbbc.com> - 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并进行训练的痛苦。

安装方法:
# 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 -pdspam 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 文件中创建的用户和密码