ExtMail Solution HOWTO for Linux 修正及安装笔记

ExtMail Solution HOWTO for Linux 修正及安装笔记


http://www.XiaoHui.com 日期: 2007-10-21 08:00

  最近组了一台 Linux 的主机。操作系统是 CentOS 4.4。在找一个成套的邮件解决方案时,让我折腾了许久。我要求能支持 POP3, SMTP, SSL, WEBMAIL 以及多域名设置。最后我找到了 ExtMail Solution,完美地实现了我所想要的功能。

  不过在依照 ExtMail 的官方文档进行安装时,发现有些小地方的配置说明,容易引起歧义或导致错误的结果。所以我在安装结束之后,根据我的安装过程,做了一些补充说明和修正,文中的红字标记即是我的补充。

版权声明:

  本文版权归作者所有,如其他个人、第三方网站或媒体报刊等需转载全文或节选,为支持我们的工作,请务必注明如下信息:

  如果因此而给您带来麻烦,请您原谅,谢谢合作。

变更说明

  • 0.20 2006-11-26:增加对uidnumber/gidnumber说明,感谢elm
  • 0.19 2006-11-25:增加对maildrop增加vuser/vgroup说明,感谢elm
  • 0.18 2006-09-04:修正一处输入错误,一处不明确的地方
  • 0.17 2006-08-30:修正缺漏receive_override_options的bug
  • 0.16 2006-08-28:修正maildrop配置错误,感谢风云!
  • 0.15 2006-08-17:增加mysql/httpd开机自启动的支持

关于此文

本文档以2005-07-25的早期文档为蓝本,以RPM系统为基础。所涉及软件全部是OpenSource软件,版权以GPL为主,作为企业应用没有任何版权/法律问题。

基于RPM系统具有方便、快捷,易快速复制和重现的优点。如果用户希望获得这些RPM包的源码包,可以与作者联系。

编写本文的初衷,是给那些希望快速架设邮件系统而不想过多了解复杂的系统知识的网管/用户,为了使软件之间的结合更紧密,部分软件的配置及测试方面进行了增强改进,因此本文的一些操作步骤作者不能保证在其他场合能完全适用,敬请注意。

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

文档目录

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 CentOSRHEL是一样的,而且升级免费
邮件传输代理(MTA Postfix 2.3snapshot 使用2.3 snapshot,虽然不是最新但是对一般人而言足够用了
数据库/目录服务 MySQL 4.1 可选openLDAPNetScape 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 authlibmaildrop, 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, libdbi-dbd-mysql, perl-DBD-mysql等模块,否则extmail将无法连接mysql
  • VIM编辑器
    强烈建议安装vim-enhanced软件包,它支持main.cf彩色高亮语法分析

其余的Xwindows, 打印,KDE/Gnore, 服务器配置工具,网络工具,开发包等全部都不要选上。安装完毕进入操作系统后,建议禁止root直接登陆,并增加一个非root帐户,例如叫 sysadmin。这样要以root权限操作的话,必须先以sysadmin身份登陆再su到root执行。方法:

CentOS4.3安装步骤图解

以下将以详细的图解来介绍如何安装CentOS4.3

ExtMail Solution HOWTO for Linux 修正及安装笔记

CentOS启动光盘的启动画面,直接回车即可。

ExtMail Solution HOWTO for Linux 修正及安装笔记

系统提示“是否需要校验CD媒质”,请选择“Skip”。

ExtMail Solution HOWTO for Linux 修正及安装笔记

选择“English”作为安装界面的语言。

ExtMail Solution HOWTO for Linux 修正及安装笔记

安装类型请务必选择“Custom”,以便之后详细选择要装的软件包。

ExtMail Solution HOWTO for Linux 修正及安装笔记

磁盘分区设置请选择“Manually partition with disk Druid”(手工分区)。

ExtMail Solution HOWTO for Linux 修正及安装笔记

如图,我们将/,/usr,/var,/var/spool/postfix等单独分成一个分区,注意:如果磁盘大小允许,请将/var/spool/vscan目

录也单独成一个分区,该目录主要存放被过滤的临时邮件。

ExtMail Solution HOWTO for Linux 修正及安装笔记

配置网卡及子网掩码,记得点选“Activate boot”。

ExtMail Solution HOWTO for Linux 修正及安装笔记

配置网关及DNS,请将离你的服务器最近DNS服务器IP地址填入“Primary DNS”。

ExtMail Solution HOWTO for Linux 修正及安装笔记

防火墙配置时,打开防火墙(选Enable FireWall),并放行常规的服务(服务列表全选),最重要的是记得打开SELinux(选Active)

ExtMail Solution HOWTO for Linux 修正及安装笔记

时区选“上海”。

ExtMail Solution HOWTO for Linux 修正及安装笔记

输入root帐户密码,建议使用较长的密码,并混杂数字与字母及特殊字符。

ExtMail Solution HOWTO for Linux 修正及安装笔记

进入软件组的选择对话界面后,我们只选择Editors组。

ExtMail Solution HOWTO for Linux 修正及安装笔记

其次选择是Web Server及FTP Server组。

ExtMail Solution HOWTO for Linux 修正及安装笔记

再次选择MySQL DataBase组,并点击右边的Details

ExtMail Solution HOWTO for Linux 修正及安装笔记

在Details对话框里,确保libdbi-dbd-mysql,mysql-server,perl-DBD-MySQL等模块都被选中。extmail依赖这些软件包。

ExtMail Solution HOWTO for Linux 修正及安装笔记

最后,确认一下所做的选择。其他没有被提到的软件模块/组全部都去掉。总共软件大小有814MB左右。

ExtMail Solution HOWTO for Linux 修正及安装笔记

点Next后,安装系统提示必须要准备好CentOS的第1,2,3张光盘。

ExtMail Solution HOWTO for Linux 修正及安装笔记

系统进行初始化,磁盘分区等。

ExtMail Solution HOWTO for Linux 修正及安装笔记

系统安装到后面时,需要换安装盘。请将盘2及盘3按提示放入光驱。

ExtMail Solution HOWTO for Linux 修正及安装笔记

安装完毕后,出现祝贺完成的界面,点Reboot重新启动。

ExtMail Solution HOWTO for Linux 修正及安装笔记

如无意外,系统进入登陆提示符界面。至此,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,并将如下命令加入/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软件包

基本假定

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

下载软件包

我们统一将软件包下载到/root目录里。
su - root
cd /root
wget 

校验

下载的文件必须校验确认过没损坏才能使用。命令如下:

wget 
cat md5sum.es_linux-0.1
md5sum ExtMail-Solution-Linux-0.1.tar.gz 

一个可能的结果:

# cat md5sum.es_linux-0.1
168eced41c0cac0ed9f981e791f3783b ExtMail-Solution-Linux-0.1.tar.gz
# md5sum ExtMail-Solution-Linux-0.1.tar.gz
168eced41c0cac0ed9f981e791f3783b ExtMail-Solution-Linux-0.1.tar.gz

由于软件包不断的变更,所以上述结果和您的结果可能不一致,请以下载的md5sum为准

解压

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

tar xfz ExtMail-Solution-Linux-0.1.tar.gz

此外,我们假设本次安装默认域是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

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

内容如下:

XiaoHui 补充: 这里指定 Extmail 连接 mysql 时的参数, 包括 username, password, database 等。你不需要自己手工去 mysql 建立 database 以及 username。在后面,会有一个专门的 sql 文件,修改后即可导入

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

XiaoHui 补充: authlib是数据认证库, 是maildrop, courier-imap等服务的关键部件

运行如下命令安装相关软件包

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文件,并将其内容清空,然后增加如下内容:

XiaoHui 补充:建议执行下列命令,先将以前的默认配置备份,然后再编译新文件:
mv /etc/authlib/authmysqlrc /etc/authlib/authmysqlrc.old
vi /etc/authlib/authmysqlrc
MYSQL_SERVER            localhost
MYSQL_USERNAME          extmail
MYSQL_PASSWORD          extmail
MYSQL_SOCKET            /var/lib/mysql/mysql.sock
MYSQL_PORT              3306
MYSQL_OPT               0
MYSQL_DATABASE          extmail
MYSQL_USER_TABLE        mailbox
MYSQL_CRYPT_PWFIELD     password
MYSQL_UID_FIELD         uidnumber
MYSQL_GID_FIELD         gidnumber
MYSQL_LOGIN_FIELD       username
MYSQL_HOME_FIELD        homedir
MYSQL_NAME_FIELD        name
MYSQL_MAILDIR_FIELD     maildir
MYSQL_QUOTA_FIELD       quota
MYSQL_SELECT_CLAUSE     SELECT username,password,"",uidnumber,gidnumber,
                        CONCAT('/home/domains/',homedir),               
                        CONCAT('/home/domains/',maildir),               
                        quota,                                          
                        name                                            
                        FROM mailbox                                    
                        WHERE username = '$(local_part)@$(domain)'

存盘退出后启动courier-authlib:

/etc/init.d/courier-authlib start

如一切正常,命令行将返回如下信息:

Starting Courier authentication services: authdaemond

修改authdaemon socket目录权限

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

chmod 755 /var/spool/authdaemon/

安装Maildrop

注意事项:

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也会报错的。

安装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}
XiaoHui 补充:注释掉原来的 maildrop 的配置内容时,注释掉的内容应该放在最后面。因为这是一个分行的配置,不能在分行配置中插入 # 来注释。否则无法通过。原文中这种写法,我安装后无法启动。应该改成这样:

maildrop  unix  -       n       n       -       -       pipe
   flags=DRhu user=vuser argv=maildrop -w 90 -d ${user}@${nexthop} ${recipient} ${user} ${extension} {nexthop}
#  flags=DRhu user=vmail argv=/usr/local/bin/maildrop -d ${recipient}
配置main.cf

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

XiaoHui 补充:vi /etc/postfix/main.cf
maildrop_destination_recipient_limit = 1

最后重新启动postfix即可

XiaoHui 补充:执行下列命令启动 postfix:

#   将Postfix设置为自启动:
[root@xiaohui ~]# chkconfig postfix on
确认Postfix服务状态:
[root@xiaohui ~]# chkconfig --list postfix

启动Postfix:
[root@xiaohui ~]# /etc/rc.d/init.d/postfix start

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

ServerName mail.extmail.org
DocumentRoot /var/www/extsuite/extmail/html/

ScriptAlias /extmail/cgi/ /var/www/extsuite/extmail/cgi/
Alias /extmail/ /var/www/extsuite/extmail/html/

ScriptAlias /extman/cgi/ /var/www/extsuite/extman/cgi/
Alias /extman/ /var/www/extsuite/extman/html/

# Suexec config
SuexecUserGroup vuser vgroup
重新启动apache:
/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目录修改成vuser: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目录修改成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.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:                                            [    ]

然后用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  

如果你一切按默认安装,域名用的就是 mail.extmail.org, 数据库的连接参数(username, database, password)都没有改,那么可以不用修改。直接执行。 如果你的域名不是 mail.extmail.org,而是你自己的域名,建议修改下列资料:

  1. 打开 /var/www/extsuite/extman/docs/extmail.sql, 修改数据库连接的用户名和密码。
  2. 打开 /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默认值为例。

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

测试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/extmail/,如无意外,将看到webmail的登陆页,不过此时还没有加正式的用户,所以不能登陆,包括test@extmail.org也不行。必须要登陆到http://mail.extmail.org/extman/ 里增加一个新帐户才能登陆。

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

配置Mailgraph_ext

XiaoHui 补充: 此模块主要是为提供图形化显示日志的能力。可以不必安装。

自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包,地址:
  
- 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的)

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

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

334 VXNlcm5hbWU6

334 UGFzc3dvcmQ6

235 2.0.0 Authentication successful

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

Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
+OK Hello there.

+OK Password required.

+OK logged in.

+OK POP3 clients that break here, they violate STD53.
.

+OK Bye-bye.
Connection closed by foreign host.
XiaoHui 补充: 安装完上列组件之后,ExtMail 已经可以正常工作了。只是没有安装反病毒和反垃圾的组件。如果你不需要反病毒和反垃圾的功能,可以不必安装他们。根据我的测试,amavisd 需要占用相当大的内存和CPU资源。

反病毒/内容过滤配置

反病毒及内容过滤器是依赖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/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不存在等错误,不必理会,只要最后启动成功即可:

/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

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 {}
", "/var/run/clamav/clamd.sock"],
  qr/
上一篇:Logistic Regression 分类算法


下一篇:swift-switch使用方法