分享
 
 
 

学习postfix的一个小结,大伙指点,看哪写错了

王朝other·作者佚名  2008-05-18
窄屏简体版  字體: |||超大  

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相同。

最后,看几个Postfix+MySQL配置方案,看看这几个概念在其中是如何被应用的。(这些人水平都比我高多了,不敢妄加评论,只是用来验证一下自己的学习心得。)

(1)王兴宇的,http://www.cngnu.org/technology/Postfix_I.html

main.cf配置“virtual_maps = hash:/etc/postfix/virtual,mysql:/etc/postfix/mysql-virtual.cf”,mysql库很简单,主要是username和FORWARD段。

从以上可以看出,王先生的方案主要是用virtual表,向外提供多个虚拟域的邮箱,这些邮件地址最后都转向到本地邮箱上。

(不行,熬不了下去了,以后接着改,睡!)

相关配置参数:

相关配置文件:

相关文档:

虚拟投递代理--/usr/share/doc/postfix-1.1.11/README_FILES/VIRTUAL_README

王先生的方案在投向本地邮箱时,使用的是本地投递代理,而不是虚拟投递代理。

下面几个方案都是http://www.postfix.org/docs.html上提到的。

(2)Daniel V.

Pedersen的,http://www.postfix.org/docs.html或http://kummefryser.dk/HOWTO/mail/postfix_mysql.html

这篇配置在main.cf中给出了多个映射表,但可以分成三类:

1、virtual_maps,这是virtual表,保存在mysql库的remote_aliases表中,它完成从一个域名(邮箱地址)到另一个域名(邮箱地址)的转换,多域的支持就在这里完成了;

2、transport_maps,对应mysql库中的transport表,它指出哪些域的邮件是交给投递代理(本地、虚拟),还是通过smtp转发给下一个中继主机;

3、virtual_mailbox_maps、virtual_uid_maps、virtual_gid_maps,被虚拟投递代理使用,指出邮箱的路径、uid、gip值,这些信息都保存在mysql的aliases表中。

这个方案中,用virtual表,完成邮箱地址的转换;用transport决定邮件的下一步投递方向(或处理者);用mysql中的一张表,来为虚拟投递代理服务。

(3)Kirby Menzel and Lucas

Peet的,http://www.postfix.org/docs.html或http://kirb.insanegenius.net/postfix.html

与上相同,在mysql提供三个表:

Virtual表,用来提供多域邮箱地址的转换,虚拟域;

Transport表,提供如何处理邮件投递:本地代理来做,还是虚拟代理来做;

Users表,指出与邮件地址相对应的邮箱的位置、uid、gid。

当然这篇配置中表的选项比上一篇丰富多了。但就我们这篇文章所讨论的问题来说,是一样的。

(4)Mischa Peters的,http://www.postfix.org/docs.html或http://high5.net/howto/

这个配置方案中:

transport表不存在,这一块已经指定由虚拟投递代理来完成;

mysql中的mailbox表,为虚拟投递代理指出邮箱的位置。至于邮箱的uid和gid都固定了,没在表中列出;

前三个配置方案中的virtual表这一块,都是mysql中提供一个表,在main.cf中用一个virtual_maps参数来指示它。但在这个方案中,virtual_maps参数被“virtual_alias_maps”参数取代。在介绍这两个参数之前,首先对postfix的虚拟域的基本概念和方法做个简单的介绍,这是为了让阅读者在思路上更加顺利些。当然更详细参考/etc/postfix/virtual。

postfix配置虚拟域时,需要告诉postfix两个东西:一是虚拟域的域名;二是虚拟域电子邮件地址的映射表,将一个虚拟域的邮件地址名映射到另一个邮件地址。

从/etc/postfix/virtual文件告诉我们,postfix支持有两种风格(style)的虚拟域。一是sendmail风格,它将虚拟域邮件地址的映射表保存在/etc/postfix/virtual库中,而虚拟域的域名在main.cf的$mydestination参数中指出。王兴宇先生的做法就是这样的,只不过它把邮件地址的映射表保存到了mysql库中。二是postfix风格,将虚拟域的域名以及邮件地址映射表都保存在/etc/postfix/virtual中。每个虚拟域表的组织结构都一样,先是一行指出虚拟域名,接着是若干行的邮件地址映射表。

现在开始说说这两个参数。virtual_maps是老版本postfix中的参数。sendmail风格时,虚拟域名和virtual表分别由$mydestination和$virtual_maps分别指出;postfix风格时,虚拟域名和virtual表都包含在一起了,由 virtual_maps指出。而新版本postfix中,虚拟域名和virtual表被拆分到两个单独的文件(库)中,由两个参数分别指定。$ virtual_alias_domains指出虚拟域名,$virtual_alias_maps指出virtual表。但为了和旧版本兼容,默认情况下,两者还都合并到一个文件中,由$virtual_alias_maps指出。

新版本中使用$virtual_alias_domains和$virtual_alias_maps显然是方便了对于多虚拟域的支持。旧版中,如果是sendmail风格,虚拟域名要加到$mydestination参数中,几个虚拟域时还可以,如果是几十个上百个,这样的做法显然是不行了;如果是postfix风格,那两者混合在同一个文件中,那用数据库服务器来保存这表的话,好象有点问题吧(这样的做法,我没试验过能不能行,所以不能完全确定,有没有人这样做过的?)。讲过旧版的不足,那新参数的优点也就不用说了。

讲了半天,再回到这个配置方案来,它并没有用到$virtual_alias_domains,而 mysql_virtual_alias_maps.cf也只用到mysql中alias表的“goto”和“address”两个字段,那看来它是用新版本的默认方式,用$virtual_alias_maps来指出映射表。(但alias表中的“domain”字段又是用来做什么的?没看明白)

在这个方案中,还多了一项“virtual_mailbox_domains =mysql:/usr/local/etc/postfix/mysql_virtual_domains_maps.cf”。首先,我们要明确 virtual_mailbox_domains这个参数是用在虚拟投递代理的。它指出了一个域名列表,拥有这些域名的电子邮件才能够被postfix的虚拟投递代理处理。它也是代替在$mydestination参数指出一长串的域名。virtual_mailbox_domains参数所服务的方向(问题)应该和$virtual_alias_domains一样。

在解读过本方案后,可以看出和前面三个方案相比,本方案在支持多个虚拟域方面做得更好一些。当然方案的好与坏,要看它们所针对的目标。

写着写着,发觉自己所写的应该是postfix中邮件的重定向吧。除了以上提到的,postfix中的邮件重定向好象还有几个地方(参数),比如地址扩展的概念,$mailbox_transport等。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有