qmail+vpopmail+MySQL+igenus+RedHat 7下建立邮件系统

12/3/2006来源:Qmail人气:6920

由于提供Web和E-mail服务对稳定性和性能要求特别高,因此一般都使用Unix作为服务器的操作系统,例如,Hotmail使用FreeBSD和Solaris,国内163等站点也是BSD系列。然而,Unix的标准E-mail系统也不适合用做这种大容量服务,考虑到性能因素,单台服务器支持的用户数量最好不要超过10万。 为了具有支持更多用户的可扩展性,并考虑到安全性、性能及可管理性,一般采用非Unix系统用户来作为E-mail用户。而保存用户数据通常采用支持网络访问的数据库形式,一般常用的有LDAP、标准数据库,以及E-mail系统自己实现的用户数据库。其中,LDAP由于是提供目录服务的标准,因此应该为最佳的选择,其常用的开放源代码实现为OpenLDAP。而标准数据库由于实现方便、可扩展性强,因此在Internet上最常用的为MySQL。此外,也有使用其它方式的实现。
本文就以qmail+vpopmail+MySQL+igenus为基本构架,来介绍一下Webmail的构建方法,希望对正在构建、或正准备构建自己的企业邮件服务器的用户能有所帮助。本文中所构建的邮件服务器具有SMTP身份认证功能、ETRN等扩展功能,对于一般的邮件系统应用已经足够。
本文档针对SolarisR8、RedHat 7而写,并且已经正确测试通过,稍加变通可适用于FreeBsd和其他Unix操作系统。使用该文档您基本上照搬即可,可以改动的笔者基本都做了说明。

安装步骤

安装平台:Solaris 8 for x86 / (redhat 7.2)
安装的机器:mail.ccbtc.com
软件包详细清单略,文件皆在/home文件夹。

安装qmail
首先创建qmail安装目录,添加qmail必需的用户和组。经过解压、解包和编译后,安装补丁包,将qmail目录下,的qmail-smtp.c拷贝到qmail-smtpd-auth-0.26目录下然后对该文件进行补丁处理。
然后将qmail-smtpd.c 拷贝到qmail 的源文件目录里,编译qmail软件包。进入qmail目录后,仔细阅读一下README和INSTALL文件,然后开始编译qmail。
之后进行配置:
#./config-fast mail.ccbtc.com
(mail.ccbtc.com是您的邮件服务器主机名)
建立系统别名,可以在这些别名文件中指定管理用户来接受这些系统邮件,如:
#echo 'admin' > /var/qmail/alias/.qmail*
建立启动文件和用户的maildir,编辑 /var/qmail/rc,修改其中./Mailbox成为./Maildir以支持maildir的pop收信方式,如下:
# !/bin/sh
# Using splogger to send the log through syslog.
# Using qmail-local to deliver messages to ~/Maildir by default.
exec env - PATH="/var/qmail/bin:$PATH"\
qmail-start ./Maildir splogger qmail
其中splogger qmail指令是用来将日志文件记录在/中。

安装ucspi-tcp-0.88、daemontools和vpopmail
ucspi-tcp-0.88的执行文件被安装在/usr/local/bin中;daemontools的执行文件安装于/usr/local/bin中。安装daemontools工具后可以用
#mkdir /var/run/qmail
#supervise /var/run/qmail /var/qmail/rc
来启动qmail,还可以用svc来关闭或重启qmail,用svstat监视qmail运行情况,或者直接启动qmail:
/var/qmail/rc %26amp;
然后安装vpopmail。安装完毕之后,添加域用户:
#./vadduser test@ccbtc.com passwd
具体命令的使用方法请参阅vpopmail手册。

停止Sendmail服务,以qmail的Sendmail libraby取代原有Sendmail
#pkill sendmail
#mv /usr/lib/sendmail   /usr/lib/sendmail.old
#mv /usr/sbin/sendmail  /usr/sbin/sendmail.old
#ln -s /var/qmail/bin/sendmail  /usr/lib/sendmail
#ln -s /var/qmail/sbin/sendmail  /usr/sbin/sendmail
移除Sendmail启动程序,以linux为例,移除inetd.conf中的sendmail之设定,以及/etc/rc.d/init.d下的Sendmail启动文件。

启动qmail SMTP,POP3 daemon系统服务
一、建立SMTP转信规则
建立 /home/vpopmail/etc/tcp.smtp,
:allow,RELAYCLIENT=""
此为接受任何Client端所发出子转送信件。
若要拒绝某些ip所发出的Relay,则修改/etc/tcp.smtp如下:
127.:allow, RELAYCLIENT=""
本文因支持身份认证功能所以采用以下规则:
127.0.0.1:allow,RELAYCLIENT=""
#echo 127.0.0.1:allow,RELAYCLIENT="" >> /home/vpopmail/etc/tcp.smtp
二、转换tcp.smtp成为cdb格式
#/usr/local/bin/tcPRules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp
注意,若对tcp.smtp有任何变更,都必须经过tcprules转换成为cdb文件才会生效。另外,tcp.smtp若为空白,则表示拒绝所有的转送,因为预设的规则为deny。
至此,转送规则已建立,稍后将依此规则启动qmail-smtpd。
三、设置/home/vpopmail/bin/vchkpw的SetUID和SetGID
这点很重要,否则认证无法通过,这是因为smtpd 的进程是由qmaild 执行的。而密码验证程序原来只使用于POP3进程,分别由root或vpopmail执行,为的是读shadow或数据库中的密码,并取出用户的邮件目录。这些操作qmaild 都没有权限去做。如果SMTP进程要调用密码验证程序,则必须要使用setuid和setgid。其实这点大可放心,这两个密码验证程序都是带源代码的,本身非常安全,只需要放在安全的目录里就可以了。设置其他用户,除qmaild可执行外,都没有权限执行。其实如果没有其它SHELL帐户,也就不用这么麻烦了。
#chmod 4755 /home/vpopmail/bin/vchkpw
#chmod 755 /home/vpopmail/bin
四、设定SMTP及POP3 daemon的启动
移除inetd.conf中有关SMTP及POP3的设定(加上#号),编辑/etc/services,改为以下设定:
smtp 25/tcp
pop3 110/tcp
pop3 110/udp
启动 SMTP:
/usr/local/bin/tcpserver -v -x /etc/tcp.smtp.cdb\
-u UID -g GID 0 smtp/var/qmail/bin/qmail-smtpd\
/home/vpopmail/bin/vchpkw /usr/bin/true /bin/cmd5checkpw \
/usr/bin/true %26amp; | /var/qmail/bin/splogger smtpd 3 %26amp;
其中UID和GID为前述新增qmail系统账号qmaild的User ID,以及nofiles的group ID。
/var/qmail/bin/splogger那一行会将log文件写在/var/log/maillog中。
启动POP3,编辑启动档加入以下设定:
tcpserver -H -R 0 pop3 \
/var/qmail/bin/qmail-popup mail.ccbtc.com \
/home/vpopmail/bin/vchkpw /var/qmail/bin/qmail-pop3d Maildir %26amp;

qmailAdmin的安装
首先安装ezmlm和autorespond,然后即可安装qmailAdmin。安装前首先要考虑满足以下几项要求:
是否拥有一个vpopmail用户vchkpw
◆ cgi-bin目录的所在位置;
◆ ezmlm目录的所在位置;
◆ autorespond目录的所在位置;
◆ 如果能够达到以上要求,可以继续安装。
检测安装是否正确,可以在浏览器中打开路径http://mail.ccbtc.com/cgi-bin/qmailadmin,看根据前面设置的用户和密码是否能够成功登录进去。

WebMail的安装
一、MySQL的安装
Solaris x86安装pkg包,因为Solaris系统平台编译MySQL有问题,笔者一直无法编译通过,所以采用pkg安装。
二、安装imap的php模块
#gzip -d c-client.tar.Z
#tar xf c-client.tar
#cd imap-2002
#make gso SSLTYPE=none
#cp c-client/c-client.a /usr/local/lib/libc-client.a
#cp c-client/rfc822.h mail.h linkage.h /usr/local/include
make gso表示在Solaris系统上安装imap,不同的系统有不同的参数,可以通过more Makefile 找到关于您Unix系统相应的参数,例如:RedHat的参数为lrh。
三、安装PHP模块
如果您以前安装PHP的时候没有采用以模块的方式安装php(--with-apxs),那您只好连Apache一起重新安装,由于笔者以前安装PHP的时候采用模块化的安装,所以没有对Apache进行任何改动。
然后进入PHP解压后的目录,重新编译PHP模块:
#./configure -prefix=/usr/php4 --with-apxs=/usr/apache/bin/apx with-imap=/home/imap-2002 -with-mysql=/usr/local/mysql
#make
#make install
将/usr/php/lib中的php.ini文件修改如下:
[php]
register_globals=on
重新启动Apache使修改生效。
四、igenus的安装
igenus是一个国内制作的Webmail,省去了我们还要对国外Webmail进行翻译的麻烦。
将解压后的Snap目录放入Web浏览的目录下面,如/home/snap。
在/home目录建立临时目录,然后修改以下部分:
$CFG_BASEPATH = "/home/snap"; -是iGNEUS webmail安装在系统的路径
$CFG_MYSQL_HOST = 'localhost';
$CFG_MYSQL_USER = 'root';
$CFG_MYSQL_PASS = 'yyyyy';
$CFG_MYSQL_DB = 'vpopmail'
$CFG_HOSTNAME = "http://mail.ccbtc.com";
$CFG_LANGUAGE = gb
$CFG_GMT = +8;
$CFG_TEMP = $CFG_BASEPATH."./temp";确保浏览的目录和temp的目录在同一路径。
然后修改默认登录域的设置。编辑login.php文件:
--默认登录域
--其它域名。
将运行apache的用户和组修改为vpopmail、vchkpw,重新启动Apache,浏览http://mail.ccbtc.com 就可以出现如图1和图2的页面:

图1

图2

构建ETRN支持

ETRN是一个通知ESMTP服务传送邮件队列的命令,通常用于到ISP的拨号连接和备份邮件服务器,当一个远端客户发送一个ETRN命令时,队列中远端客户的消息会被发送给客户,ETRN是TURN命令的一个扩展版本,加上了安全特性。TURN命令被用作启动远端计算上队列中消息的传送。但是,TURN有一个安全问题,因为没有远端主机名的校验。ETURN提供了远端主机名的校验,这样,除了专门接收消息的那一台主机以外,其他都不能接收消息,并且,ETRN并不是发起的连接上传输信息,而是,重新启动一个新的连接进行数据传输,即使,有人伪装客户主机发出ETRN命令,系统也会连接到正确的目标主机进行信息交换,从而,保证了信息的安全性。
qmail本身是不支持ETRN功能的,但是我们可以提供一种方法来欺骗qmail系统,使得系统可以正确应答客户端所发出的ETRN命令,并进行正确的信息交换。

ETRN的运行条件
客户端必须有有效的主机字符串(DNS主机名)或有效的静态IP地址(假设为1.2.3.4)和正确的DNS解析纪录(如域 mydomain.com):
mydomain.com mx 10 mail.ccbtc.com

serialmail的安装及配置
一、建立邮件缓冲区
#mkdir /var/qmail/autoturn
#chgrp qmail /var/qmail/autoturn
#chmod 2755 /var/qmail/autoturn
二、设置本地接收用户
将此行"+autoturn-:qmaild:7770:2108:/var/qmail/autoturn:-::"导入到/var/qmail/user/assign,用您的qmaild用户的ID替代7770,nofiles组的gid替代2108,并且运行:
#../bin/qmail-newu
至此,autoturn用户应该已经生效。
三、将您需要使用ETRN功能的域名导入
/var/qmail/control/rcpthosts 如mydomain.com:
#echo mydomain.com >> /var/qmail/control/rcpthosts
四、设置默认转发
#echo mydomain.com:autoturn-1.2.3.4 >> /var/qmail/control/virtualdomains
将发送到mydomain.com的信件全部转发给本地的autoturn用户,1.2.3.4区分ETRN用户。
五、设置maildir邮件投递规则
# cd /var/qmail/autoturn
# maildirmake 1.2.3.4
# chown -R qmaild 1.2.3.4
# echo ./1.2.3.4/ > .qmail-1:2:3:4-default
# chmod 644 .qmail-1:2:3:4-default
确认以上步骤设置成功,qmail系统会根据远程客户的IP地址及其本地的maildir投递规则,将邮件转发到相应的maildir信箱。如需设置多域名的ETRN功能,重复以上步骤即可。

启动方式

用以下字符串替代 /var/qmail/bin/qmail-smtpd即可。
sh -c '
/var/qmail/bin/qmail-smtpd
cd /var/qmail/autoturn
exec setlock -nx $TCPREMOTEIP/seriallock \
maildirsmtp $TCPREMOTEIP autoturn-$TCPREMOTEIP- $TCPREMOTEIP AutoTURN
至此您的qmail已安装完毕,希望您能看见您的qmail!

,