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