Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2323097
  • 博文数量: 535
  • 博客积分: 8689
  • 博客等级: 中将
  • 技术积分: 7066
  • 用 户 组: 普通用户
  • 注册时间: 2010-11-26 10:00
文章分类

全部博文(535)

文章存档

2024年(4)

2023年(4)

2022年(16)

2014年(90)

2013年(76)

2012年(125)

2011年(184)

2010年(37)

分类: BSD

2011-02-20 21:13:29



文介绍了如何配置Postfix和Dovecot以支持多域名虚拟用户方式工作。

经过了一天的痛苦摸索终于将这个功能配好了,真是感慨啊!用的越是多越发现自己有太多没接触过的领域

首先来说说为什么要实现这样一个功能

假设我们有两个域名 和

现在我们要配置两个邮件系统,但是我们只有一台服务器,那么怎么办呢?

如果这台服务器上的邮件系统支持同时配置几个域名的话显然就可以解决以上的问题。

Postfix就是这样一个强大的系统,多域名支持的官方教程可以在找到。

简单总结一下,对于多域名的支持postfix支持以下几种方式:

1.共享域名,共享Unix账户

2.虚拟别名(Virtual Alias)独立域名,共享Unix账户

3.虚拟邮箱(Virtual Mailbox)独立域名,无需Unix账户

4.转发服务器(Forwarding Server)用做备份服务器,主服务器故障时暂存邮件,恢复后直接转发给主服务器

我们的应用背景是1,2,3中的一种,经过讨论决定使用第三种方式,虚拟邮箱

Postfix的配置:

现在回头来看,似乎只是多加几句话而已,不过在配置过程中逐步熟悉各个参数的用法着实花了很长的时间不停实验

# David Added 2008-May-14 for multi domian support
1.virtual_mailbox_domains = abc.com
2.virtual_mailbox_base = /home/vmail/vhosts
3.virtual_mailbox_maps = hash:/etc/postfix/vmailbox
4.virtual_minimum_uid = 500
5.virtual_uid_maps = static:5000
6.virtual_gid_maps = static:500
7.virtual_alias_maps = hash:/etc/postfix/virtual
详细说明下这7行代码的意思:

line1:告诉系统我们要使用虚拟邮箱方式,并且指定这次要配置的域名为abc.com

line2:告诉系统虚拟邮箱在系统中的实际存放地址,这里和教程不太一样,使用了home/vmail主要是为了配合dovecot来实现pop3时方便一点(得到这条经验至少尝试了20次以上-_-||)

line3:告诉系统到哪里去找email account和实际存放位置的map关系。可以使用的方式有数据库,文件。我们使用的是hash文件方式,非常简单的结构,email account (white space) mail path

line4:允许使用的虚拟用户和的uid的最小值,这里我填了500表示从自己创建的用户开始,避免误用到系统帐号的uid(从0开始)

line5,6:该虚拟邮件拥有者的uid和gid,这里配合dovecot开了一个用户vmail,属于组vmail,我自己给它的uid是5000,gid是500,所以这里用static指定固定的这个用户。

插一句,,可以用 id username 的命令来实现,这条命令会告诉我们uid,gid等信息

line7:告诉系统到哪里去找邮件别名,邮件别名大家应该都熟悉了,比如可以把info@abc.com指向david@abc.com

这样前者其实就是后者了,为什么要配这个呢,因为你现在有多个域名了,简单的用用户名已经不能确定到底指向哪个地址了,所以你需要用user@domain的方式来建立

完成了这些以后用postfix reload来刷新配置

但是我们还需要自己建立那两个hash文件

eg:vmail格式

billy@abc.com abc.com/billy/Maildir/

这样一个用户就建立完毕了,信件将会被投递到上面line2里面指定的path和这个hash文件的value所拼成的地址

/home/vmail/vhost/abc.com/billy/Maildir

记得在系统里自己用mkdir建立这样一个目录,并且给予适当的权限(对最后一级的Maildir建议给777)

配完后用 postmap hash文件的path 命令刷新配置,postfix reload不能刷新这个配置一定要用postmap

alias的配置参考

postmaster@abc.com postmaster

这样就让abc.com的postmaster指向了系统自己的postmaster(主域所配置的)

配完用 postmap hash文件的patah 命令刷新配置

至此,postfix的任务就完成了,昨天下午我再次忘记了还有一个负责收信的dovecot-_-\\

然后意识到了一个大问题,因为是虚拟用户,我不知道他们的密码是什么,因为我根本没有指定它们的密码,怎么指定呢?一大堆的问题堆到面前

一时之间没了方向,迷茫了很久终于找到了这篇

当然在后面的实践中还是遇到了很多问题,再参考的这篇才最终搞定

今天先写到这里,明天有空再写dovecot的配置

5.21补充

dovecot的配置

首先是一个概念,我们使用的虚拟用户究竟是什么东西,为什么要用这种虚拟的账户?

之前我们使用自己的邮件系统postfix+dovecot都是先建立一个Linux用户,这个用户有一个user id,它属于某个用户组,有自己home目录,有登录系统的shell环境,有自己的系统密码,可以对Linux进行权限范围内的操作。

对于我们自己使用似乎这个方式非常合理,但是对于普通的用户是否也要给他们一个系统用户呢?考虑到安全等问题,我觉得这不是一个好主意,那么解决方案呢?

毫无疑问,虚拟用户就是为了这个目的才存在的。一个虚拟用户可以拥有一个属于自己的物理文件夹,在里面存放邮件,但是他没有自己的user id,没有自己的group,没有系统操作权限,说到底就是邮件系统的一个参与者。

有了这些概念,我知道了要走的方向,那就是在我们的系统上配置好一群虚拟用户,开设好他们的邮件存放物理文件夹,配置好他们的邮箱访问密码。

为了掌握配置过程中出现的问题,首先对dovecot的log文件做一个设定,按照官方的建议,将错误log和访问log分离
log_path = /var/log/dovecot.log
info_log_path = /var/log/dovecot-info.log

接下来对要存放的邮箱格式做设置

和以往一样还是采用 ~/Maildir 的格式

然后最激动人心的时刻到了,我要配置访问密码了

之前不用配置passdb 因为是用系统自己的密码验证,但是这次要设定一个密码文件

这里我在etc下开了一个dovecot目录,在下面放了一个passwd文件

配置文件里这样写

passdb passwd-file {
# File contains a list of usernames, one per line
args = /etc/dovecot/passwd
#deny = yes
}

有了密码,下面一步就是告诉dovecot去哪里读虚拟用户的邮箱
需要对userdb static项做配置,实际的经历是在这个上面花了大量的时间,最终掌握了配置的方法

userdb static {
args = uid=vmail gid=vmail home=/home/vmail/vhosts/%d/%n
}

解释一下,最重要的就是这个home的配置,指定了邮箱的位置,这里用了
home/vmail/vhosts/%d/%n

home是作为所有用户的主目录
vmail是作为所有虚拟用户的代表,这个用户是实际存在于系统中的,然后它可以管理任意多的虚拟用户,也就是说其实虚拟用户的实现还是依托一个实际的系统用户
vhosts其实是postfix里面用到了这个目录所以也就配上了
上述三个都是常量
接下来两个变量就奥妙了,因为dovecot要靠这两个变量来获取虚拟用户的实际目录,在实验过程中也是花了最多的时间,最后我知道%d可以获取passwd文件中配置的用户名的domain地址,举个例子,passwd中是这样配置的

abc@efg.com password

那么用%d就可以得到efg.com
然后用%n就可以得到abc

还记得刚才选择了邮箱格式为~/Maildir吗

这样一来实际的目录就出来了/home/vmail/vhosts/efg.com/abc/Maildir

也就是我最终需要的地址,postfix就是把信件投递到上述地址的,然后dovecot就可以去收信了

全文完

1 Comment

  1. Billy said,

    May 31, 2008 @

    很不容易啊。原来我的帐号是这么配出来的!强!


阅读(6944) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2011-03-06 16:23:24

很好的, 收藏了 推荐一个博客,提供很多免费软件编程电子书下载: http://free-ebooks.appspot.com