Total Pageviews

Monday 8 October 2012

基于虚拟帐号和虚拟域的邮件系统

将要实现的功能:

第一步:环境配置
导入软件包:
所需要软件包:
wps_clip_image-28445
wps_clip_image-8155
wps_clip_image-22299
配置地址:
# vim /etc/sysconfig/network-scripts/ifcfg-eth0
wps_clip_image-16928
配置DNS指向:
# vim /etc/resolv.conf
wps_clip_image-18229
改变主机名: 改变主机名后需要重新登录;
wps_clip_image-15412
wps_clip_image-3181
# hostname mail.sohu.com
wps_clip_image-6739
//更改过主机名后,需要重新登录或重启服务器;
去掉hosts文件的无效信息:
# vim /etc/hosts
wps_clip_image-4193
第二步:配置DNS服务器:
挂载光盘:
# mkdir /mnt/cdrom
# mount /dev/cdrom /mnt/cdrom/
配置本地yum:
# vim /etc/yum.repos.d/yum.repo
wps_clip_image-15527
安装DNS:
# yum install bind bind-chroot caching-nameserver
生成DNS主配置文档:
# cd /var/named/chroot/etc/
# cp -p named.caching-nameserver.conf named.conf
编辑DNS主配置文档:
# vim /var/named/chroot/etc/named.conf
wps_clip_image-884
配置区域声明:
# vim /var/named/chroot/etc/named.rfc1912.zones
wps_clip_image-10085
编辑区域数据库文件:
# cd /var/named/chroot/var/named/
# cp -p localhost.zone sohu.com.zone
# vim sohu.com.zone
wps_clip_image-246
启动DNS服务,并设置成开机启动:
# service named start
# chkconfig named on
关闭sendmail,避免与postfix冲突:
# service sendmail stop
# chkconfig sendmail off
第三步:安装必须的软件包
需要apache、mysql、php以及必要的库文件等等;
# yum install httpd php php-mysql mysql mysql-server mysql-devel \
openssl-devel dovecot perl-DBD-MySQL tcl tcl-devel libart_lgpl \
libart_lgpl-devel libtool-ltdl libtool-ltdl-devel expect
执行安装各种软件包:【四个组文件】
# yum grouplist
wps_clip_image-22722
不存在相应的组时,再安装组文件:
## yum groupinstall "FTP Server"
第四步:配置mysql数据库
启动mysql服务,并设置成开机自动启动:
# service mysqld start
# chkconfig mysqld on
//mysql是用来放置虚拟帐号和虚拟域使用的;
进入mysql,给mysql添加口令,Mysql默认是没有口令的:
# mysql
SET PASSWORD FOR root@'localhost'=PASSWORD('redhat');  //授权本地用户
SET PASSWORD FOR root@'127.0.0.1'=PASSWORD('redhat');  //授权本地用户
GRANT ALL PRIVILEGES ON *.* TO root@'%' IDENTIFIED BY 'redhat'; //授权远程用户
FLUSH PRIVILEGES;   //刷新数据库
第五步:源码安装postfix
拆解postfix源码:
wps_clip_image-17871
# tar -zxvf postfix-2.8.2.tar.gz -C /usr/local/src/
# cd /usr/local/src/postfix-2.8.2/
添加postfix组和postdrop组: 组id是2525 2526
//组postfix用于接受邮件服务
//组postdrop用于投递邮件服务
# groupadd -g 2525 postfix
# useradd -g postfix -u 2525 -s /sbin/nologin -M postfix
# groupadd -g 2526 postdrop
# useradd -g postdrop -u 2526 -s /bin/false -M postdrop
由于没有config文件,所以使用make makefile来配置源码,从而生成makefile文件:
#make makefiles 'CCARGS=-DHAS_MYSQL -I/usr/include/mysql \
-DUSE_SASL_AUTH -DUSE_CYRUS_SASL -I/usr/include/sasl \
-DUSE_TLS ' 'AUXLIBS=-L/usr/lib/mysql -lmysqlclient -lz -lm \
-L/usr/lib/sasl2 -lsasl2 -lssl -lcrypto'
使用make编译,生成二进制文件,头文件,库文件和说明文件;
# make
使用make install安装,将make产生的文件放到相应的位置:
# make install
//会出现一些配置信息,我们再次使用默认值;
生成别名二进制文件,这个步骤如果忽略,会造成postfix效率极低:
# newaliases
启动postfix,由于postfix在环境变量中:
#postfix start
查看postfix是否关联mysql:
# postconf -m
wps_clip_image-31622
第六步:配置postfix主配置文件
配置postfix:
#vim /etc/postfix/main.cf
修改以下几项为您需要的配置:
指明mail服务器的主机名:
wps_clip_image-5433
指明mail服务器所属的域:
wps_clip_image-17226
是否做地址伪装:
wps_clip_image-1162
开启,监听所有端口:
wps_clip_image-26536
开启mailbox选项:
wps_clip_image-28194
重新加载postfix的配置文件:
#postfix stop   //关闭postfix服务
# postfix start  //启动postfix服务
说明:
myorigin参数用来指明发件人所在的域名;
mydestination参数指定postfix接收邮件时收件人的域名,即您的postfix系统要接收到哪个域名的邮件;
myhostname 参数指定运行postfix邮件系统的主机的主机名,默认情况下,其值被设定为本地机器名;
mydomain参数指定您的域名,默认情况下,postfix将myhostname的第一部分删除而作为mydomain的值;
mynetworks 参数指定你所在的网络的网络地址,postfix系统根据其值来区别用户是远程的还是本地的,如果是本地网络用户则允许其访问;
inet_interfaces 参数指定postfix系统监听的网络接口;
注意:
1、在postfix的配置文件中,参数行和注释行是不能处在同一行中的;
2、任何一个参数的值都不需要加引号,否则,引号将会被当作参数值的一部分来使用;
3、每修改参数及其值后执行 postfix reload 即可令其生效;但若修改了inet_interfaces,则需重新启动postfix;
4、如果一个参数的值有多个,可以将它们放在不同的行中,只需要在其后的每个行前多置一个空格即可;postfix会把第一个字符为空格或tab的文本行视为上一行的延续;
第七步:配置cyrus-sasl认证,为postfix开启基于cyrus-sasl的认证功能
查看postfix是否支持cyrus-sasl认证:
    使用以下命令验正postfix是否支持cyrus风格的sasl认证,如果您的输出为以下结果,则是支持的:
#postconf  -a
cyrus //表明支持cyrus-sasl认证
dovecot  //表明支持dovecot服务
在postfix配置文件中插入以下内容:
#vim /etc/postfix/main.cf
添加:
############################CYRUS-SASL############################
broken_sasl_auth_clients = yes
smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject_invalid_hostname,reject_non_fqdn_hostname,reject_unknown_sender_domain,reject_non_fqdn_sender,reject_non_fqdn_recipient,reject_unknown_recipient_domain,reject_unauth_pipelining,reject_unauth_destination
smtpd_sasl_auth_enable = yes
smtpd_sasl_local_domain = $myhostname
smtpd_sasl_security_options = noanonymous
wps_clip_image-7653
将postfix与sasl验证服务进行关联:
首先,创建postfix与sasl的关联文件:
# cp -p /usr/lib/sasl2/Sendmail.conf /usr/lib/sasl2/smptd.conf
查看验证机制:
# cat /usr/lib/sasl2/smptd.conf
pwcheck_method:saslauthd  //验证方式是saslauthd
启动saslauthd服务,并将其加入到自动启动队列:
# service saslauthd start
# chkconfig saslauthd on
第八步:源码安装courier-authlib服务
拆解courier-authlib源代码:
# tar jxvf courier-authlib-0.63.1.20111230.tar.bz2 -C /usr/local/src/
# cd /usr/local/src/courier-authlib-0.63.1.20111230/
使用./configure配置courier-authlib源码:
#./configure \
--prefix=/usr/local/courier-authlib \
--sysconfdir=/etc \
--with-authmysql \
--with-mysql-libs=/usr/lib/mysql \
--with-mysql-includes=/usr/include/mysql \
--with-redhat \
--with-authmysqlrc=/etc/authmysqlrc \
--with-authdaemonrc=/etc/authdaemonrc \
--with-ltdl-lib=/usr/lib \
--with-ltdl-include=/usr/include
使用make编译courier-authlib源码,生成四类文件:
# make
使用make install安装由make生成四类文件:
# make install
改变authdaemon文件的权限:
# chmod 755 /usr/local/courier-authlib/var/spool/authdaemon
生成authdaemonrc和authmysqlrc两个配置文件:
# cp /etc/authdaemonrc.dist  /etc/authdaemonrc
# cp /etc/authmysqlrc.dist  /etc/authmysqlrc
修改/etc/authdaemonrc 文件,courier-authlib采用的模块列表;
# vim /etc/authdaemonrc
wps_clip_image-3321
wps_clip_image-11478
编辑/etc/authmysqlrc 为以下内容,其中2525,2525 为postfix 用户的UID和GID。其中包含courier-authlib服务调用mysql的信息;
# vim /etc/authmysqlrc
wps_clip_image-3424
wps_clip_image-21782
    //(这时为后文要用的数据库的所有者的用户名)
wps_clip_image-1255
    //(密码)
wps_clip_image-22471
wps_clip_image-4764
wps_clip_image-30830
wps_clip_image-12785
wps_clip_image-31411
wps_clip_image-24066
wps_clip_image-25345
wps_clip_image-20524
wps_clip_image-14693
wps_clip_image-15358
wps_clip_image-18456
产生courier-authlib服务执行文件:
# cd /usr/local/src/courier-authlib-0.63.1.20111230/
# cp courier-authlib.sysvinit /etc/init.d/courier-authlib
改变courier-authlib服务执行文件的权限:
# chmod 755 /etc/init.d/courier-authlib
通过输出重定向,加载courier-authlib服务的非标准库文件:
#echo "/usr/local/courier-authlib/lib/courier-authlib" >> /etc/ld.so.conf.d/courier-authlib.conf
重新调用库文件:
# ldconfig -v
查看courier-authlib的库文件是否被夹在
# ldconfig -pv |grep courier
新建虚拟用户邮箱所在的目录,并将其权限赋予postfix用户:
# mkdir -pv /var/mailbox
# chown -R postfix /var/mailbox
接下来重新配置SMTP 认证,编辑 postfix关联sasl的配置文件smtpd.conf :
# vim /usr/lib/sasl2/smtpd.conf
添加内容为:
pwcheck_method: authdaemond
log_level: 3
mech_list:PLAIN LOGIN
authdaemond_path:/usr/local/courier-authlib/var/spool/authdaemon/socket
wps_clip_image-15374
启动courier-authlib服务服务:
# service courier-authlib start 
将courier-authlib服务设置成开机自动启动:
# chkconfig --add courier-authlib
# chkconfig courier-authlib on
第九步:使postfix服务支持虚拟域和虚拟用户
编辑/etc/postfix/main.cf,添加如下内容:
# vim /etc/postfix/main.cf
添加:
########################Virtual Mailbox Settings########################
virtual_mailbox_base = /var/mailbox
virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf
virtual_mailbox_domains = mysql:/etc/postfix/mysql_virtual_domains_maps.cf
virtual_alias_domains =
virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf
virtual_uid_maps = static:2525
virtual_gid_maps = static:2525
virtual_transport = virtual
maildrop_destination_recipient_limit = 1
maildrop_destination_concurrency_limit = 1
wps_clip_image-23442
##########################QUOTA Settings########################
message_size_limit = 14336000
virtual_mailbox_limit = 20971520
virtual_create_maildirsize = yes
virtual_mailbox_extended = yes
virtual_mailbox_limit_maps = mysql:/etc/postfix/mysql_virtual_mailbox_limit_maps.cf
virtual_mailbox_limit_override = yes
virtual_maildir_limit_message = Sorry, the user's maildir has overdrawn his diskspace quota, please Tidy your mailbox and try again later.
virtual_overquota_bounce = yes
wps_clip_image-32323
重新加载postfix的配置文件:
# pkill -1 postfix
使用extman源码目录下docs目录中的extmail.sql和init.sql建立数据库:
    解压extman服务包,调出数据库批处理文件,用于生成extmail数据库;
# tar zxvf  extman-1.1.tar.gz
# cd extman-1.1/docs
将extmail.sql和init.sql文件导入数据库(需要进行数据库验证):
# mysql -u root -p <extmail.sql
# mysql -u root -p &lt;init.sql
将extman中虚拟邮箱的mysql映射文件复制到/etc/postfix/,提供main.cf的调用:
wps_clip_image-30757
# cp mysql_virtual_*  /etc/postfix/
进入mysql,授予用户extmail服务访问extmail数据库的权限:
# mysql -u root -p
GRANT all privileges on extmail.* TO extmail@localhost IDENTIFIED BY 'extmail';
GRANT all privileges on extmail.* TO extmail@127.0.0.1 IDENTIFIED BY 'extmail';
FLUSH PRIVILEGES;   让设置的内容生效
说明:启用虚拟域以后,需要取消中心域,即注释掉myhostname, mydestination, mydomain, myorigin几个指令;当然,你也可以把mydestionation的值改为你自己需要的。
第十步:配置dovecot服务
配置dovecot配置文档,编辑dovecot如何查找mysql:
# vim /etc/dovecot.conf
wps_clip_image-29579
wps_clip_image-22889
wps_clip_image-9746
wps_clip_image-29180
wps_clip_image-12926
wps_clip_image-5739
wps_clip_image-953
创建并配置dovecot查找数据库方式的文件:
# vim /etc/dovecot-mysql.conf
插入以下内容:            
driver = mysql
connect = host=localhost dbname=extmail user=extmail password=extmail
default_pass_scheme = CRYPT
password_query = SELECT username AS user,password AS password FROM mailbox WHERE username = '%u'
user_query = SELECT maildir, uidnumber AS uid, gidnumber AS gid FROM mailbox WHERE username = '%u'
wps_clip_image-5183
接下来启动dovecot服务:
# service dovecot start
# chkconfig dovecot on
第十一步:安装Extmail-1.2
拆包
# tar zxvf extmail-1.2.tar.gz
创建extmail所需的目录:
# mkdir -pv /var/www/extsuite
将extmail移动到创建的目录中:
# mv extmail-1.2 /var/www/extsuite/extmail
生成extmail的主配置文档:
# cd /var/www/extsuite/extmail/
# cp webmail.cf.default webmail.cf
修改主配置文件
#vim /var/www/extsuite/extmail/webmail.cf
默认语言:
wps_clip_image-15997
虚拟用户邮件的存放目录:
wps_clip_image-28506
设置连接数据库服务器所使用用户名、密码和邮件服务器用到的数据库:
wps_clip_image-794
指明authdaemo socket文件的位置:
wps_clip_image-13506
第十二步:安装Extman-1.1
移动到指定文件中:
# mv extman-1.1 /var/www/extsuite/extman
修改extman服务的配置文件:
# cd /var/www/extsuite/extman/
# cp webman.cf.default webman.cf
编辑extman的配置文档:
# vim /var/www/extsuite/extman/webman.cf
设置的用户邮件的存放目录:
wps_clip_image-31035
禁用验证选项:
wps_clip_image-32493
创建extman运行时所需的临时目录,并修改其相应的权限:
# mkdir  -pv  /tmp/extman
# chown postfix.postfix  /tmp/extman
第十三步:配置apache相关:
由于extmail要进行本地邮件的投递操作,故必须将运行apache服务器用户的身份修改为您的邮件投递代理的用户;本例中打开了apache 服务器的suexec功能,故使用以下方法来实现虚拟主机运行身份的指定。此例中的MDA为postfix自带,因此将指定为postfix用户:
改变apache的运行身份和运行组为postfix:
# vim /etc/httpd/conf/httpd.conf
wps_clip_image-5681
创建extmail和extman的虚拟主机:
&lt;VirtualHost *:80>
ServerName mail.test.com
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
</VirtualHost>
wps_clip_image-12871
修改extmail服务cgi执行文件所属者和所属组为apache运行身份用户:
# chown -R postfix.postfix /var/www/extsuite/extmail/cgi/
修改extman服务cgi目录的所属者和所属组:
# chown -R postfix.postfix /var/www/extsuite/extman/cgi/
解决extmail依赖关系:
extmail将会用到perl的Unix::syslogd功能:
拆解:
# tar zxvf Unix-Syslog-1.1.tar.gz
# # cd Unix-Syslog-1.1
执行配置文件:
# perl Makefile.PL
编译:
# make
安装:
# make install
启动apache服务,并设置成开机自动启动:
# service httpd start
# chkconfig httpd on
配置完成!!!!
您的Webmail和Extman已经可以使用了,可以在浏览器中输入指定的虚拟主机的名称进行访问,如下:
http://mail.test.com
选择管理即可登入extman进行后台管理了。默认管理帐号为:root@extmail.org  密码为:extmail*123*
第十四步:验证测试
进入邮件管理extman,对邮件系统进行初步的配置:
wps_clip_image-26512
    //成功登录!!
创建一个新域:
wps_clip_image-23944
wps_clip_image-25303
登录extmail主页:
wps_clip_image-25392
//成功登录!!
注册test01和test02两个帐号:
wps_clip_image-8067
wps_clip_image-10206
wps_clip_image-13953
wps_clip_image-13423
wps_clip_image-6740
登录test01,并向test02发送邮件:
wps_clip_image-29191wps_clip_image-5498
wps_clip_image-6001
登录test02用户,收取邮件:
wps_clip_image-18632
wps_clip_image-23167
wps_clip_image-4568