构建postfix邮件服务器(四)配置postfix支持虚拟用户
一、准备
1.从www.extmail.org 中下载extman-1.1.tar.gz
2.从http://sourceforge.net/projects/courier/files/ 下载courier-authlib
使用Courier-authlib软件的目的是因为saslauthd程序不支持数据库认证,而Courier-authlib支持多种数据库认证
3.检查postfix是否支持虚拟用户 postconf – m | grep msyql 如果出现mysql表示支持
二、建立虚拟用户数据库
1启动mysql
service mysqld restart
(要想使用此方法启动,必须将mysqld添加为系统服务,见构建postfix邮件服务器(一))
2.解压 extman
tar zxvf extman-1.1.tar.gz
3.导入extman软件包中的数据库脚本
cd extman-1.1/docs
mysql -u root -p123456 < extmail.sql
mysql -u root -p123456 < init.sql
-p后面接的是mysql的密码
(要想直接使用mysql就要输入export PATH=$PATH:/usr/local/mysql/bin)
extmail.sql 脚本进行的操作:主要针对邮件域localhost进行初始化
创建 extmail 库,及该库中的一些表
创建用户 extmail@localhost,密码为 extmail 对数据库extmail中的表拥有“SELECT”、“UPDATE”的权限
创建用户 webman@localhost,密码为 extman 对数据库extmail中的表拥有“SELECT”、“INSERT”、“DELETE”、“UPDATE”权限
init.sql脚本进行的操作:主要是建立了一个新的测试邮件域
添加虚拟邮件域 extmail.org 的记录,作为该邮件域的管理帐户
创建用户 root@extmail.org,密码为 extmail*123*
创建用户 postmaster@extmail.org,密码为 extmail
作为该邮件域内的基本邮件用户
三、配置虚拟用户支持postfix
1、修改main.cf文件
Vi /etc/ostfix/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
\\设置postfix服务器可以接收的虚拟邮件域的域名,作用类似于配置参数“mydestination”
virtual_uid_maps = static:1000 \\设置所有虚拟用户映射的本地用户的UID
virtual_gid_maps = static:1000 \\设置所有虚拟用户映射的本地用户的GID
2. 建立虚拟用户映射表文件
方法:复制 extman 软件包中docs子目录下的样例文件
mysql_virtual_alias_maps.cf mysql_virtual_mailbox_maps.cf mysql_virtual_domains_maps.cf
cd extman-0.2.5/docs
cp mysql_virtual_* /etc/postfix/
四、为虚拟用户设置SMTP发信认证
1.解压coutier-authlib-0.63.0
tar jxvf courier-authlib-0.63.0.tar.bz2
2.预配置
./configure
–prefix=/usr/local/courier-authlib \ \\安装的位置
>–without-stdheaderdir \ \\将头文件安装到一个不是默认的头文件搜索路径的目录中
>–with-authmysql \ \\配置支持MYSQ数据库查询
>–with-redhat \
>–with-mysql-libs=/usr/local/mysql/lib/mysql \ \\mysql的库文件路径
>–with-mysql-includes=/usr/local/mysql/include/mysql \\msyql 的头文件路径
3.编译,安装
make ; make install
4.生成authmysqlrc和 authdaemonrc两个文件
命令 make install-configure
authdaemonrc:主配置,设置使用的认证方式
authmysqlrc:数据库配置,设置连接地址、查询方式等
5.将courier-authlib的库文件路径添加到系统的搜索路径中去
1) vi /etc/ld.so.conf
/usr/local/courier-authlib/lib/courier-authlib
2)更新
Ldconfig
6.修改authdaemonrc主配置文件,仅保留authmysql认证方式,去掉其他
1)进入目录
cd /usr/local/courier-authlib/etc/authlib/
2)备份
cp authdaemonrc authdaemonrc.bak
3)保留authmysql认证方式
①vi authdaemonrc
②删掉所有内容 1000dd
③添加如下两行
authmodulelist=”authmysql”
authmodulelistorig=”authmysql”
7.修改authmysqlrc文件,用于描述如何向mysql数据库查询信息
1)cd /usr/local/courier-authlib/etc/authlib/
2)备份
cp authmysqlrc authmysqlrc.bak
3)vi authmysqlrc
修改
MYSQL_SERVER localhost \\msyql数据库服务器位置
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 \\从pssword字段获得帐户密码
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) \\合并出用户的完整邮件存储路径
8.回到源码目录,复制脚本,并启动courier-authlib服务
cd /postfix-an/courier-authlib-0.63.0 \\回到源码目录
cp courier-authlib.sysvinit /etc/init.d/courier-authlib \\复制脚本到
chmod 755 /etc/init.d/courier-authlib \\给权限
chkconfig –level 35 courier-authlib on \\在35基本,开机启动
service courier-authlib start \\启动courier-authlib
9.修改cyrus sasl设置
vi /usr/lib/sasl2/smtpd.conf
pwcheck_method: authdaemond
authdaemond_path: /usr/local/courier-authlib/var/spool/authdaemon/socket
10.修改目录的权限,否则postfix无法获得用户名和密码
chmod –R 755 /usr/local/courier-authlib/var/spool/authdaemon/
五、修改Dovecot的配置
Vi /etc/dovecot.conf
1.查找mail_location 把它修改为
mail_location = maildir:/mailbox/%d/%n/Maildir
2.查找 mechanisms = plain 在下面添加以下内容
passdb sql {
args = /etc/dovecot-mysql.conf
}
userdb sql {
args = /etc/dovecot-mysql.conf
}
4.建立数据查询配置文件
Vi /etc/dovecot-mysql.conf \\建立文件,添加如下内容
driver = mysql
connect = host=localhost dbname=extmail user=extmail password=extmail
default_pass_scheme = CRYPT \\msyql数据库中存储的密码串的加密算法
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语句
上述配置可参考样例文件”etc/ dovecot-sql.conf”
5.建立虚拟用户的邮箱根目录“/mailbox”
1)mkdir -p /mailbox/extmail.org/postmaster/Maildir/
-p 表示连接新建目录
/mailbox 是邮箱存储空间的顶层目录,必须创建
/mailbox/extmail.org 目录对应虚拟邮件域 extmail.org
/mailbox/extmail.org/postmaster 目录对应邮件用户 postmaster@extmail.org
/mailbox/extmail.org/postmaster/Maildir 目录对应该用户的邮箱存储空间
2)chown -R postfix:postfix /mailbox
6.重启dovecot
/usr/local/sbin/dovecot -c /etc/dovecot.conf
六、测试虚拟用户
1. 使用 authtest 验证数据库查询,用于测试的邮箱账号用户:postmaster@extmail.org ,密码:extmail
1)命令 /usr/local/courier-authlib/sbin/authtest -s login postmaster@extmail.org extmail
2)如果出现“Authentication succeeded”表示成功
2.测试对虚拟用户的smtp发信认证
出现235 Authentication Successful 表示成功
1)首先获得虚拟用户postmaster@extmail.org的用户名和密码的BASE64编码字符串
①#perl -e ‘use MIME::Base64; print encode_base64(“postmaster\@extmail.org”)’
得到cG9zdG1hc3RlckBleHRtYWlsLm9yZw==
②perl -e ‘use MIME::Base64; print encode_base64(“extmail”)’得到 ZXh0bWFpbA==
或者用命令printf “用户名或密码” | openssl base64
本文转自:http://blog.thematice.com 作者:稀饭的国度