後綴
Postfix是由IBM資助的自由軟件項目的產品,由Wietse Venema開發。其目的是為用戶提供除sendmail之外的郵件服務器選擇。Postfix盡量做到快速、易管理、盡可能提供安全性,同時盡量保持與sendmail郵件服務器的兼容性,以滿足用戶的使用習慣。起初Postfix是以VMailer的名字發布的,後來因為商標原因改名為Postfix。
主要設計目標
Postfix項目的目標是實現壹個郵件服務器,可以為用戶提供sendmail以外的選項。其設計目標包括:
性能。Postfix比同類服務器產品快三倍以上,壹臺裝有Postfix的臺式機壹天可以收發幾百萬封信件。Postfix設計采用了web服務器的設計技巧來減少進程創建的開銷,並采用其他文件訪問優化技術來提高效率,但同時保證了軟件的可靠性。
兼容性。Postfix的設計考慮到了Sendmail的兼容性,以便於移植。Postfix支持/var [/spool]/mail、/etc/aliases、NIS和~/.forward等文件,但為了保證管理的簡單性,Postfix不支持配置文件sendmail.cf。
安全性和穩健性。Postfix旨在確保程序在過載情況下的可靠性。當本地文件系統中沒有空閑空間或內存時,Postfix會自動放棄,而不是再次嘗試,使情況變得更糟。
靈活性。Postfix由十多個小的子模塊組成,每個子模塊完成壹個特定的任務,比如通過SMTP協議接收消息、發送消息、本地傳遞消息、重寫地址等等。當特定需求出現時,舊的模塊可以被新版本的模塊替換,而無需更新整個程序。而且關閉壹個功能很容易。
安全。Postfix使用多層保護措施來防止攻擊者保護本地系統。幾乎每個Postfix守護進程都可以運行在固定的低權限chroot下,網絡和安全敏感的本地交付程序之間沒有直接的路徑——攻擊者必須突破其他幾個程序才能訪問本地系統。Postfix甚至不絕對信任自己的隊列文件或IPC消息的內容,以防止被欺騙。後綴是出口⑺┑?⒅?壹條紫色的裙子?訴訟?ⅰ6?Ostfix程序沒有set-uid。
後綴的壹些特征
支持多傳輸域:sendmai支持在Internet、DECnet、X.400和UUCP之間轉發消息。Postfix被靈活地設計來實現這種無需虛擬域名或別名的轉發。不過,在早期版本中,僅支持STMP和UUCP,但對於中國用戶來說,多傳輸域的支持毫無意義。
虛擬域:在大多數情況下,只需要改變壹個後綴查找信息表來增加對虛擬域的支持。其他郵件服務器通常需要多級別名或重定向來達到這種效果。
UCE(不請自來的商業郵件):Postfix可以限制允許哪個主機通過自己轉發郵件,並支持限制允許接收哪些郵件。Postfix實現了通常的控制功能:黑名單列表、RBL查找和HELO/發送者DNS驗證。基於內容的過濾目前尚未實現。
表視圖:Postfix沒有實現地址重寫語言,而是使用擴展的表視圖來實現地址重寫功能。該表可以是本地dbm或db文件的格式。
Postfix體系結構及其與Sendmail的比較
Postfix是基於半駐留、可互操作的進程的架構,每個進程完成壹個特定的任務,沒有任何特定的進程衍生關系(父子關系)。此外,完成不同功能的獨立進程比“單片”程序具有更好的隔離性。此外,這種實現的優點在於,每個服務(如地址重寫)都可以由任何後綴組件使用,而沒有進程創建的開銷,只需要重寫壹個地址。當然,後綴並不是唯壹的方法。
Postfix是這樣實現的:壹臺駐留的主機服務器根據命令運行Postfix守護進程,守護進程完成發送或接收網絡郵件消息、本地提交郵件等功能。守護程序的數量由配置參數決定,守護程序運行的次數由配置決定。當空閑時間達到配置參數指定的限制時,它們將自動死亡。這種方法明顯減少了進程創建的開銷,但仍然保持了單個進程之間的良好隔離。
Postfix旨在成為Sendmail的替代方案。由於這個原因,Postfix系統的許多部分,比如本地交付程序,可以通過編輯和修改類似於inetd D的配置文件來輕松替換。
Postfix的核心由十幾個半駐留程序實現。為了保密,這些後綴進程在受保護的目錄下通過Unix socket或FIFO相互通信。即使使用這種方法來確保機密性,後綴進程也不會盲目地信任它以這種方式接收的數據。
後綴進程之間傳遞的數據量是有限制的。在許多情況下,Postfix進程之間交換的唯壹數據信息是隊列文件名和收件人列表,或者壹些狀態信息。壹旦郵件保存到文件中,它將被保存在文件中,直到被郵件傳遞程序讀取。
Postfix采取了壹些常用的措施來避免丟失信息:在收到確認之前,通過調用flush和fsync()將所有數據保存到磁盤。檢查所有系統調用的返回結果,以避免出現錯誤情況。
大多數構建郵件服務器的人都會選擇sendmail。公平地說,sendmail是壹個很好的MTA(郵件傳輸代理)。在最初的開發階段,Eric Allman的設計考慮主要集中在郵件傳遞的成功上。不幸的是,Sendmai的開發沒有考慮到在互聯網環境中可能遇到的安全問題。Sendmail在大多數系統上只能以root用戶身份運行,這意味著任何漏洞都可能導致非常嚴重的後果。除了這些問題,Sendmail在高負載下運行不佳。
安全的
Postfix不壹定要以root身份運行,只需要壹個主程序以root身份運行,其生成過程處理訪問、發送和本地郵件傳遞。通過使用壹系列模塊化組件,每個任務由壹個單獨的程序運行(這使得審計更容易)。例如,外發郵件被卸載到壹個隊列目錄中,在那裏“pcikup”程序接收郵件,然後將其傳遞給“cleanup”程序,後者又將郵件傳遞給負責處理郵件頭的“trivial-rewrite ”,如果郵件的目的地是另壹個系統,則最後將郵件傳遞給“smtp”程序。而且Postfix比Sendmail更容易設置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,您可以使用許多現有的配置文件。例如(訪問、別名、虛擬表等。),只需要在master.cf中簡單定義即可另外,Postfix的行為類似於sendmail,用戶可以使用Sendmail命令啟動Postfix。
當然,用壹個軟件替換另壹個軟件需要解決具體問題。部分是因為Postfix的安全特性,妳在配置Postfix的時候可能會遇到壹些問題。最典型的問題是向根用戶發送郵件。Postfix壹般不會增加自己的權限(給root用戶發送郵件所必需的)來投遞郵件。用戶需要在別名文件中為root定義壹個別名,比如:root: someuser。這也將影響幾個郵件列表模塊,尤其是SmartList。壹般來說,最好用Majordomo來實現郵件列表,這樣比較容易配置。
Sendmail的壹個突出問題是可伸縮性和性能。比如用戶想每天重啟Sendmail自動更新自己的配置文件(比如為虛擬主機重定向郵件),就會出現問題。Sendmail生成新的進程來處理電子郵件的發送和接收。這些進程將壹直存在,直到傳輸結束,然後Sendmail可以退出,因此您的腳本程序將無法正確地重新啟動Sendmail。對於Postfix,用戶只需要發出命令Postfix reload,Postfix就會重新加載它的配置文件。
此外,對於具有數萬用戶的郵件服務器,文件用於存儲例如由匹配用戶發送的電子郵件地址(例如,由bob發送的信件的發送者被改變為sales@example.org)。對於大量用戶來說,文件會變得巨大,從而影響系統的運行效率。Postfix可以集成壹個數據庫後臺(目前只支持MySQL)來存儲其配置信息,數據庫模式在擴展性上比文件模式強大很多。
根據IBM的開源版權許可,用戶可以自由分發軟件進行二次開發。唯壹的限制是對Postfix的修改必須返回給IBM。因為IBM資助了Wietse的開發。
與Qmail的比較
Qmail的缺點是配置方式和Sendmail不壹致,不容易維護。而且Qmail的版權許可的意思很模糊,甚至沒有隨軟件發布。如果妳想發布妳的Qmail修改版本,妳必須得到我的許可。
Qmail qmail是由Dan Bernstein開發的可免費下載的MTA。其首個beta版0.70.7發布於1.24的1996,2月發布於1997的1.0。當前版本是1.03。
Qmail的特點
安全性為了驗證Qmail的安全性,Qmail的支持者甚至懸賞65438美元+0,000元尋找Qmail的安全漏洞。壹年後,獎金沒有被領取,而是捐給了自由軟件基金會。目前Qmail的作者也投入了500美元尋求Qmail的安全漏洞。
Speed mail在中等規模的系統中可以投遞約百萬封郵件,甚至a 486壹天可以處理超過65438+萬封郵件,支持並行投遞。Qmail支持並行郵件投遞,可以同時投遞20封左右的郵件。目前郵件傳遞的瓶頸在於SMTP協議。通過STMP向另壹臺互聯網主機發送壹封電子郵件大約需要10秒。Qmail的作者提出了QMTP(Quick Mail Transfer Protocol,快速郵件傳輸協議)來加速郵件傳遞,並在Qmail中得到支持。Qmail的設計目標是在16M的機器上每天投遞數百萬封郵件。
可靠性:為了保證可靠性,Qmail只在郵件被正確寫入磁盤時才返回處理成功的結果,這樣即使磁盤寫入出現系統崩潰或斷電,也能保證郵件不丟失,而是重新投遞。
特別簡單的虛擬域管理,甚至還有第三方開發的壹個叫vpopmail的插件支持虛擬POP域。有了這個軟件包,POP3用戶不需要有該系統的正式賬戶。
使用ezmlm支持用戶控制的郵件列表功能。
郵件用戶和系統賬戶是隔離的,為用戶提供郵件賬戶不需要為他們設置系統賬戶,增加了安全性。
Sendmail vs Qmail
首先:sendmail是壹款歷史悠久的MTA,目前的版本是8.10.2。當然,Sendmail在可移植性、穩定性、無bug方面都有壹定的保證。但是網上有很多攻擊Sendmail的帖子,這是管理員的噩夢。Sendmail在發展過程中產生了壹批經驗豐富的Sendmail管理員,Sendmail擁有大量完整的文檔。除了Bryan Costales與Eric Allman合著的經典《Sendmail:O ' Reilly’s Sendmail Book》之外,網上還有大量的教程、FAQ等資源。這些海量文檔對於用好Sendmail的各種特殊功能非常重要。但仙臺目前是壹個成熟的MTA。
當然,Sendmail也有缺點,功能太多,導致配置文件復雜。當然,使用m4宏生成配置文件要容易得多。但是,掌握所有的配置選項並不容易。之前版本的Sendmail存在很多安全漏洞,管理員不得不快速升級版本。而且Sendmail的流行使其成為攻擊的目標,有利也有弊:意味著可以快速發現安全漏洞,但也使Sendmail更加穩定和安全。另壹個問題是,默認情況下,Sendmail通常配置有最低限度的安全功能,這使得Sendmail容易受到攻擊。如果您使用Sendmail,您應該確保理解每個打開選項的含義和影響。壹旦理解了Sendmail的工作原理,安裝和維護Sendmail就變得非常容易了。通過Sendmail的配置文件,用戶可以滿足所有可以想象的需求。
Qmail是壹個選項,它在其設計和實現中特別考慮了安全問題。如果妳需要壹個快速的解決方案,比如壹個安全的郵件網關,Qmail是壹個不錯的選擇。Qmail和Sendmail的配置文件完全不同。對於Qmail,它有自己的配置文件,配置目錄包含5-30個不同的文件,每個文件實現不同部分的配置(如虛擬域或虛擬主機等。).這些配置說明在man中有很好的文檔記錄,但是Qmail的代碼結構不是很好。
Qmail比Sendmail小得多,而且缺少當今郵件服務器的壹些特殊功能。與Sendmail不同,qmail不驗證郵件信封發件人的域名,以確保域名的正確性。它本身不支持RBL,但需要附加組件才能實現。,並且Sendmail支持RBL。同樣,Qmail也不能拒絕接收目的收件人不存在的郵件,而是先接收郵件再退回沒有這個用戶的郵件。Qmail最大的問題在於向多個收件人發送電子郵件的處理。如果向同壹域中的多個用戶發送大型電子郵件,Sendmail只會向目標電子郵件服務器發送電子郵件的副本。而Qmail會並行連接多次,每次給壹個用戶發壹個副本。如果用戶每天向多個用戶發送大型郵件,使用Qmail會浪費大量帶寬。可以認為Sendmail優化節省了帶寬資源,Qmail優化節省了時間。如果用戶系統帶寬好,Qmail會有更好的性能,而如果用戶系統帶寬資源有限,發送大量郵件列表信息,Sendmail效率更高。Qmail不支持。轉發(。轉發在很多情況下對用戶非常有用);不要使用/var/spool/mail,而是將郵件存儲在用戶的主目錄中。以下是壹些使用Qmail不容易完成的任務。要使用Qmail完成這些任務,用戶可能需要自己實現或者使用第三方提供的不可靠模塊。
Qmail的源代碼比Sendmail更容易理解,這對於想要深入了解MTA機制的人來說是壹個優勢。Qmail在安全性方面也應該更加穩定。Qmail有很好的技術支持,但是使用不廣泛,有大量像Sendmail壹樣的管理員用戶。Qmail的安裝不像Sendmail那樣自動化,後者需要手動操作。此外,Qmail的文檔不如Sendmail完整和豐富。
Qmail的附加組件比Sendmail少。總的來說,對於經驗稍微少壹點的管理員來說,還是選擇Qmail比較好。Qmail更簡單,其特色功能可以滿足普通用戶的需求。Sendmail類似於office套件,80%的功能經常用不到。這使得Qmail在某些場合更受歡迎,它有壹些Sendmail沒有的更受歡迎和實用的功能,比如mail內置的pop3支持。Qmail還支持偽裝成主機或者用戶,虛擬域等等。Qmail的簡單性也使得配置相對容易。
Qmail被認為比Sendmail更安全有效。壹臺運行Qmail的奔騰機器壹天可以處理大約200,000條消息。
Qmail比其他MTA簡單很多,主要體現在1)其他MTA的郵件轉發、郵件別名和郵件列表都采用獨立的機制,而Qmail采用簡單的轉發機制,允許用戶處理自己的郵件列表(2)其他MTA都提供快速和不安全的郵件投遞機制和慢速隊列投遞機制;qmail的發送是由新郵件的出現觸發的,所以只有壹種投遞模式:快速排隊模式(3)其他MTA實際上都包含了特定版本的inetd來監控MTA的平均負載,而qmail設計了內部機制來限制系統負載,所以qmail-smtpd可以從系統的inet安全運行。
Sendmail有很多商業支持,而且因為用戶數量多,互聯網上也有很多潛在的技術支持。而Qmail只有有限的技術支持。壹家名為interface的公司為Qmail提供支持,該公司還提供免費的附加服務,包括壹個基於網絡的管理工具QmailAdmin,壹個通過vpopmail提供的虛擬域支持,甚至還有壹個基於網絡的客戶借貸界面SqWebMail。
Qmail還有其他壹些缺點。如果不完全符合標準,則不支持DSN。作者認為DSN是壹項即將消亡的技術,Qmail的VERP可以做同樣的工作,不像DSN要依賴其他主機的支持。Qmail的另壹個問題是,它不符合支持7位的系統標準,而是每次發送8位。如果收件人不能處理這種情況,郵件將會亂碼。
在安全性方面,Sendmail比Qmail更差,在Sendmail的發展過程中出現過很多著名的安全漏洞;Qmail相對簡短,但是它仍然提供了基本的STMP功能。而Qmail的代碼註釋更少。Qmail的壹個很好的特性是它支持可選的基於目錄的郵件存儲格式,而不是使用壹個大文件來存儲所有用戶的郵件。如果用戶的郵件服務器進行大量POP3服務,這種郵件存儲格式可以提高效率。但遺憾的是,Pine本身並不支持這種存儲格式,必要時可以使用壹些補丁來達到這個目的。
Qmail的優點是每個用戶都可以創建郵件列表,而不需要root用戶的許可。例如,用戶foo可以創建壹個名為foo-slashdot、foo-Linux和foo-chicks的郵件列表。為了提供更好的功能,有壹個叫ezmlm(EZ Mailing List Maker)的工具,可以支持Majordomo的各種功能,比如自動註冊、註銷、索引等,但是都是CLI驅動的。Qmail非常適合在小型系統中工作,壹般只支持少數用戶或者用於管理郵件列表。Qmail是快速簡單的郵件,當妳想要安全和易於配置時,它是最好的選擇;Qmail可以在兩個小時內完成配置,而Sendmail不壹定能在兩天內完成。
火箭郵件互動等。都是用qmail構建的。
茲邁勒
ZMailer是壹個高性能、多進程的Unix系統郵件程序。[按照X.400的說法,又名MTA],可以從下面的服務器ftp://ftp.funet.fi/pub/unix/mail/zmailer/.免費下載。它也是按照單片模式設計的。Hotmail等郵件系統都是用Zmailer構建的。
Exim Exim是劍橋大學開發的符合GPL的MTA,風格類似於Smail 3,但比Smail 3更完善。最新版本是3.15。它的主要站點是mercial email): Postfix可以限制允許哪個主機通過自己轉發郵件,並且支持限制允許接收什麽郵件。Postfix實現了通常的控制功能:黑名單列表、RBL查找和HELO/發送者DNS驗證。基於內容的過濾目前尚未實現。
表視圖:Postfix沒有實現地址重寫語言,而是使用擴展的表視圖來實現地址重寫功能。該表可以是本地dbm或db文件的格式。