vkill'blog 何永鹏

archlinux SBS--mail server(3):virtual users and domains with postfix,mysql

11:49 , vkill
环境:
2.6.25-ARCH  postfix-2.5.3  mysql 5.0.60
目的:
实现"虚拟邮箱网域+虚拟用户",也可以理解为postfix使用mysql数据库中的用户

实现步骤:

mysql数据结构和数据信息如下:
[root@myhost ~]# mysql -u vmail -ppass123456 vmail
mysql> desc users;
+--------+-----------+------+-----+---------+-------+
| Field  | Type      | Null | Key | Default | Extra |
+--------+-----------+------+-----+---------+-------+
| name   | char(16)  | NO   |     | NULL    |       |
| pass   | char(48)  | NO   |     | NULL    |       |
| domain | char(255) | NO   |     | NULL    |       |
| active | char(1)   | NO   |     | 0       |       |
+--------+-----------+------+-----+---------+-------+
mysql> select * from users;
+------+----------------------------------+--------+--------+
| name | pass                             | domain | active |
+------+----------------------------------+--------+--------+
| aaa  | e10adc3949ba59abbe56e057f20f883e | v1.net | 0      |
| bbb  | e10adc3949ba59abbe56e057f20f883e | v1.net | 1      |
| ccc  | e10adc3949ba59abbe56e057f20f883e | v2.net | 1      |
| ddd  | e10adc3949ba59abbe56e057f20f883e | v2.net | 1      |
+------+----------------------------------+--------+--------+
####pass字段使用了md5()函数,原始密码都是123456

1、首先创建一系统帐户,这个帐户可以理解为虚拟用户的代表,用来读写邮件文件
[root@myhost ~]# useradd -u 401 -s /bin/false vmail
2、创建虚拟邮箱基础目录,所有虚拟邮箱网域中虚拟用户的邮件都写是在这个目录下的

[root@myhost ~]# mkdir /var/vmail
[root@myhost ~]# chown vmail:vmail /var/vmail/
[root@myhost ~]# chmod 750 /var/vmail/

3、修改main.cf,使可使用虚拟邮箱网域,"虚拟邮箱网域+虚拟用户"

[root@myhost ~]# vi /etc/postfix/main.cf
#文件末加入下列几行
###----virtual mailbox
#虚拟网域名称列表
virtual_mailbox_domains = mysql:/etc/postfix/mysql_vmd.conf
#虚拟邮箱查询表
virtual_mailbox_maps    = mysql:/etc/postfix/mysql_vmm.conf
#虚拟邮箱基础目录
virtual_mailbox_base    = /var/vmail
#定义邮箱文件的拥有者全部为vmail
virtual_uid_maps        = static:401
virtual_gid_maps        = static:401
#使用virtual MDA投递邮件
virtual_transport       = virtual

其中两相关文件设置如下,这两个文件中的配置很重要:

[root@myhost ~]# vi /etc/postfix/mysql_vmd.conf
host                    = localhost
user                    = vmail
password                = pass123456
dbname                  = vmail
table                   = users
select_field            = domain
where_field             = domain
### host user password dbname 用来连接mysql数据库
### table select_field where_field 这三行可以用下面这一行sql查询语句来替换
#query = select domain from users where domain='%s'


[root@myhost ~]# vi /etc/postfix/mysql_vmm.conf
host                    = localhost
user                    = vmail
password                = pass123456
dbname                  = vmail
table                   = users
select_field            = concat(domain,'/',name,'/','Maildir/')
where_field             = concat(name,'@',domain)
additional_conditions   = and active='1'
### host user password dbname 用来连接mysql数据库
### table select_field where_field additional_conditions 这四行可以用下面这一行sql查询语句来替换
#query = select concat(domain,'/',name,'/','Maildir/') from users where concat(name,'@',domain)='%s' and active='1'
### 返回虚拟邮箱用户对应的邮箱文件的相对路径文件名(相对于基础目录)


4、修改main.cf,使支持smtp认证,smtp-->cyrus SASL-->pam_mysql
具体参见:
archlinux SBS--mail server(2):postfix SMTP server with cyrus SASL2(下)
地址:http://blog.vkill.net/read.php?107
Last modified by vkill on2008/10/11 12:24
类别:linux system | Tags: , , , , , , , , , , | 0 条评论, 803 次阅读
网友评论(0):
发表评论:

Nickname: 
Email:
Site URI: