wangb 发表于 2013-3-20 21:05:02

Linux邮件服务器Postfix,qmaill,Sendmail之比较

这是一篇介绍选择Linux邮件服务器的文章,看后感觉不错,原文太长,经过删减以后转过来,希望给大家也看看,多提意见。
Linux环境下的免费邮件服务器软件一般选择Sendmail,Postfix要比同类的服务器产品速度快三倍以上,一个安装Postfix的台式机一天可以收发百万封信件。Postfix支持 /var /mail, /etc/aliases, NIS, 及 ~/.forward等文件,但不支持配置文件sendmail.cf。Postfix设计上实现了程序在过量负载情况下仍然保证程序的可靠性。当出现本地文件系统没有可用空间或没有可用内存的情况时,Postfix就会自动放弃,而不是重试使情况变的更糟。Postfix使用多层防护措施防范攻击者来保护本地系统,Postfix在输出发送者提供的消息之前会首先过滤消息。而且Postfix程序没有set- uid。sendmai支持在Internet, DECnet, X.400及UUCP之间转发消息。 Postfix则灵活的设计为无须虚拟域(vistual domai)或别名来实现这种转发,在大多数通用情况下,增加对一个虚拟域的支持仅仅需要改变一个Postfix查找信息表。其他的邮件服务器则通常需要多个级别的别名或重定向来获得这样的效果。

sendmail是一个不错的MTA(Mail Transfer Agent),在大多数系统上只能以根用户身份运行,这就意味着任何漏洞都可能导致非常严重的后果,在高负载的情况Sendmail 运行情况也不是很好。Postfix则并一定要以root的身份运行,而只需要一个主(master)程序以root身份运行,其生成进程来处理接入、发出及本地邮件投递工作。通过使用一系列模块部件,每个任务由一个单独的程序来运行(这样使审计变的容易一些)。例如发出邮件被卸载到一个队列目录,在这里 “pcikup”程序取到该邮件然后将邮件传递给“cleanup”程序,其再将邮件传递给“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其他的主要优点是起配置文件的清晰易懂性。

   与Sendmail的比较如sendmail之类的邮件系统是按照一个单块的结构设计实现的,该“单块”程序实现所有的功能。但是这种结构容易出现一些致命的错误。而如qmail的邮件系统上使用一种分层次的结构,按照固定得顺序运行不同功能的子模块进程,执行完毕之后就将其释放。这种方法有良好的“绝缘”性,但是增加了进程创建开销和进程间通信开销。使用其他的MTA替代Sendmail是一件非常麻烦的事情,用户往往又要花大量的时间去熟悉新的MTA的配置和使用。而使用 Postfix,你可以利用很多以有的配置文件。如(access, aliases, virtusertable等等),只需要简单的在master.cf中定义一下即可。此外,Postfix在行为上也很象Sendmail,用户可以使用sendmail命令来启动Postfix。

在配置Postfix时可能会遇到一些问题。最典型的问题是向root用户发送邮件。Postfix一般不提高自身的权限(向root用户发送邮件所必须的)来投递邮件。用户需要在别名文件中为 root定义别名,如:root: someuser。这同样会对若干个邮件列表模块发生影响,特别是SmartList。一般来说实现邮件列表最好使用Majordomo,它易于配置。

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

另外,对于有数以万计的用户的邮件服务器来说,使用文件来存储如匹配用户发出邮件地址(例如bob发出的信的发信人修改为 [email protected])。对于大量用户来讲,该文件就会变的很巨大,从而影响系统的运行效率。而Postfix则可以和一个数据库后台集成起来(当前只支持MySQL)来存放其配置信息,数据库方式要比文件方式在可扩展性方面强大很多。

与Qmail的比较

Qmail的缺点就是配置方式和Sendmail不一致,不容易维护。Qmail在一个中等规模的系统可以投递大约百万封邮件,甚至在一台486一天上能处理超过10万封邮件,起支持并行投递。 Qmail支持邮件的并行投递,同时可以投递大约20封邮件。目前邮件投递的瓶颈在于SMTP协议,通过STMP向另外一台互联网主机投递一封电子邮件大约需要花费10多秒钟。 Qmail的作者提出了QMTP(Quick Mail Transfer Protocol)来加速邮件的投递,并且在Qmail中得到支持。Qmail的设计目标是在一台16M的机器上最终达到每天可以投递大约百万级数目的邮件。为了保证可靠性,Qmail只有在邮件被正确地写入到磁盘才返回处理成功的结果,这样即使在磁盘写入中发生系统崩溃或断电等情况,也可以保证邮件不被丢失,而是重新投递。

特别简单的虚拟域管理,甚至有一个第三方开发的称为vpopmail的add-on来支持虚拟POP域。使用这个软件包,POP3用户不需要具有系统的正式帐户。

Sendmail vs Qmail

首先:sendmail是发展历史悠久的MTA,Sendmail在可移植性、稳定性及确保没有bug方面有一定的保证。但是Internet上有很多资料是介绍如何攻击Sendmail的,这对于管理员来说是一个挑战。endmail有大量完整的文档资料,除了Sendmail的宝典:O‘Reilly‘s sendmail book written by Bryan Costales with Eric Allman以外,网络上有大量的tutorial、FAQ和其他的资源。这些大量的文档对于很好的利用Sendmail的各种特色功能是非常重要的。
Sendmail同时也有一些缺点,其特色功能过多而导致配置文件的复杂性,要掌握所有的配置选项是一个很不容易的事情。Sendmail在过去的版本中出现过很多安全漏洞,所以使管理员不得不赶快升级版本。而且Sendmail 的流行性也使其成为攻击的目标。如果你需要一个快速的解决方案如,一个安全的邮件网关,则Qmail是一个很好的选择。 Qmail和Sendmail的配置文件完全不同。而对于Qmail,其有自己的配置文件,配置目录中包含了5-30个不同的文件,各个文件实现对不同部分的配置(如虚拟域或虚拟主机等)。这些配置说明都在man中有很好的文档,但是Qmail的代码结构不是很好。Qmail要比Sendmail小很多,其缺乏一些现今邮件服务器所具有的特色功能。如不象Sendmail,qmail不对邮件信封的发送者的域名进行验证,以确保域名的正确性。自身不提供对RBL的支持,而需要add-on来实现。,而Sendmail支持RBL。同样Qmail不能拒绝接收目的接收人不存在信件,而是先将邮件接收下来,然后返回查无此用户的的邮件。Qmail最大的问题就出在发送邮件给多个接收者的处理上。若发送一个很大的邮件给同一个域中的多个用户,Sendmail将只向目的邮件服务器发送一个邮件拷贝。而Qmail将并行地连接多次,每次都发送一个拷贝给一个用户。若用户日常要发送大邮件给多个用户,使用Qmail将浪费很多带宽。可以这么认为:Sendmail优化节省带宽资源,Qmail优化节省时间。

Qmail的add-ons比Sendmail要少一些。一般来说对于经验稍微少一些的管理员,选择Qmail相对要好一些。Qmail要简单一些,而且其特色功能能满足一般用户的需求。Sendmail类似于office套件,80%的功能往往都不被使用。这就使Qmail在一些场合可能被更受欢迎一些,其具有一些Sendmail所没有的更流行和实用的特色功能,如:Qmail具有内置的pop3支持。Qmail同样支持如主机或用户的伪装、虚拟域等等。Qmail的简单性也使配置相对容易一些。

Qmail被认为相对于Sendmail更加安全和高效,运行Qmail的一台pentium机器一天可以处理大约200,0000条消息。
sendmail有很多的商业支持,而且由于大量的用户群,在互联网上有大量的潜在技术支持。而Qmail只有很有限的技术支持。有家公司 inter7.com提供对Qmail的支持,该公司同样提供了免费的add-ons,包括一个基于web的管理工具-QmailAdmin及一个通过 vpopmail的对虚拟域的支持,甚至具有一个基于web的客户借接口—SqWebMail。

Qmail还具有一些其他的缺憾。如它不是完全遵从标准,它不支持DSN,作者认为DSN是一个即将消亡的技术,而Qmail的VERP可以完成同样的工作,而又不象DSN依赖于其他主机的支持。Qmail另外一个问题是其不遵从支持7bit系统标准,而每次都发送8bit。若邮件接收一方不能处理这种情况,就会出现邮件乱码的情况。

从安全性来讲,Sendmail要比Qmail差一些,Sendmail在发展中出现过很多很著名的安全漏洞;而Qmail相对要短小精悍,但是仍然提供了基本的STMP功能。








河小马 发表于 2013-3-20 21:09:14

Qmail 应该说在开源中是最NB的了gmail 我记得是基于qmail

很多商业软件也是基于qmail的, 有兴趣的可以看下我写在email 区的那个ESP, robomail

就是基于Qmail, 一个liencse 要近20k 刀

一小时可以到200w,当然和你的策略有关

rea2010 发表于 2013-3-23 17:55:29

好牛呀。

aabbccli 发表于 2013-4-2 12:20:44

目前自架的邮件服务器也是用POSTFIX

杨二二 发表于 2013-4-8 01:42:19

河小马 发表于 2013-3-20 21:09 static/image/common/back.gif
Qmail 应该说在开源中是最NB的了gmail 我记得是基于qmail

很多商业软件也是基于qmail的, 有兴趣的可以 ...

河小马,好厉害,我一定要努力学习。

jackywang 发表于 2013-4-12 14:27:56

:victory:学习了~~即将进入email marketing领域,目前已架POSTFIX

adouer 发表于 2013-4-13 20:31:04

学习了,目前正在努力向这方向靠:)

Danezhang 发表于 2013-5-4 19:37:50

河小马 发表于 2013-3-20 21:09 static/image/common/back.gif
Qmail 应该说在开源中是最NB的了gmail 我记得是基于qmail

很多商业软件也是基于qmail的, 有兴趣的可以 ...

通信是两端的,流量和并发量 由较低的一端 来决定的。
单机一小时处理200w不是什么难事。
前段时间还看到吴洪声说DNSPOD的单机每秒700w次请求(10G网卡)
他那个应该是放在kernel,挂在netfilter上的。
5年前,XX公司测试某款10G网卡性能,就能达到每秒300w次请求。(UDP echo)

具体到邮件营销,一般team 一天能有200w任务就不错了。
以上数据,时间久了,记不清,可能有出入。

河小马 发表于 2013-5-4 20:56:56

Danezhang 发表于 2013-5-4 19:37 static/image/common/back.gif
通信是两端的,流量和并发量 由较低的一端 来决定的。
单机一小时处理200w不是什么难事。
前段时间还看到 ...

能处理 200w 是不是难事

和 什么tcp 请求的没有什么关系

更多的取决于数据库的读取等等

Danezhang 发表于 2013-5-4 22:21:32

本帖最后由 Danezhang 于 2013-5-4 22:24 编辑

河小马 发表于 2013-5-4 20:56 static/image/common/back.gif
能处理 200w 是不是难事

和 什么tcp 请求的没有什么关系

:)没错,整个系统的瓶颈是数据库,网络的速度大约是本次磁盘的(SAS&SATA)的10倍。

其实数据不是超过10亿级别的话,机器内存能上到4G,如果能放到redis这样RAMDB,速度会有保证的,前提是把key设计好,免得磁盘IO暴增,机器整体性能会大降。

河马兄,我是新人,以后多多向您请教了:handshake

PS:对大多数team来说,发信的速度应该不是瓶颈,瓶颈是像我这样的,只会一点coder,对业务是两眼一抹黑,呜呜。

河小马 发表于 2013-5-4 22:33:26

Danezhang 发表于 2013-5-4 22:21 static/image/common/back.gif
没错,整个系统的瓶颈是数据库,网络的速度大约是本次磁盘的(SAS&SATA)的10倍。

其实数据不是超过10 ...

理论上说是可以,但是实际来说,限制的不仅是 数据库的读取,更多的是 MTA 的能力 和 RAM

大部分的 MTA 都不具备高速 sending 的能力

当然这些还都都是理想情况下,实际情况中,还要看 本机的 IP, CPU 等等:lol

现在很少有人组建超级服务器的了,基本都是 服务器集群

YMVPS 发表于 2013-5-9 16:20:05

qmail is still used on some very high-volume sites

frankwng1985 发表于 2013-6-30 11:18:28

路过,谢谢分享

xee 发表于 2013-6-30 15:28:52

看来还是qmail最NB
以前做实验的时候配置过qmail,只会最基本最简单的东西

好想去邮件板块学习呀,可惜自己的权限还不够,加紧努力中

TMM 发表于 2013-8-28 22:51:28

标记一下
页: [1]
查看完整版本: Linux邮件服务器Postfix,qmaill,Sendmail之比较