身為管理電子郵件伺服器的網管人員,最常被要求的功能大概就是「可否備份別人寄來的電子郵件以便日後查詢」,但以Linux平台建置的基本郵件系統將無法滿足所需,除非另行採購市面上具有備份電子郵件功能的郵件稽核產品。為此,本文示範如何利用MySQL資料庫來儲存電子郵件,以利後續的追蹤查核。
在垃圾郵件橫行的現在,通常都在下載之後,才發現都是垃圾郵件,也因此浪費許多的頻寬和時間,而這也是一般網管人員建議使用者利用IMAP通訊協定來收取信件的原因。
IMAP
IMAP(Internet Mail Access Protocol)是另一種使用者讀取郵件伺服器上郵件的通訊協定,它與POP3最大的不同在於,POP3協定通常必須將信件下載至本地端電腦內,方可檢視信件的內容,而且不可瀏覽過去的舊信,因為舊信都已下載到使用者的機器上,郵件伺服器內不會保留,雖然POP3也支援「在伺服器上保留郵件」的選項,但預設並不會勾選此選項。
而IMAP協定則是將所有信件均保存於郵件主機上,使用者可以先查看信件的主旨來決定是否要下載該電子郵件,若決定不下載,即可將該電子郵件直接從郵件主機上刪除,不必浪費頻寬來下載不需要的電子郵件。
Relay
Relay是郵件伺服器轉發電子郵件的機制,電子郵件會經由Relay機制,將電子郵件交由下一個郵件主機來進行轉發,直到找到正確的郵件伺服器(收件者所在的伺服器)為止。
由於原始SMTP通訊協定本身並未提供相關認證功能,因此當郵件伺服器上未設定任何的限制,即可能允許任何人透過自己的郵件伺服器發送電子郵件,而此種郵件伺服器即被稱為Open Relay郵件伺服器。
一般來說,設定Open Relay的郵件伺服器往往是垃圾信發送者的最愛,也因此一個Open Relay的郵件伺服器通常會被視為垃圾信的發送站。
在原始的SMTP通訊協定中並未考慮身分認證的問題,因此一般郵件伺服器會利用限制可存取郵件伺服器網域的方式,來限制僅有內部網域或是某一段網域才可利用郵件伺服器寄發電子郵件,藉此達到控管的目的。
但此種方式並不實用,因為在現實生活中有非常大的機率,合法使用者並不會在該網域內,如此將造成合法使用者無法使用郵件伺服器因而產生不便,因此有了身分認證的需求(利用驗證帳號…密碼的方式)。
為解決郵件伺服器身分認證問題,而誕生了ESMTP(Extension SMTP)通訊協定,ESMTP通訊協定主要是增加身分認證機制。
用戶在連接郵件伺服器時,會先認證用戶的合法性(利用帳號和密碼的機制進行驗證),一旦驗證通過,方可使用郵件伺服器收發電子郵件。
那該如何確認郵件伺服器具有支援ESMTP通訊協定的功能呢?可利用telnet指令來確認郵件伺服器是否具有ESMTP功能,如圖1所示。
|
圖1 利用telnet確認郵件伺服器是否具有ESMTP功能。 |
如果在連接該郵件伺服器時,所回應的訊息內含ESMTP等字樣,就表示該郵件伺服器支援ESMTP通訊協定。
電子郵件儲存格式
在電子郵件的儲存郵件格式中,最普遍的是Mbox與Maildir兩種郵件格式,簡述如下:
- mbox(mail box):此種郵件格式主要的特點在於將接收到的個別使用者的電子郵件儲存於「/var/mail/[使用者名稱]」檔案內,例如帳號為johnwu的電子郵件即儲存在「/var/mail/johnwu」檔案內。如果想要觀看相關的信件內容,可利用指令「cat /var/mail/[帳號名稱]」查看某個使用者的所有信件內容。
- maildir:此種郵件格式主要的特點在於,將每位使用者的個別電子郵件儲存在各個使用者的目錄內,而個別電子郵件儲存於個別的檔案,例如「/var/mail/[使用者名稱]」下的各個檔案,即表示為某個使用者的個別電子郵件。
簡單說明完電子郵件系統相關的角色後,接著講解如圖2所示的電子郵件系統流程架構圖,圖中的流程簡述如下:
|
▲圖2 電子郵件系統流程架構圖。 |
- 1. 寄件者利用MUA(如Outlook)軟體編寫電子郵件內容。
- 2. 利用所在端的郵件伺服器將電子郵件以SMTP通訊協定的方式寄出。
- 3. 該封電子郵件經各個郵件伺服器層層轉發(Relay)至目的端的郵件伺服器。
- 4. 目的端的郵件伺服器在接收到該封電子郵件之後,即將該電子郵件置於使用者的信件匣(mailbox)內,或者先行利用MDA軟體分析過濾該電子郵件,再將電子郵件置於使用者的信件匣(mailbox)中。
- 5. 使用者利用MUA(如Outlook)軟體,以POP3或IMAP通訊協定來取得該電子郵件。
在本文中,備份接收到的電子郵件至資料庫內,即是在上述的第四步驟,先利用MDA軟體(使用Procmail)分析電子郵件相關的資訊,如主旨、收件者與寄件者的位址等資訊後,再搭配自行撰寫的程式將相關的資訊置入資料庫內。
緊接著,說明Procmail的相關用法。
Procmail介紹
Procmail是一個有名的MDA軟體,通常會內建在Linux系統中,可先以指令「rpm -q -a | grep procmail」測試是否已安裝Procmail套件。
如果尚未安裝,則執行指令「yum install procmail*」來安裝相關套件。
由於郵件伺服器取得電子郵件後,會將該封電子郵件交由MDA(Procmail)進行處理,在此過程中,Procmail可取得該封電子郵件的所有資訊,例如內容及表頭,因此通常會在此設定相關規則以分析過濾該封電子郵件,而最常見的即是設定相關關鍵字來進行垃圾郵件的過濾。