wget http://mirror.extmail.org/yum/misc/EMOS15-base.repo
wget http://mirror.extmail.org/yum/misc/EMOS15-extra.repo


安装需要的yum
yum -y install ntsysv ntp telnet wget rsync vixie-cron logwatch perl-Unix-Syslog perl-Net-Daemon perl-PlRPC perl-DBI perl-DBD-MySQL  freetype-demos freetype-devel libart_lgpl-devel libpng libpng-devel perl-Time-HiRes perl-Time-HiRes-Value perl-File-Tail  perl-libwww-perl perl-HTML-Parser perl-HTML-Tagset perl-IO-stringy perl-IO-Multiplex perl-MailTools perl-TimeDate perl-Convert-ASN1 perl-Convert-BinHex perl-MIME-tools perl-FCGI perl-GD rrdtool rrdtool-perl apr-devel apr-docs apr-util-devel apr-util-docs giflib libgdiplus mono-core dbus-sharp dbus-sharp-devel dbus-glib-devel dbh dbh-devel pcre pcre-devel httpd httpd-devel httpd-manual mysql mysql-devel mysql-server cyrus-sasl cyrus-sasl-plain bind bind-chroot amavisd-new clamd clamav clamav-db spamassassin bison bzip2-devel expect fam-devel flex freetype-devel gcc gcc-c++ gdbm-devel libc-client-devel libjpeg-devel libmcrypt libmcrypt-devel libpng-devel libxslt-devel make rpm-build mod_ssl php php-gd php-mysql php-mbstring php-mcrypt phpmyadmin perl-Mon perl-Authen-PAM perl-Filter perl-Net_SSLeay.pm perl-Convert-BER perl-URI   perl-XML-SAX perl-Crypt-Blowfish perl-Crypt-CBC perl-Date-Calc  ncurses-devel net-snmp-devel libtool openssl openssl-devel openssl-perl pam-devel pkgconfig postgresql-devel zlib-devel

 

1、下载软件包
更改一下 系统的名字  
以下配置的的 mail.extmail.org  和 extmail.org 不用修改 默认。   搭建好后 可以在 extmain后台 修改的域名的
hostname  mail.nb03.com
vim /etc/sysconfig/network
HOSTNAME=mail.nb03.com 重启系统

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

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

shell
# su - root
# cd /root
# wget http://blog.linuxemail.cn/EMOS/EMOS_1.5_i386.iso

2、制作本地 yum 仓库

使用EMOS-1.5.ISO光盘制作本地 yum 仓库;

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

安装CentOS-5.3光盘中createrepo工具

shell
yum -y install createrepo   这个软件是用来校验 rpm包的
# rpm -ivh createrepo-0.4.11-3.el5.noarch.rpm
加载EMOS-1.5的光盘,请把emos的光盘放到光驱中  这里是用回环挂载

shell

# mkdir /mnt/EMOS
# mount -t loop EMOS_1.5_i386.iso /mnt/EMOS(或者mount /dev/hdc /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
=====================================================================================================================

1、安装postfix   和  sendmail 一样用来发送邮件的 属于 MTA

安装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
=========================================================================

 

 

 

 


1、安装Courier-Authlib  ///使用authlib登陆验证.这样可以不用管后台用户数据是用什么方式存储的.比方说PGSQL/LDAP


安装以下软件包:

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/

 

 

 

 

=====================================================================

 

1、安装maildrop  //它可以实现邮件过滤的一些功能,还有一个功能是将邮件投递到正确的邮箱里。  属于MDA

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个空格(实践测试我是空个空格的) 不然启动不了 postfix的
#发现前面加空格后不能收邮件,把空格去掉后即没有空格,能正常收邮件,并且postfix也是能正常启动。前面说的加1个或2个空格会不能启动,是有时会发生。#20111111
#还有要注意的:一定要注意的:

此处要注意argv=后边的maildrop要加上路径,否则会出现
temporary failure. Command output: pipe: fatal: pipe_command: execvp maildrop: No such

file or directory
注意maildrop unix这行前边不能有空格,要不会出现以下错误提示
warning: connect to transport maildrop: No such file or directory
Oct 31 23:21:24 localhost postfix/error[2235]: BE0AE27DAF6: to=,

relay=none, delay=1443, delays=1443/0.24/0/0.02, dsn=4.3.0, status=deferred (mail

transport unavailable)
注意flags=Drhu这一行前边有两个空格,要不会出现以下错(fatal: /etc/postfix/master.cf: line


postmail启动成功后。如果能发送 。不能接收邮件 看日子  tail  -f  /var/log/maillog   看下报错信息。一般都是以上说的问题了

 

 

2、测试maildrop对authlib支持

shell
# maildrop -v
看是否出现以下内容:

maildrop 2.1.0 Copyright 1998-2005 Double Precision, Inc.
GDBM/DB 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.
注意事项:

1、如需重新编译Maildrop软件包,必须先获得其源码rpm包,并且必须先行安装courier-authlib及其devel软件包,否则编译后的maildrop将无法打开authlib支持。

2、maildrop RPM包安装时,会自动创建vuser用户及vgroup用户组,专门用于邮件的存储,vuser:vgroup的uid/gid都是1000,这与一般的邮件文档中提及用postfix用户存邮件不一样。因为postfix用户的uid一般都低于500,而Suexec模块编译时对UID/GID的要求是要大于500,因此使用postfix用户不能满足要求。其次,如果用Maildrop作为投递代理(MDA),以postfix身份投递的话,会导致postfix MTA错误。

 

 

 


===========================================================

 

 

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

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

设置apache开机启动

shell
# chkconfig httpd on

 


=========================================================================================

1、安装ExtMail   ///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/

 

 

 

 

=====================================================================================


1、yum安装ExtMan   //它是 extmail 的后台

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
注意事项:

由于RedHat发行版中包含了一个叫tmpwatch的工具,该工具会定期扫描/tmp/下的文件,如果这些文件很久都没被使用,将被删除,因此如果后台长期不使用,/tmp/extman目录有可能被tmpwatch删除,所以要么定期登陆后台,要么修改 webman.cf将临时目录修改到另一个地方。此处暂以/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 < /var/www/extsuite/extman/docs/init.sql
注意事项:

上述导入初始化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 [email protected] extmail
结果如下:

Authentication succeeded.

     Authenticated: [email protected]  (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的登陆页,不过此时还没有加正式的用户,所以不能登陆,包括[email protected]也不行。必须要登陆到http://mail.extmail.org/extman/ 里增加一个新帐户才能登陆。

ExtMan的默认超级管理员帐户:[email protected],初始密码: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" >> /etc/rc.d/rc.local
# echo "/var/www/extsuite/extman/daemon/cmdserver -v -d" >> /etc/rc.d/rc.local
使用方法: 等待大约15分钟左右,如果邮件系统有一定的流量,即可登陆到extman里,点“图形日志”即可看到图形化的日志。具体每天,周,月,年的则点击相应的图片进入即可。

 

 

 

 

===============================================================================


RHEL-5/CentOS-5的cyrus-sasl默认没有打开authdaemon的支持,为了使用集中认证的authlib,必须打开这个支持。为此我们必须删除系统的cyrus-sasl软件包,替换成打开了authdaemon支持的sasl软件包。
假如安装失败
提示 You could try using --skip-broken to work around the problem
 You could try running: package-cleanup --problems
                        package-cleanup --dupes
                        rpm -Va --nofiles --nodigest
解决方法
rpm -e --nodeps cyrus-sasl-devel
rpm -e --nodeps cyrus-sasl-lib
rpm -e --nodeps cyrus-sasl-md5
rpm -e --nodeps cyrus-sasl-plain

之后yum install cyrus-sasl

装上了
原因是卸载系统自带搞版本的 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认证
记得要登陆  到extman 后台 修过 [email protected]  用户的密码是 extmail
通过以下命令获得[email protected]的用户名及密码的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     << 输入内容
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     << 输入内容
334 VXNlcm5hbWU6
cG9zdG1hc3RlckBleHRtYWlsLm9yZw==     << 输入内容
334 UGFzc3dvcmQ6
ZXh0bWFpbA==     << 输入内容
235 2.0.0 Authentication successful
quit     << 输入内容
221 2.0.0 Bye
最后出现235 Authentication Successful 表明认证成功了。


====================================================================================

 

1、安装Courier-imap  是负责接收的//IMAP 服务器上的邮件被贮存在服务器上,即便你下载并阅读了它们,这些邮件仍被保留在服务器上;POP 邮件被你的电子邮件客户直接下载,而且不被保留在服务器上。

默认的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自行建立[email protected]用户,密码: extmail)
 chkconfig  courier-imap  on
shell
# telnet localhost 110
其过程如下:

Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
+OK Hello there.
user [email protected]     << 输入内容
+OK Password required.
pass extmail     << 输入内容
+OK logged in.
list     << 输入内容
+OK POP3 clients that break here, they violate STD53.
.
quit     << 输入内容
+OK Bye-bye.
Connection closed by foreign host.

======================================================================

 

 

1、安装amavisd-new    //内容过滤器  配置简单的  邮件系统可以不用安装
amavisd-new 是一个介于 MTA 和内容过滤软件之间的桥梁,其角色就像是两者之间的沟通者。 amavisd-new 本身也是个简单的 MTA,也可以用来架设一个独立的 Mail Gateway,提供多台 Mail Server 做邮件过滤。除此之外,amavisd -new 还可以结合十多种杀毒软件来做病毒防护。

amavisd-new 在这里的作用主要是:

负责调用 ClamAV 对邮件进行病毒扫描
负责调用 SpamAssassin 对邮件内容进行过滤

 


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及开机自启:

shell
# service clamd start
# freshclam –daemon
chkconfig  clamd on
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 => 1,  # is true in MYNETS by default, but let's make it explicit
  os_fingerprint_method => undef,  # don't query p0f for internal clients
  allow_disclaimers => 1,  # enables disclaimer insertion if available
  bypass_spam_checks_maps => [1],
  bypass_banned_checks_maps => [1],
  bypass_header_checks_maps => [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:       [email protected]
保存并执行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:     << 输入内容
250 2.1.0 Ok
rcpt to:     << 输入内容
250 2.1.5 Ok
data     << 输入内容
354 End data with .
X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*     << 输入内容
.   << 输入内容
250 2.0.0 Ok: queued as BC24E85260
quit     << 输入内容
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工作正常。

 

===============================================================================

1、安装Spam_Locker   SMTP阶段反垃圾邮件工具


shell
# yum install extsuite-slockd
配置resolv.conf

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

shell
# vi /etc/resolv.conf
增加以下内容:

nameserver 202.96.209.6
上述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 [email protected] --to [email protected]
此时,程序应该返回如下错误信息:这表示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" >> /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完成。

================================================================================

1、安装dspam  高效的反垃圾邮件工具   高精确度的、智能的过滤功能

 

Dspam的配置主要参考《Dspam+Amavis-new+SA-Clamav for EMOS》

链接: http://www.extmail.org/forum/viewthread.php?tid=10393&extra=&page=1

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 < /root/dspam-trained-data.sql 提示输入密码 输入 dspam即可
DSPAM的token数据库的定时清理:

shell
# crontab -e
加入以下内容:

0 0 * * * /usr/bin/mysql -u dspam -p'dspam' dspam < /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.8/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 - 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" > admins
# htpasswd -c .htpasswd extmail
输入认证密码

New password:
Re-type new password:
Adding password for user extmail
启动 dspam-web 守护进程

shell
# service dspam-webd start
chkconfig dspam-webd  on
这实际是启动了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
# service httpd restart
访问 dspam-web

http://mail.example.com/dspam
输入你在 .htpasswd 文件中创建的用户和密码


====================================================================================

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
vim  Makefile 的文件路径
[root@mail mod_fastcgi-2.4.6]# find  / -name   apachectl
/usr/sbin/apachectl

[root@mail mod_fastcgi-2.4.6]# find  / -name  apxs
/usr/sbin/apxs

# 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


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

#同时,去掉如下行:
#ScriptAlias /extmail/cgi/ /var/www/extsuite/extmail/cgi/

#改为:
Alias /extmail/cgi/ /usr/bin/dispatch.fcgi/

SetHandler fastcgi-script

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

shell
# service httpd restart
# /var/www/extsuite/extmail/dispatch-init start
# echo “/var/www/extsuite/extmail/dispatch-init start” >> /etc/rc.d/rc.local
结束语:
通过此文档,读者应该能够较容易地架设一个功能较齐全的电子邮件系统。本文档将继续保持更新,逐步将一些高级的设置方法公布出来,争取ExtMail Solution更加完整,力求完美。

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

Amavisd-new

退信模板还是英文的
产生的汇报信息不够友好
TODO 列表

支持SMTP 及 POP3/IMAP的TLS/SSL加密
HTTP及SMTP/POP3等CA证书的配置
更精细的Anti-Spam策略及关键字过滤
系统安全配置(基于iptables)