邮件服务器系统的选型考虑(四)

当前位置:北大青鸟首页 >网络学院 >专题 >网络系统设计 >网络体系结构设计 >邮件服务器系统的选型考虑(四)

邮件服务器系统的选型考虑(四)

Postfix邮件服务器系统及选型考虑

Postfix是一个由IBM资助下由Wietse Venema负责开发的自由软件工程的产品,其目的是为用户提供除Sendmail之外的邮件服务器选择。Postfix力图做到快速、易于管理、提供尽可能的安全性,同时尽量做到和Sendmail邮件服务器保持兼容性以满足用户的使用习惯。起初,Postfix是以VMailer这个名字发布的,后来由于商标上的原因改名为Postfix。

Postfix设计中采用了Web服务器的的设计技巧以减少进程创建开销,并且采用了其他的一些文件访问优化技术以提高效率,但同时保证了软件的可靠性。Postfix的设计目标就是成为Sendmail的替代者。由于这个原因,Postfix系统的很多部分,如本地投递程序等,可以很容易地通过编辑修改类似inetd的配置文件来替代。目前最新版本为2.4,开源代码和升级补丁均可以在它的主页http://www.postfix.org/上下载。

1.Postfix的设计目标

Postfix其设计目标体现在以下几个方面。

(1)性能

Postfix要比同类的服务器产品速度快3倍以上,一个安装Postfix的台式机一天可以收发百万封信件。Postfix设计中采用了Web服务器的的设计技巧以减少进程创建开销,并且采用了其他的一些文件访问优化技术以提高效率,但同时保证了软件的可靠性。

(2)兼容性

Postfix设计时考虑了保持Sendmail的兼容性问题,以使移植变得更加容易。Postfix支持/var[/sp001]/mail、/etc/aliases、NIS和~/.forward等文件。然而Postfix为保证管理的简单性,没有支持配置文件Sendmail.cf。

(3)安全和健壮性

Postfix设计上实现了程序在过量负载情况下仍然保证程序的可靠性。当出现本地文件系统没有可用空间或没有可用内存的情况时,Postfix就会自动放弃,而不是重试使情况变得更糟。

(4)灵活性

Postfix结构上由1 O多个小的子模块组成,每个子模块完成特定的任务,如通过SMTP 协议接收一个消息,发送一个消息,本地传递一个消息,重写一个地址等。当出现特定的需求时,可以用新版本的模块来替代老的模块,而不需要更新整个程序。而且它也很容易实现关闭某个功能。

(5)安全性

Postfix使用多层防护措施防范攻击者来保护本地系统,几乎每一个Postfix守护进程都能运行在固定低权限的chroot之下,在网络和安全敏感的本地投递程序之间没有直接的路径。一个攻击者必须首先突破若干个其他的程序,才有可能访问本地系统。Postfix甚至不绝对信任自己的队列文件或IPC消息中的内容以防止被欺骗。Postfix在输出发送者提供的消息之前会首先过滤消息。而且Postfix程序没有set-uid。

2.Postfix的主要特点

Postfix的一些特点包括以下几个方面。

(1)支持多传输域

Sendmai支持在Internet、DECnet、X.400和UUCP网络之间转发消息。Postfix的灵活设计为无须虚拟域(vistual domai)或别名来实现这种转发。但是在早期的发布里仅仅支持STMP 和有限度地支持UUCP,但对于我国用户来说,多传输域的支持没有什么意义。

(2)虚拟域

在大多数通用情况下,增加对一个虚拟域的支持仅仅需要改变一个Postfix查找信息表。其他的邮件服务器则通常需要多个级别的别名或重定向来获得这样的效果。

(3)UCE(Unsolicited Commercial Email,主动邮件通信)控制

Postfix能限制哪个主机允许通过自身转发邮件,并且支持限定什么邮件允许接进。Postfix 实现通常的控制功能包括:黑名单列表、RBL查找、HELLO/发送者DNS核实。

(4)表查看

Postfix没有实现地址重写语言,而是使用了一种扩展的表查看来实现地址重写功能。表可以是本地dbm或db文件等格式。

3.Postfix与Sendmail的比较

在此主要从两款邮件服务器系统的体系结构上进行一些比较。

(1)体系结构不同

Postfix是基于半驻留,互操作的进程的体系结构,每个进程完成特定的任务,没有任何特定的进程衍生关系(父子关系)。而且,独立的进程来完成不同的功能,相对于“单块"程序具有更好的隔离性。此外,这种实现方式使得每个服务,如地址重写等都能被任何一个Postfix部件所使用,无须进程创建等开销,而仅仅需要重写一个地址,当然并不是只有Postfix采用这种方式。

Postfix中,一个驻留主服务器根据命令运行Postfix守护进程,守护进程完成发送或接收网络邮件消息,在本地递交邮件等功能。守护进程的数目由配置参数来决定,并且根据配置决定守护进程运行的次数(re-used times),当空闲时间到达配置参数指定的限度时,自动消亡。这种方法明显地降低了进程创建开销,但是单个进程之间仍然保持了良好的隔离性。

Sendmail邮件系统是按照一个单块的结构设计实现的,该“单块"程序实现所有的功能。当然这种结构有利于在系统的不同部分之间共享数据。但是这种结构容易出现一些致命的错误。而女Qmail的邮件系统上使用一种分层次的结构,按照固定的顺序运行不同功能的子模块进程,执行完毕之后就将其释放。这种方法有良好的“绝缘”性,但是增加了进程创建开销和进程问通信开销。通过合理的规划子模块进程的运行顺序可以将开销保持在可以接受的范围内。

(2)进程工作机制不同

Postfix的设计目标就是成为Sendmail的替代者。由于这个原因,Postfix系统的很多部分,如本地投递程序等,可以很容易地通过编辑修改类似inetd的配置文件来替代。

Postfix的核心是由1 O多个半驻留程序实现的。为了保证机密性的原因,这些Postfix进程之间通过UNIX的socket或受保护的目录之下的FIFO(先进先出)进行通信。即使使用这种方法来保证机密性,Postfix进程并不盲目信任其通过这种方式接收到的数据。Postfix进程之问传递的数据量是有限制的。在很多情况下,Postfix进程之间交换的数据信息只有队列文件名和接收者列表,或某些状态信息。一旦一个邮件消息被保存进入文件,其将在其中保存到被一个邮件投递程序读出。

Postfix采用一些通常的措施来避免丢失信息:在收到确认以前通过调用flush和fsync() 保存所有的数据到磁盘中。检查所有的系统调用的返回结果来避免错误状况。

(3)安全性不同

大多数构建邮件服务器者都会选择Sendmail,公平地来讲Sendmail是一个不错的MTA (Mail Transfer Agent),最初开发时Eric Allman的设计考虑主要放在了邮件传递的成功性上。不幸的是,Sendmai开发时没有太多考虑Internet环境下可能遇到的安全性问题。Sendmail在大多数系统上只能以根用户身份运行,这就意味着任何漏洞都可能导致非常严重的后果,除了这些问题之外,在高负载的情况Sendmail运行情况不是很好。

Postfix则并不一定要以root的身份运行,而只需要一个主(master)程序以root身份运行,其生成进程来处理接入、发出及本地邮件投递工作。通过使用一系列模块部件,每个任务由一个单独的程序来运行(这样使审计变得容易一些)。例如发出邮件被卸载到一个队列目录,在这里“pick up"程序取到该邮件然后将邮件传递给“clean up"程序,其再将邮件传递给“trivial-rewrite",其负责处理邮件,最后若邮件目的是别的系统则将邮件传递给“smtp" 程序。而且相对于Sendmail来说Postfix也更容易设置chroot’ed环境。只要简单地通过编辑 master.cf(一般位于/etc/postfix内)文件即可实现,并且Postfix将运行chroot’ed,以限定在其定义的队列目录之下(通常位于/var/spool/postfix),同样可以在master.cf中对Postfix的单一模块设置进程限制。用户可以限制Postfix以哪个用户的身份运行,一般来说是以“postfix” 用户(概念上该用户和Apache的nobody类似)运行,该用户可以访问特定的队列目录。Postfix 其他的主要优点是起配置文件的清晰易懂性。

(4)扩展能力不同

Sendmail一个很突出的问题就是可扩展性和性能问题。例如用户若希望每天重新启动 Sendmail来实现自动更新配置文件(如为虚拟主机重定向邮件)就会出现问题。Sendmail生成新的进程来处理发送和接收邮件,这些进程会一直存在直到传输结束,之后Sendmail才能退出,这样你的脚本程序将不能正确地重启Sendmail。而对于Postfix,用户则只需要发出命令postfix reload即可,Postfix将会重新加载其配置文件。

综上所述,Postfix较Sendmail禾H Qmail都要先进、实用许多,不仅在安全性和和运行效率上解决了Sendmail的不足,同时在功能上保留和扩展了Sendmail所有主要功能,解决了Qmail 在功能上的欠缺。而且在工作机制和体系结构中进行了大的改进,进一步提高了系统的性能,改善了Sendmail的扩展能力。基于这种原因,笔者建议在UNIX和Linux系统下选择使用Postfix 作为邮件服务器系统。使用其他的MTA替代Sendmail是一件非常麻烦的事情,用户往往又要花大量的时间去熟悉新的MTA的配置和使用。而使用Postfix,你可以利用很多已有的配置文件,如(access、aliases、virtusertable等),只需要简单地在master.cf中定义一下即可。此外, Postfix在行为上也很像Sendmail,用户可以使用Sendmail命令来启动Postfix。

除了上面三节介绍的Sendmail、Qmail和Postfix三个MTA外,在UNIX和Linux系统中还有像Smail、Post.Office、the Sun Intemet Mail Server(SIMS)、MMDF、CommuniGate、 PMDF、Netscape Messaging Server、Obtuse smtpd/smtpfwdd、Intermail、MD Switch等这样的商业或者免费的MTA可以选择。

友情提示:如果您对北大青鸟的学费、课程、就业有疑问,可以 和我们沟通!

网络工程师学院

入门
IT动态
互联网
攒机宝典
常用软件
办公软件
平面动画
网络
Cisco
设备
存储
解决方案
系统
Windows
Linux
服务器
病毒
攻防技术
数据库
Mysql
Oracle
MSsql
程序
C
Java
.Net
Web开发
电子书
TCP/IP详解
交换路由
网络技术
安全防护
系统知识
程序开发
认证考题
专题
系统设计
拓扑结构设计
体系结构设计
网络设备选型
网络系统方案
>>查看更多北大青鸟就业合作

网络工程师培训中心北京北大青鸟培训昌平校区 关于北大青鸟 联系我们 招聘信息 中心地址

©2008 北京北大青鸟(志远讯杰)授权培训中心