资源描述
配置Postfix支持虚拟用户
建立虚拟用户数据库
(在MySQL数据库中建立初始化数据库、表,用于保存虚拟邮件域、虚拟邮件用户的相关信息。Extman邮件管理工具套件提供了用于创建数据库和初始化数据库的sql 脚本,直接导入脚本将使配置过程变得非常简单)
启动mysql服务,并导入Extman软件包中的数据库初始化脚本
[root@mail LNS-SG7]# service mysqld restart
Shutting down MySQLSTOPPING server from pid file /usr/local/mysql/var/.pid
110712 05:27:22 mysqld ended
[ OK ]
Starting MySQL [ OK ]
[1]+ Done mysqld_safe --user=mysql --skip-grant-tables --skip-networking (wd: /usr/local/mysql/bin)
(wd now: ~/LNS-SG7)
[root@mail LNS-SG7]# tar zxf extman-0.2.5.tar.gz
[root@mail LNS-SG7]# cd extman-0.2.5/docs/
[root@mail docs]# mysql -u root -p < extmail.sql
Enter password:
[root@mail docs]# mysql -u root -p < init.sql
Enter password:
[root@mail docs]#
修改Postfix的配置
使用虚拟邮件域时,其中的邮件域名、邮件用户名、密码及邮件别名等信息都存储在MySQL数据库中。 当Postfix接收到一封新的邮件时,首先检查是不是发往本地域的邮件,如果不是则转向数据库中查询是否发往虚拟域的邮件,确认收件人是否存在、用户邮箱的位置等信息。
为了设置postfix支持虚拟用户,只需要在main.cf文件中指定如何查询MySQL数据库即可。执行”postconf -m | grep mysql”命令可以了解当前的postfix服务器是否支持mysql类型的查询表。如果显示结果中出现“mysql”的字样,则表示支持mysql查询表,即可修改main.cf配置文件,添加支持MySQL数据库查询的相关配置参数。
例: 修改main.cf配置文件,使Postfix服务器支持读取保存在MySQL数据库中的虚拟用户。注意要保留SMTP认证等原有配置参数,并注释掉mydestination配置行
[root@mail docs]# postconf -m | grep mysql
Mysql
[root@mail docs]# 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_maps:指定记录虚拟邮箱地址与存储位置对应关系的映射文件位置。
》virtual_mailbox_domains:设置Postfix服务器可以接收的虚拟邮件域的域名,作用类似于配置参数“mydestination”
》virtual_uid_maps:设置所有虚拟邮件用户映射的本地用户的UID号。
》virtual_gid_maps:设置所有虚拟邮件用户映射的本地组的GID号。
配置行中指定的三个文件名:mysql_virtual_alias_maps.cf、mysql_virtual_mailbox_maps.cf、mysql_virtual_domains_maps.cf并不包含直接可查询的数据,而只是描述如何查询mysql数据库的配置信息。
在Extman软件包中提供了上述三个文件的样例,只需将其复制到”/etc/postfix”目录中即可。
[root@mail docs]# cp mysql_virtual_* /etc/postfix/
为虚拟用户设置SMTP发信认证
(由于虚拟邮件帐户的相关信息存储在MySQL数据库中,仅仅使用Cyrus SASL已经无法完成SMTP发信认证,这时需要结合Courier-authlib程序库才能提供对于MySQL数据库中的邮件用户的验证。
使用Courier-authlib软件的目的是因为saslauthd程序不支持数据库认证,而Courier-authlib支持多种数据库认证)
基于Cyrus-SASL和courier-authlib程序的实现:
1、编译安装courier-authlib软件包
[root@mail docs]# cd ../..
[root@mail LNS-SG7]# tar jxf courier-authlib-0.60.2.tar.bz2
[root@mail LNS-SG7]# cd courier-authlib-0.60.2
[root@mail courier-authlib-0.60.2]# ./configure --prefix=/usr/local/courier-authlib –sysconfdir=/etc/ --without-stdheaderdir --with-authmysql --with-redhat --with-mysql-libs=/usr/local/mysql/lib/mysql --with-mysql-includes=/usr/local/mysql/include/mysql
注:系统中不能安装有任何MySQL的RPM程序,否则编译可能会失败,或安装后的courier-authlib不具备MySQL认证功能。
》- -without-stdheaderdir 将头文件安装到一个不是默认的头文件搜索路经的目录中
》- -with-authmysql 配置支持MySQL数据库查询
》- -with-mysql-libs=/usr/local/mysql/lib/mysql MySQL的库文件路经
》- -with-mysql-includes=/usr/local/mysql/include/mysql MySQL的头文件路经
[root@mail courier-authlib-0.60.2]# make && make install
[root@mail courier-authlib-0.60.2]# make install-configure
注: 其中,“make install-configure” 命令将会生成默认配置文件“authmysqlrc”和“authdaemonrc”。安装编译之前确认mysql的rpm包已被卸载掉,否则容易报错“error:--with-authmysql specified but no mysqlclient.so”
2、修改courier-authlib相关配置,并启动服务
(1)将courier-authlib的库文件路经添加到系统的搜索路经中
[root@mail courier-authlib-0.60.2]# vi /etc/ld.so.conf
include ld.so.conf.d/*.conf
/usr/local/mysql/lib/mysql
/usr/local/courier-authlib/lib/courier-authlib
"/etc/ld.so.conf" 3L, 102C written
[root@mail courier-authlib-0.60.2]# ldconfig
(2)修改authdaemonrc主配置文件,仅保留authmysql认证方式,去掉其他方式。
[root@mail courier-authlib-0.60.2]# cd /usr/local/courier-authlib/etc/authlib/ 或/
/etc/authlib
[root@mail authlib]# cp authdaemonrc authdaemonrc.bak
[root@mail authlib]# vi authdaemonrc
authmodulelist="authmysql"
authmodulelistorig="authmysql"
[root@mail authlib]# chmod -R 755 /usr/local/courier-authlib/var/spool/authdaemon/
注意:将”authdaemon”目录的权限设置为755,否则Postfix可能会无法正确获得用户数据及密码信息。
(3)修改authmysqlrc文件,用于描述如何向MySQL数据库查询信息。
[root@mail authlib]# cp authmysqlrc authmysqlrc.bak
[root@mail 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) // 合并出用户的邮件存储路经
(4)复制courier-authlib脚本,并启动courier-authlib服务。
[root@mail courier-authlib-0.60.2]# cp courier-authlib.sysvinit /etc/init.d/courier-authlib
[root@mail courier-authlib-0.60.2]# chmod 755 /etc/init.d/courier-authlib
[root@mail courier-authlib-0.60.2]# chkconfig --level 35 courier-authl
ib on
[root@mail courier-authlib-0.60.2]# service courier-authlib start
Starting Courier authentication services: authdaemond
[root@mail courier-authlib-0.60.2]#
3、修改Cyrus sasl 设置
修改smtpd.conf文件,将认证方式更改为authdaemond(即courier-authlib),并为其指定socket文件位置即可。更改后无需再启动saslauthd服务。
[root@mail ~]# vi /usr/lib/sasl2/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”配置段,并建立相应的数据查询文件,以便启用数据库查询功能。
***调整Dovecot服务器配置,修改邮件存储位置并设置启用数据库查询功能。***
mail_location = maildir:/mailbox/%d/%n/Maildir
auth default {
mechanisms = plain
passdb sql {
# Path for SQL configuration file, see doc/dovecot-sql-example.conf
args = /etc/dovecot-mysql.conf
}
userdb sql {
# Path for SQL configuration file, see doc/dovecot-sql-example.conf
args = /etc/dovecot-mysql.conf
}
………………//省略其他配置内容
}
[root@mail ~]# 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语句
注:上述配置可参考样例文件“/usr/share/doc/dovecot-1.0/examples/dovecot.sql.conf”.
配置完毕后,需要建立虚拟用户的邮箱根目录“/mailbox“。并启动Dovecot服务程序。
例:建立虚拟用户postmaster@extmail.org的邮箱目录,调整权限,并启动Dovecot服务。
[root@mail ~]# mkdir -p /mailbox/extmail.org/postmaster/Maildir/
[root@mail ~]#chown -R postfix.postfix /mailbox/
[root@mail ~]#dovecot
测试虚拟用户实现结果:
以上各步骤均成功完成以后,可以分别进行测试,以验证Postfix邮件系统是否已确实支持虚拟邮件用户。
1、 测试authlib服务,应能看到“Authentication succeeded”的测试结果及虚拟用户相关信息:
[root@mail ~]# /usr/local/courier-authlib/sbin/authtest -s login postmaster@extmail.org extmail
Authentication succeeded.
Authenticated: postmaster@extmail.org (uid 1000, gid 1000)
Home Directory: /mailbox/extmail.org/postmaster
Maildir: /mailbox/extmail.org/postmaster/Maildir/
Quota: (none)
Encrypted Password: $1$phz1mRrj$3ok6BjeaoJYWDBsEPZb5C0
Cleartext Password: extmail
Options: (none)
2、 测试对虚拟用户的SMTP发信认证,出现“235 Authentication Successful”信息表示成功:
(1) 首先获得虚拟用户postmaster@extmail.org的用户名和密码的BASE64编码字符串。
[root@mail ~]# perl -e 'use MIME::Base64; print encode_base64("postmaster\@extmail.org")'
cG9zdG1hc3RlckBleHRtYWlsLm9yZw==
[root@mail ~]# perl -e 'use MIME::Base64; print encode_base64("extmail")'
ZXh0bWFpbA==
(2) 然后执行telnet命令,使用上一步获得的字符串进行测试。
[root@mail ~]# telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
220 ESMTP Postfix
auth login
334 VXNlcm5hbWU6
cG9zdG1hc3RlckBleHRtYWlsLm9yZw==
334 UGFzc3dvcmQ6
ZXh0bWFpbA==
235 2.0.0 Authentication successful
quit
221 2.0.0 Bye
Connection closed by foreign host.
[root@mail ~]#
――――――――――――――――――
ExtMail 邮件使用及管理平台
ExtMail是由国内开源组织使用Perl语言开发的一套功能强大的中文Webmail平台,主要包括ExtMail、Extman两个部分的程序套件。Extmail套件用于提供从浏览器登录、使用邮件系统的Web操作界面,而Extman套件用于提供从浏览器中管理邮件系统的Web操作界面。
对于国内的电子邮件系统来说,无论从系统功能、易用性还是中文化等方面,Extmail平台都是一个相当不错的选择。Extmail套件可以提供给普通邮件用户使用,而Extman套件可以提供给邮件系统的管理员使用。
ExtMail平台的官方站点是“http://www.extmail.org“,从该网站中可以获得较新版本的程序套件,以及相关的开发及安装调试文档。
部署ExtMail邮件使用界面
安装及运行ExtMail套件需要用到三个Perl支持软件包:Unix-Syslog、DBI和DBD-MySQL
依次安装这几个Perl软件包,然后将Extmail套件解压释放到Apache服务器的网页文档根目录中,并调整webmail.cf配置文件,最后再修改httpd.conf配置并重启httpd服务即可。
1、 按顺序先后安装三个Perl支持软件所
(1) 解压并释放软件包
[root@mail LNS-SG7]# tar zxf Unix-Syslog-1.1.tar.gz
[root@mail LNS-SG7]# tar zxf DBI-1.607.tar.gz
[root@mail LNS-SG7]# tar zxf DBD-mysql-4.011.tar.gz
(2) 安装Unix-Syslog-1.1
[root@mail LNS-SG7]# cd Unix-Syslog-1.1
[root@mail Unix-Syslog-1.1]# perl Makefile.PL
Checking if your kit is complete...
Looks good
Writing Makefile for Unix::Syslog
[root@mail Unix-Syslog-1.1]# make && make install
(3) 安装DBI包
[root@mail Unix-Syslog-1.1]# cd ../DBI-1.607
[root@mail DBI-1.607]# perl Makefile.PL && make && make install
(4) 安装DBD-mysql包
[root@mail DBI-1.607]# cd ../DBD-mysql-4.011
[root@mail DBD-mysql-4.011]# perl Makefile.PL && make && make install
2、 安装并配置ExtMail套件
(1) 解压并释放extmail文件包到Apache服务器的Web文档根目录中。
[root@mail LNS-SG7]# tar zxf extmail-1.0.5.tar.gz -C /usr/local/apache2/htdocs/
[root@mail LNS-SG7]# cd /usr/local/apache2/htdocs/
[root@mail htdocs]# mv extmail-1.0.5 extmail
(2) 调整cgi子目录的属主和属组,以便Apache服务器有权限执行suexec操作
[root@mail htdocs]# cd extmail/
[root@mail extmail]# chown -R postfix.postfix cgi/
(3) 建立webmail.cf配置文件
[root@mail extmail]cp webmail.cf.default webmail.cf //复制样例配置文件
[root@mail extmail]# vi webmail.cf
# sys_config, the config file and webmail programe root
SYS_CONFIG = /usr/local/apache2/htdocs/extmail //程序根目录
# sys_langdir, the i18n dir
SYS_LANGDIR = /usr/local/apache2/htdocs/extmail/lang //语言包文件目录
# sys_templdir, the template dir
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套接字文件位置
SYS_AUTHLIB_SOCKET = /usr/local/courier-authlib/var/spool/authdaemon/socket
3、 调整httpd.conf文件中的配置(添加一个虚拟主机),并重启httpd服务程序
[root@mail ~]# vi /usr/local/apache2/conf/httpd.conf
NameVirtualHost 10.1.1.1
<VirtualHost 10.1.1.1>
ServerName
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
</VirtualHost>
注:(Alias和ScriptAlias指令用于在URL和文件系统路经之间实现映射,使不在DocumentRoot目录下的内容也能成为文档树的一部分,其中ScriptAlias指令有更多一层的含义,它标明些目标目录下只有CGI脚本。)
#如果没有打开apache服务器的suexec功能,可以使用以下方法解决:
User postfix
Group postfix
<VirtualHost *:80>
ServerName
DocumentRoot /usr/local/apache2/htdocs/extmail/html/
ScriptAlias /extmail/cgi/ /usr/local/apache2/htdocs/extmail/cgi/
Alias /extmail /usr/local/apache2/htdocs/extmail/html/
</VirtualHost>
[root@mail ~]# /usr/local/apache2/bin/apachectl restart
4、 登录并使用ExtMail邮件系统
在浏览器中访问,可以看到ExtMail程序套件的Web首页。尚未添加其他的虚拟邮件域之前,缺省可以使用的虚拟邮件域为“extmail.org”.可以使用默认的邮件帐户postmaster@extmail.org登录ExtMail邮件系统,“Postmaster”用户的默认密码为”extmail”。
成功登录ExtMail邮件系统后(如下图),可以进行发信、收信测试并对当前用户的邮件进行管理。具体使用过程与网易、新浪等提供的WEB界面邮箱类似。 需要注意的是:如果要给默认虚拟域extmail.org中的用户发送邮件,还得在DNS服务器中添加该区域,并设置对应的A记录、MX记录。
部署Extman Web管理界面
部署好Extmail程序套件以后,电子邮件用户可以通过WEB界面登录和使用邮件系统。但是在默认情况下,只有一个虚拟邮件域extmail.org,还无法满足实际应用的需要。 安装Extman程序套件,以便通过WEB界面对Postfix邮件系统进行管理操作,如添加虚拟邮件域、虚拟邮件帐户等。
安装及运行Extman套件需要用到Perl支持软件包GD、File-Tail,以及rrdtool绘图引擎工具包。GD软件包可以有效地解决Extman登录界面中图片验证码无法显示的问题,File-Tail和rrdtool工具用于支持查看图形日志。
GD-2.41.tar.gz、File-Tail-0.99.3.tar.gz 、rrdtool-1.2.23-3.el5.i386.rpm 、rrdtool-perl-1.2.23-3.el5.i386.rpm
依次安装上述软件包,然后将Extman套件解压释放到Apache服务器的网页文档根目录中,并调整webman.cf配置文件,最后再修改f配置并重启httpd服务即可。若要使用图形日志功能,还得设置启动mailgraph_ext插件程序。
1、 安装Perl支持软件包GD、File-Tail及rrdtool绘图引擎工具
(1) 解压并释放文件包。
[root@mail LNS-SG7]# tar zxvf GD-2.41.tar.gz
[root@mail LNS-SG7]# tar zxvf File-Tail-0.99.3.tar.gz
(2) 安装GD包
[root@mail LNS-SG7]# cd GD-2.41
[root@mail GD-2.41]# perl Makefile.PL && make && make install
(3) 安装File-Tail包
[root@mail GD-2.41]# cd ../File-Tail-0.99.3
[root@mail File-Tail-0.99.3]# perl Makefile.PL && make && make install
(4) 安装rrdtool绘图引擎包
[root@mail File-Tail-0.99.3]# cd ..
[root@mail LNS-SG7]# rpm -ivh rrdtool-1.2.23-3.el5.i386.rpm rrdtool-perl-1.2.23-3.el5.i386.rpm
warning: rrdtool-1.2.23-3.el5.i386.rpm: Header V3 DSA signature: NOKEY, key ID 217521f6
Preparing... ########################################### [100%]
1:rrdtool ########################################### [ 50%]
2:rrdtool-perl ########################################### [100%]
2、 安装并配置Extman套件
(1) 解压并释放Extman文件包到Apache服务器的WEB文档根目录中。
[root@mail LNS-SG7]# tar zxvf extman-0.2.5.tar.gz -C /usr/local/apache2/htdocs/
[root@mail LNS-SG7]# cd /usr/local/apache2/htdocs/
[root@mail htdocs]# mv extman-0.2.5 extman
(2) 调整cgi子目录的属主和属组,以便Apache服务器有权限执行suexec操作。
[root@mail ~]# cd /usr/local/apache2/htdocs/
[root@mail htdocs]# chown -R postfix.postfix /usr/local/apache2/htdocs/extman/cgi/
[root@mail htdocs]#
(3) 创建系统临时会话保存目录,并将属主、属组设置为postfix:postfix.
[root@mail htdocs]# mkdir /tmp/extman
[root@mail htdocs]# chown -R postfix.postfix /tmp/extman
(4) 修改webman.cf配置文件
[root@mail htdocs]# vi extman/webman.cf
# sys_config, the config file and webman programe root
SYS_CONFIG = /usr/local/apache2/htdocs/extman/ //程序根目录
# sys_langdir, the i18n dir
SYS_LANGDIR = /usr/local/apache2/htdocs/extman/lang //语言包文件目录
# sys_templdir, the template dir
SYS_TEMPLDIR = /usr/local/apache2/htdocs/extman/html //系统模块目录
# maildir_base, the base dir of user maildir, use absolute path
# if not set.
SYS_MAILDIR_BASE = /mailbox //邮件数据存放路经
SYS_MYSQL_USER = webman //访问MySQL数据库的用户
SYS_MYSQL_PASS = webman
展开阅读全文