郵件伺服器的基礎知識概述

科技小能手發表於2017-11-12
郵件伺服器中的協議:

SMTP:SMTP(Simple Mail Transfer Protocol)即簡單郵件傳輸協議,它是一組用於由源地址到目的地址傳送郵件的規則,由它來控制信件的中轉方式。SMTP協議屬於TCP/IP協議族,它幫助每臺計算機在傳送或中轉信件時找到下一個目的地。通過SMTP協議所指定的伺服器,就可以把E-mail寄到收信人的伺服器上了,整個過程只要幾分鐘。SMTP伺服器則是遵循SMTP協議的傳送郵件伺服器,用來傳送或中轉發出的電子郵件。 

在傳輸郵件過程中使用標準服務埠:25號埠
在linux環境下互動過程中:HELO是客戶向對方郵件伺服器發出的標識自己的身份的命令;MAILFROM命令用來表示傳送者的郵件地址;RCPT TO:標識接收者的郵件地址;DATA表示下面是郵件的資料部分,輸入完畢以後,以一個”.”開始的行作為資料部分的結束標識;QUIT表示退出這次會話,結束郵件傳送。 
SMTP的工作方式
首先傳送SMTP在接到使用者的郵件請求後,判斷此郵件是否為本地郵件,若是直接投送到使用者的郵箱,否則向dns查詢遠端郵件伺服器的MX紀錄,並建立與遠端接收SMTP之間的一個雙向傳送通道,此後SMTP命令由傳送SMTP發出,由接收SMTP接收,而應答則反方面傳送。一旦傳送通道建立,SMTP傳送者傳送MAIL命令指明郵件傳送者。如果SMTP接收者可以接收郵件則返回OK應答。SMTP傳送者再發出RCPT命令確認郵件是否接收到。如果SMTP接收者接收,則返回OK應答;如果不能接收到,則發出拒絕接收應答(但不中止整個郵件操作),雙方將如此重複多次。當接收者收到全部郵件後會接收到特別的序列,如果接收者成功處理了郵件,則返回OK應答即可。
具體實驗步驟這裡不詳加解析。。。

ESMTP:ESMTP (Extended SMTP),是擴充套件SMTP就是對標準SMTP協議進行的擴充套件。它與SMTP服務的區別僅僅是,使用SMTP發信不需要驗證使用者帳戶,而用ESMTP 發信時,伺服器會要求使用者提供使用者名稱和密碼以便驗證身份。驗證之後的郵件傳送過程與 SMTP 方式沒有兩樣。

POP3:POP3(Post Office Protocol 3)即郵局協議的第3個版本,它是規定個人計算機如何連線到網際網路上的郵件伺服器進行收發郵件的協議。它是因特網電子郵件的第一個離線協議標準,POP3協議允許使用者從伺服器上把郵件儲存到本地主機(即自己的計算機)上,同時根據客戶端的操作刪除或儲存在郵件伺服器上的郵件,而POP3伺服器則是遵循POP3協議的接收郵件伺服器,用來接收電子郵件的。POP3協議是TCP/IP協議族中的一員。本協議主要用於支援使用客戶端遠端管理在伺服器上的電子郵件。 
POP3使用標準預設埠:110號埠
POP3認證:
目前大多數POP客戶端和服務端都是採用ASCII碼來明文傳送使用者名稱和密碼,在認證狀態下服務端等待客戶端連線時,客戶端發出連線請求,並把由命令構成的user/pass使用者身份資訊資料明文傳送給服務端。
服務端確認客戶端身份以後,連線狀態由認證狀態轉入處理狀態,為了避免傳送明文口令的安全問題,有一種新的更為安全的認證方法,命名為APOP,使用APOP,口令在傳輸之前就被加密,當客戶端與服務端第一次建立連線時,POP3伺服器向客戶端傳送一個ASCII碼文字的問候,這個問候是由遺傳字元組成對每個客戶機是唯一的,內容一般都是當地時間之類的。然後客戶端把它的純文字口令附加到剛才接受的字串之後,接著計算出新的字串的MD5單出函式值的訊息資料,最後客戶機把使用者名稱和MD5加密後的訊息摘要作為APOP命令的引數一起傳送到伺服器。但是目前大多數windows上的郵件客戶端不支援APOP協議。
POP3雖然有認證但是很簡單。

IMAP4:IMAP4(Internet Message Access Protocol 4) 即 互動式資料訊息訪問協議第四個版本,它與POP3協議一樣也是規定個人計算機如何訪問網際網路上的郵件伺服器進行收發郵件的協議,但是IMAP4協議同POP3協議相比更高階。IMAP4協議支援客戶機線上或者離線訪問並閱讀伺服器上的郵件,還能互動式的操作伺服器上的郵件。IMAP4協議更人性化的地方是不需要像POP3協議那樣把郵件下載到本地,使用者可以通過客戶端直接對伺服器上的郵件進行操作(這裡的操作是指:線上閱讀郵件 線上檢視郵件主題 大小 發件地址等資訊)。使用者還可以在伺服器上維護自己郵件目錄(維護是指移動 新建 刪除 重新命名 共享 抓取文字 等操作)。IMAP4協議彌補了POP3協議的很多缺陷。本協議是用於客戶機遠端訪問伺服器上電子郵件,它是郵件傳輸協議新的標準。
IMAP4協議的預設埠:143號埠
IMAP4也支援ASCII碼明文傳輸密碼。 

SMTPS465埠是為SMTPS(SMTP-over-SSL)協議服務開放的,這是SMTP協議基於SSL安全協議之上的一種變種協議,它繼承了SSL安全協議的非對稱加密的高度安全可靠性,可防止郵件洩露。SMTPS和SMTP協議一樣,也是用來傳送郵件的,只是更安全些,防止郵件被黑客擷取洩露,還可實現郵件傳送者抗抵賴功能。防止傳送者傳送之後刪除已發郵件,拒不承認傳送過這樣一份郵件。

POP3S995埠是為POP3S(POP3-over-SSL)協議服務開放的,這是POP3協議基於SSL安全協議之上的一種變種協議,它繼承了SSL安全協議的非對稱加密的高度安全可靠性,可防止郵件洩露。POP3S和POP3協議一樣,也是用來接收郵件的,只是更安全些,防止郵件被黑客擷取洩露,還可實現郵件接收方抗抵賴功能。防止收件者收件之後刪除已收郵件,拒不承認收到過這樣一封郵件。

IMAPS993埠是為IMAPS(IMAP-over-SSL)協議服務開放的,這是IMAP協議基於SSL安全協議之上的一種變種協議,它繼承了SSL安全協議的非對稱加密的高度安全可靠性,可防止郵件洩露。IMAPS和IMAP協議一樣,也是用來接收郵件的,只是更安全些,防止郵件被黑客擷取洩露,還可實現郵件接收方抗抵賴功能。防止收件者收件之後刪除已收郵件,拒不承認收到過這樣一封郵件。

Open-Relay(開放轉發或匿名轉發)是指由於郵件伺服器不理會郵件傳送者或郵件接受者的是否為系統所設定的使用者,而對所有的入站郵件一律進行轉發(RELAY)的功能。通常,若郵件伺服器的此功能開放,則我們一般稱此郵件伺服器是Open-Relay的。


電子郵件系統有很多部分組成,各種各樣的代理服務看到令人實在眼花繚亂。下面主要和大家一起介紹一下電子郵件系統構成的其中五個代理,即郵件使用者代理MUA郵件傳送代理MTA郵件投遞代理MDA以及郵件獲取代理MRA郵件提交代理MSA
MUA:郵件使用者代理MUA(Mail User Agent)是用於傳送或許接收電子郵件的客戶端順序。MUA 也可以是一個順序或許腳原模擬了一個典型MUA 正在傳送或許接收Email 時的行為。MUA 正在傳送電子郵件時運用SMTP/ESMTP 協議來與一個MTA 對話,正在接收郵件時,運用POP3 協議或許IMAP4 協議。MUA還提供郵件編寫介面等功能。常用的MUA 客戶端軟體有Outlook、Outlook Express、Foxmail、ThunderBird、The Bat、mutt等。
Outlook Express是Microsoft(微軟)自帶的一種電子郵件,簡稱為OE,是微軟公司出品的一款電子郵件客戶端,也是一個基於NNTP協議的Usenet客戶端。微軟將這個軟體與作業系統以及Internet Explorer網頁瀏覽器捆綁在一起。
Foxmail郵件客戶端軟體,是中國最著名的軟體產品之一,是由華中科技大學(原華中理工大學)張小龍開發的一款優秀的國產電子郵件客戶端軟體,2005年3月16日被騰訊收購。新的Foxmail具備強大的反垃圾郵件功能。它使用多種技術對郵件進行判別,能夠準確識別垃圾郵件與非垃圾郵件。垃圾郵件會被自動分撿到垃圾郵件箱中,有效地降低垃圾郵件對使用者干擾,最大限度地減少使用者因為處理垃圾郵件而浪費的時間。
Thunderbird是由Mozilla瀏覽器的郵件功能部件所改造的郵件工具,使用 XUL 程式介面語言所設計,是專門為搭配 Mozilla Firefox 瀏覽器使用者所設計的郵件客戶端軟體,介面設計更簡潔、而且免安裝。 這款軟體非常優秀,目前官方最新版本為 9.0.1,早期版本有 2.0.0.24 和 3.1.17;2.x 和 3.1.x 系列的後臺資源佔用很低,適合配置不高的使用者;9.0.x 系列資源佔用較高但資料安全性有了很大提高,功能也更加豐富。 
mutt是linux下的一個email程式。Mutt 顯然是一個 Unix 的郵件程式,它跟一般的 Windows 郵件程式不同,它不是一個包羅永珍的大雜燴。你甚至會發現它根本不直接發出郵件,它從來不自己編輯郵件,它從來不自己對郵件進行加密和數字簽名……Mutt 更像一個檔案管理器,只不過它管理的是email。它的功能是藉助各個最強大的程式來實現的。

這些都是專用的郵件使用者代理,郵件使用者代理還可以幫我們發郵件(新建一個郵件–>填寫收件人,發件人,抄送給誰,內容–>確定直接可以傳送了)雖然操作很簡單但是無法瞭解到背後操作過程,而且都是無條件轉發和收取。現在大部分郵件伺服器都預設沒有開啟中繼功能。


除了MUA之外還有一個伺服器要裝上之後既能夠當做客戶端用的服務端又能夠提供smtp和smtpd這樣一個幫我們實現郵件傳遞的叫做MTA
MTA:郵件傳輸代理(Mail Transfer Agent) 作用是正在不同的主機之間傳送電子郵件,它運用SMTP 協議,罕見的MTA 效勞軟體有sendmail、qmail、Postfix、exim。MTA 接收來自MUA(Mail User Agent 郵件使用者代理)或許是其他MTA、MDA(MailDelivery Agent 郵件投遞代理)的郵件,它解析郵件頭來絕議郵件的接收者。一般,MTA 需求重寫郵件頭,然先查詢DNS 一定收件人信箱所正在的遠端主機,並經過網路傳送給其他MTA 或許MDA。目前比較流行的有這樣幾種:
sendmail:sendmail是最重要的最古老的郵件傳輸代理程式。它的安全性較差,這是因為當其作者Eric Allman最初開始寫作這個軟體的時候,Internet的使用者還很少,因而安全性並不沒有得到大家的重視。由於郵件系統需要處理的是外部傳送來的各種各樣的資訊,甚至包含一些惡意資料,然而sendmail在大多數系統中都是以root身份執行,一旦出現問題,就會對系統安全造成嚴重影響。在這種情況下,要防止出現安全問題,僅僅依賴程式本身是不可取的,應該從系統結構出發,使程式擁有的特殊許可權限制到最小。也是由於其早期的Internet使用者數量及郵件數量都相當小,Sendmail的系統結構並不適合較大的負載,對於高負載的郵件系統,需要對Sendmail進行復雜的調整。例如,通常情況下sendmail只啟動一個程式順序向外傳送郵件,如果郵件較多時就要花費相當長的時間。
qmail:Qmail具有安裝方便、安全性高、郵件結構合理、支援SMTP服務、佇列管理、郵件反彈、基於域名的郵件路由、SMTP傳輸、轉發和郵件列表、本地(郵件)傳送、POP3 服務等強大的功能而且效率非常之高。它已經逐漸替代傳統的Sendmail成為linux下郵件系統核心的主流選擇。為了解決 sendmail的安全問題,整個系統結構需要重新設計。基本的原則是將系統劃分為不同的模組,有負責接收外部郵件的,有管理緩衝目錄中待傳送的郵件佇列的,有將郵件傳送到遠端伺服器或本地使用者的。Qmail就是按照這個原則進行的設計,它由多個不同功能的小程式組成,只有必要的程式才是setuid程式(即以root使用者許可權執行),這樣就減少了安全隱患,並且由於這些程式都比較簡單一些,因此就可以達到較高的安全性。

這種按照Unix思路的模組化設計方法也使得Qmail具備較高的效能,因為如果需要,Qmail可以啟動某個模組的多個例項來完成同一個任務,例如啟動多個傳送程式同時向外傳送郵件,這對於提供郵件列表服務的郵件系統是非常有益的。這種方式也使得Qmail要佔用較大的網路頻寬,如果頻寬有限,效果反而不好,但在當前網路效能大幅度提高的情況下,這種方式是非常合適的。

Qmail還提供一些非常有用的特色來增強系統的可靠性,例如,它提出了Maildir格式的郵件儲存方式,這使得通過網路檔案系統NFS存取郵件成為可能。此外,Qmail還具備一些非常別緻的特色,它不僅僅提供了與Sendmail相容的方式來處理轉發、別名等能力,還可以用以Sendmail完全不同的方式來提供這些功能。從它的編譯安裝方式、提供的擴充套件功能和原始碼的風格,可以看出其作者DanBernstein是一個極具個性化的程式設計師。正因為如此,對於Qmail的某些方面,有著一些爭論,例如有些人認為Qmail的安裝設定並不易於理解,很容易讓人糊塗,而另一些人的看法則相反。基本上這是因為Qmail提供解決問題的方式,和Sendmail不大相同的緣故,這樣對那些不太熟悉 Sendmail的郵件系統管理員,反而更容易接受Qmail一些。

但是由於作者後期不在維護導致曇花一現,著實讓我們感到很失望。不過全球愛好者們還在繼續維護更新中。
postfix:postfix是Wietse Venema在IBM的GPL協議之下開發的MTA(郵件傳輸代理)軟體。安全性極佳,Postfix 同樣也是採用了模組化的方式,但與Qmail不同的是,Postfix使用了一個主控程式進行監控。Postfix在很多方面都考慮到了安全問題,它甚至不root分發電子郵件,以避免以root身份讀寫檔案或啟動外部程式。考慮到它的作者WietseVenema曾編寫了著名的安全軟體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就能完全重新整理配置,這也避免了丟失郵件的可能性。
Exim:Exim是基於GPL協議的開放原始碼軟體,由英國劍橋大學的Philip Hazel開發。Exim是一個MTA,負責郵件的路由,轉發和投遞。

Exim有兩種稱為Driver的元素:Router和Transport。Router對一個郵件地址進行操作,決定如何投遞,即交給那個Transport,或對地址進行轉換。Transport將郵件從Exim的佇列中投遞到目的地。Exim有本地和遠端兩種型別的Transport。郵件被Router成功處理後,交給Ttansport。如果一封郵件有多個收件人,它可能同時被多個不同的Transport處理。每個Router必須指定一個Transport,當Router執行成功時,即把郵件交給Transport來投遞。通過String Expansion,Exim幾乎有了無限的擴充套件能力,實現無限複雜的需要。郵件系統管理員可以根據自己的需要,設計相應的資料格式,然後通過String Expansion進行轉換和判斷。
courier:Courier-MTA 是一個優秀的電子信件系統,功能上它遠比Qmail、 Postfix 等我們已經熟知的系統完整,包含了 ESMTP (含身份認證)、 POP3、 IMAP、 傳真、網頁信箱介面、保密通訊 (SSL 和 TLS 涵蓋 SMTP、 POP3、 IMAP)、多種使用者資料庫 (UNIX 作業系統的使用者資料檔案 (通過 PAM(3))、Berkeley DB、LDAP、MySQL、PostgreSQL)。而它也吸收了先前信件系統的優點。Courier 中的信件過濾器 maildrop、IMAP 伺服器元件還常被與其它電子信件系統 (如Postfix) 配合使用。
Exchange Server:Microsoft Exchange Server 是個訊息與協作系統。Exchange server可以被用來構架應用於企業、學校的郵件系統或免費郵件系統。它還是一個協作平臺。你可以在此基礎上開發工作流,知識管理系統,Web系統或者是其他訊息系統。 是一個主面的Intranet協作應用伺服器,適合有各種協作需求的使用者使用。Exchange Server協作應用的出發點是業界領先的訊息交換基礎,Exchange Server提供了包括從電子郵件、會議安排、團體日程管理、任務管理、文件管理、實時會議和工作流等豐富的協作應用,而所有應用都可以從通過Internet瀏覽器來訪問。

MDA:郵件投遞代理(Mail Deliver Agent)

許多郵件傳遞代理都有自帶的郵件投遞代理maildrop是一個負責本地郵件並且包含郵件過濾語言的MDA工具,maildrop首先從標準輸入讀取E-mail資訊,如果檔案/etc/maildroprc存在,郵件投遞或郵件過濾將從/etc/maildroprc中讀出。maildrop的投遞/過濾指令可能把資訊儲存在一個特殊的mailbox,或者丟棄它,或者返回給傳送者,或者轉發到不同的郵件地址。
MRA:(Mail Retrieval Agent)郵件獲取代理提求了使MUA 可以遠端獲取電子郵件的效勞,如qpoper、cyrus-imap、courier-imap、dovecot 等,為了使得郵件存取格式相容,正在MRA 順序中經常都提求了郵件投遞代理順序MDA。MRA 運用的協議有POP3 和IMAP4 等。POP3 可以運使用者從效勞器下載郵件並離線閱讀。IMAP4 運用於那些沒有外地信箱的使用者,具有遠端操作信箱的才幹。IMAP4 容許多個客戶機器同時訪問一個信箱。原文想象的系統中,Webmail 正在先臺便是經過IMAP4 協議來訪問使用者信箱的。

MSA:郵件提交代理(Mail Submission Agent)將郵件發給郵件閘道器,然後由閘道器過濾發出。

SASL 為應用程式和共享庫的開發者提供了用於驗證、資料完整性檢查和加密的機制。開發者可通過 SASL 對通用 API 進行編碼。此方法避免了對特定機制的依賴性。SASL 特別適用於使用 IMAP、SMTP、ACAP 和 LDAP 協議的應用程式,因為這些協議全都支援 SASL。
SASL 庫基礎 

SASL 庫稱為 
libsasl。libsasl 是一個框架,允許正確編寫的 SASL 消費方應用程式使用系統中可用的所有 SASL 外掛。術語外掛是指為 SASL 提供服務的物件。外掛位於 libsasl 的外部。SASL 外掛可用於驗證和安全性、名稱標準化以及輔助屬性(如口令)的查詢。加密演算法儲存在外掛中,而不是 libsasl 中。 

libsasl 為消費方應用程式和庫提供應用程式設計介面 (application programming interface, API)。服務提供者介面 (service provider interface, SPI) 是為外掛提供的,用於為 libsasl 提供服務。libsasl 不能識別網路或協議。相應地,應用程式必須負責在客戶機與伺服器之間傳送和接收資料。

SASL 對使用者使用兩個重要的識別符號。驗證 ID (authid) 是用於驗證使用者的使用者 ID。驗證 ID 授予使用者系統訪問許可權。授權 ID (userid) 用於檢查是否允許使用者使用特定選項。

SASL 客戶機應用程式和 SASL 伺服器應用程式將協商公用的 SASL 機制和安全級別。通常,SASL 伺服器應用程式會將其可接受的驗證機制的列表傳送給客戶機。隨後 SASL 客戶機應用程式便可決定哪種驗證機制最能滿足其要求。此後,客戶機與伺服器使用雙方同意的驗證機制,對它們之間交換的由 SASL 提供的驗證資料進行驗證。此交換將持續下去,直到驗證成功完成、失敗或被客戶機或伺服器中止。



在驗證過程中,SASL 驗證機制可以協商安全層。如果已選擇安全層,則必須在 SASL 會話期間使用該層。

以上知識均來自於網路各種渠道總結,絕無侵權之意。。。謝謝。。。

本文轉自 z永 51CTO部落格,原文連結:
http://blog.51cto.com/pangge/1049431