extmail安装

这几天在安装了一个mail系统,把安装过程记录一下,在我的机器中安装成功,但是大家在安装时一定要看提示,一定要细心,因为每个系统不一样,不可以照抄照做。
ExtMail Solution 是一个基于优秀开源软件的电子邮件系统解决方案,核心部件包括了Postfix, Amavisd-new, ClamAV, ExtMail 和ExtMan, Courier系列软件。是一个功能相对比较齐全的免费电子邮件系统。
一、配置selinux
屏蔽掉SELinux对MySQL及httpd的保护。方法如下:
setsebool httpd_disable_trans=1
setsebool mysqld_disable_trans=1
操作完毕后,重新启动mysql及apache,并将如下命令加入/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
二、下载ExtMail Solution软件包
su - root
cd /root
wget http://www.extmail.org/source/ExtMail-Solution-Linux-0.2.tar.gz 
wget http://www.extmail.org/source/md5sum.es_linux-0.2
cat md5sum.es_linux-0.2
md5sum ExtMail-Solution-Linux-0.2.tar.gz
在/root目录解开:
tar xfz ExtMail-Solution-Linux-0.2.tar.gz
我们本次安装默认域是mail1.qyhw.org,主机名为:mail1.qyhw.org,ExtMail Solution的文件目录是/root/ExtMail-Solution-Linux-0.2/
我们进入/root/ExtMail-Solution-Linux-0.2/目录,绝大部分都是发生在/root/ExtMail-Solution-Linux-0.2目录里,请确保当前目录为: /root/ExtMail-Solution-Linux-0.2
配置Postfix MTA
删除冲突软件,sendmail,需要执行:
rpm -e --nodeps sendmail
安装postfix
rpm -ivh --nodeps RPMS/postfix-2.5.1-2ext.i386.rpm
postfix-2.5.5-3.ired.i386.rpm 这里我是安装的这个包,它带的这个我安装后,以后的配置中出现问题,大家最好是postconf -m查
看下是不是有mysql模块,有这个模块就可以

配置postfix
简化postfix配置:
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:
vi /etc/postfix/main.cf
增加如下内容:
# hostname
mynetworks = 210.51.173.189/32,172.20.0.0/16,127.0.0.0/8
myhostname = mail1.qyhw.org
mydestination = $mynetworks $myhostname $mydomain
mydomain = mail1.qyhw.org
inet_interfaces = all
# banner
mail_name = Postfix - by extmail.org
smtpd_banner = $myhostname ESMTP $mail_name
# response immediately
smtpd_error_sleep_time = 0s
unknown_local_recipient_reject_code = 450
# 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:
编辑mysql_virtual_alias_maps.cf
vi /etc/postfix/mysql_virtual_alias_maps.cf
内容如下:
user = extmail
password = extmail
hosts = localhost
dbname = extmail
table = alias
select_field = goto
where_field = address
编辑mysql_virtual_domains_maps.cf
vi /etc/postfix/mysql_virtual_domains_maps.cf
内容如下:
user = extmail
password = extmail
hosts = localhost
dbname = extmail
table = domain
select_field = domain
where_field = domain
#additional_conditions = and backupmx ='0' and active ='1'
编辑mysql_virtual_mailbox_maps.cf
vi /etc/postfix/mysql_virtual_mailbox_maps.cf
内容如下:
user = extmail
password = extmail
hosts = localhost
dbname = extmail
table = mailbox
select_field = maildir
where_field = username
#additional_conditions = and active = '1'
配置Courier-Authlib
[root@cloned-XL-C512-00 ExtMail-Solution-Linux-0.2]# rpm -Uvh RPMS/libtool-libs-1.5.6-4.EL4.2.i386.rpm
[root@cloned-XL-C512-00 ExtMail-Solution-Linux-0.2]# rpm -ivh RPMS/courier-authlib-0.60.2-1ext.i386.rpm
[root@cloned-XL-C512-00 ExtMail-Solution-Linux-0.2]# rpm -ivh RPMS/courier-authlib-devel-0.60.2-1ext.i386.rpm
[root@cloned-XL-C512-00 ExtMail-Solution-Linux-0.2]# rpm -ivh RPMS/courier-authlib-mysql-0.60.2-1ext.i386.rpm
error: Failed dependencies:
        libcrypto.so.4 is needed by courier-authlib-mysql-0.60.2-1ext.i386
        libmysqlclient.so.14 is needed by courier-authlib-mysql-0.60.2-1ext.i386
        libmysqlclient.so.14(libmysqlclient_14) is needed by courier-authlib-mysql-0.60.2-1ext.i386
        libssl.so.4 is needed by courier-authlib-mysql-0.60.2-1ext.i386
[root@cloned-XL-C512-00 ExtMail-Solution-Linux-0.2]# 要解决这个关系,我们可另行安装两个包就可以了,我把包找好了
[root@cloned-XL-C512-00 ~]# rpm -ivh mysql.rpm
Preparing...                ########################################### [100%]
   1:mysql-libs             ########################################### [100%]
[root@cloned-XL-C512-00 ~]# rpm -ivh openssl.rpm
warning: openssl.rpm: Header V3 DSA signature: NOKEY, key ID 4f2a6fd2
Preparing...                ########################################### [100%]
   1:openssl097a            ########################################### [100%]
编辑/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)'
存盘退出后启动courier-authlib:
service courier-authlib start
如一切正常,命令行将返回如下信息:
Starting Courier authentication services: authdaemond

修改authdaemon socket目录权限
如果该目录权限不正确修改,maildrop及postfix等将无法正确获取用户的信息及密码认证:
chmod 755 /var/spool/authdaemon/

安装Maildrop
[root@cloned-XL-C512-00 ExtMail-Solution-Linux-0.2]# rpm -ivh RPMS/maildrop-2.0.4-1ext.i386.rpm
Preparing...                ########################################### [100%]
    Adding vmail group to system
    Adding vmail user to system
   1:maildrop               ########################################### [100%]
    ====================================================   
    Only root vuser postfix mail vmail can use -d option   
    ====================================================   
[root@cloned-XL-C512-00 ExtMail-Solution-Linux-0.2]# rpm -ivh RPMS/maildrop-man-2.0.4-1ext.i386.rpm
Preparing...                ########################################### [100%]
   1:maildrop-man           ########################################### [100%]
[root@cloned-XL-C512-00 ExtMail-Solution-Linux-0.2]#
配置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
最后重新启动postfix即可
配置Apache
编辑httpd.conf:
vi /etc/httpd/conf/httpd.conf
在730行左右,屏蔽掉AddDefaultCharset:
#AddDefaultCharset UTF-8
使apache开机默认启动:
chkconfig httpd on

虚拟主机设置
编辑/etc/httpd/conf/httpd.conf文件,在最后一行加上:
NameVirtualHost *:80
Include conf/vhost_*.conf

编辑/etc/httpd/conf/vhost_extmail.conf,里面定义虚拟主机的相关内容,包括主目录,以及ExtMail和ExtMan的相关配置,Suexec
的设置等。
# 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:
service httpd restart
注意:此时重新启动apache会产生以下警告信息,可不必理会
Starting httpd: Warning: DocumentRoot [/var/www/extsuite/extmail/html/] does not exist

安装ExtMail
建立/var/www/extsuite并复制源码到该目录,相关命令:
mkdir /var/www/extsuite
tar -zxvf src/extmail-1[1][1].0.4.tar.gz -C src
cp -r src/extmail-1.0.4 /var/www/extsuite/extmail
cd /var/www/extsuite/extmail
cp webmail.cf.default webmail.cf
cd $OLDPWD
注意:上面命令行中最后一个cd $OLDPWD是返回原始路径(即ExtMail Solution软件包根目录)
安装perl-Unix-Syslog包
rpm -ivh RPMS/perl-Unix-Syslog-1.0-1ext.i386.rpm
编辑webmail.cf
修改/var/www/extsuite/extmail/webmail.cf里的其他参数,主要变动的内容见下:
SYS_USER_LANG = zh_CN
SYS_USER_CHARSET = gb2312
SYS_MFILTER_ON = 1
SYS_NETDISK_ON = 1
SYS_SHOW_SIGNUP = 1
SYS_MYSQL_USER = extmail
SYS_MYSQL_PASS = extmail
SYS_MYSQL_DB = extmail
SYS_G_ABOOK_TYPE = file
SYS_G_ABOOK_FILE_CHARSET = gb2312

其中SYS_MFILTER_ON及SYS_NETDISK_ON 设置为1是为了打开网络磁盘和过滤器;SYS_SHOW_SIGNUP控制首页是否显示免费注册邮箱按钮
;全局地址本默认为ldap格式,现在也改为文本格式,并将地址本的转换编码改为GB2312
更新cgi目录权限
由于SuEXEC的需要,必须将extmail的cgi目录修改成vuser:vgroup权限:
chown -R vuser:vgroup /var/www/extsuite/extmail/cgi/
安装ExtMan - web后台
在ExtMail-Solution软件包根目录下执行:
tar -zxvf src/extman-0[1][1].2.4.tar.gz -C src
cp -r src/extman-0.2.4 /var/www/extsuite/extman/
配置webman.cf
修改/var/www/extsuite/extman/webman.cf内SYS_CHARSET及SYS_LANG参数为:
SYS_CAPTCHA_ON = 1
# SYS_CAPTCHA_ON参数控制首页是否采用校验码登陆
SYS_CHARSET = gb2312
SYS_LANG = zh_CN
其他参数基本上可以使用默认值。
安装perl-GD包
rpm -ivh RPMS/perl-GD-2.35-2ext.i386.rpm
更新cgi目录权限
由于SuEXEC的需要,必须将extman的cgi目录修改成vuser:vgroup权限:
chown -R vuser:vgroup /var/www/extsuite/extman/cgi/

确认MySQL状态
在执行mysql操作前,必须确认它已被正确安装并启动,可以用rpm命令查询mysql server的安装情况,用ps ax的办法查看进程列表是
否有mysqld进程:
rpm -aq|grep -i mysql-server
正常情况下应该可以看到mysql-server被安装:
mysql-server-4.1.20-2.RHEL4.1.0.1
如果没有,则表示没有安装好mysql-server,可以从本软件包RPMS目录里安装,也可以找安装光盘安装:
rpm -ivh RPMS/mysql-server-4.1.20-2.RHEL4.1.0.1.i386.rpm
安装完毕后必须初始化mysql,然后重新启动
/usr/bin/mysql_install_db
service mysqld start
正常情况下将启动成功:
Starting MySQL:                                            [  OK  ]
然后用ps命令来检查mysqld是否正确运行:
ps ax|grep mysqld
正常情况下应出现如下的结果:
433 pts/0 S 0:00 /bin/sh /usr/bin/mysqld_safe --defaults-file=/etc/my.cnf --pid-file=/var/run/mysqld/mysqld.pid
466 pts/0 Sl 0:00 /usr/libexec/mysqld --defaults-file=/etc/my.cnf --basedir=/usr --datadir=/var/lib/mysql --
user=mysql --pid-file=/var/run/mysqld/mysqld.pid --skip-locking --socket=/var/lib/mysql/mysql.sock
如果mysql没正确启动,请检查/var/log/mysqld.log里面的出错提示,进行处理:
tail /var/log/mysqld.log

数据库初始化
执行以下命令导入mysql数据库结构及初始化数据,注意必须逐行输入以下命令,root密码默认为空,不可直接用鼠标复制两行命令直
接输入,否则会报错!
mysql -u root -p < /var/www/extsuite/extman/docs/extmail.sql
mysql -u root -p < /var/www/extsuite/extman/docs/init.sql
链接基本库到Extmail
建立临时文件夹:
mkdir /tmp/extman
chown -R vuser:vgroup /tmp/extman
建立刚才导入mysql的 [email protected]帐户的Maildir,请输入如下命令:
cd /var/www/extsuite/extman/tools
./maildirmake.pl /home/domains/extmail.org/postmaster/Maildir
chown -R vuser:vgroup /home/domains/extmail.org
cd $OLDPWD

测试authlib
在命令行下执行:
/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*,登陆成功后,建议将密码修改,以确保安全。
配置Mailgraph_ext
自ExtMan 0.14-pre2 开始,系统集成了Mailgraph_ext插件,该插件使extman具备图形化显示邮件日志的能力。mailgraph_ext融合了
mailgraph和queuegraph两个软件包,除增加了更多的日志分析及图形显示能力外,还重写了web模块,集成到ExtMan后台里,这样邮
件日志将只能给经过授权的用户查看,提高了安全性。
mailgraph_ext及Extman都需要安装rrdtool工具
必需的软件包

- Perl 5.6+ (建议5.8以上)
- rrdtool 及rrdtool的perl包,地址:
  http://people.ee.ethz.ch/~oetiker/webtools/rrdtool/
- File::Tail (还需要Time::HiRes模块)
RHEL/CentOS一般自带了perl-Time-HiRes(1.5x)所以以下的rpm安装也许会报错(提示冲突),可以不必理会。如果想安装本文所带的
新版Time-HiRes模块,可以用如下命令删除系统自带的包:
rpm -e perl-Time-HiRes --nodeps

安装依赖包/RRDtool
[root@cloned-XL-C512-00 ExtMail-Solution-Linux-0.2]# rpm -ivh RPMS/rrdtool-1.2.12-2ext.i386.rpm RPMS/perl-rrdtool-
1.2.12-2ext.i386.rpm
error: Failed dependencies:
        libart_lgpl_2.so.2 is needed by rrdtool-1.2.12-2ext.i386
[root@cloned-XL-C512-00 ~]# rpm -ivh libart_lgpl-2.3.17-4.i386.rpm
warning: libart_lgpl-2.3.17-4.i386.rpm: Header V3 DSA signature: NOKEY, key ID 37017186
Preparing...                ########################################### [100%]
   1:libart_lgpl            ########################################### [100%]
[root@cloned-XL-C512-00 ~]#
[root@cloned-XL-C512-00 ExtMail-Solution-Linux-0.2]# rpm -ivh RPMS/rrdtool-1.2.12-2ext.i386.rpm RPMS/perl-rrdtool-
1.2.12-2ext.i386.rpm
Preparing...                ########################################### [100%]
   1:perl-rrdtool           ########################################### [ 50%]
   2:rrdtool                ########################################### [100%]
[root@cloned-XL-C512-00 ExtMail-Solution-Linux-0.2]# rpm -ivh RPMS/perl-Time-HiRes-1.72-2ext.i386.rpm --force
Preparing...                ########################################### [100%]
   1:perl-Time-HiRes        ########################################### [100%]这一点我也没有办法了,我找不到包来,只
有force了
复制mailgraph_ext
执行以下命令:
cp -r /var/www/extsuite/extman/addon/mailgraph_ext/ /usr/local/mailgraph_ext/

启动进程
启动mailgraph_ext及qmonitor:
/usr/local/mailgraph_ext/mailgraph-init start
/usr/local/mailgraph_ext/qmonitor-init start
加入自启动
为了一开机就能自动执行上述进程,将上述命令加到rc.local 里面:
echo "/usr/local/mailgraph_ext/mailgraph-init start" >> /etc/rc.d/rc.local
echo "/usr/local/mailgraph_ext/qmonitor-init start" >> /etc/rc.d/rc.local
使用方法
等待大约15分钟左右,如果邮件系统有一定的流量,即可登陆到extman里,点“图形日志”即可看到图形化的日志。具体每天,周,
月,年的则点击相应的图片进入即可。
配置Cyrus-SASL 认证
RHEL4/CentOS4的cyrus-sasl默认没有打开authdaemon的支持,为了使用集中认证的authlib,必须打开这个支持。为此我们必须删除
系统的cyrus-sasl软件包,替换成打开了authdaemon支持的sasl软件包。首先要删除系统老的cyrus-sasl:
rpm -e --nodeps cyrus-sasl
然后安装新的支持authdaemon的软件包
[root@cloned-XL-C512-00 ExtMail-Solution-Linux-0.2]# rpm -ivh --nodeps RPMS/cyrus-sasl-2.1.19-5.EL4.i386.rpm
Preparing...                ########################################### [100%]
   1:cyrus-sasl             ########################################### [100%]
Postfix的SMTP认证需要透过Cyrus-SASL,连接到authdaemon获取认证信息,编辑/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,
        permit
# SMTP AUTH config here
broken_sasl_auth_clients = yes
smtpd_sasl_auth_enable = yes
smtpd_sasl_local_domain = $myhostname
smtpd_sasl_security_options = noanonymous
其次用vi编辑/usr/lib/sasl2/smtpd.conf,确保其内容为:
pwcheck_method: authdaemond
log_level: 3
mech_list: PLAIN LOGIN
authdaemond_path:/var/spool/authdaemon/socket
存盘退出后,重新启动postfix:
service postfix start

测试SMTP认证
通过以下命令获得 [email protected]的用户名及密码的BASE64编码:
perl -e 'use MIME::Base64; print encode_base64("postmaster\@extmail.org")'
cG9zdG1hc3RlckBleHRtYWlsLm9yZw==
perl -e 'use MIME::Base64; print encode_base64("extmail")'
ZXh0bWFpbA==
然后本机测试,其过程如下(蓝色的文字是我们输入/发送到Postfix的)
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 表明认证成功了。
在这我的不出现这个,没有成功,有个报错,我看的日志,什么错误我没有拿出来,我又安装了两个包就成了,按它的提示找的包
[root@mail1 libsasl2]# rpm -ivh libsasl2-plug-plain-2.1.19-5mdk.ppc.rpm --nodeps
warning: libsasl2-plug-plain-2.1.19-5mdk.ppc.rpm: Header V3 DSA signature: NOKEY, key ID 26752624
Preparing...                ########################################### [100%]
        package libsasl2-plug-plain-2.1.19-5mdk is intended for a ppc architecture
[root@mail1 libsasl2]# rpm -ivh libsasl2-plug-login-2.1.19-5mdk.i586.rpm --nodeps
warning: libsasl2-plug-login-2.1.19-5mdk.i586.rpm: Header V3 DSA signature: NOKEY, key ID 70771ff3
Preparing...                ########################################### [100%]
   1:libsasl2-plug-login    ########################################### [100%]
###################################################
提示大家 按提示找包就可以了
###################################################
安装Courier-IMAP
用以下命令安装courier-imap的rpm包,默认的courier-authlib及courier-imap都会增加系统自启动设置,因此下一次服务器启动将
自动启动相应的authlib及POP3服务
安装Courier-IMAP
[root@mail1 ExtMail-Solution-Linux-0.2]# rpm -ivh RPMS/courier-imap-4.1.0-1hzq.i386.rpm
Preparing...                ########################################### [100%]
   1:courier-imap           ########################################### [100%]

配置courier-imap
由于Courier-imap的IMAP目录是按UTF-7编码的,ExtMail目前还没有正式支持IMAP目录,因此需要屏蔽IMAP,只提供pop3服务。而就
目前的使用情况来看,IMAP使用的非常少,绝大部分OutLook/Foxmail用户都习惯使用POP3而非IMAP。
vi /usr/lib/courier-imap/etc/imapd
将如下这行配置:
IMAPDSTART=YES
替换成为:
IMAPDSTART=NO
vi /usr/lib/courier-imap/etc/imapd-ssl
再将如下配置:
IMAPDSSLSTART=YES
替换成为:
IMAPDSSLSTART=NO
然后重新启动courier-imap:
/etc/init.d/courier-imap start

测试POP3
请按如下步骤输入pop3命令测试其是否正常工作,注意蓝色的信息是我们输入到POP3服务器的(请首先登录extman自行建立
[email protected]用户,密码:extmail)
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.
反病毒/内容过滤配置
反病毒及内容过滤器是依赖Amavisd-new软件包,它是一个多功能的过滤器,能与杀毒软件及内容过滤软件(如SpamAssassin)结合,
通用性较强。
安装依赖的Perl包
首先我们要确保系统自带的perl-Net-DNS软件包被删除干净,因为该包的版本较低(0.48),有已知的bug,所以必须替换成本文档提
供的新版(0.5x),输入如下命令:
rpm -e --nodeps perl-Net-DNS
Amavisd-new 及SpamAssassin需要依赖大量的第三方perl软件包,下列要安装的部分RPM在上述的操作中已经安装了,为了给出较明确
的依赖关系,我们依然将这些包的名称列出,如果安装时提示有安装包已安装过,或者提示冲突,请不必惊慌。请安装如下的RPM软件
包:
rpm -ivh RPMS/perl-Digest-SHA1-2.07-5.i386.rpm
rpm -ivh RPMS/perl-Digest-HMAC-1.01-2ext.i386.rpm
rpm -ivh RPMS/perl-Net-IP-1.24-2ext.i386.rpm
rpm --nodeps -ivh RPMS/perl-Net-DNS-0.57-1hzq.i386.rpm
rpm -ivh RPMS/perl-Time-HiRes-1.72-2ext.i386.rpm
rpm -ivh RPMS/perl-HTML-Tagset-3.03-30.noarch.rpm
rpm -ivh RPMS/perl-HTML-Parser-3.35-6.i386.rpm   
rpm -ivh RPMS/perl-libwww-perl-5.79-5.noarch.rpm    这个时出现提示
[root@XL-C512-01 ExtMail-Solution-Linux-0.2]# rpm -ivh RPMS/perl-libwww-perl-5.79-5.noarch.rpm
warning: RPMS/perl-libwww-perl-5.79-5.noarch.rpm: Header V3 DSA signature: NOKEY, key ID 443e1821
error: Failed dependencies:
        perl(URI) is needed by perl-libwww-perl-5.79-5.noarch
        perl(URI::Heuristic) is needed by perl-libwww-perl-5.79-5.noarch
        perl(URI::URL) is needed by perl-libwww-perl-5.79-5.noarch
又装一个包解决
[root@XL-C512-01 ftp001]# rpm -ivh perl-URI-1.35-3.noarch.rpm
    Preparing...                ########################################### [100%]
       1:perl-URI               ########################################### [100%]
rpm -ivh RPMS/spamassassin-3.1.9-1.el4.i386.rpm
rpm -ivh RPMS/perl-IO-stringy-2.110-2ext.i386.rpm
rpm -ivh RPMS/perl-IO-Multiplex-1.08-2ext.i386.rpm
rpm -ivh RPMS/perl-Net-SSLeay-1.30-1.ext.i386.rpm
rpm -ivh RPMS/perl-IO-Socket-SSL-0.97-2ext.i386.rpm
rpm -ivh RPMS/perl-Net-Server-0.93-2ext.i386.rpm
rpm -ivh RPMS/perl-TimeDate-1.16-2ext.i386.rpm
rpm -ivh RPMS/perl-MailTools-1.67-2ext.i386.rpm
rpm -ivh --force RPMS/perl-MIME-Base64-3.05-2ext.i386.rpm
rpm -ivh RPMS/perl-Convert-BinHex-1.119-2ext.i386.rpm
rpm -ivh RPMS/perl-MIME-tools-5.418-2ext.i386.rpm
rpm -ivh RPMS/perl-BerkeleyDB-0.26-2ext.i386.rpm   这个出现提示
[root@XL-C512-01 ExtMail-Solution-Linux-0.2]# rpm -ivh RPMS/perl-BerkeleyDB-0.26-2ext.i386.rpm
error: Failed dependencies:
        libdb-4.2.so is needed by perl-BerkeleyDB-0.26-2ext.i386
这个问题我们要装个包来解决
    [root@XL-C512-01 ftp001]# rpm -ivh compat-db-4.2.52-5.1.i386.rpm
    Preparing...                ########################################### [100%]
       1:compat-db              ########################################### [100%]
rpm -ivh RPMS/perl-Convert-TNEF-0.17-2ext.i386.rpm
rpm -ivh RPMS/perl-Convert-UUlib-1.051-2ext.i386.rpm
rpm -ivh RPMS/perl-Compress-Zlib-1.41-2ext.i386.rpm
rpm -ivh RPMS/perl-Archive-Zip-1.23-1ext.i386.rpm
rpm -ivh RPMS/perl-IO-Zlib-1.04-2ext.i386.rpm
rpm -ivh RPMS/perl-Archive-Tar-1.38-1ext.i386.rpm
rpm -ivh RPMS/arc-5.21o-2ext.i386.rpm
rpm -ivh RPMS/zoo-2.10-10ext.i386.rpm
rpm -ivh RPMS/unarj-2.65-50ext.i386.rpm
export LANG=C
rpm -ivh RPMS/amavisd-new-2.5.4-1ext.i386.rpm
mkdir -p /var/amavis/tmp /var/amavis/db
chown amavis.amavis /var/amavis/tmp /var/amavis/db
chmod 777 �CR /var/amavis
chown amavis.amavis /var/spool/vscan/db/
chkconfig --add amavisd
修改amavisd.conf
修改的主要参数如下,请逐一对照后修改:
$max_servers = 10;
$sa_spam_subject_tag = '[SPAM] ';
$mydomain = 'mail.extmail.org';
$myhostname = 'mail.extmail.org';
@local_domains_maps = qw(.);
$sa_tag2_level_deflt = 5.0;
$sa_kill_level_deflt = 5.0;
注意事项:
上述$mydomain参数与$myhostname参数相同,主要是为了方便之后的病毒/垃圾汇报邮件发给系统管理员时,能投递到本地的别名里,
再转交到虚拟域的特定用户。
增加如下参数(默认amavisd.conf没有):
$sa_spam_modifies_subj = 0; # don't modify subject
$remove_existing_x_scanned_headers= 1; # remove existing headers
$remove_existing_spam_headers = 1;
配置SpamAssassin
Amavisd-new 通过Mail::SpamAssassin 模块来调用SA的功能,因此这里配置SA和常规配置SA软件有些区别,主要集中在修改local.cf
文件上。
编辑/etc/mail/spamassassin/local.cf文件
vi /etc/mail/spamassassin/local.cf
将其内容修改为:
report_safe             1
use_bayes               0
auto_learn              0
bayes_auto_expire       1
skip_rbl_checks         1
use_razor2              0
use_dcc                 0
use_pyzor               0
dns_available           no
增加Chinese_rules.cf支持
Chinese_rules.cf是教育科研网的反垃圾邮件小组对大量垃圾邮件和正常邮件进行分析后得出的一个关键字/分数规则集,用于处理中
文(简体)垃圾邮件还是比较有效的。这里我们通过如下命令增加到系统:
wget -N -P /usr/share/spamassassin www.ccert.edu.cn/spam/sa/Chinese_rules.cf
由于该规则每周更新一次,为了达到最好效果,最好在crontab里增加自动更新的内容,输入:
/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没有错误:
/usr/sbin/amavisd debug
如果没有异常提示或报错退出则表示一切都正常,按ctrl+c终止,然后正常启动,若提示pid不存在等错误,不必理会,只要最后启动
成功即可:
service amavisd start chkconfig amavisd on
安装ClamAV
执行如下命令:
[root@XL-C512-01 ExtMail-Solution-Linux-0.2]# rpm -ivh RPMS/clamav-db-0.92-2.ext.i386.rpm
Preparing...                ########################################### [100%]
   1:clamav-db              ########################################### [100%]
[root@XL-C512-01 ExtMail-Solution-Linux-0.2]# rpm -ivh RPMS/clamav-0.92-2.ext.i386.rpm
Preparing...                ########################################### [100%]
   1:clamav                 ########################################### [100%]
[root@XL-C512-01 ExtMail-Solution-Linux-0.2]# rpm -ivh RPMS/clamd-0.92-2.ext.i386.rpm
Preparing...                ########################################### [100%]
   1:clamd                  ########################################### [100%]
[root@XL-C512-01 ExtMail-Solution-Linux-0.2]#

编辑/etc/clamd.conf文件,去掉 'LocalSocket /var/run/clamav/clamd.sock'的注释,并注释掉 'TCPSocket 3310',我们将使用
unix socket而不是TCP,两者不可并存。修改完毕后,保存,变动内容见下:
# Path to a local socket file the daemon will listen on.
# Default: disabled
LocalSocket /var/run/clamav/clamd.sock
#TCPSocket 3310
将clamav加到amavis运行组里,并调整目录权限,否则clamav将无法扫描amavisd-new产生的临时文件
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 目录属性是:
rwx------ amavis.root
对于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-20050519T083853-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

service clamd start
freshclam --daemon
将freshclam增加到自启动
输入如下命令,即可使freshclam一开机就实现自启动
echo "/usr/bin/freshclam --daemon" >> /etc/rc.d/rc.local
配置Amavisd与Clamav结合
为了使Amavisd-new能与clamav结合,需要修改/etc/amavisd.conf文件,打开clamav的支持代码,编辑/etc/amavisd.conf文件,大概
在360行左右,去掉clamav的支持代码注释,并将socket路径改为/var/run/clamav/clamd.sock,如下:
['ClamAV-clamd',
  \&ask_daemon, ["CONTSCAN {}\n", "/var/run/clamav/clamd.sock"],
  qr/\bOK$/, qr/\bFOUND$/,
  qr/^.*?: (?!Infected Archive)(.*) FOUND$/ ],
在154行左右,修改投递/拦截的方法:
$final_virus_destiny      = D_DISCARD;
$final_banned_destiny     = D_BOUNCE;
$final_spam_destiny       = D_PASS;
$final_bad_header_destiny = D_PASS;
注意上述4个设置中,对spam(垃圾邮件)默认会直接反弹(BOUNCE),现在修改为继续投递(PASS)但在信头中增加相关X-Spam-
Status信息等。这样可以很方便的在extmail中设置将被标记为垃圾邮件的mail投递到“垃圾邮件箱”中,便于用户翻查。
增加邮件别名
编辑/etc/postfix/aliases,增加如下信息,注意:默认的aliases数据库里已有一条virusalert的别名,所以请删除,再输入下面的
别名记录,并确保所有记录都是唯一的:
virusalert:    root
spam.police:   root
postfix:       [email protected]

保存并执行newaliases命令生成新的别名数据库,这样所有的重新启动amavisd:
/etc/rc.d/init.d/amavisd restart
配置Postfix 集成amavisd-new
vi /etc/postfix/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=
编辑/etc/postfix/main.cf
# Content-Filter
content_filter = smtp:[127.0.0.1]:10024
receive_override_options = no_address_mappings
注意:receive_override_options 这里必须增加,禁止地址展开/影射,否则如果遇到别名的时候会引起冗余邮件的产生。
保存后service postfix restart
测试Clamav
然后输入如下命令: 每输入一行后等待1秒左右:
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:< [email protected]>
250 2.1.0 Ok
rcpt to:< [email protected]>
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配置与安装
安装需求
支持Linux / BSD或Solaris,HP-UX等操作系统
Perl 5.6+,建议Perl 5.8.0以上
Net::DNS
POSIX
Fcntl
Digest::MD5
Digest::SHA1
Digest::HMAC
Net::IP
解包软件
tar -zxvf src/slockd-0[1][1].10.tar.gz -C src
cp -r src/slockd-0.10 /usr/local/slockd
安装相关Perl模块
由于slockd是以smtp特征检测为主的软件,因此很大程度依赖dns库,必须安装Net::DNS库才能正常工作。除此外还有诸如HMAC,MD5
及SHA1, Net-IP等模块。
执行以下命令安装需要的模块,注意:这些模块在上文安装Amavisd-new时已经安装过,这里重复是为了强调slockd依赖这些软件包
rpm -ivh RPMS/perl-Digest-SHA1-2.07-5.i386.rpm
rpm -ivh RPMS/ perl-Digest-HMAC-1.01-2ext.i386.rpm
rpm -ivh RPMS/ perl-Net-IP-1.24-2ext.i386.rpm
rpm -ivh --nodeps RPMS/perl-Net-DNS-0.57-1hzq.i386.rpm
配置resolv.conf
请确认/etc/resolv.conf里的dns服务器是离你的邮件服务器最近,速度最快的dns server,slockd很依赖dns的好坏,因此给系统配
置一个快速的dns能大幅度提高处理速度。请改为离你最近的dns 服务器ip
如果可能的话,请配置一个简单的bind9,成为本地的dns cache server,可以获得最高性能。这里略过这一步骤,但您必须确保dns
的配置是正确并且可靠的,否则slockd将不能工作!
启动/测试
执行:
/usr/local/slockd/slockd-init start
此时slockd将启动,并进入非daemon方式的监听模式,接受来自10030端口的请求,命令行下将显示如下调试信息:
Starting spam locker daemon: slockd
starting child 2908
starting child 2909
08-01 12:34:40 [2908]: Loading APF::Plugin::localctrl
08-01 12:34:40 [2909]: Loading APF::Plugin::localctrl
08-01 12:34:40 [2908]: Loading APF::Plugin::anvil
08-01 12:34:40 [2908]: Loading APF::Plugin::fqdn
08-01 12:34:40 [2909]: Loading APF::Plugin::anvil
08-01 12:34:40 [2908]: Loading APF::Plugin::dnsbl
08-01 12:34:40 [2909]: Loading APF::Plugin::fqdn
08-01 12:34:40 [2909]: Loading APF::Plugin::dnsbl
08-01 12:34:40 [2908]: Loading APF::Plugin::hostname
08-01 12:34:40 [2909]: Loading APF::Plugin::hostname
打开另一个ssh/终端窗口,进入/usr/local/slockd/tools 目录,输入:
perl policy_sig -h localhost -p 10030 --helo FOOBAR \
--ip 192.168.0.1 --from [email protected] --to [email protected]
此时,程序应该返回如下错误信息:
action=504 <FOOBAR>: rejected, see http://bl.extmail.org/cgi/why?fqdn
这表示slockd初步的正常工作了。
后台方式运行slockd
调试正确后,必须将slockd配置成后台服务进程(Daemon Process)。vi /usr/local/slockd/config/main.cf 将如下两个配置的注
释去掉:
# uncomment the following line if you need to daemonize
setsid          1
## logging
log_file        /var/log/slockd.log
然后在运行slockd的命令行窗口按ctrl+c,关闭刚才运行的slockd。或者在另一个命令行窗口输入如下命令以杀死slockd进程:
killall slockd
然后执行:
/usr/local/slockd/slockd-init start
自启动
输入如下的命令,将slockd启动加入到系统里,这样下一次服务器重新启动,就可以自动执行slockd了。
echo "/usr/local/slockd/slockd-init start" >> /etc/rc.d/rc.local
配置Postfix
slockd调试正常后,必须配置postfix以使其打开对slockd的支持,编辑/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以使配置生效
service postfix restart
注意事项:
上述配置是将slockd的查询放到最后,这也是进一步提高资源利用律的办法,因为有部分功能postfix已实现了,所以就先由postfix
检测,如果检测不到再由slockd完成。
最终测试
现在通过简单的email收发来确认系统是否正常。
发送测试邮件
输入以下命令,通过telnet方式给 [email protected]发送一封测试信件
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
helo demo.extmail.org
250 mail.extmail.org
mail from:< [email protected]>
250 2.1.0 Ok
rcpt to:< [email protected]>
250 2.1.5 Ok
data
354 End data with .
Subject: Hello World
Hello World!
.
250 2.0.0 Ok: queued as 3E47685269
quit
221 2.0.0 Bye
Connection closed by foreign host.
此时通过另一个命令行窗口,观察maillog,命令为:
tail -f /var/log/maillog
将看到如下信息:
Aug 1 12:51:06 centos postfix/qmgr[3017]: 041718526B: from=, size=833, nrcpt=1 (queue active)
Aug 1 12:51:06 centos postfix/smtpd[3032]: disconnect from centos[127.0.0.1]
Aug 1 12:51:06 centos amavis[2890]: (02890-01) Passed CLEAN, [127.0.0.1] -> , Message-ID:
< [email protected]>, mail_id: N8nxpoRn4Hlq, Hits: 0.107, 11561 ms
Aug 1 12:51:06 centos postfix/smtp[3043]: 3E47685269: to=, relay=127.0.0.1[127.0.0.1], delay=27, dsn=2.6.0,
status=sent (250 2.6.0 Ok, id=02890-01, from MTA([127.0.0.1]:10025): 250 2.0.0 Ok: queued as 041718526B)
Aug 1 12:51:06 centos postfix/qmgr[3017]: 3E47685269: removed
Aug 1 12:51:06 centos postfix/pipe[3035]: 041718526B: to=, relay=maildrop, delay=0, dsn=2.0.0, status=sent (delivered
via maildrop service)
Aug 1 12:51:06 centos postfix/qmgr[3017]: 041718526B: removed
上述日志表示邮件经过了amavisd-new的扫描,并且已经通过maildrop投递到用户的maildir了。至此,整个ExtMail Solution 的安装
配置已经基本告一段落。对于需要进行高级调整的朋友,请留意本文附录的备注。备注的内容将不断更新,敬请留意。
补充配置
以下是补充的ExtMail Solution有关文档,主要是为希望进一步了解mail系统运行,并提高extmail效能的朋友准备,对于初学者而言
,建议要先打好基础再进行测试。
增加FCGI支持
为extmail增加FCGI的支持,主要是为了获得优异的web效能,克服CGI不能应付大量访问及低效率的缺陷。根据我们的测试,CGI模式
下的页面效率只有FCGI下的1/10~1/100,因此建议有条件的用户还是使用FCGI。日后ExtMail Solution的web CGI程序将全部都支持
FCGI。
安装mod_fastcgi
mod_fastcgi 是针对Apache Web服务器的FCGI支持模块,下载地址: http://www.fastcgi.com/dist/mod_fastcgi-2.4.2.tar.gz
编译指令:
wget http://www.fastcgi.com/dist/mod_fastcgi-2.4.2.tar.gz
tar xfz mod_fastcgi-2.4.2.tar.gz
cd mod_fastcgi-2.4.2
cp Makefile.AP2 Makefile
make top_dir=/etc/httpd install
安装perl-FCGI
除了Apache需要FCGI的支持外,extmail也需要相应的perl-FCGI模块。用以下命令安装:
rpm -ivh RPMS/perl-FCGI-0.67-3ext.i386.rpm
接下来将配置Apache,将如下的信息增加到/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
</Ifmodule>
同时,去掉如下行:
ScriptAlias /extmail/cgi/ /var/www/extsuite/extmail/cgi/
改为:
Alias /extmail/cgi/ /usr/bin/dispatch.fcgi/
<Location "/extmail/cgi">
SetHandler fastcgi-script
</Location>
然后编辑/var/www/extsuite/extmail/dispatch-init文件,修改如下:
BASE=/var/www/extsuite/extmail
最后启动fastcgi server:
/var/www/extsuite/extmail/dispatch-init start
如果没有意外将启动10个dispatch.fcgi守护进程,可以通过以下命令将启动命令加到rc.local中,实现自启动:
echo "/var/www/extsuite/extmail/dispatch-init start" >> /etc/rc.d/rc.local
结束语
我安装这个时,大部分的问题都出现在包上,要么是包装上不能用,要么是用其他的库啊,包啊的依赖关系,我们只要是把这个解决
了,配置文件我们可以去看官方的文档,那里面说的很清楚,如果要找包的话我们可以去rpmfind.net这个去找,我就是在这个网站找
的包。

你可能感兴趣的:(职场,休闲)