ExtMail Solution HOWTO for Linux

本文假定读者是在CentOS 4.x或 RedHat EnterPrise Linux 4.x平台上安装,并具有一定的Unix平台 / Linux平台系统经验,懂得rpm基本命令及常规的系统操作,如文件的删除,目录创建,改名,和vi编辑器的基本使用等。

文档目录
ExtMail Solution概述
硬件配置
操作系统安装
下载ExtMail Solution软件包
MTA-Postfix配置
配置Courier-Authlib
安装maildrop
配置Apache
安装Webmail-ExtMail
安装管理后台-ExtMan
配置图形化日志系统-mailgraph_ext
测试基本系统
配置Cyrus-SASL
安装Courier-IMAP
内容/病毒过滤
准备工作
ClamAV
Amavisd-new
配置Postfix
测试
反垃圾邮件-Spam Locker
准备工作
配置/测试
与Postfix结合
最终测试
附加信息
增加FCGI支持
编译Courier-IMAP
结束语
已知Bugs
TODO列表
ExtMail Solution 结构
ExtMail Solution 是一个基于优秀开源软件的电子邮件系统解决方案,核心部件包括了Postfix, Amavisd-new, ClamAV, ExtMail 和ExtMan, Courier系列软件。是一个功能相对比较齐全的免费电子邮件系统。以下是其主要的特性列表:

支持SMTP/POP3/HTTP协议
支持SMTP认证及ESMTP
可支持大容量邮箱(大于1GB)
高速Web界面访问邮箱
完整的Web管理后台
在线服务端病毒过滤
内建内容过滤
SMTP行为识别垃圾邮件
支持大量反垃圾邮件技术
图形化邮件日志分析
支持别名/多域/域管理员等
支持网络磁盘/POP3邮件
支持读/写HTML格式邮件
支持定制模板及多语言


整个邮件解决方案由如下软件组成:


功能模块 内容 备注
操作系统(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 自带


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

物理内存:256M+ 推荐512M
交换区:2倍物理内存大小
CPU:PIII 1G+ 推荐P4
主板:推荐Intel原装
网卡:100M/1000M 推荐3Com/Intel
操作系统安装
本文档支持RedHat Enterprise 4.x 及CentOS 4.x版本。要注意的是安装系统时,只安装如下的组件:

Web Server
要注意必须选中httpd-suexec软件包,否则下文的配置将失效
MYSQL数据库
注意必须选中mysql-server, dbi-mysql, DBD-mysql等模块,否则extmail将无法连接mysql
VIM编辑器
强烈建议安装vim-enhanced软件包,它支持main.cf彩色高亮语法分析
其余的Xwindows, 打印,KDE/Gnore, 服务器配置工具,网络工具,开发包等全部都不要选上。安装完毕进入操作系统后,建议禁止root直接登陆,并增加一个非root帐户,例如叫sysadmin。这样要以root权限操作的话,必须先以sysadmin身份登陆再su到root执行。方法:

CentOS4.3安装步骤图解
以下将以详细的图解来介绍如何安装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 修改以下配置为:

PermitRootLogin no


然后重新启动sshd:

/etc/init.d/sshd restart
这样禁止了root直接登陆。


配置SELinux


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

setsebool httpd_disable_trans=1
setsebool mysqld_disable_trans=1

操作完毕后,重新启动mysql及apache即可。

下载ExtMail Solution软件包
基本假定
整个系统的安装全过程都要求以root身份执行,如果机器没有访问外部网络的能力,则事先下载好ExtMail Solution软件包,并用ftp以sysadmin帐户的身份,上载到服务器。

下载软件包
我们统一将软件包下载到/root目录里。
su - root
cd /root
wget http://www.extmail.org/sou...

解压
目前最新的ExtMail-Solution软件包版本号为0.1,软件包文件名为:ExtMail-Solution-0.1.tar.gz,下载回来后,在/root目录解开:

tar xfz ExtMail-Solution-0.1.tar.gz
此外,我们假设本次安装默认域是extmail.org,主机名为:mail.extmail.org,ExtMail Solution的文件目录是/root/ExtMail-Solution-0.1/

重要步骤:
我们进入/root/ExtMail-Solution-0.1/目录,该目录下包括如下文件/目录:

conf/
docs/
RPMS/
src/
README

其中RPMS目录是本文的重点,里面包含了所需要的全部rpm包,src目录则是存放webmail, anti-spam等相关软件的源码,而README则是说明文件,docs目录则是本文档相关的html及图片。

下文所涉及的操作,绝大部分都是发生在/root/ExtMail-Solution-0.1目录里,请确保当前目录为:/root/ExtMail-Solution-0.1

配置Postfix MTA
删除冲突软件,sendmail,需要执行:
rpm -e --nodeps sendmail


mysql有关软件:
CentOS4.x/ RedHat EL4.x 都自带mysql-server,请用户自行安装好,包括mysql-client和devel等包

安装postfix
rpm -ivh --nodeps RPMS/postfix-2.3.20050716-1hzq.i386.rpm


配置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 = 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
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 = description
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
安装Courier-Authlib
运行如下命令安装相关软件包

rpm -ivh RPMS/libtool-libs-1.5.6-4.EL4.1.c4.3.i386.rpm
rpm -ivh RPMS/courier-authlib-0.57-1hzq.i386.rpm
rpm -ivh RPMS/courier-authlib-devel-0.57-1hzq.i386.rpm
rpm -ivh RPMS/courier-authlib-mysql-0.57-1hzq.i386.rpm

编辑/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:

/etc/init.d/courier-authlib start
如一切正常,命令行将返回如下信息:

Starting Courier authentication services: authdaemond


修改authdaemon socket目录权限

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


安装Maildrop
注意事项:
如果您需要重新编译maildrop软件包,首先必须获得其源码rpm包,其次必须先装好courier-authlib及其devel软件包,否则编译maildrop之后将无法打开authlib支持。

安装maildrop
rpm -ivh RPMS/maildrop-2.0.1-1hzq.i386.rpm
rpm -ivh RPMS/maildrop-man-2.0.1-1hzq.i386.rpm



配置master.cf
为了使Postfix支持Maildrop,必须修改/etc/postfix/master.cf文件,注释掉原来的maildrop的配置内容,并改为:
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}



配置Apache
编辑httpd.conf:
vi /etc/httpd/conf/httpd.conf

在730行左右,屏蔽掉AddDefaultCharset:
#AddDefaultCharset UTF-8

使apache开机默认启动:

chkconfig --level 3 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


重新启动apache:
/etc/init.d/httpd restart
注意:此时重新启动apache会产生以下警告信息,可不必理会

Starting httpd: Warning: DocumentRoot [/var/www/extsuite/extmail/html/] does not exist


安装ExtMail
建立/var/www/extsuite并复制源码到该目录,相关命令:
mkdir /var/www/extsuite
cp -r src/extmail-0.24-pre8 /var/www/extsuite/extmail
cd /var/www/extsuite/extmail
cp webmail.cf.default webmail.cf
cd $OLDPWD

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

编辑webmail.cf

用vi打开/var/www/extsuite/extmail/webmail.cf,并按2次ESC键以确保进入命令模式,然后输入:

:1, $ s#/var/www/cgi-bin#/var/www/extsuite#g

上述命令的作用是将默认路径从/var/www/cgi-bin下换到/var/www/extsuite下,处理完毕后,修改webmail.cf里的其他参数,主要变动的内容见下:

SYS_USER_LANG = zh_CN
SYS_USER_CHARSET = gb2312

SYS_MFILTER_ON = 1
SYS_NETDISK_ON = 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是为了打开网络磁盘和过滤器。全局地址本默认为ldap格式,现在也改为文本格式,并将地址本的转换编码改为GB2312

更新cgi目录权限
由于SuEXEC的需要,必须将extmail的cgi目录修改成vsuer:vgroup权限:

chown -R vuser:vgroup /var/www/extsuite/extmail/cgi/
安装ExtMan - web后台
在ExtMail-Solution软件包根目录下执行:

cp -r src/extman-0.16-pre1 /var/www/extsuite/extman/



配置webman.cf

用vi编辑/var/www/extsuite/extman/webman.cf,并连按2次ESC,确保进入命令模式,然后输入如下命令:
:1, $ s#/var/www/cgi-bin#/var/www/extsuite#g


处理完毕后修改SYS_CHARSET及SYS_LANG参数为:

SYS_CHARSET = gb2312
SYS_LANG = zh_CN

其他参数基本上可以使用默认值。

更新cgi目录权限
由于SuEXEC的需要,必须将extman的cgi目录修改成vsuer: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.12-3.RHEL4.1
如果没有,则表示没有安装好mysql-server,可以从本软件包RPMS目录里安装,也可以找安装光盘安装:

rpm -ivh RPMS/mysql-server-4.1.12-3.RHEL4.1.i386.rpm
安装完毕后必须初始化mysql,然后重新启动

/usr/bin/mysql_install_db
/etc/init.d/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

由于ExtMan的体系与ExtMail比较类似,因此ExtMan需要使用ExtMail中几个基础perl 模块,在extman的源码包里,包含了一个叫buildlink.sh 的小脚本,该脚本完成了这些链接的工作,使用方法:
cd /var/www/extsuite/extman/libs/Ext
./buildlink.sh build /var/www/extsuite/extmail/libs/Ext
mkdir /tmp/extman
chown -R vuser:vgroup /tmp/extman
cd $OLDPWD

操作完毕后,需要建立刚才导入mysql的test@extmail.org帐户的Maildir,请输入如下命令:

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

注意事项:


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

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


测试authlib
在命令行下执行:

/usr/sbin/authtest -s login test@extmail.org test
结果如下:

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: 5242880
Encrypted Password: {crypt}uywiuN.XggXXc
Cleartext Password: test
          Options: (none)

这样表明ExtMan的正确安装,数据库也正确导入,courier-authlib能正确连接到mysql数据库

最后访问http://mail.extmail.org/ex...,如无意外,将看到webmail的登陆页,不过此时还没有加正式的用户,所以不能登陆,包括test@extmail.org也不行。必须要登陆到http://mail.extmail.org/ex... 里增加一个新帐户才能登陆。

ExtMan的默认超级管理员帐户是root@extmail.org,密码是extmail,登陆成功后,建议将密码修改,以确保安全。

配置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/~...
- File::Tail (还需要Time::HiRes模块)

RHEL/CentOS一般自带了perl-Time-HiRes(1.5x)所以以下的rpm安装也许会报错(提示冲突),可以不必理会。如果想安装本文所带的新版Time-HiRes模块,可以用如下命令删除系统自带的包:

rpm -e perl-Time-HiRes --nodeps


安装依赖包/RRDtool


rpm -ivh RPMS/rrdtool-1.2.12-1hzq.i386.rpm RPMS/perl-rrdtool-1.2.12-1hzq.i386.rpm
rpm -ivh RPMS/perl-Time-HiRes-1.72-1hzq.i386.rpm
rpm -ivh RPMS/perl-File-Tail-0.99.3-1hzq.i386.rpm

复制mailgraph_ext
执行以下命令:

cp -r /var/www/extsuite/extman/addon/mailgraph_ext/ /usr/local/mailgraph_ext/

注意事项:

本文使用qmonitor来搜集队列数据,而不是使用crontab来定时提取,这与官方网站上的文档有差异。使用qmonitor的好处是它实时的监视队列目录的变化,显示的结果更加精确。

启动进程
启动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的软件包

rpm -ivh RPMS/cyrus-sasl-2.1.19-5.EL4.i386.rpm
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,

# 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:

/etc/init.d/postfix restart


测试SMTP认证
通过以下命令获得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 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
dGVzdEBleHRtYWlsLm9yZw==
334 UGFzc3dvcmQ6
dGVzdA==
235 2.0.0 Authentication successful
quit
221 2.0.0 Bye

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

安装Courier-IMAP
用以下命令安装courier-imap的rpm包,默认的courier-authlib及courier-imap都会增加系统自启动设置,因此下一次服务器启动将自动启动相应的authlib及POP3服务

rpm -ivh RPMS/courier-imap-4.1.0-1hzq.i386.rpm


配置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服务器的

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 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包
首先我们要确保系统自带的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-1hzq.i386.rpm
rpm -ivh RPMS/perl-Net-IP-1.24-1hzq.i386.rpm
rpm --nodeps -ivh RPMS/perl-Net-DNS-0.57-1hzq.i386.rpm
rpm -ivh RPMS/perl-Time-HiRes-1.72-1hzq.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/spamassassin-3.0.5-3.el4.i386.rpm
rpm -ivh RPMS/perl-IO-stringy-2.110-1hzq.i386.rpm
rpm -ivh RPMS/perl-IO-Multiplex-1.08-1hzq.i386.rpm
rpm -ivh RPMS/perl-Net_SSLeay.pm-1.30-1hzq.i386.rpm
rpm -ivh RPMS/perl-IO-Socket-SSL-0.97-1hzq.i386.rpm
rpm -ivh RPMS/perl-Net-Server-0.93-1hzq.i386.rpm
rpm -ivh RPMS/perl-Unix-Syslog-0.100-1hzq.i386.rpm
rpm -ivh RPMS/perl-TimeDate-1.16-1hzq.i386.rpm
rpm -ivh RPMS/perl-MailTools-1.67-1hzq.i386.rpm
rpm -ivh --force RPMS/perl-MIME-Base64-3.05-1hzq.i386.rpm
rpm -ivh RPMS/perl-Convert-BinHex-1.119-1hzq.i386.rpm
rpm -ivh RPMS/perl-MIME-tools-5.418-1hzq.i386.rpm
rpm -ivh RPMS/perl-BerkeleyDB-0.26-1hzq.i386.rpm
rpm -ivh RPMS/perl-Convert-TNEF-0.17-1hzq.i386.rpm
rpm -ivh RPMS/perl-Convert-UUlib-1.051-1hzq.i386.rpm
rpm -ivh RPMS/perl-Compress-Zlib-1.41-1hzq.i386.rpm
rpm -ivh RPMS/perl-Archive-Zip-1.16-1hzq.i386.rpm
rpm -ivh RPMS/perl-IO-Zlib-1.04-1hzq.i386.rpm
rpm -ivh RPMS/perl-Archive-Tar-1.26-1hzq.i386.rpm
rpm -ivh RPMS/arc-5.21o-1hzq.i386.rpm
rpm -ivh RPMS/zoo-2.10-9hzq.i386.rpm
rpm -ivh RPMS/unarj-2.65-49hzq.i386.rpm
export LANG=C
rpm -ivh RPMS/amavisd-new-2.4.0-1hzq.i386.rpm
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/C...
由于该规则每周更新一次,为了达到最好效果,最好在crontab里增加自动更新的内容,输入:

/usr/bin/crontab -e
然后输入如下的内容:

0 0 1 * * wget -N -P /usr/share/spamassassin www.ccert.edu.cn/spam/sa/C... /etc/init.d/amavisd restart
存盘退出即可。最后运行以下调试命令以确认amavisd没有错误:

/usr/sbin/amavisd debug
如果没有异常提示或报错退出则表示一切都正常,按ctrl+c终止,然后正常启动,若提示pid不存在等错误,不必理会,只要最后启动成功即可:

/etc/init.d/amavisd start
安装ClamAV
执行如下命令:
rpm -ivh RPMS/clamav-db-0.88.3-1hzq.i386.rpm
rpm -ivh RPMS/clamav-0.88.3-1hzq.i386.rpm
rpm -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: 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


/etc/rc.d/init.d/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文件,大概在300行左右,去掉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$/ ],

在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投递到“垃圾邮件箱”中,便于用户翻查。

增加邮件别名
编辑/etc/postfix/aliases,增加如下信息,注意:默认的aliases数据库里已有一条virusalert的别名,所以请删除,再输入下面的别名记录,并确保所有记录都是唯一的:
virusalert:    root
spam.police:   root
postfix:       test@extmail.org


保存并执行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

编辑/etc/postfix/main.cf

# Content-Filter
content_filter = smtp:[127.0.0.1]:10024

保存后/etc/init.d/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:

分享到