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

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

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

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

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

showq(8)服務列出Postfix的隊列狀態。該服務為 mailq(1) 和 postqueue(1) 命令工作。

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

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

【編輯推薦】