溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

postfix架構(gòu)簡(jiǎn)介是什么

發(fā)布時(shí)間:2021-10-20 17:41:48 來(lái)源:億速云 閱讀:167 作者:柒染 欄目:大數(shù)據(jù)

postfix架構(gòu)簡(jiǎn)介是什么,相信很多沒(méi)有經(jīng)驗(yàn)的人對(duì)此束手無(wú)策,為此本文總結(jié)了問(wèn)題出現(xiàn)的原因和解決方法,通過(guò)這篇文章希望你能解決這個(gè)問(wèn)題。

postfix怎樣接收郵件

當(dāng)一封郵件進(jìn)入postfix系統(tǒng)時(shí),它的第一站是一個(gè)叫incoming的隊(duì)列。下圖展示了新郵件處理的主要流程,帶數(shù)字的表示命令或程序,不帶數(shù)字的表示隊(duì)列.

 trivial-
rewrite(8)





Network->smtpd(8) ^ || v

 \




Network->qmqpd(8)->cleanup(8)->incoming
 /




 pickup(8)<-maildrop


 ^
|





Local->sendmail(1)->postdrop(1)

  • 網(wǎng)絡(luò)上的郵件通過(guò)smtpd或qmqpd服務(wù)進(jìn)入postfix,這兩個(gè)服務(wù)會(huì)移除掉郵件的smtp或qmqp協(xié)議的封裝信息,對(duì)郵件進(jìn)行健全檢查來(lái)保護(hù)postfix,然后將發(fā)件人,收件人和郵件內(nèi)容提交給cleanup服務(wù)。可以通過(guò)配置smtpd來(lái)阻止那些不想要的郵件。

  • 通過(guò)sendmail命令可以從本地提交郵件給postfix,郵件通過(guò)postdrop命令進(jìn)入maildrop隊(duì)列,這個(gè)過(guò)程在postfix沒(méi)有運(yùn)行時(shí)也可以進(jìn)行。本地服務(wù)pickup會(huì)對(duì)本地提交的郵件進(jìn)行健全檢查,然后將發(fā)件人,收件人和郵件內(nèi)容提交給cleanup服務(wù)。

  • 從內(nèi)部來(lái)源的郵件會(huì)直接傳給cleanup(8)服務(wù),這些來(lái)源在上表中并沒(méi)有展示出來(lái),比如由local(8)轉(zhuǎn)發(fā)的郵件,delivery agent,由bounce(8)退回給sender的郵件,server,postmaster的通知郵件。

  • cleanup(8)實(shí)現(xiàn)了郵件進(jìn)入隊(duì)列前的最最后處理階段。它會(huì)補(bǔ)上缺失的From:和其他頭部信息,并將地址轉(zhuǎn)換為規(guī)范格式。此外,它還可以配置成對(duì)郵件內(nèi)容進(jìn)行輕量檢查和正則檢查。cleanup(8)將處理好的郵件變成一個(gè)文件交給incoming隊(duì)列,并能知隊(duì)列管理器有新郵件到達(dá)。

  • trivial-rewrite(8)將郵件地址重寫(xiě)成標(biāo)準(zhǔn)格式。當(dāng)前,postfix并沒(méi)有實(shí)現(xiàn)一種重寫(xiě)語(yǔ)言,但是通過(guò)lookup表可以實(shí)現(xiàn)很多重寫(xiě),此外還可以通過(guò)正則表達(dá)式來(lái)實(shí)現(xiàn)。

postfix怎么投遞郵件

一旦一封郵件進(jìn)入了incoming隊(duì)列就開(kāi)始了投遞流程,下表展示了postfix投遞郵個(gè)的整個(gè)過(guò)程:

trivial-
rewrite(8)
 smtp(8)->Network



/







 ^ || v-lmtp(8)->Network


/







incoming->active->qmgr(8)---local(8)->File, command
 ^ || v \




-virtual(8)->File




 deferred \




 pipe(8)->Command




  • 隊(duì)列管理器qmgr(8)是postfix進(jìn)行郵件投遞的心臟,它連接smtp(8),lmtp(8),local(8),virtual(8),pipe(8),discard(8),error(8)投遞代理,然后發(fā)送投遞請(qǐng)求投遞給多個(gè)收件人。discard和error代理比較特殊,它們會(huì)丟棄和回彈所有郵件,在上表中并沒(méi)有展示這兩個(gè)服務(wù)。隊(duì)列管理維護(hù)著一個(gè)小的active隊(duì)列,隊(duì)列里的郵件是將要進(jìn)行投遞的郵件。active隊(duì)列對(duì)于有可能會(huì)很大的incoming和deferred隊(duì)列來(lái)說(shuō)就像一個(gè)有限大小的窗口,這個(gè)窗口限制可以使得postfix不會(huì)因?yàn)殛?duì)列過(guò)大而將內(nèi)存用完。隊(duì)列管理器維護(hù)著一個(gè) deferred隊(duì)列保存那些不能投遞的郵件,這樣即使有大量的郵件積壓也不會(huì)影響正常隊(duì)列的訪問(wèn)。

  • trival-rewrite(8)將每一個(gè)收件人地址按本地和遠(yuǎn)程進(jìn)行分類。附加的路由信息可以通過(guò)transport(5)表指定。trival-rewrite不定期地查詢r(jià)elocated(5)表來(lái)判斷哪些收件人地址已經(jīng)改變,發(fā)給這些收件人的郵件將返回給發(fā)件人并加上說(shuō)明。

  • smtp(8)郵件發(fā)送客戶端會(huì)查詢一系列mx服務(wù)器作為目標(biāo)地址交將按優(yōu)先級(jí)排序,逐個(gè)嘗試這些服務(wù)器直到其中一個(gè)有響應(yīng)為止,然后按照協(xié)議組裝好收件人,發(fā)件人和郵件內(nèi)容,包括了將8-bit MIME轉(zhuǎn)換為7-bit編碼。

  • lmtp(8)客戶端使用類smtp協(xié)議,是一種為了投遞郵件而優(yōu)化過(guò)的協(xié)議。這種做法的好處是一個(gè)postfix可以對(duì)接多個(gè)郵件服務(wù)器,當(dāng)然一臺(tái)郵件服務(wù)器也可以對(duì)接同一個(gè)postfix。

  • local(8)代理能識(shí)別unix風(fēng)格,兼容qmail郵箱目錄文件,sendmail風(fēng)格的郵件等等。

  • virtual(8)代理是一個(gè)最簡(jiǎn)單的代理,只能投遞unix風(fēng)格和qmail格式的郵件。不過(guò),它可以為多個(gè)域名進(jìn)行投遞,所以特別適合在一臺(tái)機(jī)器上作為多個(gè)小域名的host。

  • pipe(8)郵寄者是一個(gè)與外部郵件處理系統(tǒng)對(duì)接的外發(fā)接口,兼容unix。

Postfix behind the scenes

  • master(8)是postfix郵件系統(tǒng)的監(jiān)控者,在postfix start命令時(shí)啟動(dòng),并伴隨著系統(tǒng)的整個(gè)運(yùn)行過(guò)程。它負(fù)責(zé)啟動(dòng)postfix的進(jìn)程來(lái)接收和投遞郵件,并在服務(wù)意外終止時(shí)重啟服務(wù),根據(jù)master.cf中的配置項(xiàng)來(lái)限制服務(wù)進(jìn)程的數(shù)量。

  • postfix架構(gòu)簡(jiǎn)介是什么

  • anvil(8)服務(wù)為smtpd服務(wù)實(shí)現(xiàn)了客戶端連接和請(qǐng)求頻率限制:

    • Network->smtpd(8)<->anvil(8)

  • bounce(8),defer(8),trace(8)每個(gè)服務(wù)都維護(hù)了一個(gè)自己的隊(duì)列目錄樹(shù),每封郵件對(duì)應(yīng)一個(gè)文件,postfix利用這些信息來(lái)發(fā)送“失敗“,”延遲“或”成功“這些投遞狀態(tài)通知給發(fā)件人。

  • cleanup(8)->qmgr(8)
    Postfix
    queue
    ->Delivery
    agents
    ^
    |
     |
    v
     |
    v
    (Non-)
    delivery
    notice
    <-bounce(8)
    defer(8)
    trace(8)
    <-Queue id,
    recipient,
    status
     ^ || v


     Per- 
    message
    logfiles



  • flush(8)服務(wù)為每個(gè)目標(biāo)維護(hù)日志。將延遲隊(duì)列中的郵件轉(zhuǎn)移到incoming隊(duì)列進(jìn)行投遞。

  •  incoming 

    deferred







     ^
    |







    smtpd(8)
    sendmail(1)
    postqueue(1)
    -Destination
    to flush
    ->flush(8)<-Deferred
    destination,
    queue id
    -Delivery
    agents,
    qmgr(8)
     ^ || v






     Per-dest-
    ination
    logs







  • proxymap(8)為postfix進(jìn)程提供了只讀和只寫(xiě)的表查詢服務(wù),這種方式避免了chroot的限制,查詢表可以在多個(gè)進(jìn)程共享,因此減少了表的打開(kāi)數(shù)量,并實(shí)現(xiàn)了單個(gè)進(jìn)程來(lái)更新表。

  • scache(8)服務(wù)為smtp進(jìn)程維護(hù)連接緩存,可以針對(duì)指定目標(biāo)開(kāi)啟連接緩存,為了安全起見(jiàn),postfix會(huì)對(duì)連接重用的次數(shù)進(jìn)行限制。

  • showq(8)服務(wù)可以列出posfix隊(duì)列狀態(tài),供mailq和postqueue命令使用。

  • spawn(8)服務(wù)運(yùn)行非postfix指令。

  • tlsmgr(8)服務(wù)在postfix為smtp和smtpd開(kāi)啟了TLS時(shí)運(yùn)行,它有兩個(gè)職責(zé):

    • 維護(hù)一個(gè)偽隨機(jī)數(shù)生成器生成種子供TLS引擎使用,生成器的狀態(tài)定期保存到一上文件,并在tlsmgr啟動(dòng)時(shí)讀取。

    • 維護(hù)TLS會(huì)話中的key的緩存,緩存key可以提高TLS會(huì)話的性能。

  • verify(8)服務(wù)在smtpd在接收郵件前驗(yàn)證發(fā)件人或收件人是否可投遞,驗(yàn)證服務(wù)先去地址驗(yàn)證緩存進(jìn)行查詢,如果沒(méi)有找到則向postfix隊(duì)列注入一個(gè)探測(cè)消息,由投遞代理或隊(duì)列管理器處理狀態(tài)更新。

  • postscreen(8)服務(wù)可以放在smtpd進(jìn)程前面,它的目標(biāo)是從網(wǎng)絡(luò)接收連接并判斷哪些smtp客戶端允許訪問(wèn)postfix。postscreen的目的是阻止垃圾郵件的發(fā)送者,它會(huì)維護(hù)一個(gè)臨時(shí)的白名單,白名單中的客戶端可以跳過(guò)檢測(cè)。

Postfix support commands

  • postfix,這個(gè)命令是用來(lái)啟動(dòng),關(guān)閉和重啟系統(tǒng)用的,是預(yù)留給超級(jí)用戶使用的。

  • postalias,用來(lái)維護(hù)aliases(5)類型數(shù)據(jù)庫(kù)。

  • postcat,用來(lái)展示隊(duì)列中的文件內(nèi)容,這是一個(gè)初級(jí)的工具,可能會(huì)被有更強(qiáng)大功能是命令取代。

  • postconf,展示或更新main.cf中的參數(shù)。

  • postdrop,一個(gè)郵個(gè)發(fā)送工具,將郵件放到maildrop隊(duì)列。

  • postkick,使得一些內(nèi)部通信管道可用,比如供shell腳本用。

  • postlock,提供了postfix兼容的郵筒鎖,比如供shell腳本用。

  • postlog,提供了postfix兼容的日志供shell腳本用。

  • postmap,維護(hù)了postfix查詢表,比如canonical(5),virtual(5)。

  • postmulti,為每一個(gè)postfix實(shí)例重復(fù)”postfix start“命令,并支持創(chuàng)建,刪除postfix實(shí)例。

  • postqueue,是享有特權(quán)的命令,供sendmail和mailq用來(lái)刷新或列出隊(duì)列用。

  • postsuper,用來(lái)維護(hù)postfix隊(duì)列,它移除舊的臨時(shí)文件,并移動(dòng)隊(duì)列文件到正確的目錄,這個(gè)命令在postfix啟動(dòng)和重啟時(shí)運(yùn)行。

看完上述內(nèi)容,你們掌握postfix架構(gòu)簡(jiǎn)介是什么的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI