本文版权归作者所有,如其他个人、第三方网站或媒体报刊等需转载全文或节选,为支持我们的工作,请务必注明如下信息:
本文档以2005-07-25的早期文档为蓝本,以RPM系统为基础。所涉及软件全部是OpenSource软件,版权以GPL为主,作为企业应用没有任何版权/法律问题。
基于RPM系统具有方便、快捷,易快速复制和重现的优点。如果用户希望获得这些RPM包的源码包,可以与作者联系。
编写本文的初衷,是给那些希望快速架设邮件系统而不想过多了解复杂的系统知识的网管/用户,为了使软件之间的结合更紧密,部分软件的配置及测试方面进行了增强改进,因此本文的一些操作步骤作者不能保证在其他场合能完全适用,敬请注意。
本文假定读者是在CentOS 4.x或 RedHat EnterPrise Linux 4.x平台上安装,并具有一定的Unix平台 / Linux平台系统经验,懂得rpm基本命令及常规的系统操作,如文件的删除,目录创建,改名,和vi编辑器的基本使用等。
ExtMail Solution 是一个基于优秀开源软件的电子邮件系统解决方案,核心部件包括了Postfix, Amavisd-new, ClamAV, ExtMail 和ExtMan, Courier系列软件。是一个功能相对比较齐全的免费电子邮件系统。以下是其主要的特性列表:
整个邮件解决方案由如下软件组成:
功能模块 | 内容 | 备注 |
操作系统(OS) | CentOS 4.3 | CentOS和RHEL是一样的,而且升级免费 |
邮件传输代理(MTA) | Postfix 2.3snapshot | 使用2.3 snapshot,虽然不是最新但是对一般人而言足够用了 |
数据库/目录服务 | MySQL 4.1 | 可选openLDAP或NetScape LDAP,本文以MySQL为蓝本 |
邮件投递代理(MDA) | maildrop 2.0.x | 支持过滤和强大功能 |
Web帐户管理后台 | ExtMan 0.16-pre1 | 支持无限域名、无限用户 |
POP3 服务器 | Courier-IMAP | 只使用pop3部分,对于大部分企业而言完全足够 |
WebMail 系统 | ExtMail 0.24-pre8 | 支持多语言、全部模板化,功能基本齐全 |
防病毒软件(Anti-Virus) | ClamAV 0.88 | 最热门的开源杀毒软件 |
SMTP阶段反垃圾邮件工具 | Spam Locker 0.083 | 基于SMTP行为识别的Antispam软件,大量可选插件 |
内容过滤器 | Amavisd-new 2.40 | Content-Filter软件,支持与clamav/sa的挂接 |
内容级别的反垃圾邮件工具 | SpamAssassin | 著名的SA,可以支持大量规则,但速度慢 |
SMTP认证库 | Cyrus SASL 2.1x | 标准的SASL实现库,可以支持Courier authlib |
其他数据认证库 | Courier Authlib 0.57 | authlib是maildrop, courier-imap等服务的关键部件 |
日志分析及显示 | mailgraph_ext | 在ExtMan中已经包含了 |
Web 服务器 | Apache 2.0.x | CentOS 自带 |
要流畅地运行邮件系统,建议的硬件配置如下:
本文档支持RedHat Enterprise 4.x 及CentOS 4.x版本。要注意的是安装系统时,只安装如下的组件:
其余的Xwindows, 打印,KDE/Gnore, 服务器配置工具,网络工具,开发包等全部都不要选上。安装完毕进入操作系统后,建议禁止root直接登陆,并增加一个非root帐户,例如叫sysadmin。这样要以root权限操作的话,必须先以sysadmin身份登陆再su到root执行。方法:
以下将以详细的图解来介绍如何安装CentOS4.3
CentOS启动光盘的启动画面,直接回车即可。
系统提示“是否需要校验CD媒质”,请选择“Skip”。
选择“English”作为安装界面的语言。
安装类型请务必选择“Custom”,以便之后详细选择要装的软件包。
磁盘分区设置请选择“Manually partition with disk Druid”(手工分区)。
如图,我们将/,/usr,/var,/var/spool/postfix等单独分成一个分区,注意:如果磁盘大小允许,请将/var/spool/vscan目
录也单独成一个分区,该目录主要存放被过滤的临时邮件。
配置网卡及子网掩码,记得点选“Activate boot”。
配置网关及DNS,请将离你的服务器最近DNS服务器IP地址填入“Primary DNS”。
防火墙配置时,打开防火墙(选Enable FireWall),并放行常规的服务(服务列表全选),最重要的是记得打开SELinux(选Active)
时区选“上海”。
输入root帐户密码,建议使用较长的密码,并混杂数字与字母及特殊字符。
进入软件组的选择对话界面后,我们只选择Editors组。
其次选择是Web Server及FTP Server组。
再次选择MySQL DataBase组,并点击右边的Details
在Details对话框里,确保libdbi-dbd-mysql,mysql-server,perl-DBD-MySQL等模块都被选中。extmail依赖这些软件包。
最后,确认一下所做的选择。其他没有被提到的软件模块/组全部都去掉。总共软件大小有814MB左右。
点Next后,安装系统提示必须要准备好CentOS的第1,2,3张光盘。
系统进行初始化,磁盘分区等。
系统安装到后面时,需要换安装盘。请将盘2及盘3按提示放入光驱。
安装完毕后,出现祝贺完成的界面,点Reboot重新启动。
如无意外,系统进入登陆提示符界面。至此,CentOS4.3的安装就结束了。
以root身份登进系统后,增加一个非root帐户,名称为sysadmin,密码按您的需求设置一个即可。接下来我们要禁止root直接登陆,编辑/etc/ssh/sshd_config 修改以下配置为:
然后重新启动sshd:
这样禁止了root直接登陆。
自从RHEL4/CentOS4以后,系统默认打开了SELinux支持,简单说SELinux就是一个强制性的安全机制,但是它也带来了不少麻烦,为了避免编写烦琐的policy规则,本文档将屏蔽掉SELinux对MySQL及httpd的保护。方法如下:
setsebool httpd_disable_trans=1setsebool 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
整个系统的安装全过程都要求以root身份执行,如果机器没有访问外部网络的能力,则事先下载好ExtMail Solution软件包,并用ftp以sysadmin帐户的身份,上载到服务器。
su - rootcd /rootwget http://www.extmail.org/source/ExtMail-Solution-Linux-0.1.tar.gz
下载的文件必须校验确认过没损坏才能使用。命令如下:
wget http://www.extmail.org/source/md5sum.es_linux-0.1cat md5sum.es_linux-0.1md5sum ExtMail-Solution-Linux-0.1.tar.gz
一个可能的结果:
# cat md5sum.es_linux-0.1168eced41c0cac0ed9f981e791f3783b ExtMail-Solution-Linux-0.1.tar.gz# md5sum ExtMail-Solution-Linux-0.1.tar.gz168eced41c0cac0ed9f981e791f3783b ExtMail-Solution-Linux-0.1.tar.gz
由于软件包不断的变更,所以上述结果和您的结果可能不一致,请以下载的md5sum为准
目前最新的ExtMail-Solution软件包版本号为0.1,软件包文件名为:ExtMail-Solution-Linux-0.1.tar.gz,下载回来后,在/root目录解开:
此外,我们假设本次安装默认域是extmail.org,主机名为:mail.extmail.org,ExtMail Solution的文件目录是/root/ExtMail-Solution-Linux-0.1/
我们进入/root/ExtMail-Solution-Linux-0.1/目录,该目录下包括如下文件/目录:
conf/docs/RPMS/src/README
其中RPMS目录是本文的重点,里面包含了所需要的全部rpm包,src目录则是存放webmail, anti-spam等相关软件的源码,而README则是说明文件,docs目录则是本文档相关的html及图片。
下文所涉及的操作,绝大部分都是发生在/root/ExtMail-Solution-Linux-0.1目录里,请确保当前目录为:/root/ExtMail-Solution-Linux-0.1
CentOS4.x/ RedHat EL4.x 都自带mysql-server,请用户自行安装好,包括mysql-client和devel等包
postconf -n > /etc/postfix/main2.cfmv /etc/postfix/main.cf /etc/postfix/main.cf.oldmv /etc/postfix/main2.cf /etc/postfix/main.cf
再编辑main.cf:
# hostnamemynetworks = 127.0.0.1myhostname = mail.extmail.orgmydestination = $mynetworks $myhostname# bannermail_name = Postfix - by extmail.orgsmtpd_banner = $myhostname ESMTP $mail_name# response immediatelysmtpd_error_sleep_time = 0sunknown_local_recipient_reject_code = 450# extmail config herevirtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cfvirtual_mailbox_domains = mysql:/etc/postfix/mysql_virtual_domains_maps.cfvirtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cfvirtual_transport = maildrop:
user = extmailpassword = extmailhosts = localhostdbname = extmailtable = aliasselect_field = gotowhere_field = address
user = extmailpassword = extmailhosts = localhostdbname = extmailtable = domainselect_field = descriptionwhere_field = domain#additional_conditions = and backupmx ='0' and active ='1'
user = extmailpassword = extmailhosts = localhostdbname = extmailtable = mailboxselect_field = maildirwhere_field = username#additional_conditions = and active = '1'
运行如下命令安装相关软件包
rpm -ivh RPMS/libtool-libs-1.5.6-4.EL4.1.c4.3.i386.rpmrpm -ivh RPMS/courier-authlib-0.57-1hzq.i386.rpmrpm -ivh RPMS/courier-authlib-devel-0.57-1hzq.i386.rpmrpm -ivh RPMS/courier-authlib-mysql-0.57-1hzq.i386.rpm
编辑/etc/authlib/authmysqlrc文件,并将其内容清空,然后增加如下内容:
MYSQL_SERVER localhostMYSQL_USERNAME extmailMYSQL_PASSWORD extmailMYSQL_SOCKET /var/lib/mysql/mysql.sockMYSQL_PORT 3306MYSQL_OPT 0MYSQL_DATABASE extmailMYSQL_USER_TABLE mailboxMYSQL_CRYPT_PWFIELD passwordMYSQL_UID_FIELD uidnumberMYSQL_GID_FIELD gidnumberMYSQL_LOGIN_FIELD usernameMYSQL_HOME_FIELD homedirMYSQL_NAME_FIELD nameMYSQL_MAILDIR_FIELD maildirMYSQL_QUOTA_FIELD quotaMYSQL_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:
如一切正常,命令行将返回如下信息:
如果您需要重新编译maildrop软件包,首先必须获得其源码rpm包,其次必须先装好courier-authlib及其devel软件包,否则编译maildrop之后将无法打开authlib支持。
rpm -ivh RPMS/maildrop-2.0.1-1hzq.i386.rpmrpm -ivh RPMS/maildrop-man-2.0.1-1hzq.i386.rpm
maildrop unix - n n - - pipe #flags=DRhu user=vmail argv=/usr/local/bin/maildrop -d ${recipient} flags=DRhu user=vuser argv=maildrop -w 90 -d ${user}@${nexthop} ${recipient} ${user} ${extension} {nexthop}
由于maildrop不支持一次接收多个收件人,因此必须在main.cf里增加如下参数:
最后重新启动postfix即可
NameVirtualHost *:80Include conf/vhost_*.conf
# VirtualHost for ExtMail Solution<VirtualHost *:80>ServerName mail.extmail.orgDocumentRoot /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 configSuexecUserGroup vuser vgroup</VirtualHost>重新启动apache:
注意:此时重新启动apache会产生以下警告信息,可不必理会
mkdir /var/www/extsuitecp -r src/extmail-0.24-pre8 /var/www/extsuite/extmailcd /var/www/extsuite/extmailcp webmail.cf.default webmail.cfcd $OLDPWD
注意:上面命令行中最后一个cd $OLDPWD是返回原始路径(即ExtMail Solution软件包根目录)
:1, $ s#/var/www/cgi-bin#/var/www/extsuite#g上述命令的作用是将默认路径从/var/www/cgi-bin下换到/var/www/extsuite下,处理完毕后,修改webmail.cf里的其他参数,主要变动的内容见下:
SYS_USER_LANG = zh_CNSYS_USER_CHARSET = gb2312SYS_MFILTER_ON = 1SYS_NETDISK_ON = 1SYS_MYSQL_USER = extmailSYS_MYSQL_PASS = extmailSYS_MYSQL_DB = extmailSYS_G_ABOOK_TYPE = fileSYS_G_ABOOK_FILE_CHARSET = gb2312
其中SYS_MFILTER_ON及SYS_NETDISK_ON 设置为1是为了打开网络磁盘和过滤器。全局地址本默认为ldap格式,现在也改为文本格式,并将地址本的转换编码改为GB2312
由于SuEXEC的需要,必须将extmail的cgi目录修改成vuser:vgroup权限:
在ExtMail-Solution软件包根目录下执行:
cp -r src/extman-0.16-pre1 /var/www/extsuite/extman/
:1, $ s#/var/www/cgi-bin#/var/www/extsuite#g
SYS_CHARSET = gb2312SYS_LANG = zh_CN
其他参数基本上可以使用默认值。
由于SuEXEC的需要,必须将extman的cgi目录修改成vuser:vgroup权限:
在执行mysql操作前,必须确认它已被正确安装并启动,可以用rpm命令查询mysql server的安装情况,用ps ax的办法查看进程列表是否有mysqld进程:
正常情况下应该可以看到mysql-server被安装:
如果没有,则表示没有安装好mysql-server,可以从本软件包RPMS目录里安装,也可以找安装光盘安装:
安装完毕后必须初始化mysql,然后重新启动
/usr/bin/mysql_install_db/etc/init.d/mysqld start
正常情况下将启动成功:
Starting MySQL: [ OK ]
然后用ps命令来检查mysqld是否正确运行:
正常情况下应出现如下的结果:
如果mysql没正确启动,请检查/var/log/mysqld.log里面的出错提示,进行处理:
执行以下命令导入mysql数据库结构及初始化数据,注意必须逐行输入以下命令,root密码默认为空,不可直接用鼠标复制两行命令直接输入,否则会报错!
mysql -u root -p < /var/www/extsuite/extman/docs/extmail.sqlmysql -u root -p < /var/www/extsuite/extman/docs/init.sql
cd /var/www/extsuite/extman/libs/Ext./buildlink.sh build /var/www/extsuite/extmail/libs/Extmkdir /tmp/extmanchown -R vuser:vgroup /tmp/extmancd $OLDPWD
操作完毕后,需要建立刚才导入mysql的test@extmail.org帐户的Maildir,请输入如下命令:
cd /var/www/extsuite/extman/tools./maildirmake.pl /home/domains/extmail.org/test/Maildirchown -R vuser:vgroup /home/domains/extmail.orgcd $OLDPWD
注意事项:
上面命令行中最后一个cd $OLDPWD是返回原始路径(即ExtMail Solution软件包根目录)
由于RedHat发行版中包含了一个叫tmpwatch的工具,该工具会定期扫描/tmp/下的文件,如果这些文件很久都没被使用,将被删除,因此如果后台长期不使用,/tmp/extman目录有可能被tmpwatch删除,所以要么定期登陆后台,要么修改 webman.cf将临时目录修改到另一个地方。此处暂以/tmp/extman默认值为例。
在命令行下执行:
结果如下:
Authentication succeeded. Authenticated: test@extmail.org (uid 1000, gid 1000) Home Directory: /home/domains/extmail.org/test Maildir: /home/domains/extmail.org/test/Maildir/ Quota: 5242880Encrypted Password: {crypt}uywiuN.XggXXcCleartext Password: test Options: (none)
这样表明ExtMan的正确安装,数据库也正确导入,courier-authlib能正确连接到mysql数据库
最后访问http://mail.extmail.org/extmail/,如无意外,将看到webmail的登陆页,不过此时还没有加正式的用户,所以不能登陆,包括test@extmail.org也不行。必须要登陆到http://mail.extmail.org/extman/ 里增加一个新帐户才能登陆。
ExtMan的默认超级管理员帐户是root@extmail.org,密码是extmail,登陆成功后,建议将密码修改,以确保安全。
自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 -ivh RPMS/rrdtool-1.2.12-1hzq.i386.rpm RPMS/perl-rrdtool-1.2.12-1hzq.i386.rpmrpm -ivh RPMS/perl-Time-HiRes-1.72-1hzq.i386.rpmrpm -ivh RPMS/perl-File-Tail-0.99.3-1hzq.i386.rpm
执行以下命令:
本文使用qmonitor来搜集队列数据,而不是使用crontab来定时提取,这与官方网站上的文档有差异。使用qmonitor的好处是它实时的监视队列目录的变化,显示的结果更加精确。
/usr/local/mailgraph_ext/mailgraph-init start/usr/local/mailgraph_ext/qmonitor-init start
echo "/usr/local/mailgraph_ext/mailgraph-init start" >> /etc/rc.d/rc.localecho "/usr/local/mailgraph_ext/qmonitor-init start" >> /etc/rc.d/rc.local
RHEL4/CentOS4的cyrus-sasl默认没有打开authdaemon的支持,为了使用集中认证的authlib,必须打开这个支持。为此我们必须删除系统的cyrus-sasl软件包,替换成打开了authdaemon支持的sasl软件包。首先要删除系统老的cyrus-sasl:
然后安装新的支持authdaemon的软件包
Postfix的SMTP认证需要透过Cyrus-SASL,连接到authdaemon获取认证信息,编辑/etc/postfix/main.cf,增加如下内容:
# smtpd related configsmtpd_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 AUTH config herebroken_sasl_auth_clients = yessmtpd_sasl_auth_enable = yessmtpd_sasl_local_domain = $myhostnamesmtpd_sasl_security_options = noanonymous
其次用vi编辑/usr/lib/sasl2/smtpd.conf,确保其内容为:
pwcheck_method: authdaemondlog_level: 3mech_list: PLAIN LOGINauthdaemond_path:/var/spool/authdaemon/socket
存盘退出后,重新启动postfix:
通过以下命令获得test@extmail.org的用户名及密码的BASE64编码:
perl -e 'use MIME::Base64; print encode_base64("test\@extmail.org")'dGVzdEBleHRtYWlsLm9yZw==perl -e 'use MIME::Base64; print encode_base64("test")'dGVzdA==
然后本机测试,其过程如下(蓝色的文字是我们输入/发送到Postfix的)
telnet localhost 25Trying 127.0.0.1...Connected to localhost.localdomain (127.0.0.1).Escape character is '^]'.220 mail.extmail.org ESMTP Postfix - by extmail.orgehlo demo.domain.tld250-mail.extmail.org250-PIPELINING250-SIZE 10240000250-VRFY250-ETRN250-AUTH LOGIN PLAIN250-AUTH=LOGIN PLAIN250-ENHANCEDSTATUSCODES250-8BITMIME250 DSNauth login334 VXNlcm5hbWU6dGVzdEBleHRtYWlsLm9yZw==334 UGFzc3dvcmQ6dGVzdA==235 2.0.0 Authentication successfulquit221 2.0.0 Bye
最后出现235 Authentication Successful 表明认证成功了。
用以下命令安装courier-imap的rpm包,默认的courier-authlib及courier-imap都会增加系统自启动设置,因此下一次服务器启动将自动启动相应的authlib及POP3服务
由于Courier-imap的IMAP目录是按UTF-7编码的,ExtMail目前还没有正式支持IMAP目录,因此需要屏蔽IMAP,只提供pop3服务。而就目前的使用情况来看,IMAP使用的非常少,绝大部分OutLook/Foxmail用户都习惯使用POP3而非IMAP。
将如下这行配置:
替换成为:
再将如下配置:
替换成为:
然后重新启动courier-imap:
请按如下步骤输入pop3命令测试其是否正常工作,注意蓝色的信息是我们输入到POP3服务器的
telnet localhost 110Trying 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 test+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-Net-DNS软件包被删除干净,因为该包的版本较低(0.48),有已知的bug,所以必须替换成本文档提供的新版(0.5x),输入如下命令:
Amavisd-new 及SpamAssassin需要依赖大量的第三方perl软件包,下列要安装的部分RPM在上述的操作中已经安装了,为了给出较明确的依赖关系,我们依然将这些包的名称列出,如果安装时提示有安装包已安装过,或者提示冲突,请不必惊慌。请安装如下的RPM软件包:
rpm -ivh RPMS/perl-Digest-SHA1-2.07-5.i386.rpmrpm -ivh RPMS/perl-Digest-HMAC-1.01-1hzq.i386.rpmrpm -ivh RPMS/perl-Net-IP-1.24-1hzq.i386.rpmrpm --nodeps -ivh RPMS/perl-Net-DNS-0.57-1hzq.i386.rpmrpm -ivh RPMS/perl-Time-HiRes-1.72-1hzq.i386.rpmrpm -ivh RPMS/perl-HTML-Tagset-3.03-30.noarch.rpmrpm -ivh RPMS/perl-HTML-Parser-3.35-6.i386.rpm rpm -ivh RPMS/spamassassin-3.0.5-3.el4.i386.rpmrpm -ivh RPMS/perl-IO-stringy-2.110-1hzq.i386.rpmrpm -ivh RPMS/perl-IO-Multiplex-1.08-1hzq.i386.rpmrpm -ivh RPMS/perl-Net_SSLeay.pm-1.30-1hzq.i386.rpmrpm -ivh RPMS/perl-IO-Socket-SSL-0.97-1hzq.i386.rpmrpm -ivh RPMS/perl-Net-Server-0.93-1hzq.i386.rpmrpm -ivh RPMS/perl-Unix-Syslog-0.100-1hzq.i386.rpmrpm -ivh RPMS/perl-TimeDate-1.16-1hzq.i386.rpmrpm -ivh RPMS/perl-MailTools-1.67-1hzq.i386.rpmrpm -ivh --force RPMS/perl-MIME-Base64-3.05-1hzq.i386.rpmrpm -ivh RPMS/perl-Convert-BinHex-1.119-1hzq.i386.rpmrpm -ivh RPMS/perl-MIME-tools-5.418-1hzq.i386.rpmrpm -ivh RPMS/perl-BerkeleyDB-0.26-1hzq.i386.rpmrpm -ivh RPMS/perl-Convert-TNEF-0.17-1hzq.i386.rpmrpm -ivh RPMS/perl-Convert-UUlib-1.051-1hzq.i386.rpmrpm -ivh RPMS/perl-Compress-Zlib-1.41-1hzq.i386.rpmrpm -ivh RPMS/perl-Archive-Zip-1.16-1hzq.i386.rpmrpm -ivh RPMS/perl-IO-Zlib-1.04-1hzq.i386.rpmrpm -ivh RPMS/perl-Archive-Tar-1.26-1hzq.i386.rpmrpm -ivh RPMS/arc-5.21o-1hzq.i386.rpmrpm -ivh RPMS/zoo-2.10-9hzq.i386.rpmrpm -ivh RPMS/unarj-2.65-49hzq.i386.rpmexport LANG=Crpm -ivh RPMS/amavisd-new-2.4.0-1hzq.i386.rpmchown amavis.amavis /var/spool/vscan/db/chkconfig --add amavisd
修改的主要参数如下,请逐一对照后修改:
$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;
Amavisd-new 通过Mail::SpamAssassin 模块来调用SA的功能,因此这里配置SA和常规配置SA软件有些区别,主要集中在修改local.cf文件上。
编辑/etc/mail/spamassassin/local.cf文件
将其内容修改为:
report_safe 1use_bayes 0auto_learn 0bayes_auto_expire 1skip_rbl_checks 1use_razor2 0use_dcc 0use_pyzor 0dns_available no
Chinese_rules.cf是教育科研网的反垃圾邮件小组对大量垃圾邮件和正常邮件进行分析后得出的一个关键字/分数规则集,用于处理中文(简体)垃圾邮件还是比较有效的。这里我们通过如下命令增加到系统:
由于该规则每周更新一次,为了达到最好效果,最好在crontab里增加自动更新的内容,输入:
然后输入如下的内容:
存盘退出即可。最后运行以下调试命令以确认amavisd没有错误:
如果没有异常提示或报错退出则表示一切都正常,按ctrl+c终止,然后正常启动,若提示pid不存在等错误,不必理会,只要最后启动成功即可:
rpm -ivh RPMS/clamav-db-0.88.3-1hzq.i386.rpmrpm -ivh RPMS/clamav-0.88.3-1hzq.i386.rpmrpm -ivh RPMS/clamd-0.88.3-1hzq.i386.rpm
编辑/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: disabledLocalSocket /var/run/clamav/clamd.sock#TCPSocket 3310
将clamav加到amavis运行组里,并调整目录权限,否则clamav将无法扫描amavisd-new产生的临时文件
gpasswd -a clamav amavisusermod -G amavis clamavchown amavis.amavis /var/spool/vscanchmod 750 /var/spool/vscanchown amavis.amavis /var/spool/vscan/tmpchmod 750 /var/spool/vscan/tmp
默认的/var/spool/vscan 目录属性是:
对于clamav用户而言,则无任何权限访问该目录,因此maillog里amavisd-new会提示:
/etc/rc.d/init.d/clamd startfreshclam --daemon
输入如下命令,即可使freshclam一开机就实现自启动
['ClamAV-clamd', \&ask_daemon, ["CONTSCAN {}\n", "/var/run/clamav/clamd.sock"], qr/\bOK$/, qr/\bFOUND$/, qr/^.*?: (?!Infected Archive)(.*) FOUND$/ ],在110行左右,修改投递/拦截的方法:
$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投递到“垃圾邮件箱”中,便于用户翻查。
virusalert: rootspam.police: rootpostfix: test@extmail.org
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-Filtercontent_filter = smtp:[127.0.0.1]:10024receive_override_options = no_address_mappings
注意:receive_override_options 这里必须增加,禁止地址展开/影射,否则如果遇到别名的时候会引起冗余邮件的产生。
保存后/etc/init.d/postfix restart
telnet localhost 25Trying 127.0.0.1...Connected to localhost.localdomain (127.0.0.1).Escape character is '^]'.220 mail.extmail.org ESMTP Postfix - by extmail.orgmail from:<test@extmail.org>250 2.1.0 Okrcpt to:<test@extmail.org>250 2.1.5 Okdata354 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 BC24E85260quit221 2.0.0 ByeConnection closed by foreign host.
在邮件日志里,应该有相应的信息出现:
如果看到类似这样的日志,表明Clamav+Amavisd-new工作正常。
支持Linux / BSD或Solaris,HP-UX等操作系统Perl 5.6+,建议Perl 5.8.0以上Net::DNSPOSIXFcntlDigest::MD5Digest::SHA1Digest::HMACNet::IP
由于slockd是以smtp特征检测为主的软件,因此很大程度依赖dns库,必须安装Net::DNS库才能正常工作。除此外还有诸如HMAC,MD5及SHA1, Net-IP等模块。
执行以下命令安装需要的模块,注意:这些模块在上文安装Amavisd-new时已经安装过,这里重复是为了强调slockd依赖这些软件包
rpm -ivh RPMS/perl-Digest-SHA1-2.07-5.i386.rpmrpm -ivh RPMS/perl-Digest-HMAC-1.01-1hzq.i386.rpmrpm -ivh RPMS/perl-Net-IP-1.24-1hzq.i386.rpmrpm -ivh --nodeps RPMS/perl-Net-DNS-0.57-1hzq.i386.rpm
请确认/etc/resolv.conf里的dns服务器是离你的邮件服务器最近,速度最快的dns server,slockd很依赖dns的好坏,因此给系统配置一个快速的dns能大幅度提高处理速度。以下给出一个配置仅供参考:
上述dns服务器是广东电信的DNS服务器,对于非广东朋友,请改为离你最近的dns 服务器ip
如果可能的话,请配置一个简单的bind9,成为本地的dns cache server,可以获得最高性能。这里略过这一步骤,但您必须确保dns的配置是正确并且可靠的,否则slockd将不能工作!
此时slockd将启动,并进入非daemon方式的监听模式,接受来自10030端口的请求,命令行下将显示如下调试信息:
Starting spam locker daemon: slockdstarting child 2908starting child 290908-01 12:34:40 [2908]: Loading APF::Plugin::localctrl08-01 12:34:40 [2909]: Loading APF::Plugin::localctrl08-01 12:34:40 [2908]: Loading APF::Plugin::anvil08-01 12:34:40 [2908]: Loading APF::Plugin::fqdn08-01 12:34:40 [2909]: Loading APF::Plugin::anvil08-01 12:34:40 [2908]: Loading APF::Plugin::dnsbl08-01 12:34:40 [2909]: Loading APF::Plugin::fqdn08-01 12:34:40 [2909]: Loading APF::Plugin::dnsbl08-01 12:34:40 [2908]: Loading APF::Plugin::hostname08-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 test@foo.com --to test@bar.com
此时,程序应该返回如下错误信息:
这表示slockd初步的正常工作了。
调试正确后,必须将slockd配置成后台服务进程(Daemon Process)。vi /usr/local/slockd/config/main.cf 将如下两个配置的注释去掉:
# uncomment the following line if you need to daemonizesetsid 1## logginglog_file /var/log/slockd.log
然后在运行slockd的命令行窗口按ctrl+c,关闭刚才运行的slockd。或者在另一个命令行窗口输入如下命令以杀死slockd进程:
然后执行:
输入如下的命令,将slockd启动加入到系统里,这样下一次服务器重新启动,就可以自动执行slockd了。
echo "/usr/local/slockd/slockd-init start" >> /etc/rc.d/rc.local
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以使配置生效
上述配置是将slockd的查询放到最后,这也是进一步提高资源利用律的办法,因为有部分功能postfix已实现了,所以就先由postfix检测,如果检测不到再由slockd完成。
现在通过简单的email收发来确认系统是否正常。
输入以下命令,通过telnet方式给test@extmail.org发送一封测试信件
telnet localhost 25Trying 127.0.0.1...Connected to localhost.localdomain (127.0.0.1).Escape character is '^]'.220 mail.extmail.org ESMTP Postfix - by extmail.orghelo demo.extmail.org250 mail.extmail.orgmail from:<test@extmail.org>250 2.1.0 Okrcpt to:<test@extmail.org>250 2.1.5 Okdata354 End data with. Subject: Hello WorldHello World!.250 2.0.0 Ok: queued as 3E47685269quit221 2.0.0 ByeConnection closed by foreign host.
此时通过另一个命令行窗口,观察maillog,命令为:
将看到如下信息:
上述日志表示邮件经过了amavisd-new的扫描,并且已经通过maildrop投递到用户的maildir了。至此,整个ExtMail Solution 的安装配置已经基本告一段落。对于需要进行高级调整的朋友,请留意本文附录的备注。备注的内容将不断更新,敬请留意。
以下是补充的ExtMail Solution有关文档,主要是为希望进一步了解mail系统运行,并提高extmail效能的朋友准备,对于初学者而言,建议要先打好基础再进行测试。
为extmail增加FCGI的支持,主要是为了获得优异的web效能,克服CGI不能应付大量访问及低效率的缺陷。根据我们的测试,CGI模式下的页面效率只有FCGI下的1/10~1/100,因此建议有条件的用户还是使用FCGI。日后ExtMail Solution的web CGI程序将全部都支持FCGI。
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.gztar xfz mod_fastcgi-2.4.2.tar.gzcd mod_fastcgi-2.4.2cp Makefile.AP2 Makefilemake top_dir=/etc/httpd install
除了Apache需要FCGI的支持外,extmail也需要相应的perl-FCGI模块。用以下命令安装:
接下来将配置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>
同时,去掉如下行:
改为:
Alias /extmail/cgi/ /usr/bin/dispatch.fcgi/<Location "/extmail/cgi">SetHandler fastcgi-script</Location>
然后编辑/var/www/extsuite/extmail/dispatch-init文件,修改如下:
最后启动fastcgi server:
如果没有意外将启动10个dispatch.fcgi守护进程,可以通过以下命令将启动命令加到rc.local中,实现自启动:
echo "/var/www/extsuite/extmail/dispatch-init start" >> /etc/rc.d/rc.local
需要自己重新编译Courier-IMAP的朋友,可以通过如下方式完成。
wget http://jaist.dl.sourceforge.net/sourceforge/courier/courier-imap-4.1.0.tar.bz2
由于courier-imap需要非root帐户进行编译,因此必须su到sysadmin这个非root用户,然后输入如下指令:
mkdir $HOME/rpmmkdir $HOME/rpm/SOURCESmkdir $HOME/rpm/SPECSmkdir $HOME/rpm/BUILDmkdir $HOME/rpm/SRPMSmkdir $HOME/rpm/RPMSmkdir $HOME/rpm/RPMS/i386echo "%_topdir $HOME/rpm" >> $HOME/.rpmmacros
解开courier-imap-4.1.0.tar.bz2,取出courier-imap.spec文件,复制到$HOME/rpm/SPECS里,然后再复制courier-imap-4.1.0.tar.bz2到$HOME/rpm/SOURCE里
此版本的courier-imap需要openldap等相关包,所以编译前务必安装好openldap-devel等包
编译完毕,在$HOME/rpm/RPMS/i386/下就有所有编译成功的rpm包了!
通过此文档,读者应该能够较容易地架设一个功能较齐全的电子邮件系统。当使用一段时间后,用户将发现这个系统还有很多比较粗糙的地方,不尽人意。日后,本文档将继续保持更新,逐步将一些高级的设置方法公布出来,争取ExtMail Solution更加完整,力求完美。
整个ExtMail Solution尽力将Opensource软件的优点发挥到极至,但免不了还是有bug。以下是几个已知的问题:
自由广告区 |
分类导航 |
邮件新闻资讯: IT业界 | 邮件服务器 | 邮件趣闻 | 移动电邮 电子邮箱 | 反垃圾邮件|邮件客户端|网络安全 行业数据 | 邮件人物 | 网站公告 | 行业法规 网络技术: 邮件原理 | 网络协议 | 网络管理 | 传输介质 线路接入 | 路由接口 | 邮件存储 | 华为3Com CISCO技术 | 网络与服务器硬件 操作系统: Windows 9X | Linux&Uinx | Windows NT Windows Vista | FreeBSD | 其它操作系统 邮件服务器: 程序与开发 | Exchange | Qmail | Postfix Sendmail | MDaemon | Domino | Foxmail KerioMail | JavaMail | Winwebmail |James Merak&VisNetic | CMailServer | WinMail 金笛邮件系统 | 其它 | 反垃圾邮件: 综述| 客户端反垃圾邮件|服务器端反垃圾邮件 邮件客户端软件: Outlook | Foxmail | DreamMail| KooMail The bat | 雷鸟 | Eudora |Becky! |Pegasus IncrediMail |其它 电子邮箱: 个人邮箱 | 企业邮箱 |Gmail 移动电子邮件:服务器 | 客户端 | 技术前沿 邮件网络安全: 软件漏洞 | 安全知识 | 病毒公告 |防火墙 攻防技术 | 病毒查杀| ISA | 数字签名 邮件营销: Email营销 | 网络营销 | 营销技巧 |营销案例 邮件人才:招聘 | 职场 | 培训 | 指南 | 职场 解决方案: 邮件系统|反垃圾邮件 |安全 |移动电邮 |招标 产品评测: 邮件系统 |反垃圾邮件 |邮箱 |安全 |客户端 |