圖文并茂 Postfix后臺(tái)如何工作
本節(jié)將主要討論每個(gè)服務(wù)在它自己的環(huán)境中如何工作。需要注意的是,帶數(shù)字的名稱代表Postfix的命令或服務(wù)程序,不帶數(shù)字的名稱代表Postfix的郵件隊(duì)列。
常駐內(nèi)存的服務(wù)master(8)就像一個(gè)督察員,它隨時(shí)監(jiān)視Postfix郵件系統(tǒng)的狀況。一般情況下當(dāng)執(zhí)行“postfix start”命令時(shí)該進(jìn)程就啟動(dòng),直到系統(tǒng)關(guān)閉時(shí)才結(jié)束。要啟動(dòng)用于接收和投遞郵件的Postfix服務(wù)器進(jìn)程,它們必須依賴master(8) (必須先啟動(dòng)master進(jìn)程),或者接收和投遞的服務(wù)器進(jìn)程由于某些原因需要重新啟動(dòng),它們也必須依賴于master進(jìn)程。在master.cf配置文件中指定的用于強(qiáng)制限定服務(wù)進(jìn)程個(gè)數(shù)的選項(xiàng)(參數(shù))也必須依賴master(8)進(jìn)程。下圖簡(jiǎn)單表示了Postfix啟動(dòng)時(shí)后臺(tái)程序啟動(dòng)的層次關(guān)系,圖中只列出了郵件處理的后臺(tái)守護(hù)進(jìn)程。

anvil(8) 服務(wù)實(shí)現(xiàn)了客戶端連接和請(qǐng)求所有的smtpd(8)服務(wù)的速率限制,TUNING_README 文檔可以指導(dǎo)我們處理SMTP客戶端的一些不規(guī)范行為(例如并發(fā)發(fā)送郵件等惡意行為)。anvil(8)服務(wù)是在Postfix 2.2 之后的版本中才加入的功能。

bounce(8)、defer(8) 和 trace(8) 服務(wù)安照每封郵件一個(gè)日志文件的方式分別維護(hù)著它們各自的隊(duì)列目錄樹,這些信息將用于通知發(fā)送者(sender)郵件是否已經(jīng)被投遞出去。
trace(8)服務(wù)用于支持(跟蹤)Postfix 的 “sendmail -bv”和 “sendmail -v”命令所產(chǎn)生的關(guān)于Postfix如何投遞郵件的報(bào)告信息。該功能是在Postfix 2.1之后的版本中加入的。關(guān)于trace(8) 服務(wù)的更多信息,請(qǐng)參考:DEBUG_README 。

flush(8) 服務(wù)維護(hù)每個(gè)目的地址日志,并且實(shí)現(xiàn)了ETRN(Extended TuRN的縮寫,是SMTP協(xié)議的一個(gè)擴(kuò)展,允許兩臺(tái)計(jì)算機(jī)在一個(gè)TCP連接中進(jìn)行雙向郵件傳輸。) 和 "sendmail -qRdestination" 兩種功能,關(guān)于ENTR請(qǐng)參考:ETRN_README文檔。 flush(8) 服務(wù)使得被選中的隊(duì)列文件可以從 deferred queue (延遲隊(duì)列)返回到 incoming queue (入口隊(duì)列)以便請(qǐng)求繼續(xù)投遞。flush(8) 服務(wù)在Postfix 1.0之后的版本中被加入。

proxymap(8) 服務(wù)為Postfix進(jìn)程提供只讀表格的查詢服務(wù)(以只讀方式打開表格), 這一功能可以越過(guò)chroot的限制,并且在多進(jìn)程中通過(guò)共享已經(jīng)打開的一個(gè)表格的數(shù)據(jù),從而減少了同一表格被打開的數(shù)量。
scache(8) 服務(wù)為Postfix的smtp(8)客戶維護(hù)連接緩存。當(dāng)一個(gè)被選中的目標(biāo)的連接緩存被開啟時(shí),smtp(8) 客戶不必在一封郵件傳輸完后立即斷開連接,而是將該連接送入連接緩存服務(wù)器以便保持客戶端與服務(wù)器的連接,smtp(8) 客戶繼續(xù)發(fā)出其它的郵件投遞請(qǐng)求,直到限定的時(shí)間到達(dá)才被斷開連接(同時(shí)該連接從連接緩存服務(wù)器中清出)。在連接緩存被保存期間內(nèi),smtp(8)進(jìn)程可以隨時(shí)請(qǐng)求scache(8)服務(wù)使用被緩存的連接進(jìn)行其它的郵件投遞工作,而不必從新與服務(wù)器建立連接。為安全起見(jiàn),Postfix限定了連接可以被緩存(重用)的時(shí)間。
當(dāng)我們投遞郵件到一個(gè)多郵件服務(wù)器的目的地址時(shí),連接緩存可以幫助我們避開那些沒(méi)有響應(yīng)的服務(wù)器,同時(shí)也提高了郵件的投遞速度。

showq(8)服務(wù)列出Postfix的隊(duì)列狀態(tài)。該服務(wù)為 mailq(1) 和 postqueue(1) 命令工作。

spawn(8)服務(wù)在客戶執(zhí)行基于socket或FIFO請(qǐng)求時(shí)運(yùn)行其它非Postfix命令,命令的標(biāo)準(zhǔn)輸入、標(biāo)準(zhǔn)輸出和錯(cuò)誤輸出都直接發(fā)送到通訊終端。關(guān)于spawn(8)服務(wù)的使用可以在 SMTPD_POLICY_README 文檔中看到一些實(shí)例。
tlsmgr(8) 服務(wù)在 Postfix smtp(8) 客戶或 smtpd(8) 服務(wù)開啟TLS功能時(shí)運(yùn)行,該進(jìn)程有兩重責(zé)任:
維護(hù) 隨機(jī)數(shù)(PRNG)作為 Postfix smtp(8) 客戶或 smtpd(8) 服務(wù)進(jìn)程的TLS引擎的種子值,PRNG的狀態(tài)被定期地存入到一個(gè)文件,當(dāng) tlsmgr(8) 啟動(dòng)時(shí)會(huì)讀取該文件。
維護(hù) Postfix smtp(8) 客戶或 smtpd(8) 服務(wù)器的TLS會(huì)話的密鑰緩存。,被保存的會(huì)話密鑰通過(guò)減少TSL會(huì)話過(guò)程中的運(yùn)算量提高了系統(tǒng)的性能。
TSL的支持在Postfix 2.2 以后的版本中已經(jīng)加入,關(guān)于Postfix TSL的實(shí)現(xiàn)請(qǐng)參考:TLS_README 文檔。

verify(8)服務(wù)在smtpd(8)服務(wù)接受一封郵件前交驗(yàn)它的發(fā)送者(sender)和接受收者地址是否存在(可用的)。 verify(8)服務(wù)通過(guò)從投遞代理或者隊(duì)列管理器往Postfix 隊(duì)列發(fā)送消息來(lái)校驗(yàn)用戶是否可用。關(guān)于該程序的描述,請(qǐng)參:ADDRESS_VERIFICATION_README 文檔。該服務(wù)在Postfix 2.1 之后的版本中加入。

【編輯推薦】