在Internet中最常使用的工具可能就是电子邮件了,因此,建立一个站点所必须的一步工作就是构建一个安全、可靠的电子邮件系统。由于电子邮件是一种非常传统的工具,因此有非常多的软件可以用来达到这个目的,这里面包括从古老的uucp邮件到非常庞大的商业群件系统,如Lotus Domino Server,但使用最广泛的还是一种自由软件──sendmail,它支撑了当前Internet邮件系统的主体。Sendmail的不足
无论从使用的广泛程度,还是从代码的复杂程度来讲,sendmail都是一个非常优秀的软件。如果使用它来构建网站的电子邮件系统,基本上不必费心,因为几乎所有的Unix的缺省配置中都内置这个软件,只需要设置好操作系统,它就能立即运转起来。然而,Internet用户的要求更为苛刻,纷纷指出sendmail中包含的各个不足之处。
第一个重要的缺点是它的安全性较差,这是因为当其作者Eric Allman最初开始写作这个软件的时候,Internet的用户还很少,因而安全性并不没有得到大家的重视。由于邮件系统需要处理的是外部发送来的各种各样的信息,甚至包含一些恶意数据,然而sendmail在大多数系统中都是以root身份运行,一旦出现问题,就会对系统安全造成严重影响。在这种情况下,要防止出现安全问题,仅仅依赖程序本身是不可取的,应该从系统结构出发,使程序拥有的特殊权限限制到最小。
此外,也是由于其早期的Internet用户数量及邮件数量都相当小,Sendmail的系统结构并不适合较大的负载,对于高负载的邮件系统,需要对Sendmail进行复杂的调整。例如,通常情况下sendmail只启动一个进程顺序向外发送邮件,如果邮件较多时就要花费相当长的时间。
使用Sendmail还会遇到的另一个问题是它的设置相当复杂,对于使用缺省设置来收发电子邮件,问题并不存在。当管理员打算进行一些特殊设置,以便利用Sendmail提供的复杂邮件处理能力时,就不得不面对复杂的宏和正则表达式。虽然现在Sendmail使用了宏预处理程序m4使设置更易于理解一些,但是掌握Sendmail的设置仍然是对系统管理员的一大挑战。
使用Qmail替代Sendmail
为了解决sendmail的安全问题,整个系统结构需要重新设计。基本的原则是将系统划分为不同的模块,有负责接收外部邮件的,有管理缓冲目录中待发送的邮件队列的,有将邮件发送到远程服务器或本地用户的。Qmail就是按照这个原则进行的设计,它由多个不同功能的小程序组成,只有必要的程序才是setuid程序(即以root用户权限执行),这样就减少了安全隐患,并且由于这些程序都比较简单一些,因此就可以达到较高的安全性。
这种按照Unix思路的模块化设计方法也使得Qmail具备较高的性能,因为如果需要,Qmail可以启动某个模块的多个实例来完成同一个任务,例如启动多个发送程序同时向外发送邮件,这对于提供邮件列表服务的邮件系统是非常有益的。这种方式也使得Qmail要占用较大的网络带宽,如果带宽有限,效果反而不好,但在当前网络性能大幅度提高的情况下,这种方式是非常合适的。
Qmail还提供一些非常有用的特色来增强系统的可靠性,例如,它提出了Maildir格式的邮件存储方式,这使得通过网络文件系统NFS存取邮件成为可能。此外,Qmail还具备一些非常别致的特色,它不仅仅提供了与Sendmail兼容的方式来处理转发、别名等能力,还可以用以Sendmail完全不同的方式来提供这些功能。从它的编译安装方式、提供的扩展功能和源代码的风格,可以看出其作者Dan Bernstein是一个极具个性化的程序员。正因为如此,对于Qmail的某些方面,有着一些争论,例如有些人认为Qmail的安装设置并不易于理解,很容易让人糊涂,而另一些人的看法则相反。基本上这是因为Qmail提供解决问题的方式,和Sendmail不大相同的缘故,这样对那些不太熟悉Sendmail的邮件系统管理员,反而更容易接受Qmail一些。
另一种替换软件:Postfix
Postfix同样也是采用了模块化的方式,但与Qmail不同的是,Postfix使用了一个主控进程进行监控。Postfix在很多方面都考虑到了安全问题,它甚至不向root分发电子邮件,以避免以root身份读写文件或启动外部程序。考虑到它的作者Wietse Venema曾编写了著名的安全软件TcpWrapper,并是SATAN程序的合作人员之一,Postfix的安全性是非常值得信赖的。
同样,Postfix的性能也非常不错,甚至在Qmail作者自己进行的测试中也表明,Postfix的性能和Qmail基本相当。但Postfix占用的内存要大一些,这主要是由于Postfix和Qmail在系统结构上的差异造成的。
与Qmail不同,Postfix更着眼于作为Sendmail的直接替换,使用Postfix替换Sendmail却相当简单,因为Postfix使用的很多文件和Sendmail一致,只需要在配置文件中指明原有Sendmail配置文件的位置就可以了,Postfix甚至还提供了sendmail和mailq程序,以保持兼容性。基本上,可以直接从Sendmail转换为使用Postfix,而不需要额外的设置。Postfix提供的安装配置方式也相当简单,它使用中心化的配置文件和非常易理解的配置指令。
Postfix提供的一些强大的功能主要在于多种数据库表查询方式,例如它支持DB、DBM、passwd文件、正则表达式、MySQL数据库以及LDAP方式的查询,用于支持系统级的别名、虚拟主机等。虽然在Qmail中也能支持这些功能,但没有象Postfix那样统一、简洁。此外,更改Postfix的设置之后,也不需要重新启动整个系统,只需要使用postfix reload就能完全刷新配置,这也避免了丢失邮件的可能性。
事实上,除了Qmail和Postfix之外,还有很多种邮件系统,例如Smail、Exim等,然而毫无疑问Qmail和Postfix是其中最优秀的,也是Sendmail最有力的竞争者。此外,还有一些商业邮件服务器产品,但一般情况下,购买商业邮件服务器软件大部分是冲着其提供的服务或者是附加功能来的,例如群件产品通常带有很多额外功能用于办公环境等。
至于在Sendmail、Postfix和Qmail之间进行选择,基本上依赖于用户自己的偏好。有些人喜欢Qmail提供的复杂特色,而有的人希望对Sendmail的替换能简单一些,也有人不打算更换,而坚持使用Sendmail的最新版本。对于一个熟悉Unix系统而又愿意改善邮件系统性能和安全性的管理员,应该转换为使用Postfix或Qmail,除非对Sendmail非常熟悉而保持了特殊的感情。在Postfix和Qmail之间,它们各自有一批忠心拥护者,选择哪个都是可行的。不管选择哪种邮件系统核心,都需要选择过硬的专业电子邮件系统厂商提供完善的技术支持服务,除非您本身有强大过硬的技术力量,否则,您将面对的是一场恶梦.