1、 配置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 1
2、10712 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:
3、 ~/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的配置 使用虚拟邮件域时,其中的邮件域名、邮件用户名
4、密码及邮件别名等信息都存储在MySQL数据库中。 当Postfix接收到一封新的邮件时,首先检查是不是发往本地域的邮件,如果不是则转向数据库中查询是否发往虚拟域的邮件,确认收件人是否存在、用户邮箱的位置等信息。 为了设置postfix支持虚拟用户,只需要在main.cf文件中指定如何查询MySQL数据库即可。执行”postconf -m | grep mysql”命令可以了解当前的postfix服务器是否支持mysql类型的查询表。如果显示结果中出现“mysql”的字样,则表示支持mysql查询表,即可修改main.cf配置文件,添加支持MySQL数据库查询的相关配置参数。 例:
5、 修改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/mys
6、ql_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_
7、maps:指定虚拟邮件用户对应的别名文件位置 。 》virtual_mailbox_maps:指定记录虚拟邮箱地址与存储位置对应关系的映射文件位置。 》virtual_mailbox_domains:设置Postfix服务器可以接收的虚拟邮件域的域名,作用类似于配置参数“mydestination” 》virtual_uid_maps:设置所有虚拟邮件用户映射的本地用户的UID号。 》virtual_gid_maps:设置所有虚拟邮件用户映射的本地组的GID号。 配置行中指定的三个文件名:mysql_virtual_alias_maps.cf、mysql_vi
8、rtual_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程序库才能提供
9、对于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
10、 [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程序,否则编译可能会失败,或安装后的cou
11、rier-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 in
12、stall [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的库文件路经添加到系统的搜索路经中
13、[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@
14、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-a
15、uthlib/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
16、 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_UI
17、D_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
18、字段获得帐户名称(不带@后缀) 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
19、 [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(即
20、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“目录中。因此,在D
21、ovecot服务器的配置文件中也要对邮件存储位置做相应的调整。另外,还需要添加”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/dov
22、ecot-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 //建立数据
23、查询配置文件 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_quer
24、y = 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服务。
25、 [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/c
26、ourier-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:
27、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_base
28、64("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). E
29、scape 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 邮件使用及管理平台 ExtMa
30、il是由国内开源组织使用Perl语言开发的一套功能强大的中文Webmail平台,主要包括ExtMail、Extman两个部分的程序套件。Extmail套件用于提供从浏览器登录、使用邮件系统的Web操作界面,而Extman套件用于提供从浏览器中管理邮件系统的Web操作界面。 对于国内的电子邮件系统来说,无论从系统功能、易用性还是中文化等方面,Extmail平台都是一个相当不错的选择。Extmail套件可以提供给普通邮件用户使用,而Extman套件可以提供给邮件系统的管理员使用。 ExtMail平台的官方站点是“http://www.extmail.org“,从该网站中可以获得
31、较新版本的程序套件,以及相关的开发及安装调试文档。 部署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
32、[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 [
33、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 && ma
34、ke 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操作
35、 [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/lo
36、cal/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_U
37、SER = 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/socke
38、t
3、 调整httpd.conf文件中的配置(添加一个虚拟主机),并重启httpd服务程序
[root@mail ~]# vi /usr/local/apache2/conf/httpd.conf
NameVirtualHost 10.1.1.1
39、 Alias /extmail /usr/local/apache2/htdocs/extmail/html/ SuexecUserGroup postfix postfix 注:(Alias和ScriptAlias指令用于在URL和文件系统路经之间实现映射,使不在DocumentRoot目录下的内容也能成为文档树的一部分,其中ScriptAlias指令有更多一层的含义,它标明些目标目录下只有CGI脚本。) #如果没有打开apache服务器的suexec功能,可以使用以下方法解决: User postfix Group po
40、stfix
41、restart 4、 登录并使用ExtMail邮件系统 在浏览器中访问,可以看到ExtMail程序套件的Web首页。尚未添加其他的虚拟邮件域之前,缺省可以使用的虚拟邮件域为“extmail.org”.可以使用默认的邮件帐户postmaster@extmail.org登录ExtMail邮件系统,“Postmaster”用户的默认密码为”extmail”。 成功登录ExtMail邮件系统后(如下图),可以进行发信、收信测试并对当前用户的邮件进行管理。具体使用过程与网易、新浪等提供的WEB界面邮箱类似。 需要注意的是:如果要给默认虚拟域extmail.org中的用户发送邮件,
42、还得在DNS服务器中添加该区域,并设置对应的A记录、MX记录。 部署Extman Web管理界面 部署好Extmail程序套件以后,电子邮件用户可以通过WEB界面登录和使用邮件系统。但是在默认情况下,只有一个虚拟邮件域extmail.org,还无法满足实际应用的需要。 安装Extman程序套件,以便通过WEB界面对Postfix邮件系统进行管理操作,如添加虚拟邮件域、虚拟邮件帐户等。 安装及运行Extman套件需要用到Perl支持软件包GD、File-Tail,以及rrdtool绘图引擎工具包。GD软件包可以有效地解决Extman登录界面中图片验证码无法显示的
43、问题,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
44、绘图引擎工具 (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 [r
45、oot@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
46、 ID 217521f6 Preparing... ########################################### [100%] 1:rrdtool ########################################### [ 50%] 2:rrdtool-perl ########################################### [100%] 2、 安装并配置Extman套件 (1) 解压并释放Extman文件包到Apache服
47、务器的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 htd
48、ocs]# 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 #
49、 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






