Linux環(huán)境下郵件服務(wù)器軟件的分析比較 |
發(fā)布時(shí)間: 2012/8/14 11:55:19 |
幾年以前,Linux環(huán)境下可以選擇的可以免費(fèi)郵件服務(wù)器軟件只有Sendmail,但是由于Sendmail的缺陷,一些開(kāi)發(fā)者先后開(kāi)發(fā)了若干種其他的郵件服務(wù)器軟件。當(dāng)前,運(yùn)行在Linux環(huán)境下免費(fèi)的郵件服務(wù)器,或者稱(chēng)為MTA(Mail Transfer Agent)有若干種選擇,比較常見(jiàn)的有Sendmail、Qmail、Postfix、exim及Zmailer等等。本文希望通過(guò)對(duì)幾種影響相對(duì)來(lái)說(shuō)比較大的主流Linux環(huán)境下的MTA的特點(diǎn)進(jìn)行闡述,并對(duì)其優(yōu)缺點(diǎn)一一金星分析比較,使用戶(hù)在選擇Linux環(huán)境下的免費(fèi)MTA時(shí)有一個(gè)選擇的依據(jù)。
Postfix Postfix是一個(gè)由IBM資助下由Wietse Venema 負(fù)責(zé)開(kāi)發(fā)的自由軟件工程的一個(gè)產(chǎn)物,其目的是為用戶(hù)提供除sendmail之外的郵件服務(wù)器選擇。Postfix力圖做到快速、易于管理、提供盡可能的安全性,同時(shí)盡量做到和sendmail郵件服務(wù)器保持兼容性以滿(mǎn)足用戶(hù)的使用習(xí)慣。起初,Postfix是以VMailer這個(gè)名字發(fā)布的,后來(lái)由于商標(biāo)上的原因改名為Postfix。 主要設(shè)計(jì)目標(biāo) Postfix工程的目標(biāo)是實(shí)現(xiàn)一個(gè)郵件服務(wù)器,提供給用戶(hù)除sendmail以外的選擇。其設(shè)計(jì)目標(biāo)包括: 性能, Postfix要比同類(lèi)的服務(wù)器產(chǎn)品速度快三倍以上,一個(gè)安裝Postfix的臺(tái)式機(jī)一天可以收發(fā)百萬(wàn)封信件。Postfix設(shè)計(jì)中采用了web服務(wù)器的的設(shè)計(jì)技巧以減少進(jìn)程創(chuàng)建開(kāi)銷(xiāo),并且采用了其他的一些文件訪(fǎng)問(wèn)優(yōu)化技術(shù)以提高效率,但同時(shí)保證了軟件的可靠性。 兼容性。Postfix設(shè)計(jì)時(shí)考慮了保持Sendmail的兼容性問(wèn)題,以使移植變的更加容易。Postfix支持/var[/spool] /mail, /etc/aliases, NIS, 及 ~/.forward等文件。然而Postfix為保證管理的簡(jiǎn)單性,所以沒(méi)有支持配置文件sendmail.cf。 安全和健壯性。Postfix設(shè)計(jì)上實(shí)現(xiàn)了程序在過(guò)量負(fù)載情況下仍然保證程序的可靠性。當(dāng)出現(xiàn)本地文件系統(tǒng)沒(méi)有可用空間或沒(méi)有可用內(nèi)存的情況時(shí),Postfix就會(huì)自動(dòng)放棄,而不是重試使情況變的更糟。 靈活性。Postfix結(jié)構(gòu)上由十多個(gè)小的子模塊組成,每個(gè)子模塊完成特定的任務(wù),如通過(guò)SMTP協(xié)議接收一個(gè)消息,發(fā)送一個(gè)消息,本地傳遞一個(gè)消息,重寫(xiě)一個(gè)地址等等。當(dāng)出現(xiàn)特定的需求時(shí),可以用新版本的模塊來(lái)替代老的模塊,而不需要更新整個(gè)程序。而且它也很容易實(shí)現(xiàn)關(guān)閉某個(gè)功能。 安全性。Postfix使用多層防護(hù)措施防范攻擊者來(lái)保護(hù)本地系統(tǒng),幾乎每一個(gè)Postfix守護(hù)進(jìn)程都能運(yùn)行在固定低權(quán)限的chroot之下,在網(wǎng)絡(luò)和安全敏感的本地投遞程序之間沒(méi)有直接的路徑—一個(gè)攻擊者必須首先突破若干個(gè)其他的程序,才有可能訪(fǎng)問(wèn)本地系統(tǒng)。Postfix甚至不絕對(duì)信任自己的隊(duì)列文件或IPC消息中的內(nèi)容以防止被欺騙。Postfix在輸出發(fā)送者提供的消息之前會(huì)首先過(guò)濾消息。而且Postfix程序沒(méi)有set-uid。 Postfix的一些特點(diǎn) 支持多傳輸域:sendmai支持在Internet, DECnet, X.400及UUCP之間轉(zhuǎn)發(fā)消息。 Postfix則靈活的設(shè)計(jì)為無(wú)須虛擬域(vistual domai)或別名來(lái)實(shí)現(xiàn)這種轉(zhuǎn)發(fā)。但是在早期的發(fā)布里僅僅支持STMP和有限度地支持UUCP,但對(duì)于我國(guó)用戶(hù)來(lái)說(shuō),多傳輸域的支持沒(méi)有什么意義。 虛擬域:在大多數(shù)通用情況下,增加對(duì)一個(gè)虛擬域的支持僅僅需要改變一個(gè)Postfix查找信息表。其他的郵件服務(wù)器則通常需要多個(gè)級(jí)別的別名或重定向來(lái)獲得這樣的效果。 UCE控制(UCE,unsolicited commercial email): Postfix能限制哪個(gè)主機(jī)允許通過(guò)自身轉(zhuǎn)發(fā)郵件,并且支持限定什么郵件允許接進(jìn)。Postfix實(shí)現(xiàn)通常的控制功能:黑名單列表、RBL查找、 HELO/發(fā)送者DNS核實(shí);趦(nèi)容過(guò)濾當(dāng)前沒(méi)有實(shí)現(xiàn)。 表查看: Postfix沒(méi)有實(shí)現(xiàn)地址重寫(xiě)語(yǔ)言,而是使用了一種擴(kuò)展的表查看來(lái)實(shí)現(xiàn)地址重寫(xiě)功能。表可以是本地 dbm或 db文件等格式。 Postfix是基于半駐留,互操作的進(jìn)程的體系結(jié)構(gòu),每個(gè)進(jìn)程完成特定的任務(wù),沒(méi)有任何特定的進(jìn)程衍生關(guān)系(父子關(guān)系)。而且,獨(dú)立的進(jìn)程來(lái)完成不同的功能相對(duì)于“單塊”程序具有更好的隔離性。此外,這種實(shí)現(xiàn)方式具有這樣的優(yōu)點(diǎn):每個(gè)服務(wù)如地址重寫(xiě)等都能被任何一個(gè)Postfix部件所使用,無(wú)須進(jìn)程創(chuàng)建等開(kāi)銷(xiāo),而僅僅需要重寫(xiě)一個(gè)地址,當(dāng)然并不是只有postfix采用這種方式。 Postfix是按照這種方式實(shí)現(xiàn)的:一個(gè)駐留主服務(wù)器根據(jù)命令運(yùn)行Postfix守護(hù)進(jìn)程,守護(hù)進(jìn)程完成發(fā)送或接收網(wǎng)絡(luò)郵件消息,在本地遞交郵件等等功能。守護(hù)進(jìn)程的數(shù)目由配置參數(shù)來(lái)決定的,并且根據(jù)配置決定守護(hù)進(jìn)程運(yùn)行的次數(shù)(re-used times),當(dāng)空閑時(shí)間到達(dá)配置參數(shù)指定的限度時(shí),自動(dòng)消亡。這種方法明顯地降低了進(jìn)程創(chuàng)建開(kāi)銷(xiāo),但是單個(gè)進(jìn)程之間仍然保持了良好的隔離性。 Postfix的設(shè)計(jì)目標(biāo)就是成為Sendmail的替代者。由于這個(gè)原因,Postfix系統(tǒng)的很多部分,如本地投遞程序等,可以很容易地通過(guò)編輯修改類(lèi)似inetd的配置文件來(lái)替代。 Postfix的核心是由十多個(gè)半駐留程序?qū)崿F(xiàn)的。為了保證機(jī)密性的原因,這些Postfix進(jìn)程之間通過(guò)Unix的socket或受保護(hù)的目錄之下的FIFO進(jìn)行通信。即使使用這種方法來(lái)保證機(jī)密性,Postfix進(jìn)程并不盲目信任其通過(guò)這種方式接收到的數(shù)據(jù)。 Postfix進(jìn)程之間傳遞的數(shù)據(jù)量是有限制的。在很多情況下,Postfix進(jìn)程之間交換的數(shù)據(jù)信息只有隊(duì)列文件名和接收者列表,或某些狀態(tài)信息。一旦一個(gè)郵件消息被保存進(jìn)入文件,其將在其中保存到被一個(gè)郵件投遞程序讀出。 Postfix采用一些通常的措施來(lái)避免丟失信息:在收到確認(rèn)以前通過(guò)調(diào)用flush和fsync()保存所有的數(shù)據(jù)到磁盤(pán)中。檢查所有的系統(tǒng)調(diào)用的返回結(jié)果來(lái)避免錯(cuò)誤狀況。 大多數(shù)構(gòu)建郵件服務(wù)器者都會(huì)選擇sendmail,公平的來(lái)講sendmail是一個(gè)不錯(cuò)的MTA(Mail Transfer Agent),最初開(kāi)發(fā)時(shí)Eric Allman的設(shè)計(jì)考慮主要放在了郵件傳遞的成功性。不幸的是,Sendmai開(kāi)發(fā)時(shí)沒(méi)有太多的考慮Internet環(huán)境下可能遇到的安全性問(wèn)題。 Sendmail在大多數(shù)系統(tǒng)上只能以根用戶(hù)身份運(yùn)行,這就意味著任何漏洞都可能導(dǎo)致非常嚴(yán)重的后果,除了這些問(wèn)題之外,在高負(fù)載的情況Sendmail 運(yùn)行情況不是很好。 安全 Postfix則并一定要以root的身份運(yùn)行,而只需要一個(gè)主(master)程序以root身份運(yùn)行,其生成進(jìn)程來(lái)處理接入、發(fā)出及本地郵件投遞工作。通過(guò)使用一系列模塊部件,每個(gè)任務(wù)由一個(gè)單獨(dú)的程序來(lái)運(yùn)行(這樣使審計(jì)變的容易一些)。例如發(fā)出郵件被卸載到一個(gè)隊(duì)列目錄,在這里 “pcikup”程序取到該郵件然后將郵件傳遞給“cleanup”程序,其再將郵件傳遞給“trivial-rewrite”,其負(fù)責(zé)處理郵件頭,最后若郵件目的是別的系統(tǒng)則將郵件傳遞給“smtp”程序。而且相對(duì)于Sendmail來(lái)說(shuō)Postfix也更容易設(shè)置chroot‘ed環(huán)境。只要簡(jiǎn)單地通過(guò)編輯master.cf(一般位于/etc/postfix內(nèi))文件即可實(shí)現(xiàn),并且Postfix將運(yùn)行chroot‘ed,以限定在其定義的隊(duì)列目錄之下(通常位于/var/spool/postfix),同樣可以在master.cf中對(duì)Postfix的單一模塊設(shè)置進(jìn)程限制。用戶(hù)可以限制 Postfix以哪個(gè)用戶(hù)的身份運(yùn)行,一般來(lái)說(shuō)是以“postfix”用戶(hù)(概念上該用戶(hù)和Apache的nobody類(lèi)似)運(yùn)行,該用戶(hù)可以訪(fǎng)問(wèn)特定的隊(duì)列目錄。Postfix其他的主要優(yōu)點(diǎn)是起配置文件的清晰易懂性。 本文出自:億恩科技【1tcdy.com】 服務(wù)器租用/服務(wù)器托管中國(guó)五強(qiáng)!虛擬主機(jī)域名注冊(cè)頂級(jí)提供商!15年品質(zhì)保障!--億恩科技[ENKJ.COM] |