歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux綜合 >> Linux資訊 >> Linux文化

中小企業服務器配置方案 第四章(3)


3.1 SMTP協議:
SMTP是工作在兩種情況下:一是電子郵件從客戶機傳輸到服務器;二是從某一個服務器傳輸到另一個服務器

SMTP是個請求/響應協議,命令和響應都是基於ASCII文本,並以CR和LF符結束。響應包括一個表示返回狀態的三位數字代碼

SMTP在TCP協議25號端口監聽連接請求

連接和發送過程:建立TCP連接
客戶端發送HELO命令以標識發件人自己的身份,然後客戶端發送MAIL命令服務器端正希望以OK作為響應,表明准備接收
客戶端發送RCPT命令,以標識該電子郵件的計劃接收人,可以有多個RCPT行服務器端則表示是否願意為收件人接受郵件
協商結束,發送郵件,用命令DATA發送
以.表示結束輸入內容一起發送出去
結束此次發送,用QUIT命令退出。

另外兩個命令:
VRFY---用於驗證給定的用戶郵箱是否存在,以及接收關於該用戶的詳細信息。
EXPN---用於擴充郵件列表。

郵件路由過程:
SMTP服務器基於'域名服務DNS中計劃收件人的域名來路由電子郵件。SMTP服務器基於DNS中的MX記錄來路由電子郵件,MX記錄注冊了域名和相關的SMTP中繼主機,屬於該域的電子郵件都應向該主機發送。
若SMTP服務器mail.abc.com收到一封信要發到[email protected]:Sendmail請求DNS給出主機sh.abc.com的CNAME記錄,如有,假若CNAME到shmail.abc.com,則再次請求shmail.abc.com的CNAME記錄,直到沒有為止
假定被CNAME到shmail.abc.com,然後sendmail請求@abc.com域的DNS給出shmail.abc.com的MX記錄,
shmail  MX 5  shmail.abc.com
       10 shmail2.abc.com
Sendmail最後請求DNS給出shmail.abc.com的A記錄,即IP地址,若返回值為1.2.3.4
Sendmail與1.2.3.4連接,傳送這封給[email protected]的信到1.2.3.4這台服務器的SMTP後台程序

SMTP基本命令集:
命令   描述
HELO   向服務器標識用戶身份
     發送者能欺騙,說謊,但一般情況下服務器都能檢測到。
MAIL   初始化郵件傳輸
     mail from:
RCPT   標識單個的郵件接收人;常在MAIL命令後面
     可有多個rcpt to:
DATA   在單個或多個RCPT命令後,表示所有的郵件接收人已標識,並初始化數據傳輸,以.結束。
VRFY   用於驗證指定的用戶/郵箱是否存在;由於安全方面的原因,服務器常禁止此命令
EXPN   驗證給定的郵箱列表是否存在,擴充郵箱列表,也常被禁用
HELP   查詢服務器支持什麼命令
NOOP   無操作,服務器應響應OK
QUIT   結束會話
RSET   重置會話,當前傳輸被取消

MAIL FROM命令中指定的地址是稱作 envelope from地址,不需要和發送者自己的地址是一致的。
RCPT TO 與之等同,指明的接收者地址稱為envelope to地址,而與實際的to:行是什麼無關。

為什麼沒有RCPT CC和RCPT BCC:?
所有的接收者協商都通過RCPT TO命令來實現,如果是BCC,則協商發送後在對方接收時被刪掉信封接收者

郵件被分為信封部分,信頭部分和信體部分
envelope from, envelope to 與message from:, message to:完全不相干。
evnelope是由服務器主機間SMTP後台提供的,而message from/to是由用戶提供的。有無冒號也是區別。

怎樣由信封部分檢查是否一封信是否是偽造的?received行的關聯性。
現在的SMTP郵件傳輸系統,在信封部分除了兩端的內部主機處理的之外,考慮兩個公司防火牆之間的部分,若兩台防火牆機器分別為A和B,但接收者檢查信封received:行時發現經過了C.則是偽造的。
received:行中的主機和IP地址對是否對應如:
Receibed: from galangal.org (turmeric.com [104.128.23.115] by mail .bieberdorf.edu....
被人手動添加在最後面的received行:
Received: from galangal.org ([104.128.23.115]) by mail .bieberdorf.edu (8.8.5)
Received: from lemongrass.org by galangal.org (8.7.3)
Received: from graprao.com by lemongrass.org (8.6.4)

3.2 POP3協議規范
簡介
對於在網絡上的比較小的結點,支持消息傳輸系統(mts)是不實際的。例如,一台工作站可能不具有充足的資源允許smtp服務器和相當的本地郵件傳送系統保持序駐留,並持續運行。同樣的,將一台個人計算機長時間連接在ip類型網絡上的費用也是可觀的(結點缺少的資源被稱為"聯絡性")。 雖然如此,在這樣的小結點上允許管理郵件是十分有用的,並且這些結點經常支持一個用戶代理來管理郵件。為解決這一問題,能夠支持mts的結點就為這些不能支持的結點提供了郵件存儲功能。郵局協議-版本3就是使這樣的工作站可以用一種比較實用的方法來訪問存儲於服務器上的儲存郵件。通常,這意味著工作站可以從服務器上取得郵件,而服務器為它暫時保存郵件。在下文中,客戶主機指的是利用pop3服務的主機,而服務器主機指的是提供pop3服務的主機。

簡單說明
在此文檔中不指明客戶主機如何將郵件送入到傳送系統中去。但這裡有一個說明:當用戶代理需要將信息送到傳送系統時,它在接力主機上建立smtp連接(這些接力主機可以是pop3主機,也可以不是)。

基本操作
初始時,服務器通過偵聽tcp端口110開始pop3服務。當客戶主機需要使用服務時,它將與服務器主機建立tcp連接。當連接建立後,pop3發送確認消息。客戶和pop3服務器相互(分別)交換命令和響應,這一過程一直要持續到連接終止。 pop3命令由一個命令和一些參數組成。所有命令以一個crlf對結束。命令和參數由可打印的ascii字符組成,它們之間由空格間隔。命令一般是三到四個字母,每個參數卻可達40個字符長。 pop3響應由一個狀態碼和一個可能跟有附加信息的命令組成。所有響應也是由crlf對結束。現在有兩種狀態碼,"確定" ("+ok")和"失敗" ("-err")。 對於特定命令的響應是由許多字符組成的。在這些情況中,下面一一表述:在發送第一行響應和一個crlf之後,任何的附加信息行發送,他們也由crlf對結束。當所有信息發送結束時,發送最後一行,包括一個結束字符(十進制碼46,也就是".")和一個crlf對。如果信息中的任何一行以結束字符開始,此行就是通過在那一行預先裝入結束而進行字符填充的。因此,多行響應由五個crlf.crlf 結束。當檢測多行響應時,客戶檢測以確認此行是否以結束字符開始。如果是的,而且其後的字符不是crlf,此行的第一個字符(結束字符)將被拋棄;如果其後緊跟crlf,從pop服務器來的響應終止,包括.crlf 的行也不被認為是多行響應的一部分了。 在生命周期中,pop3會話有幾個不同的狀態。一旦tcp連接被打開,而且pop3服務器發送了確認信息,此過程就進入了"確認"狀態。在此狀態中,客戶必須向pop3服務器確認自己是其的客戶。一旦確認成功,服務器就獲取與客戶郵件相關的資源,此時這一過程進入了"操作"狀態。在此狀態中,客戶提出服務,當客戶發出quit命令時,此過程進入了"更新"狀態。在此狀態中,pop3服務器釋放在"操作"狀態中取得的資源,並發送消息,終止連接。 pop3服務器可以擁有一個自動退出登錄的記時器。此記時器必須至少可以記錄10分鐘。這樣從客戶發送的消息才可能刷新此記時器。當記時器失效時,pop3會話並不進入"更新"狀態,而是關閉tcp連接,而且不刪除任何消息,不向客戶發送任何響應。

"確認"狀態  
一時tcp連接由pop3客戶打開,pop3服務器發送一個單行的確認。這個消息可以是由crlf結束的任何字符。例如,它可以是: s: +ok pop3 server ready   注意:這個消息是一個pop3應答。pop3服務器應該給出一個"確定"響應作為確認。 此時pop3會話就進入了"確認"狀態。此時,客戶必須向服務器證明它的身份。在文檔中介紹兩種可能的處理機制,一種是user和pass命令,另一種是在後面要介紹的apop命令。 用user和pass命令進行確認過程,客戶必須首先發送user命令,如果pop3服務器以"確認"狀態碼響應,客戶就可以發送pass命令以完成確認,或者發送quit命令終止pop3會話。如果pop3服務器返回"失敗"狀態碼,客戶可以再發送確認命令,或者發送quit命令。 當客戶發送了pass命令後,服務器根據user和pass命令的附加信息決定是否允許訪問相應的存儲郵件。 一旦服務器通過這些數據決定允許客戶訪問儲存郵件,服務器會在郵件上加上排它鎖,以防止在進入"更新"狀態前對郵件的改變。如果成功獲得了排它鎖,服務器返回一個"確認"狀態碼。會話進入"操作狀態",同時沒有任何郵件被標記為刪除。如果郵件因為某種原因不能打開(例如,排它鎖不能獲得,客戶不能訪問相應的郵件或者郵件不能進行語法分析),服務器將返回"失敗"狀態碼。在返回"失敗"狀態碼後,服務器會關閉連接。如果服務器沒有關閉連接,客戶可以重新發送確認命令,重新開始,或者發送quit命令。 在服務器打開郵件後,它為每個消息指定一個消息號,並以八進制表示每個消息的長度。第一個消息被指定為1,第二個消息被指定為2,以此類推,第n個消息被指定為n。在pop3命令和響應中,所以的消息號和長度以十進制表示。
下面是對上述三條命令的總結:  
命令
格式
參數
限制
響應
user name
指定郵箱的字符串,這對服務器至關重要僅在user和pass命令失敗後或在"確認"狀態中使用
+ok:有效郵箱;
-err:無效郵箱
c: user mrose
s: +ok mrose is a real hoopy frood
...
c: user frated
s: -err sorry, no mailbox for frated here
pass string
口令僅在"確認"狀態中user命令成功後使用(因為此命令只有一個參數,因此空格不再作為分隔符,而作為口令的一部分)
+ok:郵件鎖住並已經准備好;
-err無效口令或無法鎖住郵件
c: user mrose
s: +ok mrose is a real hoopy frood
c: pass secret
s: +ok mrose's maildrop has 2 messages (320 octets)
...
c: user mrose s: +ok mrose is a real hoopy frood
c: pass secret
s: -err maildrop already locked
quit
(無)
(無)
+ok
c: quit
s: +ok dewey pop3 server signing off
5. "操作"狀態  
一旦客戶向服務器成功地確認了自己的身份,服務器將鎖住並打開相應的郵件,這時pop3會話進入"操作"狀態。現在客戶可以重復下面的pop3命令,對於每個命令服務器都會返回應答。最後,客戶發送quit命令,會話進入"更新"狀態。 下面是在"操作"狀態中可用的命令:
命令
參數
限制
說明
響應
stat
(無)
僅在"操作"狀態下可用。
服務器以包括郵件信息的響應做為"確認"。為簡化語法分析,所有的服務器要求使用郵件列表的特定格式。"確認"響應由一個空格,以八進制表示的郵件數目,一個空格和郵件大小。這是最小實現,高級的實現還需要別的信息。 注意:被標記為刪除的信件不在此列。
+ok: nn mm
c: stat
s: +ok 2 320
list [msg]
信件數目(可選),如果出現,不包括標記為刪除的信件。
僅在"操作"狀態下可用。
如果給出了參數,且pop3服務器返回包括上述信息的"確認",此行稱為信息的"掃描表"。 如果沒有參數,服務器返回"確認"響應,此響應便以多行給出。在初的+ok後,對於每個信件,服務器均給出相應的響應。 為簡化語法分析,所有服務器要求使用掃描表的特定格式。它包括空格,每個郵件的確切大小。這是最小實現,高級的實現還需要別的信息。 注意:被標記為刪除的信件不在此列。
+ok:其後跟掃描表;
-err:無掃描。
c: list
s: +ok 2 messages (320 octets)
s: 1 120
s: 2 200
s: .
...
c: list 2
s: +ok 2 200
...
c: list 3
s: -err no such message, only 2 messages in maildrop
retr msg
不包括標記為刪除的信件數目。
僅在"操作"狀態下可用。
如果服務器返回"確認",給出的響應是多行的。在初始的+ok後,服務器發送與給定信息號對應的信息,對於多行響應,注意字節填充終止符。
+ok:消息在其後;
-err:其後無消息。
c: retr 1
s: +ok 120 octets
s: the pop3 server sends the entire message here>
s: .
dele msg
不包括標記為刪除的信件數目。
僅在"操作"狀態下可用。
服務器將此信件標記為刪除,以後任何關於此信件的操作就會產生錯誤。服務器在會話進入"更新"狀態前不會真正刪除此信件。
+ok:信件被刪除;
-err:無此信件。
c: dele 1
s: +ok message 1 deleted
...
c: dele 2
s: -err message 2 already deleted
noop
(無)
僅在"操作"狀態下可用。服務器僅返回"確認"。
+ok
c: noop
s: +ok
rset
(無)
僅在"操作"狀態下可用。
所有被標記為刪除的信件復位,服務器返回"確認"。
+ok
c: rset
s: +ok maildrop has 2 messages (320個字符)
6."更新"狀態  
當客戶在"操作"狀態下發送quit命令後,會話進入"更新"狀態。(注意:如果客戶在"確認"狀態下發送quit後,會話並不進入"更新"狀態。) 如果會話因為quit命令以外的原因中斷,會話並不進入"更新"狀態,也不從服務器中刪除任何信件。
命令
參數
限制
說明
響應
quit
(無)
(無)
服務器刪除所有標記為刪除的信件,然後釋放排它鎖,並返回這些操作的狀態碼。最後tcp連接被中斷。
+ok
c: quit
s: +ok dewey pop3 server signing off (清空標記郵件)
...
c: quit
s: +ok dewey pop3 server signing off
7.可選的pop3命令  
以上討論的命令是對pop3服務的最小實現。以下說明的可選命令允許客戶更方便地處理信件,這是一個比較一般的pop3服務實現。
命令
參數
限制
說明
響應
top msg n
一個是未被標記為刪除的信件數,另一個是非負數(必須提供)
僅在"操作"狀態下使用。
如果服務器返回"確認",響應是多行的。在初始的+ok後,服務器發送信件頭,一個空行將信件頭和信件體分開,對於多行響應要注意字節填充終止符。 注意:如果客戶要求的行數比信件體中的行數大,服務器會發送整個信件。
+ok:其後有信件頭;
-err:其後無類似消息。
c: top 1 10
s: +ok
s: <服務器發送消息頭,一個空行和信件的頭10行>
s: .
...
c: top 100 3
s: -err no such message
uidl [msg]
信件數(可選)。
如果給出信件數,不包括被標記為刪除的信件。
僅在"操作"狀態下使用。
如果給出了參數,且pop3服務器返回包括上述信息的"確認",此行稱為信息的"獨立-id表"。 如果沒有參數,服務器返回"確認"響應,此響應便以多行給出。在初的+ok後,對於每個信件,服務器均給出相應的響應。此行叫做信件的"獨立-id表"。 為簡化語法分析,所有服務器要求使用獨立-id表的特定格式。它包括空格和信件的獨立-id。 信件的獨立-id由0x21到0x7e字符組成,這個符號在給定的存儲郵件中不會重復。 注意:信件不包括被標記為刪除的信件。
+ok:其後是獨立-id表;
-err:其後無類似信件。
c: uidl
s: +ok
s: 1 whqtswo00wbw418f9t5jxywz
s: 2 qhdpyr:00wbw1ph7x7
s: .
...
c: uidl 2
s: +ok 2 qhdpyr:00wbw1ph7x7
...
c: uidl 3
s: -err no such message, only 2 messages in maildrop
apop name digest
指定郵箱的字串和md5摘要串。
僅在pop3確認後的"確認"狀態中使用。
通常,每個pop3會話均以user/pass互換開始。這導致了用戶名和口令在網絡上的顯式傳送,這不會造成什麼危險。但是,許多客戶經常連接到服務檢查信件。通常間隔時間比較短,這就加大了洩密的可能性。 另 一種提供"確認"過程的方法是使用apop命令。 實現apop命令的服務器包括一個標記確認的時間戳。例如:在unix上使用apop命令的語法為:process-id.clock@hostname,其中進程-id是進程的十進制的數,時鐘是系統時鐘的十進制表示,主機名與pop3服務器名一致。 客戶記錄下此時間戳,然後以送apop命令。name語法和user命令一致。digest是采用md5算法產生的包括時間戳和共享密鑰的字串。此密鑰是客戶和服務器共知的,應該注意保護此密鑰,如果洩密,任何人都能夠以用戶身份進入服務器。 如果服務器接到apop命令,它驗證digest,如果正確,服務器返回"確認",進入"操作"狀態;否則,給出"失敗"並停留在"確認"狀態。 注意:共享密鑰的長度增加,解讀它的難度也相應增加,這個密鑰應該是長字符串。
+ok:郵件鎖住並准備好;
-err:拒絕請求。
s: +ok pop3 server ready [email protected]>
c: apop mrose c4c9334bac560ecc979e58001b3e22fb
s: +ok maildrop has 1 message (369 octets) 在此例子中,共享密鑰 [email protected]>tanstaaf由md5算法生成,它產生了digest值, c4c9334bac560ecc979e58001b3e22fb
8. pop3命令總結  
基礎的pop3命令:  
user name 在"確認"狀態有效
pass string
quit  
stat 在"操作"狀態有效
list [msg]
retr msg
dele msg
noop
rset  
quit 在"更新"狀態有效  
可選的pop3命令:  
apop name digest 在"確認"狀態有效  
top msg n 在"操作"狀態有效
uidl [msg]  
pop3 響應:   +ok -err  
注意:除了stat,list和uidl的響應外,其它命令的響應均為"+ok"和 "-err"。響應後的所有文本將被客戶略去。
9. pop3會話實例
s: <等待連接到tcp端口110>
c: <打開連接>
s: +ok pop3 server ready [email protected]>
c: apop mrose c4c9334bac560ecc979e58001b3e22fb
s: +ok mrose's maildrop has 2 messages (320 octets)
c: stat
s: +ok 2 320
c: list
s: +ok 2 messages (320 octets)
s: 1 120
s: 2 200
s: .
c: retr 1
s: +ok 120 octets
s: <服務器發送信件1>
s: .
c: dele 1
s: +ok message 1 deleted
c: retr 2
s: +ok 200 octets
s: <服務器發送信件2>
s: .
c: dele 2
s: +ok message 2 deleted
c: quit
s: +ok dewey pop3 server signing off (maildrop empty)
c: <關閉連接>
s: <等待下一次連接>


3.3 IMAP4協議

  21cn.com是目前國內眾多免費電子郵件站點中率先提供IMAP4服務的系統,完整支持最新版本的IMAP4 rev1(RFC2060)協議。IMAP是Internet Message Access Protocol的縮寫,顧名思義,主要提供的是通過Internet獲取信息的一種協議。IMAP4是IMAP協議的第4個版本,正如POP3是POP協議的第3個版本一樣。在21cn.com郵件系統內,IMAP是一種強有力的郵箱訪問方式。

和POP3的區別

  由於很多用戶都對POP3非常熟悉,我們就從POP3說起。POP3提供了快捷的郵件下載服務,用戶可以利用POP3把郵箱裡的信下載到PC上進行離線閱讀。一旦郵件進入PC的本地硬盤,就可以選擇把郵件從服務器上刪除,然後脫離與Internet的連接並選擇在任何時候閱讀已經下載的郵件。

  IMAP同樣提供了方便的郵件下載服務,讓用戶能進行離線閱讀,但IMAP能完成的卻遠遠不只這些。首先,IMAP提供的摘要浏覽功能可以讓你在閱讀完所有的郵件到達時間、主題、發件人、大小等信息後才作出是否下載的決定。也就是說,你不必等所有的郵件都下載完畢後才知道究竟郵件裡都有些什麼。如果你根據摘要信息就可以決定某些郵件對你毫無用處,你就可以直接在服務器上把這些郵件刪除掉,而不必浪費你寶貴的上網時間。如果你的IMAP客戶端軟件完整支持IMAP4rev1的話(如Netscape 4.5),則你還可以享受選擇性下載附件的服務。舉例來說,假如一封郵件裡含有大大小小共5個附件,而其中只有2個附件是你需要的,你就可以只下載那兩個附件,節省了下載其余3個的時間。

和WebMail的比較

  也有很多用戶喜歡通過Web來聯機收發郵件,其中一個很重要的原因是這些用戶希望把他的郵件都留在服務器上,並且通過WebMail服務建立多個文件夾,然後分類歸檔地管理自己的郵件。這樣,WebMail的用戶就可以不分時間地點,只要有一個浏覽器就可以馬上從服務器上獲得自己的郵件,不管是剛收到的還是已經存放了很久,也不必擔心客戶端的PC重新安裝了操作系統或換了一台電腦以後郵件全部丟失了的問題。

  IMAP同樣滿足了WebMail用戶的需要。IMAP與POP3不同的地方關鍵是在支持離線閱讀的同時也鼓勵用戶把郵件存儲和組織在服務器上。和WebMail一樣,通過IMAP,允許用戶在服務器上建立任意層次結構的文件夾,並且可以靈活地在文件夾之間移動郵件,隨心所欲地組織你的郵箱(這些顯然是通過POP3做不到的)。只要你的郵件存儲在服務器上,任何時候通過一個IMAP的客戶端軟件都可以立即聯機獲得你的郵件,這一點與WebMail保持一致。

  但是,IMAP的以下優點足以把WebMail用戶吸引過來:凡是WebMail的用戶都必需無奈地閱讀頁面上的廣告,都必需花費寶貴的時間和帶寬來下載頁面上的圖面,修飾字符等等;IMAP則忠實地只為你的Email服務,不讓你的資源有絲毫的浪費。

  IMAP協議還允許你方便地利用你的郵箱作為信息存儲工具,一般的IMAP4客戶軟件都支持郵件在本地文件夾間和服務器文件夾間的隨意拖動,讓你得心應手地把本地硬盤上的文件存放到服務器上,然後在你需要的時候同樣方便地取回來,所有的功能僅需要一次鼠標拖放的操作來實現,是不是很好?

總的來說,POP3和WebMail的優點在IMAP裡都有,而IMAP卻能很好地克服POP3和WebMail各自的缺點。


Copyright © Linux教程網 All Rights Reserved