extmail搭建文档 
参考: 
http://wiki.extmail.org 

一、系统环境 
系统:centos 5.11_86 (因为该软件对64位系统支持不够,建议32位系统) 
服务:HTTP、MySQL 
二、yum源准备 


vim /etc/yum.repos.d/EMOS-Base.repo 

加入以下内容: 

# EMOS-Base.repo 
# 
# Created by ExtMail Dev Team: http://www.extmail.org/ 
# 
# $Id$ 

[EMOS-base] 
name=EMOS-Base 
baseurl=http://mirror.extmail.org/yum/emos/1.5/os/$basearch/ 
gpgcheck=0 
priority=0 
protect=0 

[EMOS-update] 
name=EMOS-Updates 
baseurl=http://mirror.extmail.org/yum/emos/1.5/updates/$basearch/ 
gpgcheck=0 
priority=0 
protect=0 

三、配置mta-postfix 

1、安装postfix 

安装postfix 

shell 
yum install postfix -y 
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 
vim /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 

四、配置Courier-Authlib 

1、安装Courier-Authlib 

安装以下软件包: 

shell 
yum install courier-authlib -y 
yum install courier-authlib-mysql -y 

编辑/etc/authlib/authmysqlrc文件: 

shell 
vim /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 
vim /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/ 

五、配置maildrop 

1、安装maildrop 

shell 
yum install maildrop -y 

配置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} 

注意:flags前面有“两个空格” 

配置main.cf 由于maildrop不支持一次接收多个收件人,因此必须在main.cf里增加如下参数: 

maildrop_destination_recipient_limit = 1 

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错误。 

六、配置Apache 

1、虚拟主机设置 

编辑httpd.conf文件: 

shell 
vim /etc/httpd/conf/httpd.conf 

在最后一行加上: 

NameVirtualHost *:80 
Include conf/vhost_*.conf 

编辑 vhost_extmail.conf 

shell 
vim /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 

七、配置webmail-exmail 

1、安装ExtMail 

shell 
yum install extsuite-webmail -y 
2、编辑webmail.cf 

shell 
cd /var/www/extsuite/extmail 
cp webmail.cf.default webmail.cf 
vim 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/ 

八、配置管理后台-extman 

1、yum安装ExtMan 

shell 
yum install extsuite-webman -y 

更新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 

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

备注2: MYSQL5.5.x 版本不支持 TYPE=MyISAM 这样的语句,请执行以下脚本后,再导入数据库。 

shell 
sed -i 's/TYPE=MyISAM/ENGINE=MyISAM/g' /usr/local/www/extman/docs/extmail.sql 
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 
vim /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 

建立刚才导入mysql的postmaster@extmail.org帐户的Maildir,请输入如下命令: 

shell 
cd /var/www/extsuite/extman/tools 
./maildirmake.pl /home/domains/extmail.org/postmaster/Maildir 
chown -R vuser:vgroup /home/domains/extmail.org 

在命令行下执行: 

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" >> /etc/rc.d/rc.local 
echo "/var/www/extsuite/extman/daemon/cmdserver -v -d" >> /etc/rc.d/rc.local 

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

添加定时任务: 

shell 
crontab -e 

添加以下内容: 

0 4 * * * /var/www/extsuite/extman/tools/expireusers.pl -all postmaster@extmail.org 
30 4 * * * /var/www/extsuite/extman/tools/reportusage.pl -all /home/domains postmaster@extmail.org 


九、配置cyrus-sasl 

RHEL-5/CentOS-5的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 -y 

2、配置main.cf文件 

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

编辑main.cf 

shell 
vim /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 
vim /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 << 输入内容 
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 表明认证成功了。 

十、配置courier-imap 

1、安装Courier-imap 

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

shell 
yum install courier-imap -y 

配置courier-imap 

由于Courier-imap的IMAP目录是按UTF-7编码的,ExtMail目前还没有正式支持IMAP目录,因此需要屏蔽IMAP,只提供pop3服务。而就目前的使用情况来看,IMAP使用的非常少,绝大部分OutLook/Foxmail用户都习惯使用POP3而非IMAP。 

shell 
vim /usr/lib/courier-imap/etc/imapd 

修改内容如下: 

IMAPDSTART=NO 

shell 
vim /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 << 输入内容 
+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 

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.conf debug 

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

设置amavisd开机自启: 

shell 
service amavisd start 
chkconfig amavisd on 
3、配置ClamAV 

安装ClamAV 

shell 
cd /root/rpm 
wget http://packages.sw.be/clamav/clamav-0.97-1.el5.rf.i386.rpm 
wget http://packages.sw.be/clamav/clamd-0.97-1.el5.rf.i386.rpm 
wget http://packages.sw.be/clamav/clamav-db-0.97-1.el5.rf.i386.rpm 
rpm -ivh clam* 

备注: 这里的ClamAV采用packages.sw.be站点的RPM包,因为EMOS里面的版本太旧,导致测试时老出问题。 

编辑clamd.conf文件 

shell 
vim /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 
4、配置amavisd.con文件 

修改amavisd.conf 

shell 
vim /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结合 
@av_scanners = ( 
['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 
vim /etc/postfix/aliases 

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

virusalert: root 
spam.police: root 
postfix: test@extmail.org 

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

shell 
newaliases 
service amavisd restart 

编辑master.cf文件: 

shell 
vim /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 
vim /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> << 输入内容 
250 2.1.0 Ok 
rcpt to:<test@extmail.org> << 输入内容 
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工作正常。 

十二、配置spam_locker 

1、安装Spam_Locker 

shell 
# yum install extsuite-slockd 

配置resolv.conf 

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

shell 
# vim /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 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" >> /etc/rc.d/rc.local 
3、配置Postfix 

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

编辑main.cf文件 

shell 
# vim /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完成。 

十三、配置dspam 

1、安装dspam 

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

链接: http://www.extmail.org/forum/thread-10393-1-1.html 

shell 
yum install dspam-mysql -y 
2、导入 DSPAM 训练库 

shell 
cd /usr/src 
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 < /usr/share/dspam/sql/mysql/purge.sql 
0 0 * * * /usr/bin/dspam_logrotate -a 30 -d /var/spool/dspam/data 

3、配置 dspam.conf 文件 

shell 
# vim /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 
ServerHost 127.0.0.1 
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 
# vim /etc/postfix/main.cf 

增加以下内容: 

header_checks = regexp:/etc/postfix/dspam_header_checks 

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

shell 
# vim /etc/postfix/dspam_header_checks 

增加以下内容: 

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

重启postfix : 

shell 
# service postfix restart 
5、编辑 amavisd.conf 文件 

shell 
# vim /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 
# vim local.cf 

在下面增加以下内容 

include dspam.cf 

编辑 init.pre 文件: 

shell 
# vim 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 
# vim /var/www/extsuite/extmail/webmail.cf 

主要变动的内容如下: 

SYS_SPAM_REPORT_ON = 1 
SYS_SPAM_REPORT_TYPE = dspam 

设置maidrop的全局过滤 

shell 
# vim /etc/maildroprc 

内容如下: 

# Decoder for high quality key word filtering 
# 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 
} 

# 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 界面 

备注: Dspam_WebUI for Nginx配置: 

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

安装相关的rpm包: 

shell 
yum install perl-GDGraph -y 
yum install perl-GD-Graph3d -y 
yum install dspam-web -y 

创建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 

这实际是启动了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 文件中创建的用户和密码 















附件上传大小限制问题:



使由 Exmail+Postfix 搭建的邮件系统能上传50M的附件


1. 修改/etc/php.ini


max_execution_time = 30 #改为60 (增加处理脚本的时间限制)

memory_limit = 8M #改为50M (这样才能发10M的附件)

post_max_size = 2M #改为50M

upload_max_filesize = 2M #改为50M


2. 修改/etc/httpd/conf.d/php.conf


<Files *.php>;

    SetOutputFilter PHP

    SetInputFilter PHP

    LimitRequestBody 524288  #把524288改为51200000

</Files>;

 这里的 LimitRequestBody 524288 限定了上传附件的上限为512k, 将其改为50M


3. 修改/etc/postfix/main.cf, 添加如下语句:


message_size_limit = 69120000

postfix的默认值是10M, 但这指的是邮件正文和编码后附件的总和, 经过base64编码,附件的大小会增加35%左右, 因此这里设定可接受邮件的大小为69M

可以使用如下命令查看postfix的有关设定:

# /usr/sbin/postconf | grep size


4. 修改/var/www/extsuite/extmail/webmail.cf


SYS_MESSAGE_SIZE_LIMIT = 51200000


5. 重起apache和postfix.











1、extman 日志不显示

原因:

        /tmp/viewlog 权限不够

解决 

       chmod 777 -R /tmp/viewlog

2、无法新建用户

原因: 

      没有cgi的执行权限

解决:

       chown -R vuser:vgroup /var/www/extsuite/*

3、登录extman,提示 Connection refused



原因

       cmdserver 没有启动

解决

     /var/www/extsuite/extman/daemon/cmdserver -v -d