免費打造過濾SPAM的郵件主機

2011-05-05
電子郵件堪稱是網路時代最具有威力的應用,對企業或個人都是效用極高的訊息傳遞工具,但也因其在行銷上的有效性,而常被利用來宣傳廣告,使得垃圾郵件在近年來越來越猖獗。甚至已成為現代上班族的夢魘。
根據統計,目前垃圾郵件的比例已經超過所有信件量的70%,也就是說在100封E-mail中約有70封以上是垃圾郵件,這使得多數人在收信後需要花費許多時間從收件夾中區分出垃圾郵件並予以刪除,不但浪費寶貴的頻寬資源,更白白浪費使用者不少的時間。也因此,如何過濾垃圾郵件常成為網管人員重要的課題。  

本文將用開源碼社群中上最有名的SpamAssassin垃圾信分析軟體配著名的郵件伺服器(Postfix),實作一個具有過濾垃圾郵件功能的郵件伺服器。  

此解決方案希望能達到下列兩項功能:  

1. 能自我學習判別垃圾郵件的模式,以增進判別的精確度。
2. 自動在垃圾郵件的主旨上加上[--spam--]字樣,以供使用者分辨。  

郵件系統簡介 

在說明郵件系統之前,先說明下列相關的名詞,然後再進行實作。  

MTA 

MTA(Mail Transfer Agent,郵件傳送代理程式),即一般所謂的郵件伺服器或稱為SMTP伺服器,它的主要功能如下:  

1. 寄送電子郵件,就如同郵局的角色,幫忙寄件者將電子郵件送達到寄件者所在的郵件伺服器後,再等使用者取回電子郵件。
2. 接收別台郵件伺服器傳遞過來的電子郵件,著名的郵件伺服器有Postfix及Sendmail郵件伺服器。  

MUA

MUA(Mail User Agent,郵件使用代理程式),簡單地講,就是常用的收發信軟體如Outlook軟體,使用者利用MUA來建立電子郵件並寄出電子郵件,或利用MUA來收取郵件伺服器上的電子郵件。  

MDA

MDA(Mail Delivery Agen,郵件遞送代理人)主要功能是將傳遞到目的郵件伺服器的電子郵件,放置到相對應的帳戶下的的郵件信箱(Mailbox)中,由於MDA可取得電子郵件的詳細內容,因此可在此提供下列的功能:  

1. 分析垃圾信(利用關鍵字設定):利用分析電子郵件的標題或內容,來判別是否為垃圾信。例如,若利用已知垃圾信的主旨(Subject)(如設定主旨為「大拍賣」),可在MDA收到電子郵件時,解析電子郵件的主旨,如果符合垃圾信的定義,即將此電子郵件丟棄或標示為垃圾信。但隨著圖像式垃圾郵件的興起,此種分析方式已經不敷所需,而有OCR分析解決方案的出現。
2.自動回信機制:可利用MDA在收到電子郵件時,即回覆電子郵件給寄件者。  

常見的MDA軟體有Procmail,在本解決方案即是利用Procmail將電子郵件傳遞給SpamAssassin過濾軟體,再過濾垃圾郵件。  

SMTP

SMTP(Simple Mail Transfer Protocol,簡易郵件傳輸協定)是個電子郵件發送的通訊協定。提供下列SMTP指令來傳送電子郵件。其相關用法如下:  

HELO:啟始與SMTP伺服器之間的對話。一般來說,HELO是用戶端送出的第一個指令。通常是用來告知郵件伺服器,用戶端的網域名稱。
MAIL FROM:告知郵件伺服器電子郵件的寄件人位址,由於SMTP協定並不會驗證此欄位的真偽,因此垃圾信通常會在此欄位中做假。這也就是垃圾信會如此氾濫的原因,因為很難追查到真正的寄件人位址。
RCPT TO:告知郵件伺服器,電子郵件的收件人位址。
DATA信件內容:在此撰寫電子郵件的信件內容。
QUIT:離開。  

SMTP的整個運作流程如下圖所示:  

▲SMTP運作流程。

STEP 0 使用者連接到郵件伺服器;郵件伺服器回覆正常的訊息。
STEP 1 :使用者送出hello(或ehlo)詢問郵件伺服器狀態。
STEP 2 :使用者以mail from告知郵件伺服器,電子郵件的來源位址(即寄件人的位址)。
STEP 3 :使用者以rcpt to告知郵件伺服器,電子郵件的目的位址(即收件人的位址)。
STEP 4 :使用者送出data告知郵件伺服器,電子郵件的內容。
STEP 5 :離開郵件伺服器。  

由於原始SMTP協定本身並未提供相關認證功能,若未設定任何的限制,即可能允許任何人透過個人的郵件伺服器發送電子郵件。此種郵件伺服器被稱為Open Relay。  

一般而言,設定Open Relay的郵件伺服器往往是垃圾信發送者的最愛,也因此,在實務上往往設為Open Relay的郵件伺服器,通常也會被視為垃圾信的發送站。可至下列網址來檢查自己的郵件伺服器是否有正當的設定:  

1. 檢查郵件伺服器是否為「Open Relay」郵件伺服器
http://www.checkor.com/ 

2 檢查郵件伺服器是否有被列入發送垃圾信的黑名單
http://www.mxtoolbox.com/ 

一般郵件伺服器通常會採用限制可存取郵件伺服器網域的方式,限制僅有內部網域或某一段網域才可利用郵件伺服器寄發電子郵件。但此種方式並不實用,萬一合法使用者並不在該網域上,將會無法使用郵件伺服器,而造成不便。  

例如,當使用者出差到客戶的公司,客戶公司的網域必定不在郵件伺服器所設定的網域上,如此合法使用者將無法使用郵件伺服器。為此,而有了身分認證(利用驗證帳號/密碼的方式)的需求。  

為了解決郵件伺服器身分認證問題,而出現ESMTP(Extension SMTP)的通訊協定。ESMTP主要是增加身分認證機制。用戶在連接郵件伺服器時會先認證用戶的合法性,驗證通過後,方可使用郵件伺服器。  

那該如何確認郵件伺服器具有ESMTP功能?可利用telnet來確認郵件伺服器是否具有ESMTP功能,可使用「telnet [SMTP SERVER] 25」指令確認,如下圖示。(更多精彩文章詳見網管人第64期﹚

▲利用telnet指令確認郵件伺服器是否具有ESMTP功能。

追蹤我們Featrue us

本站使用cookie及相關技術分析來改善使用者體驗。瞭解更多

我知道了!