需求:
假设现在我有两个这样的域名 domain.com 和 domain.cn。现在 domain.com 作为主域名已经成功地在ip地址为 125.168.2.16 的服务器上配置了postfix。即可以通过 abc@domain.com 发送和接收邮件。现在希望 domain.cn 域名也指向该服务器,并可以通过 abc@domain.cn 发送和接收邮件,并且两个域名对应的用户是一致的,即发送给 abc@domain.com 的邮箱的用户实际上也是给 abc@domain.cn 邮箱的用户的邮件,而同一个用户abc可以选择使用 abc@domain.com 或者 abc@domain.cn 发送邮件,而接收方看到的是不同的域名发出来的邮件。
够啰嗦了,好,马上开始吧。
一、对postfix的虚拟域名相关选项进行设置
$ vi /etc/postfix/main.cf
virtual_alias_maps=hash:/etc/postfix/virtual
二、定义虚拟域名转换规则
$ vi /etc/postfix/virtual //在文件末尾添加上下面两行
domain.cn anything
@domain.cn @domain.com
三、更新虚拟域名规则
$ postmap /etc/postfix/virtual
四、重启postfix
$ service postfix restart
----------------------------------------------------------------
另一
------------------------------------------------------------------
Virtual、Aliases、虚拟表等概念之间的关系
使用Postfix的别名、虚拟域、用MySQL数据库保存用户信息(Postfix+MySQL)等功能的用户,都会与Postfix中virtual、aliases、transport、本地投递、虚拟投递等相关概念打交道。这篇文档就是关于这些概念之间关系的论述。在文章最后,以若干Postfix+MySQL配置方案为例,说明这几个概念在方案中的应用。
此文档是我在学习Postfix中的一个小结,也让它与时俱进吧:)
当我开始试图了解Postfix+MySQL做法时,发现自己对上述概念(相关的参数)的关系发生了混乱。于是,我试图找出其中关系,并理顺它。后来,我发现根据Postfix的那张大图(the Big Picture,http://www.postfix.org/big-picture.html),将有助于梳理我们的思路。下面就是按着这样的想法来写的。
注:下面关于各概念的描述并不完整,主要是从有助于讲清它们起作用的位置,以及理解相互关系的角度出发。更详细的说明请参考相关文档。
1、首先是virtual。从左向右看这张图,首先遇到的是virtual。virtual是什么?virtual是一张重定向表,用于本地和非本地接收者或接收域的重定向操作。virtual的重定向是一个地址到地址的映射(map),它只是应用在邮件的接收者信封地址(recipient envelope address)部分,没有涉及到邮件的信息头和正文部分。这个重定向操作是在smtpd从网络上接收邮件后,由cleanup程序来完成的。Postfix的虚拟域支持就是通过它来实现的。
virtual这张表,可以保存在数据库文件中,如/etc/postfix/virtual.db;也可以保存在数据库服务器上,如在MySQL库的一张表中;还可以保存在NIS、LDAP等等。具体的保存方式通过virtual_maps参数值来告诉Postfix。
2、然后我们继续向右看,接下来的是transport。在这里我们把transport看成一张表,Postfix根据这张表来决定哪些邮件由本地投递代理(local delivery agent)来执行,哪些邮件由虚拟投递代理(virtual delivery agent)来执行。至于这张表保存在什么地方,则由transport_maps参数来指定。
注:这些邮件一般是根据它们的域进行区分,从而由不同的投递代理来处理。另外,我们不用这张表,完全由本地代理来投递,或是完全由虚拟代理来投递也都是可以的。
3、接着向右,图中给出的是本地投递代理。从图中可以看出,与本地投递代理相关的两个概念是aliases和.forward。 别名(alias)是由本地投递代理执行的一种系统内的邮件重定向机制,与virtual不同,别名是把整个邮件重定向到另外的一个或多个邮箱。aliases这张表,给出了别名和实际接收者的对应关系。
aliases表的保存位置,由aliases_maps和aliases_database两个参数来指定。这两个参数互不相关,都发挥作用。aliases_database指定在本地上的别名数据库,是数据库文件形式。aliases_maps除了指定数据库文件外,还可以指定保存在nis或数据库服务器上的别名表。
.forward则是在用户目录中的一个文件,也用于重定向邮件。但它和我们这里所讨论就没有关系了。这只是提一下。
4、虽然图上没有标出虚拟投递代理,但从transport部分描述,我们知道它是和本地投递代理处于同一级别(位置)的。virtual机制和本地投递代理最终都是把邮件投到系统中一个真实用户的邮箱,而虚拟投递代理所投的邮箱的主人(用户)不是系统真实用户。虚拟投递代理不支持aliases和.forward。它使用虚拟表(virtual table),这些表包括:
virtual_mailbox_maps,指定保存虚拟用户邮箱的路径表在哪里。相关参数virtual_mailbox_base,指出邮箱路径的前缀;
virtual_uid_maps,指出保存虚拟用户邮箱的uid的表在哪里,这是针对每个虚拟用户邮箱在系统中的uid都不一样的情况。虚拟用户的邮箱也可以共用一个uid值。
virtual_gid_maps,这是关于虚拟用户邮箱的gid值。相关情况与uid相同。