在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之間,它們各自有一批忠心擁護者,選擇哪個都是可行的。基本上,Postfix作為一個較新的軟件,其影響力正在增加,有些原本使用Qmail的使用者,也開始轉向Postfix,這可能是因為Postfix的風格更通俗的原因。