1
Linux服务器配置与应用
1.9.3.1 6.3.1 Postfix介绍
6.3.1 Postfix介绍

postfix是Wietse Venema在IBM的GPL协议之下开发的MTA(邮件传输代理)软件。postfix是Wietse Venema想要为广泛使用的sendmail提供替代品的一个尝试。在Internet世界中,大部分的电子邮件都是通过sendmail来投递的,大约有100万用户使用sendmail,每天投递上亿封邮件。这真是一个让人吃惊的数字。postfix试图更快、更容易管理、更安全,同时还与sendmail保持足够的兼容性。

postfix由十几个具有不同功能的半驻留进程组成,并且在这些进程中并无特定的进程间父子关系。某一个特定的进程可以为其他进程提供特定的服务。大多数的postfix进程由一个进程统一进行管理,该进程负责在需要的时候调用其他进程,这个管理进程就是master进程。该进程也是一个后台程序。这些postfix进程是可以配置的,我们可以配置每个进程运行的数目,可重用的次数,生存的时间等等。通过灵活的配置特性可以使整个系统的运行成本大大降低。

当有新的邮件到达时,postfix进行初始化,初始化时postfix同时只接受两个并发的连接请求。当邮件投递成功后,可以同时接受的并发连接的数目就会缓慢地增长至一个可以配置的值。当然,如果这时系统的消耗已到达系统不能承受的负载就会停止增长。还有一种情况是如果postfix在处理邮件过程中遇到了问题,则该值会开始降低。

当接收到的新邮件的数量超过postfix的投递能力时,postfix会暂时停止投递deferred队列中的邮件而去处理新接收到的邮件。这是因为处理新邮件的延迟要小于处理deferred队列中的邮件。Postfix会在空闲时处理deferred中的邮件。

当一封邮件第一次不能成功投递时,postfix会给该邮件贴上一个将来的时间邮票。邮件队列管理程序会忽略贴有将来时间邮票的邮件。时间邮票到期时,postfix会再次尝试对该邮件进行一次投递,如果这次投递再次失败,postfix就给该邮件贴上一个两倍于上次时间邮票的时间邮票,等时间邮票到期时再次进行投递,依此类推。当然,经过一定次数的尝试之后,postfix会放弃对该邮件的投递,返回一个错误信息给该邮件的发件人。

postfix会在内存中保存一个有长度限制的当前不可到达的地址列表。这样就避免了对那些目的地为当前不可到达地址的邮件的投递尝试。从而大大提高了系统的性能。

postfix通过一系列的措施来提高系统的安全性,这些措施包括:动态分配内存,从而防止系统缓冲区溢出;把大邮件分割成几块进行处理,投递时再重组; Postfix的各种进程不在其他用户进程的控制之下运行,而是运行在驻留主进程master的控制之下,与其他用户进程无父子关系,所以有很好的绝缘性。Postfix的队列文件有其特殊的格式,只能被postfix本身识别。