13.  配置dovecot访问mysql进行验证

dovecot本身是支持mysql认证方式的,其在/etc/dovecot/conf.d/下提供了名为auth-sql.conf.ext的配置文件:

[root@mail ~]# cd /etc/dovecot/conf.d/
[root@mail conf.d]# ls auth-master.conf.ext 
auth-master.conf.ext

但dovecot默认使用的收件认证方式是系统账号口令验证,因此auth-sql.conf.ext默认不被加载,所以要编辑/etc/dovecot/conf/10-auth.conf加载该文件:

[root@mail conf.d]# vi 10-auth.conf 
#!include auth-system.conf.ext    #注释该行
!include auth-sql.conf.ext    #启用该行

上述修改表示将不再加载系统账号口令验证的配置文件,而加载mysql认证的配置文件。

配置auth-sql.conf.ext文件:

[root@mail conf.d]# vi auth-sql.conf.ext
passdb {  
    driver = sql    #sql驱动  
    # Path for SQL configuration file, see example-config/dovecot-sql.conf.ext  
    args = /etc/dovecot/dovecot-sql.conf    #详细配置文件
}

userdb {  
    driver = sql    #sql驱动  
    args = /etc/dovecot/dovecot-sql.conf    #详细配置文件 
}

在/etc/dovecot下创建dovecot-sql.conf文件,并添加如下内容:

[root@mail dovecot]# vi dovecot-sql.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'

注:auth-sql.conf.ext文件的passdb和userdb的driver配置的内容不同于dovecot-sql.conf的driver,一个为sql,一个为mysql(我也不知道为什么,是否为固定格式?)

如果重启dovecot后,在/var/log/maillog中发现如下错误提示:Unknown passdb driver 'mysql',请安装dovecot-mysql包。


14. 配置ExtMail和ExtMan

ExtMail提供了名为webmail.cf的配置文件,可以对其程序内容和访问mysql方式进行修改,编辑/var/www/extsuite/extmail/webmail.cf:

[root@mail ~]# cd /var/www/extsuite/extmail/
[root@mail extmail]# cp webmail.cf webmail.cf.default
[root@mail extmail]# vi webmail.cf
SYS_USER_LANG = zh_CN    #修改默认语言
SYS_MAILDIR_BASE = /mailbox    #修改maildir路径
SYS_MYSQL_USER = extmail    #访问mysql的用户,同extmail库一致
SYS_MYSQL_PASS = extmail

 ExtMan提供的配置文件名称为webman.cf,编辑/var/www/extsuite/extman/webman.cf:

[root@mail extmail]# cd ..
[root@mail extsuite]# cd extman/
[root@mail extman]# cp webman.cf webman.cf.default
[root@mail extman]# vi webman.cf
SYS_MAILDIR_BASE = /mailbox
SYS_CAPTCHA_ON = 0    #不使用验证码验证登录
SYS_DEFAULT_UID = 2525    #运行该程序的用户UID,应为postfix的UID
SYS_DEFAULT_GID = 2525    #运行该程序的用户GID,应为postfix的GID
SYS_MYSQL_USER = extmail
SYS_MYSQL_PASS = extmail

创建/tmp/extman目录,并修改属主属组为postfix:

[root@mail ~]# mkdir /tmp/extman
[root@mail ~]# chown postfix.postfix /tmp/extman


15. 部署ExtMail和ExtMan

到现在为止,postfix已经配置支持虚拟用户,courier-authlib和cryus-sasl也配置支持访问mysql进行虚拟用户的发件验证,dovecot也可以访问mysql进行虚拟用户的收件验证了,webmail也完成了配置,那么现在只要将ExtMail和ExtMan部署,并通过ExtMan提供的Web管理接口创建虚拟用户和虚拟域,就可以对整个邮件系统进行测试了!


由于收发邮件的服务都是由postfix用户运行的,所以要将ExtMail和ExtMan的Web应用程序文件(见第9节)父目录/var/www/extsuite的属主和属组修改为postfix:

[root@mail ~]# chown -R postfix.postfix /var/www/extsuite/

修改apache服务器配置文件/etc/httpd/conf/httpd.conf:

[root@mail ~]# vi /etc/httpd/conf/httpd.conf 
<VirtualHost *:80>    #开启虚拟主机
    DocumentRoot /var/www/extsuite/extmail/html/
    ServerName mail.ahltnew.com    #与系统主机名一致
    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
    SuexecUserGroup postfix postfix    #表示切换成postfix用户和postfix组来运行该Web程序
</VirtualHost>


16. 重启所有相关服务

至此,所有的配置都已完成,重启如下服务:

[root@mail ~]# service postfix restart    #postfix
[root@mail ~]# service saslauthd restart    #cyrus-sasl
[root@mail ~]# service courier-authlib restart   #courier-authlib
[root@mail ~]# service dovecot restart    #dovecot
[root@mail ~]# service httpd restart    #apache server

至此,邮箱系统搭建基本结束。


注:postfix,courier-authlib,cyrus-sasl,dovecot运行过程中的日志可以通过/var/log/maillog进行查看,apache server的日志则通过/var/log/httpd/error_log进行查看。


访问http://主机IP/extmail来登录extmail,如果页面提示Unix::Syslog not found,请安装perl-Unix-Syslog软件包:

[root@mail ~]# yum install perl-Unix-Syslog


可以只将select的权限赋予mysql的extmail用户,新建一个mysql用户用于修改extmail库记录内容,同时修改webman.cf的SYS_MYSQL_USER和SYS_MYSQL_PASS配置项内容为该用户名和口令,即可以实现WebMail的访问和管理的权限分离。