extmail的安装

   ExtMail Solution 是一个基于优秀开源软件的电子邮件系统解决方案,核心部件包括了Postfix、Amavisd-new、ClamAV、ExtMail、ExtMan、Courier系列软件。是一个功能相对比较齐全的免费电子邮件系统php

clip_p_w_picpath002

其项目官网为:http://www.extmail.orghtml

全部者:Extmail Dev Teamnode

本文档在RedHat Enterprise及CentOS系统上能够安装,仅以CentOS 为例mysql

1、extmail_solutionz概述linux

一、ExtMail Solution 结构
web

如下是其主要的特性列表: sql

主要特性shell

支持SMTP/POP3/HTTP协议数据库

支持SMTP认证及ESMTPapache

可支持大容量邮箱(大于1GB)

高速Web界面访问邮箱

完整的Web管理后台

在线服务端病毒过滤

内建内容过滤

SMTP行为识别垃圾邮件

支持大量反垃圾邮件技术

图形化邮件日志分析

支持别名/多域/域管理员等

支持网络磁盘/POP3邮件

支持读/写HTML格式邮件

支持定制模板及多语言

二、硬件配置

要流畅地运行邮件系统,建议的硬件配置以下:

名称

说明

物理内存       

512M+ 推荐1024M

交换区:

2倍物理内存大小

CPU

PIII 1G+ 推荐P4及其以上级别

主板

推荐Intel原装

网卡

100M/1000M 推荐3Com/Intel

2、操做系统安装(以CentOS5.5为例)

只安装以下的组件:

Web Server:

要注意必须选中httpd-suexec软件包,不然下文的配置将失效。

MYSQL数据库:

注意必须选中mysql-server, libdbi-dbd-mysql, perl-DBD-mysql等模块,不然extmail将没法链接mysql

VIM编辑器:

强烈建议安装vim-enhanced软件包,它支持main.cf彩色高亮语法分析。

其他的Xwindows, 打印,KDE/Gnore, 服务器配置工具,网络工具,开发包等所有都不是必选组件。安装完毕进入操做系统后,为增长系统安全性,建议禁止root直接登录,并增长一个非root账 户,例如sysadmin。这样没法以root帐户直接登录系统,必须先以sysadmin身份登录再su到root执行。

2、CentOS4.7安装步骤图解:

如下将以详细的图解来介绍如何安装CentOS5.5

clip_p_w_picpath004

CentOS启动光盘的启动画面,直接回车便可。

clip_p_w_picpath005

系统提示“是否须要校验CD媒质”,请选择“Skip”

clip_p_w_picpath007

安装欢迎界面

clip_p_w_picpath009

clip_p_w_picpath011

clip_p_w_picpath012

clip_p_w_picpath014

clip_p_w_picpath016

clip_p_w_picpath017

clip_p_w_picpath019

clip_p_w_picpath021

clip_p_w_picpath023

clip_p_w_picpath025

clip_p_w_picpath027

clip_p_w_picpath029

clip_p_w_picpath031

clip_p_w_picpath033

clip_p_w_picpath035

clip_p_w_picpath037

系统界面

3、配置SSH:

以root身份登进系统后,增长一个非root账户,名称为sysadmin,密码按您的需求设置一个便可。接下来咱们要禁止root直接登录。

shell

# vi /etc/ssh/sshd_config

修改如下配置为:

PermitRootLogin no

而后从新启动sshd,这样禁止了root直接登录。

shell

# /etc/init.d/sshd restart

4、配置SELinux

自从RHEL4/CentOS4之后,系统默认打开了SELinux支持,简单说SELinux就是一个强制性的安全机制,可是它也带来了很多麻烦,为了不编写烦琐的policy规则,本文档将屏蔽掉SELinux对MySQL及httpd的保护。方法以下:

shell

# setsebool httpd_disable_trans=1
# setsebool mysqld_disable_trans=1

操做完毕后,从新启动mysql及apache,并将以下命令加入/etc/rc.d/rc.local以便服务器启动后能自动生效:

shell

# vi /etc/rc.d/rc.local

加入如下内容:

/usr/sbin/setsebool httpd_disable_trans=1

/usr/sbin/setsebool mysqld_disable_trans=1

/etc/init.d/mysqld restart

/etc/init.d/httpd restart

3、制做_yum_仓库 1、下载软件包

整个系统的安装全过程都要求以root身份执行,若是机器没有访问外部网络的能力,则事先下载好EMOS光盘映像,并上传到服务器。

备注:若是要在CentOS 5.x上面进行配置,请下载EMOS-1.5.ISO,配置方法不变;

shell

# su - root

# cd /root

# wget ftp://www5.extmail.org/emos/EMOS_1.5.iso

2、制做本地 yum 仓库

使用EMOS1.5.ISO光盘制做本地 yum 仓库;

此外,咱们假设本次安装默认域是extmail.org,主机名为:mail.extmail.org

安装CentOS光盘中createrepo工具

shell

# rpm -ivh createrepo*

加载EMOS1.5的光盘,请把emos的光盘放到光驱中

shell

# mkdir /mnt/EMOS

# mount /dev/cdrom /mnt/EMOS

# cd /mnt

# createrepo .

3、建立客户端 yum 的定义文件:

shell

# cd /etc/yum.repos.d

# mkdir backup

# mv *.repo ./backup

# vi EMOS.repo

加入如下内容:

[EMOS]

name=EMOS

baseurl=file:///mnt/

enabled=1

gpgcheck=0

从新获取最新的仓库信息:

shell

# yum clean all

# yum list

4、配置mta-postfix 1、安装postfix

安装postfix

shell

# yum install postfix

# rpm -e sendmail

2、配置postfix

shell

# postconf -n > /etc/postfix/main2.cf

# mv /etc/postfix/main.cf /etc/postfix/main.cf.old

# mv /etc/postfix/main2.cf /etc/postfix/main.cf

编辑main.cf:

shell

# vi /etc/postfix/main.cf

增长以下内容:(添加到文件的后面)

# hostname

mynetworks = 127.0.0.1

myhostname = mail.extmail.org

mydestination = $mynetworks $myhostname

# banner

mail_name = Postfix - by extmail.org

smtpd_banner = $myhostname ESMTP $mail_name

# response immediately

smtpd_error_sleep_time = 0s

# Message and return code control

message_size_limit = 5242880

mailbox_size_limit = 5242880

show_user_unknown_table_name = no

# Queue lifetime control

bounce_queue_lifetime = 1d

maximal_queue_lifetime = 1d

设置postfix开机自启:

shell

# chkconfig postfix on

5、配置courier-authlib 1、安装Courier-Authlib

安装如下软件包:

shell

# yum install courier-authlib

# yum install courier-authlib-mysql

编辑/etc/authlib/authmysqlrc文件:

shell

# vi /etc/authlib/authmysqlrc

并将其内容清空,而后增长以下内容:

MYSQL_SERVER localhost

MYSQL_USERNAME extmail

MYSQL_PASSWORD extmail

MYSQL_SOCKET /var/lib/mysql/mysql.sock

MYSQL_PORT 3306

MYSQL_OPT 0

MYSQL_DATABASE extmail

MYSQL_USER_TABLE mailbox

MYSQL_CRYPT_PWFIELD password

MYSQL_UID_FIELD uidnumber

MYSQL_GID_FIELD gidnumber

MYSQL_LOGIN_FIELD username

MYSQL_HOME_FIELD homedir

MYSQL_NAME_FIELD name

MYSQL_MAILDIR_FIELD maildir

MYSQL_QUOTA_FIELD quota

MYSQL_SELECT_CLAUSE SELECT username,password,"",uidnumber,gidnumber,\

CONCAT('/home/domains/',homedir), \

CONCAT('/home/domains/',maildir), \

quota, \

name \

FROM mailbox \

WHERE username = '$(local_part)@$(domain)'

修改authdaemonrc文件

shell

# vi /etc/authlib/authdaemonrc

修改以下内容:

authmodulelist="authmysql"

authmodulelistorig="authmysql"

2、启动courier-authlib:

shell

# service courier-authlib start

如一切正常,命令行将返回以下信息:

Starting Courier authentication services: authdaemond

修改authdaemon socket目录权限

若是该目录权限不正确修改,maildrop及postfix等将没法正确获取用户的信息及密码认证:

shell

# chmod 755 /var/spool/authdaemon/

6、配置maildrop 1、安装maildrop

shell

# yum install maildrop

配置master.cf 为了使Postfix支持Maildrop,必须修改/etc/postfix/master.cf文件,注释掉原来的maildrop的配置内容,并改成:

maildrop unix - n n - - pipe

flags=DRhu user=vuser argv=maildrop -w 90 -d ${user}@${nexthop} ${recipient} ${user} ${extension} {nexthop}

配置main.cf 因为maildrop不支持一次接收多个收件人,所以必须在main.cf里增长以下参数:

maildrop_destination_recipient_limit = 1

2、测试maildrop对authlib支持

shell

# maildrop -v

看是否出现如下内容:

maildrop 2.0.4 Copyright 1998-2005 Double Precision, Inc.

GDBM extensions enabled.

Courier Authentication Library extension enabled.

Maildir quota extension enabled.

This program is distributed under the terms of the GNU General Public

License. See COPYING for additional information.

注意事项:

一、如需从新编译Maildrop软件包,必须先得到其源码rpm包,而且必须先行安装courier-authlib及其devel软件包,不然编译后的maildrop将没法打开authlib支持。

二、maildrop RPM包安装时,会自动建立vuser用户及vgroup用户组,专门用于邮件的存储,vuser:vgroup的uid/gid都是1000,这与通常的邮件文档中说起用postfix用户存邮件不同。由于postfix用户的uid通常都低于500,而Suexec模块编译时对UID/GID的要求是要大于500,所以使用postfix用户不能知足要求。其次,若是用Maildrop做为投递代理(MDA),以postfix身份投递的话,会致使postfix MTA错误。

7、配置apache 1、虚拟主机设置

编辑httpd.conf文件:

shell

# vi /etc/httpd/conf/httpd.conf

在最后一行加上:

NameVirtualHost *:80

Include conf/vhost_*.conf

编辑 vhost_extmail.conf

shell

# vi /etc/httpd/conf/vhost_extmail.conf

里面定义虚拟主机的相关内容:

# VirtualHost for ExtMail Solution

<VirtualHost *:80>

ServerName mail.extmail.org

DocumentRoot /var/www/extsuite/extmail/html/

ScriptAlias /extmail/cgi/ /var/www/extsuite/extmail/cgi/

Alias /extmail /var/www/extsuite/extmail/html/

ScriptAlias /extman/cgi/ /var/www/extsuite/extman/cgi/

Alias /extman /var/www/extsuite/extman/html/

# Suexec config

SuexecUserGroup vuser vgroup

</VirtualHost>

设置apache开机启动

shell

# chkconfig httpd on

8、配置webmail-extmail 1、安装ExtMail

shell

# yum install extsuite-webmail

2、编辑webmail.cf

shell

# cd /var/www/extsuite/extmail

# cp webmail.cf.default webmail.cf

# vi webmail.cf

主要变更的内容见下:

SYS_MYSQL_USER = extmail

SYS_MYSQL_PASS = extmail

SYS_MYSQL_DB = extmail

更新cgi目录权限 因为SuEXEC的须要,必须将extmail的cgi目录修改为vuser:vgroup权限:

shell

# chown -R vuser:vgroup /var/www/extsuite/extmail/cgi/

9、配置管理后台-extman 1、yum安装ExtMan

shell

# yum install extsuite-webman

更新cgi目录权限 因为SuEXEC的须要,必须将extman的cgi目录修改为vuser:vgroup权限:

shell

# chown -R vuser:vgroup /var/www/extsuite/extman/cgi/

连接基本库到Extmail

shell

# mkdir /tmp/extman

# chown -R vuser:vgroup /tmp/extman

# chmod –R 777 /tmp/extman

2、数据库初始化

启动Mysql

shell

# service mysqld start

# chkconfig mysqld on

导入mysql数据库结构及初始化数据,root密码默认为空

shell

# mysql -u root -p < /var/www/extsuite/extman/docs/extmail.sql

# mysql -u root -p &lt; /var/www/extsuite/extman/docs/init.sql

注意事项:

上面命令行中最后一个cd $OLDPWD是返回原始路径(即ExtMail Solution软件包根目录)

因为RedHat发行版中包含了一个叫tmpwatch的工具,该工具会按期扫描/tmp/下的文件,若是这些文件好久都没被使用,将被删除,所以若是后台长期不使用,/tmp/extman目录有可能被tmpwatch删除,因此要么按期登录后台,要么修改 webman.cf将临时目录修改到另外一个地方。此处暂以/tmp/extman默认值为例。

上述导入初始化SQL时,默认的uidnumber/gidnumber都是1000,这和vuser:vgroup 的uid/gid一致,是由于maildrop投递时会从数据库里取uidnumber/gidnumber,而在master.cf里已经定义好了投递时的运行身份(vuser:vgroup),因此这两个字段的内容必须为1000,不然将出现投递错误,例如报0×06等错误。

3、设置虚拟域和虚拟用户的配置文件

shell

# cd /var/www/extsuite/extman/docs

# cp mysql_virtual_alias_maps.cf /etc/postfix/

# cp mysql_virtual_domains_maps.cf /etc/postfix/

# cp mysql_virtual_mailbox_maps.cf /etc/postfix/

# cp mysql_virtual_sender_maps.cf /etc/postfix/

配置main.cf:

shell

# vi /etc/postfix/main.cf

增长如下内容:

# extmail config here

virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf

virtual_mailbox_domains = mysql:/etc/postfix/mysql_virtual_domains_maps.cf

virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf

virtual_transport = maildrop:

重启postfix :

shell

# service postfix restart

4、测试authlib

在命令行下执行:

shell

# /usr/sbin/authtest -s login postmaster@extmail.org extmail

结果以下:

Authentication succeeded.

Authenticated: postmaster@extmail.org (uid 1000, gid 1000)

Home Directory: /home/domains/extmail.org/postmaster

Maildir: /home/domains/extmail.org/postmaster/Maildir/

Quota: 104857600S

Encrypted Password: $1$phz1mRrj$3ok6BjeaoJYWDBsEPZb5C0

Cleartext Password: extmail

Options: (none)

这样代表ExtMan的正确安装,数据库也正确导入,courier-authlib能正确链接到mysql数据库最后访问http://mail.extmail.org/extmail/,如无心外,将看到webmail的登录页,不过此时尚未加正式的用户,因此不能登录,包括postmaster@extmail.org也不行。必需要登录到http://mail.extmail.org/extman/ 里增长一个新账户才能登录。

ExtMan的默认超级管理员账户:root@extmail.org,初始密码:extmail*123*,登录成功后,建议将密码修改,以确保安全。

5、配置图形化日志

启动mailgraph_ext

shell

# /usr/local/mailgraph_ext/mailgraph-init start

启动cmdserver(在后台显示系统信息)

shell

# /var/www/extsuite/extman/daemon/cmdserver --daemon

加入开机自启动:

shell

# echo “/usr/local/mailgraph_ext/mailgraph-init start” >&gt; /etc/rc.d/rc.local

# echo “/var/www/extsuite/extman/daemon/cmdserver -v -d” &gt;&gt; /etc/rc.d/rc.local

使用方法: 等待大约15分钟左右,若是邮件系统有必定的流量,便可登录到extman里,点“图形日志”便可看到图形化的日志。具体天天,周,月,年的则点击相应的图片进入便可。

10、配置cyrus-sasl

RHEL4/CentOS4的cyrus-sasl默认没有打开authdaemon的支持,为了使用集中认证的authlib,必须打开这个支持。为此咱们必须删除系统的cyrus-sasl软件包,替换成打开了authdaemon支持的sasl软件包。

1、安装cyrus-sasl

删除系统的cyrus-sasl:

shell

# rpm -e cyrus-sasl --nodeps

安装新的支持authdaemon的软件包

shell

# yum install cyrus-sasl

2、配置main.cf文件

Postfix的SMTP认证须要透过Cyrus-SASL,链接到authdaemon获取认证信息。

编辑main.cf

shell

# vi /etc/postfix/main.cf

增长以下内容:

# smtpd related config

smtpd_recipient_restrictions =

permit_mynetworks,

permit_sasl_authenticated,

reject_non_fqdn_hostname,

reject_non_fqdn_sender,

reject_non_fqdn_recipient,

reject_unauth_destination,

reject_unauth_pipelining,

reject_invalid_hostname,

# SMTP sender login matching config

smtpd_sender_restrictions =

permit_mynetworks,

reject_sender_login_mismatch,

reject_authenticated_sender_login_mismatch,

reject_unauthenticated_sender_login_mismatch

smtpd_sender_login_maps =

mysql:/etc/postfix/mysql_virtual_sender_maps.cf,

mysql:/etc/postfix/mysql_virtual_alias_maps.cf

# SMTP AUTH config here

broken_sasl_auth_clients = yes

smtpd_sasl_auth_enable = yes

smtpd_sasl_local_domain = $myhostname

smtpd_sasl_security_options = noanonymous

3、编辑smtpd.conf文件

shell

# vi /usr/lib/sasl2/smtpd.conf

确保其内容为:

pwcheck_method: authdaemond

log_level: 3

mech_list: PLAIN LOGIN

authdaemond_path:/var/spool/authdaemon/socket

从新启动postfix:

shell

# service postfix start

4、测试SMTP认证

经过如下命令得到postmaster@extmail.org的用户名及密码的BASE64编码:

shell

# perl -e ‘use MIME::Base64; print encode_base64(”postmaster\@extmail.org”)’

内容以下:

cG9zdG1hc3RlckBleHRtYWlsLm9yZw==

shell

# perl -e ‘use MIME::Base64; print encode_base64(”extmail”)’

内容以下:

ZXh0bWFpbA==

而后本机测试:

shell

# telnet localhost 25

其过程以下:

Trying 127.0.0.1...

Connected to localhost.localdomain (127.0.0.1).

Escape character is '^]'.

220 mail.extmail.org ESMTP Postfix - by extmail.org

ehlo demo.domain.tld <&lt; 输入内容

250-mail.extmail.org

250-PIPELINING

250-SIZE 10240000

250-VRFY

250-ETRN

250-AUTH LOGIN PLAIN

250-AUTH=LOGIN PLAIN

250-ENHANCEDSTATUSCODES

250-8BITMIME

250 DSN

auth login &lt;&lt; 输入内容

334 VXNlcm5hbWU6

cG9zdG1hc3RlckBleHRtYWlsLm9yZw== &lt;&lt; 输入内容

334 UGFzc3dvcmQ6

ZXh0bWFpbA== &lt;&lt; 输入内容

235 2.0.0 Authentication successful

quit &lt;&lt; 输入内容

221 2.0.0 Bye

最后出现235 Authentication Successful 代表认证成功了。

11、配置courier-imap 1、安装Courier-imap

默认的courier-authlib及courier-imap都会增长系统自启动设置,所以下一次服务器启动将自动启动相应的authlib及POP3服务

shell

# yum install courier-imap

配置courier-imap

因为Courier-imap的IMAP目录是按UTF-7编码的,ExtMail目前尚未正式支持IMAP目录,所以须要屏蔽IMAP,只提供pop3服务。而就目前的使用状况来看,IMAP使用的很是少,绝大部分OutLook/Foxmail用户都习惯使用POP3而非IMAP。

shell

# vi /usr/lib/courier-imap/etc/imapd

修改内容以下:

IMAPDSTART=NO

shell

# vi /usr/lib/courier-imap/etc/imapd-ssl

修改内容以下:

IMAPDSSLSTART=NO

而后从新启动courier-imap:

shell

# service courier-imap start

测试POP3 请按以下步骤输入pop3命令测试其是否正常工做,注意蓝色的信息是咱们输入到POP3服务器的(请首先登陆extman自行创建test@extmail.org用户,密码:extmail)

shell

# telnet localhost 110

其过程以下:

Trying 127.0.0.1...

Connected to localhost.localdomain (127.0.0.1).

Escape character is '^]'.

+OK Hello there.

user test@extmail.org &lt;&lt; 输入内容

+OK Password required.

pass extmail &lt;&lt; 输入内容

+OK logged in.

list &lt;&lt; 输入内容

+OK POP3 clients that break here, they violate STD53.

.

quit &lt;&lt; 输入内容

+OK Bye-bye.

Connection closed by foreign host.

12、配置内容、病毒过滤 1、安装amavisd-new

shell

# yum install amavisd-new

设置相关目录权限:

shell

# chown -R amavis.amavis /var/spool/vscan/

2、配置SpamAssassin

Amavisd-new 经过Mail::SpamAssassin 模块来调用SA的功能,所以这里配置SA和常规配置SA软件有些区别,主要集中在修改local.cf文件上。

增长中文规则: 用于处理中文(简体)垃圾邮件。

shell

# wget -N -P /usr/share/spamassassin www.ccert.edu.cn/spam/sa/Chinese_rules.cf

设置规则自动更新:

shell

# /usr/bin/crontab -e

而后输入以下的内容:

0 0 1 * * wget -N -P /usr/share/spamassassin www.ccert.edu.cn/spam/sa/Chinese_rules.cf; /etc/init.d/amavisd restart

存盘退出便可。最后运行如下调试命令以确认amavisd没有错误:

shell

# /usr/sbin/amavisd -c /etc/amavisd/amavisd.conf debug

若是没有异常提示或报错退出则表示一切都正常,按ctrl+c终止,而后正常启动,若提示pid不存在等错误,没必要理会。

设置amavisd开机自启:

shell

# service amavisd start

# chkconfig amavisd on

3、配置ClamAV

安装ClamAV

shell

# yum install clamd

编辑clamd.conf文件

shell

# vi /etc/clamd.conf

去掉 ‘LocalSocket /var/run/clamav/clamd.sock’的注释,并注释掉 ‘TCPSocket 3310’,咱们将使用unix socket而不是TCP,二者不可并存。

变更内容见下:

# Default: disabled

LocalSocket /var/run/clamav/clamd.sock

#TCPSocket 3310

设置相关目录权限:

将clamav加到amavis运行组里,并调整目录权限,不然clamav将没法扫描amavisd-new产生的临时文件

shell

# gpasswd -a clamav amavis

# usermod -G amavis clamav

# chown amavis.amavis /var/spool/vscan

# chmod 750 /var/spool/vscan

# chown amavis.amavis /var/spool/vscan/tmp

# chmod 750 /var/spool/vscan/tmp

默认的/var/spool/vscan 目录属性是:

drwxr-x--- 5 amavis amavis

对于clamav用户而言,则无任何权限访问该目录,所以maillog里amavisd-new会提示:

May 19 08:38:53 as3 amavis[1752]: (01752-01) ask_av (ClamAV-clamd) FAILED - unexpected result: /var/spool/vscan/tmp/amavis-20050519T

083853-01752/parts: Access denied. ERROR\n

May 19 08:38:53 as3 amavis[1752]: (01752-01) WARN: all primary virus scanners failed, considering backups

启动ClamAV及freshclam开机自启:

shell

# service clamd start

# freshclam –daemon

# echo “/usr/bin/freshclam –daemon” >&gt; /etc/rc.d/rc.local

4、配置amavisd.con文件

修改amavisd.conf

shell

# vi /etc/amavisd.conf

修改的主要参数以下:

$mydomain = 'extmail.org';

$db_home = "$MYHOME/db";

$lock_file = "$MYHOME/amavisd.lock"; # -L

$pid_file = "$MYHOME/amavisd.pid"; # -P

$myhostname = 'mail.extmail.org';

@local_domains_maps = qw(.);

@mynetworks = qw( 127.0.0.0/8 );

对本地发出的邮件不进行内容过滤

$policy_bank{'MYNETS'} = { # mail originating from @mynetworks

originating =&gt; 1, # is true in MYNETS by default, but let's make it explicit

os_fingerprint_method =&gt; undef, # don't query p0f for internal clients

allow_disclaimers =&gt; 1, # enables disclaimer insertion if available

bypass_spam_checks_maps =&gt; [1],

bypass_banned_checks_maps =&gt; [1],

bypass_header_checks_maps =&gt; [1],

};

$sa_spam_modifies_subj = 0; # 当邮件被认为是垃圾邮件时,是否修改邮件的主题

$remove_existing_x_scanned_headers= 1; # 凡是通过 Amavisd 过滤的邮件,都会在邮件头中被加入一行邮件头信息

$remove_existing_spam_headers = 1;

# 修改投递/拦截的方法:

$final_virus_destiny = D_DISCARD;

$final_banned_destiny = D_DISCARD;

$final_spam_destiny = D_PASS;

$final_bad_header_destiny = D_PASS;

# 配置Amavisd与Clamav结合

['ClamAV-clamd',

\&ask_daemon, ["CONTSCAN {}\n", "/var/run/clamav/clamd.sock"],

qr/\bOK$/, qr/\bFOUND$/,

qr/^.*?: (?!Infected Archive)(.*) FOUND$/ ],

);

@av_scanners_backup = (

['ClamAV-clamscan', 'clamscan',

"--stdout --no-summary -r --tempdir=$TEMPBASE {}",

[0], qr/:.*\sFOUND$/, qr/^.*?: (?!Infected Archive)(.*) FOUND$/ ],

);

amavisd.conf经常使用参数说明:

$max_servers = 10; 设置最大可以使用的进程数

$sa_spam_subject_tag = '[SPAM] '; 加 [SPAM] 标记

$mydomain = 'mail.extmail.org'; 设置域名

$myhostname = 'mail.extmail.org'; 设置主机名

@local_domains_maps = qw(.); 对全部的域检查

$sa_tag2_level_deflt = 5.0; 超过这个分数,容许在邮件标题加入[SPAM] 标记

$sa_kill_level_deflt = 5.0; 超过这个分数,直接將信件备份后删除

$final_virus_destiny: 检测到病毒时的动做

$final_banned_destiny: 检测到受禁止的内容时的动做

$final_spam_destiny: 检测到垃圾邮件、广告邮件(spam)时的动做

$final_bad_header_destiny: 检测到不良信件时的动做

默认有如下几种动做:

D_PASS: 不管信件是否有问题,都会将信件发给收件人

D_DISCARD: 信件将被丢弃,而且不会告知收件人及发件人

D_BOUNCE: 信件不会发送给收件人,但会通知发件人邮件没有被投递

D_REJECT: 邮件不会被投递给收件人,但会通知发件人邮件被拒绝

注意事项:

上述$mydomain参数与$myhostname参数相同,主要是为了方便以后的病毒/垃圾汇报邮件发给系统管理员时,能投递到本地的别名里,再转交到虚拟域的特定用户。

5、配置Postfix 集成amavisd-new

增长邮件别名

shell

# vi /etc/postfix/aliases

增长以下信息,注意:默认的aliases数据库里已有一条virusalert的别名,请删除,再输入下面的别名记录,并确保全部记录都是惟一的:

virusalert: root

spam.police: root

postfix: test@extmail.org

保存并执行newaliases命令生成新的别名数据库,从新启动amavisd:

shell

# newaliases

# service amavisd restart

编辑master.cf文件:

shell

# vi /etc/postfix/master.cf

增长以下内容:

smtp-amavis unix - - n - 3 smtp

-o smtp_data_done_timeout=1200

-o smtp_send_xforward_command=yes

-o disable_dns_lookups=yes

-o max_use=10

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

编辑main.cf文件:

shell

# vi /etc/postfix/main.cf

增长以下内容:

# Content-Filter

content_filter = smtp-amavis:[127.0.0.1]:10024

receive_override_options = no_address_mappings

注意:receive_override_options 这里必须增长,禁止地址展开/影射,不然若是遇到别名的时候会引发冗余邮件的产生。

重启postfix :

shell

# service postfix restart

从新启动amavisd:

shell

# service amavisd restart

6、测试Clamav

shell

# telnet localhost 25

其过程以下:

Trying 127.0.0.1...

Connected to localhost.localdomain (127.0.0.1).

Escape character is '^]'.

220 mail.extmail.org ESMTP Postfix - by extmail.org

mail from:<postmaster@extmail.org> <&lt; 输入内容

250 2.1.0 Ok

rcpt to:&lt;test@extmail.org> <&lt; 输入内容

250 2.1.5 Ok

data &lt;&lt; 输入内容

354 End data with .

X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H* &lt;&lt; 输入内容

.

250 2.0.0 Ok: queued as BC24E85260

quit &lt;&lt; 输入内容

221 2.0.0 Bye

Connection closed by foreign host.

在邮件日志里,应该有相应的信息出现:

Mar 22 06:43:15 localhost amavis[15405]: (15405-01) Blocked INFECTED (Eicar-Test-Signature), [192.168.0.235] ->, quarantine:

virus-mI6vbjkWZ2Tz, Message-ID: <003401c88c1a$74706360$eb00a8c0@nbk00045>, mail_id: mI6vbjkWZ2Tz, Hits: -, size: 1757, 474 ms

若是看到相似这样的日志,代表Clamav+Amavisd-new工做正常。

十3、配置spam_locker 1、安装Spam_Locker

shell

# yum install extsuite-slockd

配置resolv.conf

请确认/etc/resolv.conf里的dns服务器是离你的邮件服务器最近,速度最快的dns server,slockd很依赖dns的好坏,所以给系统配置一个快速的dns能大幅度提升处理速度。如下给出一个配置仅供参考:

shell

# vi /etc/resolv.conf

增长如下内容: nameserver 61.134.1.5

上述dns服务器是西安电信的DNS服务器,对于非广东朋友,请改成离你最近的DNS服务器IP,若是可能的话,请配置一个简单的bind,成为本地的dns cache server,能够得到最高性能。这里略过这一步骤,但您必须确保dns的配置是正确而且可靠的,不然slockd将不能工做!

2、测试slockd

启动slockd

shell

# /usr/local/slockd/slockd-init start

此时slockd将启动,并进入非daemon方式的监听模式,接受来自10030端口的请求,命令行下将显示以下调试信息:

Starting spam locker daemon: slockd

starting child 2908

starting child 2909

打开另外一个ssh/终端窗口:

shell

# cd /usr/local/slockd/tools

输入:

shell

# perl policy_sig -h localhost -p 10030 --helo FOOBAR --ip 192.168.0.1 --from test@foo.com --to test@bar.com

此时,程序应该返回以下错误信息:这表示slockd初步的正常工做了。

action=554 blocked using zen.spamhaus.org, see http://bl.extmail.org/cgi/rbl?192.168.0.1

设置slockd开机自启动

shell

# /usr/local/slockd/slockd-init start # echo “/usr/local/slockd/slockd-init start” &gt;&gt; /etc/rc.d/rc.local

3、配置Postfix

slockd调试正常后,必须配置postfix以使其打开对slockd的支持。

编辑main.cf文件

shell

# vi /etc/postfix/main.cf

将 check_policy_service inet:127.0.0.1:10030 这一行记录增长到smtpd_recipient_restrictions 里,例如:

smtpd_recipient_restrictions =

permit_mynetworks,

permit_sasl_authenticated,

reject_non_fqdn_hostname,

reject_non_fqdn_sender,

reject_non_fqdn_recipient,

reject_unauth_destination,

reject_unauth_pipelining,

reject_invalid_hostname,

check_policy_service inet:127.0.0.1:10030

从新启动postfix以使配置生效

shell

# service postfix restart

注意事项: 上述配置是将slockd的查询放到最后,这也是进一步提升资源利用律的办法,由于有部分功能postfix已实现了,因此就先由postfix检测,若是检测不到再由slockd完成。

十4、配置dspam 1、安装dspam

Dspam的配置主要参考本文最后的附录部分

shell

# yum install dspam-mysql

2、导入 DSPAM 训练库

shell

# cd /root/

# wget http://www.extmail.org/download/misc/dspam/dspam-trained-data.sql.gz

# gzip -d dspam-trained-data.sql.gz

# rm -rf /var/lib/mysql/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/dspam-trained-data.sql

DSPAM的token数据库的定时清理:

shell

# crontab -e

加入如下内容:

0 0 * * * /usr/bin/mysql -u dspam -p'dspam' dspam &lt; /usr/share/dspam/sql/mysql/purge.sql

0 0 * * * /usr/bin/dspam_logrotate -a 30 -d /var/spool/dspam/data

3、配置 dspam.conf 文件

shell

# vi /etc/dspam/dspam.conf

变更内容以下:

DeliveryHost 127.0.0.1

DeliveryPort 10024

DeliveryIdent localhost

DeliveryProto SMTP

Trust extmail

Preference "signatureLocation=headers" # 'message' or 'headers'

Preference "showFactors=off"

MySQLUIDInSignature on

MySQLServer /var/lib/mysql/mysql.sock

MySQLUser dspam

MySQLPass dspam

MySQLDb dspam

MySQLCompress true

MySQLConnectionCache 10

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"

3、启动 dspam 进程

shell

# chkconfig dspamd on

# service dspamd start

查看dspam启动进程

shell

# 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

4、修改main.cf文件

shell

# vi /etc/postfix/main.cf

增长如下内容:

header_checks = regexp:/etc/postfix/dspam_header_checks

设置邮件标题过滤管理 以防止重复X-DSPAM-Signature标题,能够防止签名被报道为垃圾。这发生在当你从一个已经运行Dspam的服务器收到邮件,或被用于经过伪造的、滥发邮件来阻止你训练数据库,

shell

# vi /etc/postfix/dspam_header_checks

增长如下内容:

/^(X-DSPAM-.*)/ IGNORE

/^(X-Spam-.*)/ IGNORE

重启postfix :

shell

# service postfix restart

5、编辑 amavisd.conf 文件

shell

# vi /etc/amavisd/amavisd.conf

增长如下内容:

$dspam = '/usr/bin/dspam';

@spam_scanners = (

['SpamAssassin', 'Amavis::SpamControl::SpamAssassin'],

['DSPAM', 'Amavis::SpamControl::ExtProg', $dspam,

[ qw(--client --stdout --deliver=spam,innocent --mode=teft --user extmail)],

],

);

SA增长DSpam插件:

shell

# cd /usr/lib/perl5/vendor_perl/5.8.5/Mail/SpamAssassin/Plugin

# wget http://www.extmail.org/download/misc/dspam/dspam.pm

编辑 local.cf 文件

shell

# cd /etc/mail/spamassassin/

# wget http://www.extmail.org/download/misc/dspam/dspam.cf

# vi local.cf

在下面增长如下内容

include dspam.cf

编辑 init.pre 文件:

shell

# vi init.pre

在下面增长如下内容

loadplugin Mail::SpamAssassin::Plugin::dspam

重启amavisd

shell

# service amavisd restart

6、增长 extmail 的垃圾邮件举报

说明:

Extmail 1.0.9正式加入垃圾邮件举报功能,主要基于(xueron)的补丁包,并进行了必定的调整,使该功能能够兼容DSPAM及Spamassassin两种内容过滤软件的训练。

Extmail1.1.1加入(stvictor)提供的spamassassin举报功能,感谢!

修改 webmail.cf

shell

# vi /var/www/extsuite/extmail/webmail.cf

主要变更的内容以下:

SYS_SPAM_REPORT_ON = 1

SYS_SPAM_REPORT_TYPE = dspam

设置maidrop的全局过滤

shell

# vi /etc/maildroprc

内容以下:

# Decoder for high quality key word filtering

# Author: hzqbbc &lt;hzqbbc@hzqbbc.com> - ExtMail Dev Team

DECODER="/var/www/extsuite/extmail/tools/decode -v"

if ((/^(From|Sender|Return-Path):.*MAILER\-DAEMON/))

{

BADSENDER=1

}

# Custom filter and auto deliver to Junk mailbox support

# need test command and other Unix command

`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/."

}

}

}

7、配置DSPAM Web 界面

安装相关的rpm包:

shell

# yum install perl-GDGraph

# yum install perl-GD-Graph3d

# yum install dspam-web

建立dspam-web 认证用户:

shell

# cd /usr/share/dspam/webui/cgi-bin

# echo “extmail” &gt; admins

# htpasswd -c .htpasswd extmail

输入认证密码

New password:

Re-type new password:

Adding password for user extmail

启动 dspam-web 守护进程

shell

# service dspam-webd start

这实际是启动了mini_httpd进程,查看 mini_httpd 是否启动正常:

shell

# 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

重启 apache

shell

# /etc/init.d/httpd restart

访问 dspam-web

http://mail.example.com/dspam

输入你在 .htpasswd 文件中建立的用户和密码

十5、补充设置

如下是补充的ExtMail Solution有关文档,主要是为但愿进一步了解mail系统运行,并提升extmail效能的朋友准备,对于初学者而言,建议要先打好基础再进行测试。

1、增长FCGI支持

为extmail增长FCGI的支持,主要是为了得到优异的web效能,克服CGI不能应付大量访问及低效率的缺陷。根据咱们的测试,CGI模式下的页面效率只有FCGI下的1/10~1/100,所以建议有条件的用户仍是使用FCGI。往后ExtMail Solution的web CGI程序将所有都支持FCGI。

Extmail开发团队花了大量时间从新设计了FCGI server的进程管理模型,并参考了apache的机制,新版dispatch.fcgi 终于能够象apache同样定义max server数,min server(启动进程数)以及每进程服务次数,每进程执行时限等,可较好的利用系统cpu/内存资源,既保证很少占内存,又可保证请求数上升时能有足够进程数服务。

就咱们搜索发现,目前网上尚未开源版的FastCGI server能实现上述自适应负载功能(例如php-fpm还未实现,POE等也未实现),因此Extmail的dispatch.fcgi也许是第一个实现了这个功能。

mod_fastcgi 是针对Apache Web服务器的FCGI支持模块,下载地址: http://www.fastcgi.com/dist/mod_fastcgi-2.4.6.tar.gz

安装mod_fastcgi :

shell

# wget http://www.fastcgi.com/dist/mod_fastcgi-2.4.6.tar.gz

# tar xfz mod_fastcgi-2.4.6.tar.gz

# cd mod_fastcgi-2.4.6

# cp Makefile.AP2 Makefile

# make top_dir=/etc/httpd install

安装perl-FCGI 除了Apache须要FCGI的支持外,extmail也须要相应的perl-FCGI模块。

shell

# yun install perl-FCGI

配置虚拟主机:

shell

# vi /etc/httpd/conf/vhost_extmail.conf

增长内容以下:

LoadModule fastcgi_module modules/mod_fastcgi.so

<Ifmodule mod_fastcgi.c>

FastCgiExternalServer /usr/bin/dispatch.fcgi -host 127.0.0.1:8888 -idle-timeout 240

</Ifmodule>

#同时,去掉以下行:

#ScriptAlias /extmail/cgi/ /var/www/extsuite/extmail/cgi/

#改成:

Alias /extmail/cgi/ /usr/bin/dispatch.fcgi/

<Location "/extmail/cgi">

SetHandler fastcgi-script

</Location>

重启Apache和fastcgi server开机自启动:

shell

# service httpd restart

# /var/www/extsuite/extmail/dispatch-init start

# echo “/var/www/extsuite/extmail/dispatch-init start” &gt;&gt; /etc/rc.d/rc.local

结束语:

经过此文档,读者应该可以较容易地架设一个功能较齐全的电子邮件系统。本文档将继续保持更新,逐步将一些高级的设置方法公布出来,争取ExtMail Solution更加完整,力求完美。

已知Bugs:

整个ExtMail Solution尽力将Opensource软件的优势发挥到极至,但免不了仍是有bug。如下是几个已知的问题:

Amavisd-new

退信模板仍是英文的

产生的汇报信息不够友好

Spam Locker

错误识别一些配置异常的mail服务器

与内容过滤器结合不够紧密

TODO 列表

支持SMTP 及 POP3/IMAP的TLS/SSL加密

HTTP及SMTP/POP3等CA证书的配置

更精细的Anti-Spam策略及关键字过滤

附录 Dspam+Amavis-new+SA+Clamav

编写本文的初衷,是为了提升反垃圾邮件效果,并克服dspam初期训练、配置的各类困难过程,减轻系统管理员的负担,架设一个全功能,全自动的反垃圾邮件系统;

DSPAM 的特色:

DSPAM是一个专为企业设计的可扩展而且基于开放源码的垃圾邮件过滤器.在正确配置系统,过滤成功率达99.5 % - 99.95%。 DSPAM支持多种MTA,并还能够部署做为一个独立的SMTP设备。对于软件开发商而言,DSPAM的核心引擎( libdspam )能够很容易地直接引入其过滤器系统,目前,DSPAM已经应用到350000个邮箱中。

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

目前DSPAM支持的存储包括SQLite,Berkeley DB,MySQL,PostgreSQL,Oracle和hash。能够与任何的MTA (Mail Transfer Agent)Sendmail, Postfix, Exim, Courier, Communigate Pro, 和 QMail 工做。

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

1、配置 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 -u dspam -pdspam dspam < mysql_objects-4.1.sql

# mysql -u dspam -pdspam dspam &lt; virtual_users.sql

3、DSPAM的token数据库的定时清理:

# crontab -e

加入如下内容:

引用:

0 0 * * * /usr/bin/mysql -u dspam -p'dspam' dspam &lt; /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

2、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

3、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

4、安装 ExtMail

说明:

Extmail 1.0.9正式加入垃圾邮件举报功能,主要基于(xueron)的补丁包,并进行了必定的调整,使该功能能够兼容DSPAM及Spamassassin两种内容过滤软件的训练。Extmail1.1.1加入(stvictor)提供的spamassassin举报功能,感谢!

1、安装 ExtMail

# 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 &lt;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

5、训练 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

6、配置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 文件中建立的用户和密码

十5、补充设置

如下是补充的ExtMail Solution有关文档,主要是为但愿进一步了解mail系统运行,并提升extmail效能的朋友准备,对于初学者而言,建议要先打好基础再进行测试。

1、增长FCGI支持

为extmail增长FCGI的支持,主要是为了得到优异的web效能,克服CGI不能应付大量访问及低效率的缺陷。根据咱们的测试,CGI模式下的页面效率只有FCGI下的1/10~1/100,所以建议有条件的用户仍是使用FCGI。往后ExtMail Solution的web CGI程序将所有都支持FCGI。

Extmail开发团队花了大量时间从新设计了FCGI server的进程管理模型,并参考了apache的机制,新版dispatch.fcgi 终于能够象apache同样定义max server数,min server(启动进程数)以及每进程服务次数,每进程执行时限等,可较好的利用系统cpu/内存资源,既保证很少占内存,又可保证请求数上升时能有足够进程数服务。

就咱们搜索发现,目前网上尚未开源版的FastCGI server能实现上述自适应负载功能(例如php-fpm还未实现,POE等也未实现),因此Extmail的dispatch.fcgi也许是第一个实现了这个功能。

mod_fastcgi 是针对Apache Web服务器的FCGI支持模块,下载地址: http://www.fastcgi.com/dist/mod_fastcgi-2.4.6.tar.gz

安装mod_fastcgi :

shell

# wget http://www.fastcgi.com/dist/mod_fastcgi-2.4.6.tar.gz
# tar xfz mod_fastcgi-2.4.6.tar.gz
# cd mod_fastcgi-2.4.6
# cp Makefile.AP2 Makefile
# make top_dir=/etc/httpd install

安装perl-FCGI 除了Apache须要FCGI的支持外,extmail也须要相应的perl-FCGI模块。

shell

# yun install perl-FCGI

配置虚拟主机:

shell

# vi /etc/httpd/conf/vhost_extmail.conf

增长内容以下:

LoadModule fastcgi_module modules/mod_fastcgi.so

<Ifmodule mod_fastcgi.c>

FastCgiExternalServer /usr/bin/dispatch.fcgi -host 127.0.0.1:8888 -idle-timeout 240

</Ifmodule>

#同时,去掉以下行:

#ScriptAlias /extmail/cgi/ /var/www/extsuite/extmail/cgi/

#改成:

Alias /extmail/cgi/ /usr/bin/dispatch.fcgi/

<Location "/extmail/cgi">

SetHandler fastcgi-script

</Location>

重启Apache和fastcgi server开机自启动:

shell

# service httpd restart
# /var/www/extsuite/extmail/dispatch-init start
# echo “/var/www/extsuite/extmail/dispatch-init start” &gt;&gt; /etc/rc.d/rc.local

结束语:
经过此文档,读者应该可以较容易地架设一个功能较齐全的电子邮件系统。本文档将继续保持更新,逐步将一些高级的设置方法公布出来,争取ExtMail Solution更加完整,力求完美。

已知Bugs:
整个ExtMail Solution尽力将Opensource软件的优势发挥到极至,但免不了仍是有bug。如下是几个已知的问题:

Amavisd-new

退信模板仍是英文的

产生的汇报信息不够友好

Spam Locker

错误识别一些配置异常的mail服务器

与内容过滤器结合不够紧密

TODO 列表

支持SMTP 及 POP3/IMAP的TLS/SSL加密

HTTP及SMTP/POP3等CA证书的配置

更精细的Anti-Spam策略及关键字过滤

系统安全配置(基于iptables)

 

相关文章
相关标签/搜索