正好最近需要把原来架设的web mail系统整体转移,顺便把原来放了N久的文档补齐吧:p..目的是为用户提供web方式的邮件系统,注意,只有web方式,不提供pop3等等方式,要求系统良好的扩展性以及相应的安全(防病毒、垃圾邮件)等等。
系统中apache+php+hivemail来提供web访问,hivemail通过pipe gateway默认于mta连接,
整个邮件系统涉及:
1.linux rhas3
2.mta postfix
3.database mysql
4.webmail apache+php+hivemail
5.anti-virus,anti-spam f-secure internet gatekeeper
A。操作系统,linux,习惯了rhas3 当然debain、suse等都可以,安装过程忽略。推荐使用较大的硬盘,大用户量下还是感觉mail放在硬盘上比放在mysql数据库里性能要好的多,硬盘大小根据你的用户量以及邮箱容量计算。 注意因为偶是采用的硬盘目录存储邮件,ext3文件系统存在单一目录下子目录不能超过32k的限制,推荐使用reiserfs文件系统。
B。postfix配置 而不是sendmail,可以使用rhas3自带的,也可以手工编译,偶是懒人,直接使用了rhas3自带的postfix,需要编辑更改一下main.cf以及alias文件main.cf需要更改myhostname、mydomain、myorigin、inet_interfaces、mydestination、mynetworks、relay_domains等等,整个相当于postfix作为mta开始对外使用,注意不要打开open relay针对我们的web系统,需要优化一下postfix,例如maximal_queue_lifetime、smtpd_timeout减小之类以避免影响性能最终需要配置main.cf,这个是使用pipe-gateway方式来连接hivemail,注意一下两项都需要
luser_relay = hivemail
local_recipient_maps =
这个是保证postfix把接受的邮件转移个hivemail用户,当然需要在alias文件里添加用户如下
hivemail: /opt/php/bin/hivemail_process.php
然后更新一下aliases.db# postalias aliases最后重启一下postfix服务,看看postfix是不是配置正确。
C。Mysql编译
偶不喜欢rh自带的mysql,使用的是mysql4.0.27源码编译的,参数如下
./configure --prefix=/resource/mysql --with-extra-charsets=complex --enable-thread-safe-client --enable-local-infile --enable-assembler --disable-shared --with-client-ldflags=-all-static --with-mysqld-ldflags=-all-static --without-debug
make & make install
然后参照INSTALL-SOURCE完成数据库安装,具体请查看INSTALL-SOURCE内容,配置/etc/my.cnf等等,包括需要的表类型、数据库引擎类型等等。 最终需要创建我们需要的数据库跟用户
mysql>create database hivemail;
mysql>grant all on hivemail.* to
'user'@'%' identified by 'pwd';
注意这里我们user用户是可以在任何地点连接的,需要通过防火墙阻止非信任ip对mysql 3306端口的访问。
D。apache+php+hivemail编译安装
注意这里没有使用lighty或者zeus,zeus4.2完全可以使用hivemail,只要正确配置的fastcgi,但lighty+fastcgi+php方式却不能正常使用hivemail,怀疑某个变量没有被传输过来,偶没有时间来继续做测试,有兴趣的可以测试一下。
apache2编译安装,偶需要对apache加装mod_evasive、mod_security、ssl等等,所以编译比较繁琐,正常情况下简化即可
./configure --prefix=/opt/apache2 --enable-so --enable-rewrite --enable-forward --enable-deflate --enable-headers --enable-ssl --with-ssl=/opt/openssl
make & make install
php编译安装,主要是--with-apxs2参数编译mod_php,参数如下,偶打开了fastcgi
./configure --prefix=/opt/php --enable-fastcgi --enable-force-cgi-redirect --with-config-file-path=/etc --with-zlib --with-mysql=/resource/mysql --with-xml --with-mysql-sock=/tmp/mysql.sock --enable-discard-path --with-apxs2=/opt/apache2/bin/apxs
make & make install
如果需要增加其它例如ecacceleator、zend optimizer之类的,请自己手动安装一提高php执行性能。
hivemail安装,这里我们是使用pipe gateway方式来连接postfix,偶这里是hivemail1.2.2,没有采用最新的hivemail1.3,因为偶改了N多东西,所以一直没有升级。
ⅰ。hivemail web安装很简单,仔细看INSTALL安装文件,需要把upload ftp到服务器上,然后修改upload/include/config.php,正确设置mysql连接,然后通过web访问upload/install/index.php通过web一路next即可。
注意这里有个sql_install.php,实际上就是它创建的hivemail各项使用表,默认的为myisam表格式,偶喜欢innodb,所以通过更改sql_install.php,直接创建为innodb表。
2。pipe gateway连接mta,需要把hivemail_process.php上传到我们的php执行路径下,编辑一下hivemail_process.php设置正确的各个路径,包括php路径,hivemail安装目录等等,最后chmod +x hivemail_process.php。
3.使用你创建的admin登陆,然后更改存储方式为storage method,即硬盘存储邮件方式,以减轻大用户量下mysql的压力。
E。防毒防垃圾邮件,推荐f-secure internet gatekeeper,比偶原来使用Trend IMSS性能好的多internet gatekeeper是优秀的网关防毒软件,当然也是商业软件:p,支持http、ftp、smtp、pop3防毒。
到f-secure下载个for linux的30天试用版本,tar zxvf解压,sh INSTALL.sh即默认安装到/opt/f-secure/fsigk下,默认的管理端口为127.0.0.1:9012,更改一下fsigk/etc/fsigk.ini改成公网ip重新启动fsigk_admin服务即可远程管理,这里打开smtp,监听9025端口,parent smtp设置127.0.0.1 25,打开virus以及spam检查,对于收到virus以及spam邮件自个设定如何处理。fsigk_smtp会自动启动,监听9025端口
注意这里需要我们把对25端口的收信转移到9025上以方便gatekeeper检查病毒、spam,然后再转移回postfix,利用iptables的nat端口转换功能来完成此项操作。
iptables -t nat -A PREROUTING -d publicip -p tcp -m tcp --dport 25 -j DNAT --to-destination publicip:9025
系统的优化:
偶使用的是hivemail1.2.2,性能在默认情况下有些问题,经过检查发现一个sql占用了大量的cpu,就是对hive_emailid的操作,表现为系统中有N个hivemail_process.php,mysql占用大量的系统cpu,对此表emailid字段创建index即可坚决此严重的性能问题。此问题曾经在hivemail forum多次出现,官方只推荐升级到hivemail1.
3。偶没有测试过1.3,所以不知道1.3是否解决此性能问题。至少在1.2.2上创建index后在偶的接近10W用户里没再出现相应的性能问题。
题外话:
hivemail作为商业web mail系统,已经2年没更新了,怀疑已经是个dead project,但其用户还是挺多的,对于中小型使用非常合适而且可以根据需要更改php程序,整体界面非常漂亮。这么死掉的话非常可惜。
最近发现的hivemail漏洞是因为对于各个id的检查不够,各位可以在相应的php程序开头加入intme($*id)以防止此注入。
要求安全性高的话可以在apache加装mod_security、mod_evasive等以防止一些常见的攻击。