我所写的postfix搭建是一气呵成的,前面发布的是基本搭建的内容,后续都是以前面为基础的发表,实验环境还是redhat 5.4服务器版,其实这就是为安装Extmail做准备
---------------------
建立虚拟用户数据库
[root@mail mail]# service mysqld restart
Shutting down MySQL. [确定]
Starting MySQL [确定]
[root@mail mail]#
[root@mail mail]# tar xzvf extman-0.2.5.tar.gz
[root@mail mail]# cd extman-0.2.5/docs/
[root@mail docs]#
[root@mail docs]# mysql -u root -p < extmail.sql
Enter password:
[root@mail docs]# mysql -u root -p < init.sql
Enter password:
---------------------
修改 Postfix的配置
[root@mail docs]# vim /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
[root@mail docs]# cp mysql_virtual_* /etc/postfix/
[root@mail docs]# postfix reload // 重新加载配置
----------------------
为虚拟用户设置 SMTP 发信认证
[root@mail mail]# tar jxvf courier-authlib-0.60.2.tar.bz2
[root@mail mail]#
[root@mail mail]# cd courier-authlib-0.60.2
[root@mail courier-authlib-0.60.2]#
[root@mail courier-authlib-0.60.2]# vim courier-authlib.sh
./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@mail courier-authlib-0.60.2]# chmod a+x courier-authlib.sh
[root@mail courier-authlib-0.60.2]#
[root@mail courier-authlib-0.60.2]# ./courier-authlib.sh
[root@mail courier-authlib-0.60.2]# make
[root@mail courier-authlib-0.60.2]# make install
[root@mail courier-authlib-0.60.2]# make install-configure //生成默认配置文件
[root@mail courier-authlib-0.60.2]# vim /etc/ld.so.conf //末尾添加如下行内容
......
/usr/local/courier-authlib/lib/courier-authlib
[root@mail courier-authlib-0.60.2]# ldconfig
[root@mail courier-authlib-0.60.2]# cd /usr/local/courier-authlib/etc/authlib/
[root@mail authlib]# vim authdaemonrc //修改27行和34行,保留authmysql认证方式
27 authmodulelist="authmysql"
......
34 authmodulelistorig="authmysql"
[root@mail authlib]# chmod -R 755 /usr/local/courier-authlib/var/spool/authdaemon/
[root@mail authlib]# cp authmysqlrc authmysqlrc.bak
[root@mail authlib]# vim authmysqlrc
// 修改下列行,描述如何向MySQL查询数据
26 MYSQL_SERVER localhost
27 MYSQL_USERNAME extmail
28 MYSQL_PASSWORD extmail
49 MYSQL_SOCKET /tmp/mysql.sock
68 MYSQL_DATABASE extmail
83 MYSQL_USER_TABLE mailbox
92 MYSQL_CRYPT_PWFIELD password
113 MYSQL_UID_FIELD uidnumber
119 MYSQL_GID_FIELD gidnumber
128 MYSQL_LOGIN_FIELD username
133 MYSQL_HOME_FIELD concat('/mailbox/',homedir)
139 MYSQL_NAME_FIELD name
150 MYSQL_MAILDIR_FIELD concat('/mailbox/',maildir)
-------------------
复制启动脚本,启动courier-authlib服务,这个脚本在源码包的目录里
[root@mail authlib]# cd /home/tom/LNS-SG7/courier-authlib-0.60.2
[root@mail courier-authlib-0.60.2]# pwd
/home/tom/mail/courier-authlib-0.60.2
[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 courier-authlib on
[root@mail courier-authlib-0.60.2]# service courier-authlib start
Starting Courier authentication services: authdaemond
-----------------
修改Cyrus sasl设置
[root@mail courier-authlib-0.60.2]# vim /usr/lib/sasl2/smtpd.conf
#pwcheck_method:saslauthd
pwcheck_method: authdaemond
authdaemond_path: /usr/local/courier-authlib/var/spool/authdaemon/socket
-----------------
修改 Dovecot 的配置
修改邮件存储位置,设置启用数据库查询功能
[root@mail ~]# vim /etc/dovecot.conf
218 mail_location = maildir:/mailbox/%d/%n/Maildir
.....
794 auth default {
799 mechanisms = plain
903 passdb sql {
904 # Path for SQL configuration file, see doc/dovecot-sql-example.conf
905 args = /etc/dovecot-mysql.conf
906 }
966 userdb sql {
967 # Path for SQL configuration file, see doc/dovecot-sql-example.conf
968 args = /etc/dovecot-mysql.conf
969 }
.....
}
--------------------
建立数据库查询配置文件
[root@mail ~]# 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
--------------------
建立虚拟用户[email protected]的邮箱目录,调整权限
username = '%u'
[root@mail ~]# mkdir -p /mailbox/extmail.org/postmaster/Maildir/
[root@mail ~]# chown -R postfix:postfix /mailbox
--------------------
重启Dovecot服务
[root@mail ~]# killall -9 dovecot
[root@mail ~]# dovecot
[root@mail ~]# netstat -nlpt |grep dovecot
tcp 0 0 0.0.0.0:110 0.0.0.0:* LISTEN 27034/dovecot
tcp 0 0 0.0.0.0:143 0.0.0.0:* LISTEN 27034/dovecot
[root@mail ~]#
--------------------
测试虚拟用户实现结果
测试Postfix 支持虚拟用户
[root@mail ~]# /usr/local/courier-authlib/sbin/authtest -s login [email protected] extmail
Authentication succeeded. // 表示成功
Authenticated: [email protected] (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)
--------------------
测试虚拟用户SMPT发信认证
[root@mail ~]# printf "[email protected]" | openssl base64
cG9zdG1hc3RlckBleHRtYWlsLm9yZw==
[root@mail ~]# printf "extmail" | openssl base64
ZXh0bWFpbA==
[root@mail ~]#
[root@mail ~]# telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
220 mail.benet.com 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 ~]#
---------------------
建立虚拟用户数据库
[root@mail mail]# service mysqld restart
Shutting down MySQL. [确定]
Starting MySQL [确定]
[root@mail mail]#
[root@mail mail]# tar xzvf extman-0.2.5.tar.gz
[root@mail mail]# cd extman-0.2.5/docs/
[root@mail docs]#
[root@mail docs]# mysql -u root -p < extmail.sql
Enter password:
[root@mail docs]# mysql -u root -p < init.sql
Enter password:
---------------------
修改 Postfix的配置
[root@mail docs]# vim /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
[root@mail docs]# cp mysql_virtual_* /etc/postfix/
[root@mail docs]# postfix reload // 重新加载配置
----------------------
为虚拟用户设置 SMTP 发信认证
[root@mail mail]# tar jxvf courier-authlib-0.60.2.tar.bz2
[root@mail mail]#
[root@mail mail]# cd courier-authlib-0.60.2
[root@mail courier-authlib-0.60.2]#
[root@mail courier-authlib-0.60.2]# vim courier-authlib.sh
./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@mail courier-authlib-0.60.2]# chmod a+x courier-authlib.sh
[root@mail courier-authlib-0.60.2]#
[root@mail courier-authlib-0.60.2]# ./courier-authlib.sh
[root@mail courier-authlib-0.60.2]# make
[root@mail courier-authlib-0.60.2]# make install
[root@mail courier-authlib-0.60.2]# make install-configure //生成默认配置文件
[root@mail courier-authlib-0.60.2]# vim /etc/ld.so.conf //末尾添加如下行内容
......
/usr/local/courier-authlib/lib/courier-authlib
[root@mail courier-authlib-0.60.2]# ldconfig
[root@mail courier-authlib-0.60.2]# cd /usr/local/courier-authlib/etc/authlib/
[root@mail authlib]# vim authdaemonrc //修改27行和34行,保留authmysql认证方式
27 authmodulelist="authmysql"
......
34 authmodulelistorig="authmysql"
[root@mail authlib]# chmod -R 755 /usr/local/courier-authlib/var/spool/authdaemon/
[root@mail authlib]# cp authmysqlrc authmysqlrc.bak
[root@mail authlib]# vim authmysqlrc
// 修改下列行,描述如何向MySQL查询数据
26 MYSQL_SERVER localhost
27 MYSQL_USERNAME extmail
28 MYSQL_PASSWORD extmail
49 MYSQL_SOCKET /tmp/mysql.sock
68 MYSQL_DATABASE extmail
83 MYSQL_USER_TABLE mailbox
92 MYSQL_CRYPT_PWFIELD password
113 MYSQL_UID_FIELD uidnumber
119 MYSQL_GID_FIELD gidnumber
128 MYSQL_LOGIN_FIELD username
133 MYSQL_HOME_FIELD concat('/mailbox/',homedir)
139 MYSQL_NAME_FIELD name
150 MYSQL_MAILDIR_FIELD concat('/mailbox/',maildir)
-------------------
复制启动脚本,启动courier-authlib服务,这个脚本在源码包的目录里
[root@mail authlib]# cd /home/tom/LNS-SG7/courier-authlib-0.60.2
[root@mail courier-authlib-0.60.2]# pwd
/home/tom/mail/courier-authlib-0.60.2
[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 courier-authlib on
[root@mail courier-authlib-0.60.2]# service courier-authlib start
Starting Courier authentication services: authdaemond
-----------------
修改Cyrus sasl设置
[root@mail courier-authlib-0.60.2]# vim /usr/lib/sasl2/smtpd.conf
#pwcheck_method:saslauthd
pwcheck_method: authdaemond
authdaemond_path: /usr/local/courier-authlib/var/spool/authdaemon/socket
-----------------
修改 Dovecot 的配置
修改邮件存储位置,设置启用数据库查询功能
[root@mail ~]# vim /etc/dovecot.conf
218 mail_location = maildir:/mailbox/%d/%n/Maildir
.....
794 auth default {
799 mechanisms = plain
903 passdb sql {
904 # Path for SQL configuration file, see doc/dovecot-sql-example.conf
905 args = /etc/dovecot-mysql.conf
906 }
966 userdb sql {
967 # Path for SQL configuration file, see doc/dovecot-sql-example.conf
968 args = /etc/dovecot-mysql.conf
969 }
.....
}
--------------------
建立数据库查询配置文件
[root@mail ~]# 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
--------------------
建立虚拟用户[email protected]的邮箱目录,调整权限
username = '%u'
[root@mail ~]# mkdir -p /mailbox/extmail.org/postmaster/Maildir/
[root@mail ~]# chown -R postfix:postfix /mailbox
--------------------
重启Dovecot服务
[root@mail ~]# killall -9 dovecot
[root@mail ~]# dovecot
[root@mail ~]# netstat -nlpt |grep dovecot
tcp 0 0 0.0.0.0:110 0.0.0.0:* LISTEN 27034/dovecot
tcp 0 0 0.0.0.0:143 0.0.0.0:* LISTEN 27034/dovecot
[root@mail ~]#
--------------------
测试虚拟用户实现结果
测试Postfix 支持虚拟用户
[root@mail ~]# /usr/local/courier-authlib/sbin/authtest -s login [email protected] extmail
Authentication succeeded. // 表示成功
Authenticated: [email protected] (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)
--------------------
测试虚拟用户SMPT发信认证
[root@mail ~]# printf "[email protected]" | openssl base64
cG9zdG1hc3RlckBleHRtYWlsLm9yZw==
[root@mail ~]# printf "extmail" | openssl base64
ZXh0bWFpbA==
[root@mail ~]#
[root@mail ~]# telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
220 mail.benet.com 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 ~]#