Chinaunix首页 | 论坛 | 博客
  • 博客访问: 564672
  • 博文数量: 67
  • 博客积分: 2792
  • 博客等级: 少校
  • 技术积分: 1038
  • 用 户 组: 普通用户
  • 注册时间: 2010-03-13 19:00
文章分类

全部博文(67)

文章存档

2014年(2)

2013年(7)

2012年(1)

2011年(1)

2010年(56)

分类: LINUX

2010-07-14 08:11:44

    上次介绍了LAMP+Postfix+dovecot+SquirrelMail组合构建邮件服务器,邮件用户都是存放在操作系统中。这样当用户的数量达到数千甚至以上时,邮件系统在用户安全、系统管理以及数据维护方面遇到巨大挑战。为了提供更好的性能、效率及安全性,使用虚拟邮件用户的方式是一个更好的选择。下面介绍使用MySQL数据库存储邮件账户的相关信息,而所有的虚拟邮件用户只需要映射到一个系统用户(Postfix)即可。这次是以LAMP+Postfix+Dovecot+Extmail组合构建邮件服务器,还增加了Extman邮件管理工具套件,下面是具体的构建步骤:

一、建立虚拟用户数据库
1.首先从站点““中下载软件包extman-0.2.5.tar.gz,当然也可以是最新版!我这里以extman-0.2.5.tar.gz为例。下载下来解压后将其中的SQL脚本文件extmail.sql和init.sql导入到MySQL数据库中。
2.启动mysqld服务,并导入Extman软件包中的数据库初始化脚本:
[root@LW ~]# service mysqld restart
[root@LW ~]# tar vzxf extman-0.2.5.tar.gz
[root@LW ~]# cd extman-0.2.5/docs
[root@LW docs]# mysql -u root -p < extmail.sql
[root@LW docs]# mysql -u root -p < init.sql
说明:
其中,脚本文件extmail.sql完成的主要数据库操作如下:
1> 创建名为extmail的数据库,及该库中的一些表。
2> 建立数据库用户extmail@localhost(初始密码为“extmail“),对数据库extmail中的表拥有“SELECT“、”UPDATE“权限。
3> 建立数据库用户webman@localhost(初始密码为“extman”),对数据库extmail中的表拥有“SELECT”、“INSERT”、“DELETE”、“UPDATE”权限。
脚本文件init.sql完成的主要数据库操作如下:
1> 初始化数据库Extmail。
2> 建立名为extmail.org的虚拟邮件域。
3> 建立数据库用户root@extmail.org(初始密码为“extmail*123*”),作为邮件域的管理账户。
4> 建立数据库用户postmaster@extmail.org(初始密码为“extmail“),作为基本邮件用户。

二、修改Postfix的配置
1.修改main.cf配置文件,使Postfix服务器支持读取保存在MySQL数据库中的虚拟用户。注意要保留SMTP认证等原有配置参数,并注释掉mydestination配置行。
[root@LW ~]# vi /etc/postfix/main.cf
#mydestination = $mydomain, $myhostname
virtual_mailbox_base = /mailbox
virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf
virtual_mailbox_domains = mysql:/etc/postfix/mysql_virtual_domains_maps.cf
virtual_uid_maps = static:1000
virtual_gid_maps = static:1000
在上述配置内容中,支持虚拟用户的各配置参数作用如下:
> virtual_mailbox_base: 指定虚拟邮箱存储目录的路径起点。
> virtual_alias_maps: 指定虚拟邮件用户对应的别名文件位置。
> virtual_mailbox_domains: 设置Postfix服务器可以接收的虚拟邮件域的域名,作用类似于配置参数“mydestination“。
> virtual_uid_maps: 设置所有虚拟邮件用户映射的本地用户的UID号。
> virtual_gid_maps: 设置所有虚拟邮件用户映射的本地用户的GID号。
2.将Extman软件包提供的虚拟用户映射表样例文件复制到“/etc/postfix/“目录中。
[root@LW docs]# cp mysql_virtual_* /etc/postfix

三、为虚拟用户设置SMTP发信认证
    由于虚拟邮件账户的相关信息存储在MySQL数据库中,仅仅使用Cyrus SASL已经无法完成SMTP发信认证,这时需要结合Courier-authlib程序库才能提供对位于MySQL数据库中的邮件用户的验证。
1. 首先从Courier官网““上下载较新版本的软件包,这里以软件包courier-authlib-0.60.2.tar.bz2为例,来介绍其基本编译安装过程。
2. 编译安装courier-authlib软件包
[root@LW ~]# tar vjxf courier-authlib-0.60.2.tar.bz2
[root@LW ~]# cd courier-authlib-0.60.2
[root@LW courier-authlib-0.60.2]# ./configure --prefix=/usr/local/courier-authlib --without-stdheaderdir --with-authmysql --with-redhat --with-mysql-libs=/usr/local/mysql/lib/mysql --with-mysql-includes=/usr/local/mysql/include/mysql
[root@LW courier-authlib-0.60.2]# make && make install
[root@LW courier-authlib-0.60.2]# make install-configure
其中,“make install-configure“命令将生成默认配置文件”authmysqlrc“和”authdaemonrc“。安装编译之前要确认mysql的rpm包已经被卸载掉,否则容易报错“error:--with-authmysql specified but no mysqlclient.so“。
3. 修改courier-authlib相关配置,并启动服务
[root@LW courier-authlib-0.60.2]# vi /etc/ld.so.conf        //添加以下行
/usr/local/courier-authlib/lib/courier-authlib
[root@LW courier-authlib-0.60.2]# ldconfig
4. 修改authdaemonrc主配置文件,仅保留authmysql认证方式,去掉其他方式。
[root@LW courier-authlib-0.60.2]# cd /usr/local/courier-authlib/etc/authlib/
[root@LW authlib]# cp authdaemonrc authdaemonrc.bak
[root@LW authlib]# vi authdaemonrc        //修改下列条目
authmodulelist="authmysql"
authmodulelistorig="authmysql"
[root@LW authlib]# chmod -R 755 /usr/local/courier-authlib/var/spool/authdaemon/
注意:要将“authdaemon“目录的权限设置为755,否则Postfix可以会无法正确获得用户数据及密码信息。
5. 修改authmysqlrc文件,用户描述如何向MySQL数据库查询信息
[root@LW authlib]# cp authmysqlrc authmysqlrc.bak
[root@LW authlib]# vi authmysqlrc        //修改下列条目
MYSQL_SERVER        localhost            //mysql数据库服务器位置
MYSQL_USERNAME        extmail            //数据库管理员账户
MYSQL_PASSWORD        extmail            //数据库管理员账户密码
MYSQL_SOCKET        /tmp/mysql.sock      //mysql.sock文件位置
MYSQL_DATABASE        extmail            //虚拟用户数据库
MYSQL_USER_TABLE    mailbox              //从mailbox表获得邮件账户的信息
MYSQL_CRYPT_PWFIELD    password          //从password字段获得账户密码
MYSQL_UID_FIELD        uidnumber         //从uidnumber字段获得映射的本地用户UID
MYSQL_GID_FIELD        gidnumber         //从gidnumber字段获得映射的本地组GID
MYSQL_LOGIN_FIELD    username            //从username字段获得账户名称(带@后缀)
MYSQL_HOME_FIELD    concat('/mailbox/',homedir)    //合并出用户的宿主目录路径
MYSQL_NAME_FIELD    name                           //从name字段获得账户名称(不带@后缀)
MYSQL_MAILDIR_FIELD    concat('/mailbox/',maildir)    //合并出用户的邮件存储路径
6. 复制courier-authlib脚本,并启动courier-authlib服务。
[root@LW courier-authlib-0.60.2]# cp courier-authlib.sysvinit /etc/init.d/courier-authlib
[root@LW courier-authlib-0.60.2]# chmod 755 /etc/rc.d/init.d/courier-authlib
[root@LW courier-authlib-0.60.2]# chkconfig --level 35 courier-authlib on
[root@LW courier-authlib-0.60.2]# service courier-authlib start
7. 修改Cyrus sasl设置
修改smtp.conf文件,将认证方式更改为authdaemond(即courier-authlib),并为其指定socket文件位置即可,更改后无需再启动saslauthd服务。
[root@LW ~]# vi /usr/lib/sasl2/smtpd.conf        //这个文件是上一篇的最后生成的那个smtpd.conf
pwcheck_method: authdaemond
authdaemond_path: /usr/local/courier-authlib/var/spool/authdaemon/socket

四、修改Dovecot的配置
    根据main.cf文件中“virtual_mailbox_base“参数的设置,虚拟用户的邮箱统一存储在”/mailbox“目录中。因此,在Dovecot服务器的配置文件中也要对邮件存储位置做相应的调整。另外,还需要添加“passdb sql“和”userdb sql“配置段,并建立相应的数据查询文件,以便启用数据库查询功能。
1. 调整Dovecot服务器配置,修改邮件存储位置并设置启用数据库查询功能。
[root@LW ~]# vi /etc/dovecot.conf
mail_location = maildir:/mailbox/%d/%n/Maildir
......//省略其他配置内容
auth default {
    mechanisms = plain
    passdb sql {
        args = /etc/dovecot-mysql.conf
    }
    userdb sql {
        args = /etc/dovecot-mysql.conf
    }
......//省略其他配置内容
}
[root@LW ~]# vi /etc/dovecot-mysql.conf        //建立数据查询配置文件
driver = mysql
connect = host=localhost dbname=extmail user=extmail password=extmail
default_pass_scheme = CRYPT            //MySQL数据库中存储的密码串的加密算法
password_query = SELECT username AS user,password AS password FROM mailbox WHERE username = '%u'    //用于查询用户密码的SQL语句
user_query = SELECT maildir, uidnumber AS uid, gidnumber AS gid FROM mailbox WHERE username = '%u'    //用户身份查询的SQL语句
配置完毕后,需要建立虚拟用户的邮箱根目录“/mailbox“,并启动Dovecot服务程序。
2. 建立虚拟用户postmaster@extmail.org的邮箱目录,调整权限,并启动Dovecot服务:
[root@LW ~]# mkdir -p /mailbox/extmail.org/postmaster/Maildir/
[root@LW ~]# cd /mailbox/extmail.org/postmaster/Maildir/
[root@LW Maildir]# chown -R postfix:postfix /mailbox
[root@LW Maildir]# dovecot

五、测试虚拟用户实现结果
1.测试authlib服务,应能看到“authentication succeeded.“的测试结果及虚拟用户相关信息
[root@LW ~]# /usr/local/courier-authlib/sbin/authtest -s login postmaster@extmail.org extmail
显示结果如图:


六、ExtMail邮件使用及管理平台
    上一篇介绍了使用SquirrelMail软件搭建Postfix的Webmail邮件界面,现在来介绍一下使用ExtMail套件来构建Webmail邮件使用界面,ExtMail套件需要三个Perl支持软件包:Unix-Syslog、DBI和DBD-MySQL,从网站““中均可以搜索获得。依次安装上述Perl软件包,然后将Extmail套件解压释放到Apache服务器的网页文档根目录中,并调整webmail.cf配置文件,最后再修改httpd.conf配置并重启httpd服务就OK了!!!
1.按顺序先后安装三个Perl支持软件包,首先解压并释放文件包:
[root@LW ~]# tar vzxf Unix-Syslog-1.1.tar.gz
[root@LW ~]# tar vzxf DBI-1.607.tar.gz
[root@LW ~]# tar vzxf DBD-mysql-4.011.tar.gz
2.安装Unix-Syslog包
[root@LW ~]# cd Unix-Syslog-1.1
[root@LW Unix-Syslog-1.1]# perl Makefile.PL
[root@LW Unix-Syslog-1.1]# make && make install
3.安装DBI包
[root@LW Unix-Syslog-1.1]# cd ../DBI-1.607
[root@LW DBI-1.607]# perl Makefile.PL
[root@LW DBI-1.607]# make && make install
4.安装DBD-mysql包
[root@LW DBI-1.607]# cd ../DBD-mysql-4.011
[root@LW DBD-mysql-4.011]# perl Makefile.PL
[root@LW DBD-mysql-4.011]# make && make install
到这步时可能会遇到错误,请参考我的另一篇文章:安装DBD:MySql遇到的问题
5.安装并配置ExtMail套件
(1).解压并释放extmail文件包到Apache服务器的Web文档根目录中。
[root@LW ~]# tar vzxf extmail-1.0.5.tar.gz -C /usr/local/apache2/htdocs/
[root@LW ~]# cd /usr/local/apache2/htdocs
[root@LW htdocs]# mv extmail-1.0.5 extmail
(2).调整cgi子目录的属主和属组,以便Apache服务器有权限执行suexec操作
[root@LW htdocs]# cd extmail
[root@LW extmail]# chown -R postfix:postfix cgi
(3).建立webmail.cf配置文件
[root@LW extmail]# cp webmail.cf.default webmail.cf
[root@LW extmail]# vi webmail.cf                            //修改如下内容
SYS_CONFIG = /usr/local/apache2/htdocs/extmail/             //程序根目录
SYS_LANGDIR = /usr/local/apache2/htdocs/extmail/lang        //语言包文件目录
SYS_TEMPLDIR = /usr/local/apache2/htdocs/extmail/html       //系统模板目录
SYS_MAILDIR_BASE = /mailbox                                 //邮件存储目录
SYS_MYSQL_USER = extmail                                    //访问MySQL数据库的用户
SYS_MYSQL_PASS = extmail                                    //访问MySQL数据库的用户密码
SYS_MYSQL_DB = extmail                                      //使用的数据库名称
SYS_MYSQL_HOST = localhost                                  //MySQL服务器的地址
SYS_MYSQL_SOCKET = /tmp/mysql.sock                          //MySQL套接字文件位置
6.调整httpd.conf文件中的配置(添加一个虚拟主机),并重启httpd服务程序
[root@LW ~]# vi /usr/local/apache2/conf/httpd.conf        //添加如下条目
NameVirtualHost 192.168.0.2            //邮件服务器的IP地址

    ServerName mail.liwei.com
    DocumentRoot /usr/local/apache2/htdocs/extmail/html/
    ScriptAlias  /extmail/cgi/   /usr/local/apache2/htdocs/extmail/cgi/
    Alias /extmail      /usr/local/apache2/htdocs/extmail/html/
    SuexecUserGroup postfix postfix

[root@LW ~]# service httpd restart
7.登录并使用ExtMail邮件系统:
在浏览器中访问““,可以看到ExtMail程序套件的Web首页。尚未添加其他的虚拟邮件域之前,缺省可以使用的虚拟邮件域为“extmail.org“。可以使用默认的邮件账户”postmaster@extmail.org“登录ExtMail邮件系统,“postmaster“用户的默认密码为”extmail“。如图:

成功登录ExtMail邮件系统后,可以进行发信、收信测试并对当前用户的邮件进行管理,就相当于你在互联网上的163、hotmail、雅虎等邮件一样。如图:


七、部署Extman Web管理界面
    部署好ExtMail程序套件以后,电子邮件用户可以通过Web界面登录和使用邮件系统。但是在默认情况下,只有一个虚拟邮件域extmail.org,还无法满足实际应用的需要,下面继续介绍安装Extman程序套件,以便通过Web界面对Postfix邮件系统进行管理操作,如添加虚拟邮件域、虚拟邮件账户等。
1.安装Perl支持软件包GD、File-Tail及rrdtool绘图引擎工具
(1).解压并释放文件包
[root@LW ~]# tar vzxf GD-2.41.tar.gz
[root@LW ~]# tar vzxf File-Tail-0.99.3.tar.gz
(2).安装GD包
[root@LW ~]# cd GD-2.41
[root@LW GD-2.41]# perl Makefile.PL
[root@LW GD-2.41]# make && make install
(3).安装File-Tail包
[root@LW GD-2.41]# cd ../File-Tail-0.99.3
[root@LW File-Tail-0.99.3]# perl Makefile.PL
[root@LW File-Tail-0.99.3]# make && make install
(4).安装rrdtool绘图引擎包
[root@LW ~]# rpm -vih rrdtool-1.2.23-3.el5.i386.rpm
[root@LW ~]# rpm -vih rrdtool-perl-1.2.23-3.el5.i386.rpm
2.安装并配置Extman套件
(1).解压并释放Extman文件包到Apache2服务器的Web文档根目录中
[root@LW ~]# tar vzxf extman-0.2.5.tar.gz -C /usr/local/apache2/htdocs/
[root@LW ~]# cd /usr/local/apache2/htdocs/
[root@LW htdocs]# mv extman-0.2.5 extman
(2).调整cgi子目录的属主和属组,以便Apache2服务器有权限执行suexec操作:
[root@LW htdocs]# chown -R postfix:postfix extman/cgi
(3).创建系统临时会话保存目录,并将属主、属组设置为postfix:postfix。
[root@LW htdocs]# mkdir /tmp/extman
[root@LW htdocs]# chown -R postfix:postfix /tmp/extman
(4).修改webman.cf配置文件
[root@LW ~]# vi /usr/local/apache2/htdocs/extman/webman.cf
SYS_CONFIG = /usr/local/apache2/htdocs/extman/
SYS_LANGDIR = /usr/local/apache2/htdocs/extman/lang
SYS_TEMPLDIR = /usr/local/apache2/htdocs/extman/html
SYS_MYSQL_USER =  webman
SYS_MYSQL_PASS =  webman
SYS_MYSQL_DB = extmail
SYS_MYSQL_HOST = localhost
SYS_MYSQL_SOCKET = /tmp/mysql.sock
以上这些参数说明请参考前面的webmail.cf配置文件的说明,基本是相同的。
3.调整httpd.conf文件中的配置(在前面新建的那个虚拟主机条目里添加如下选项),并重启httpd服务程序:
[root@LW htdocs]# vi /usr/local/apache2/conf/httpd.conf
NameVirtualHost 192.168.0.2            //邮件服务器的IP地址

    ServerName mail.liwei.com
    DocumentRoot /usr/local/apache2/htdocs/extmail/html/
    ScriptAlias  /extmail/cgi/   /usr/local/apache2/htdocs/extmail/cgi/
    Alias /extmail      /usr/local/apache2/htdocs/extmail/html/
    ScriptAlias /extman/cgi/ /usr/local/apache2/htdocs/extman/cgi/
    Alias /extman /usr/local/apache2/htdocs/extman/html/
    SuexecUserGroup postfix postfix

[root@LW ~]# service httpd restart
4.登录并管理Extman邮件系统
    在浏览器中访问“/extman/“,可以看到Extman程序套件的Web首页。可以使用默认的邮件管理员账户“root@extmail.org“登录Extman邮件管理系统,默认密码为“extmail*123*“,如图:

我们还可以添加你自己想要的域名,然后可以让用户自己注册邮件地址等如下图:





5.查看邮件系统的图形化日志信息
    在Extman套件中集成了mailgraph_ext插件,从而使Extman管理系统具备图形化显示邮件日志的能力。mailgraph_ext插件融合了mailgraph和queuegraph两个软件包,除增加了更多的日志分析及图形显示能力外,还重写了Web模块,并集成到Extman后台程序中,这样邮件日志将只给经过授权的用户查看,提高了安全性。
    直接为Extman套件中的mailgraph_ext插件程序建立链接文件,并启动相关程序即可。
[root@LW ~]# ln -sf /usr/local/apache2/htdocs/extman/addon/mailgraph_ext/mailgraph-init /usr/sbin/
[root@LW ~]# ln -sf /usr/local/apache2/htdocs/extman/addon/mailgraph_ext/qmonitor-init /usr/sbin/
[root@LW ~]# mailgraph-init start
[root@LW ~]# qmonitor-init start
如出现某个文件找不到首先使用locate命令查看一下那个文件存放到哪里,然后使用ln -s来做一个软链接就OK了!!!
如果想让它们开机就自动运行的话可以这样:
[root@LW ~]# echo "/usr/sbin/mailgraph-init start" >> /etc/rc.d/rc.local
[root@LW ~]# echo "/usr/sbin/qmonitor-init start" >> /etc/rc.d/rc.local
最后的测试结果如图:


阅读(14181) | 评论(4) | 转发(0) |
给主人留下些什么吧!~~

2011-08-11 13:28:52

郁闷,我做到第五步:测试虚拟用户实现结果 的时候提示验证失败。不知道大虾知不知道是怎么回事。

2011-08-11 13:28:41

郁闷,我做到第五步:测试虚拟用户实现结果 的时候提示验证失败。不知道大虾知不知道是怎么回事。

2011-08-11 13:28:38

郁闷,我做到第五步:测试虚拟用户实现结果 的时候提示验证失败。不知道大虾知不知道是怎么回事。

chinaunix网友2011-04-17 19:32:38

不错!很详细!