天天看點

郵件伺服器基本原理講解

郵件伺服器基本原理講解

        我想很多的人都發過電子郵件,隻要我們有一個郵件用戶端,然後填上收件人位址,發信人位址,發信的内容等等就可以發送一封電子郵件了。當然我們現實生活中感覺到的電子郵件的傳輸可能很簡單,但是在其背後的實作機制卻非常的複雜。而且,由于早期技術的限制,要實作一個完整的郵件系統,需要的伺服器可能需要達到多種,是以,這種方式建立的郵件伺服器是非常繁瑣且不易維護的。後來人們為了友善,于是九江許多的功能內建在某一個軟體上,這樣隻需要安裝這樣一個軟體,就可以實作許多郵件服務功能。這樣維護起來也友善多了。

在講郵件伺服器之前,我們先介紹幾種伺服器常用的元件概念:

MUA:Mail  User  Agent,郵件使用者代理,它主要的功能就是接受郵件伺服器上的電子郵件,以及提供使用者浏覽和編寫郵件的功能。通俗的說就是一個郵件用戶端。

            常見的MUA軟體有:

                    Outlook Express, Outlook

                     Foxmail

                     Thunderbird

                     Evolution

                     mutt(文本界面)

MDA:Mail  Delivery Agent,郵件投遞代理,它主要的功能就是分析MTA所收到的信件的表頭和内容等資料,來決定這封郵件的去向。如果MTA所收到的這封信目标是自己,那麼就會将這封信轉到使用者的郵箱中去;如果不是,那麼就中繼(轉遞)出去。MDA其實是MTA下的一個小程式而已。

                常見的MDA軟體有:

                            procmail

                            maildrop

MTA:Mail  Transfer  Agent,郵件傳輸代理,它主要的作用是收取信件,接受郵件時使用的協定是SMTP(Simple  Mail  Transfer Protocol,簡單郵件傳輸協定),監聽的端口号是25。當然我們一般所說的Mail  Server就是指的是MTA,其實MTA僅僅指的是SMTP協定而已。

                常見的提供MTA功能的軟體有:

                       比較老牌的sendmail

                       後起之秀postfix:這個軟體采用子產品化設計,且安全,跟sendmail相容,且比他的效率高

                        qmail

                        Exchange(windows,異步消息協作平台)

                 當然我們後面所使用到的MTA軟體就是postfix了。

MRA:Mail Retrieval Agent,郵件檢索代理,使用者可以通過(POP3或者IMAP4)協定來收下自己的信件。當然POP3和IMAP4的收信方式是不同的,在這裡我介紹一下他們兩個的收信方式:

                POP3的收信方式:

                        1、MUA(郵件用戶端軟體)透過POP3(Post Office Procotol  Version 3,郵政服務協定)連接配接到MRA的110端口,并且MUA需要提供賬号和密碼來取得正确的授權。這個授權是由POP3協定到資料庫中來檢索賬号和密碼是否正确來取得授權的。是以MRA還需要和資料庫結合一起來工作,這個在後續再講到。

                        2、MRA确認賬号和密碼沒有問題後,會前往使用者的郵箱取得使用者的郵件,并傳遞給MUA軟體。

                        3、當所有的信件傳送完畢後,使用者郵箱(mailbox)内的資料會被清空

                IMAP4的收信方式:

                        首先也需要通過賬号和密碼來取得授權才可以取得使用者郵箱(mailbox)内的郵件,但是他不僅将取得的郵件傳回給MUA,并且将郵件儲存在~/使用者賬号/目錄下。這樣一來,使用者就可以永久檢視郵件了。

                是以,建立一個完整的郵件伺服器隻要需要SMTP和POP3洗協定才行。    

                常見的MRA有:

                            cyrus-imap

                            dovecot

接下來我們介紹一個完整的郵件伺服器是如何工作的:

大概流程如下:

郵件伺服器基本原理講解

               1、首先使用者利用MUA軟體寫好一封郵件,利用SMTP協定将其傳到本地SMTP伺服器(記住,這裡是本地SMTP伺服器,而不是目的端SMTP伺服器,在這裡我們将SMTP伺服器簡稱SMTPD)

                2、當MTA收到郵件後,如果該郵件的目的端是本地的話,那麼MDA會将該郵件存放在使用者的郵箱裡(mailbox);如果不是本地的話,需要調用smtp用戶端(這裡簡稱smtp)與目标MTA建立連接配接,MDA會将其轉發給下一個MTA,如果是這種情況不加任何措施的話,那麼所有的人隻要連接配接到本地,都可以發送郵件了,且MDA都會為其轉發給下一個MTA,我們将這種傳遞方式叫做開放式中繼(open  relay)。當然這種方式是不安全的,如果有人發送一些不健康的郵件或者不法郵件的話,那麼導緻以下幾種不好的影響:

                (1)、占用MTA網絡帶寬

                (2)、被網際網路定義為黑名單,是以,許多正常的郵件無法發出。

                (3)、IP可能會被上級營運商給封鎖掉等等不良因素

                  是以為了安全起見,需要使用者在使用MUA發送郵件之前,需要提供賬号和密碼取得授權,才可以發送郵件,這樣MTA就隻為這些經過授權的賬号提供中繼,就可以正常轉發郵件了。當然驗證賬号和授權的功能需要用到SASL( Simple Authintication Secure Layer, 簡單認證安全層)機制,SASL就是用來驗證賬号是否具有relay服務。當然它也是通過在資料庫上面檢索賬号和密碼是否正确來驗證的。是以,它也需要和資料庫一起結合使用。

                    3、本地SMTP伺服器調用smtp用戶端(smtp)與下一個smtp伺服器建立tcp連接配接,然後目标smtp伺服器收到郵件後,MDA會分析該郵件的表頭和内容,決定這封信的去向。如果目标是本地,則将其轉發到使用者的郵箱下;如果不是,繼續向下一個MTA轉發(之後的過程和這是一樣的)。

                    4、用戶端收取郵件,當然也需要通過賬号和密碼取得授權,通過與MRA建立連接配接,這裡就使用pop3。pop3會到資料庫檢索賬号和密碼是否正确,如果賬号和密碼沒有問題,就到使用者的郵箱下取得郵件,傳回給pop3伺服器,在由pop3伺服器傳回給用戶端。

一般說來,我們發送郵件都會使用某個用戶端軟體來實作,但是我想也有人在web頁面上發送過郵件吧,我們把這種郵件方式稱作為webmail。這種方式就是将MUA軟體嵌套在web伺服器上面,然後再将web伺服器和MTA連接配接起來,這就是webmail的工作原理。

 常見的webmail有:

                    Openwebmail

                     squirrelmail

                     Extmail(Extman)

                          EMOS, CentOS

                    在後續的文章中,我們将介紹Extmail這種方式以及結合web伺服器的工作原理

繼續閱讀