垃圾電子郵件成為了人們最頭疼的問題之一。在Windows作業系統中也許您已經嘗夠了垃圾郵件給您帶來的苦頭,不要以為在Linux作業系統平台中就能避免垃圾電子郵件給我們帶來的騷擾,反擊和過濾垃圾電子郵件是一件很重要的工作。下面介紹一些在Linux中廣泛使用的防垃圾郵件技術。
(1)SMTP使用者認證
目前常見並十分有效方法是,在郵件傳送代理(Mail Transport Agent,MTA)上對來自本網以外的互連網的發信使用者進行SMTP認證,僅允許通過認證的使用者進行遠程轉寄。這樣既能夠有效避免郵件傳送Proxy 伺服器為濫發垃圾郵件者所利用,又為出差在外或在家工作的員工提供了便利。如果不採取SMTP認證,則在不犧牲安全的前提下,設立面向互連網的Web郵件網關也是可行的。 此外,如果SMTP服務和POP3服務整合在同一伺服器上,在使用者試圖發信之前對其進行POP3訪問驗證(POP before SMTP)就是一種更加安全的方法,但在應用的時候要考慮到當前支援這種認證方式的郵件用戶端程式還不多。
(2)逆向名字解析
無論哪一種認證,其目的都是避免郵件傳送Proxy 伺服器被濫發垃圾郵件者所利用,但對於發送到本地的垃圾郵件仍然無可奈何。要解決這個問題,最簡單有效方法是對寄件者的IP地址進行逆向名字解析。通過DNS查詢來判斷髮送者的IP與其聲稱的名字是否一致,例如,其聲稱的名字為mx.hotmail.com,而其串連地址為20.200.200.200,與其DNS記錄不符,則予以拒收。這種方法可以有效過濾掉來自動態IP的垃圾郵件,對於某些使用動態網域名稱的寄件者,也可以根據實際情況進行屏蔽。但是上面這種方法對於藉助Open Relay的垃圾郵件依然無效。對此,更進一步的技術是假設合法的使用者只使用本域具有合法互連網名稱的郵件傳送Proxy 伺服器寄送電子郵件。例如,若寄件者的郵件地址為someone@yahoo.com,則其使用的郵件傳送Proxy 伺服器的Internet名字應具有yahoo.com 的尾碼。這種限制並不符合SMTP協議,但在多數情況下是切實有效。 需要指出的是,逆向名字解析需要進行大量的DNS查詢。
(3)即時黑名單過濾
以上介紹的防範措施對使用自身合法網域名稱的垃圾郵件仍然無效。對此比較有效方法就是使用黑名單服務了。黑名單服務是基於使用者投訴和採樣積累而建立的、由網域名稱或IP組成的資料庫,最著名的是RBL、DCC和Razor等,這些資料庫儲存了頻繁發送垃圾郵件的主機名稱字或IP地址,供MTA進行即時查詢以決定是否拒收相應的郵件。但是,目前各種黑名單資料庫難以保證其正確性和及時性。例如,北美的RBL和DCC包含了我國大量的主機名稱字和IP地址,其中有些是早期的Open Relay造成的,有些則是由於誤判造成的。但這些遲遲得不到糾正,在一定程度上阻礙了我國與北美地區的郵件聯絡,也妨礙了我國的使用者使用這些黑名單服務。
(4)內容過濾
即使使用了前面諸多環節中的技術,仍然會有相當一部分垃圾郵件漏網。對此情況,目前最有效方法是基於郵件標題或本文的內容過濾。其中比較簡單的方法是,結合內容掃描引擎,根據垃圾郵件的常用標題語、垃圾郵件受益者的姓名、電話號碼、Web地址等資訊進行過濾。更加複雜但同時更具智能性的方法是,基於貝葉斯機率理論的統計方法所進行的內容過濾,該演算法最早由Paul Graham提出(http://www.paulgraham.com/spam.html),並使用他自己設計的Arc語言實現。這種方法的理論基礎是通過對大量垃圾郵件中常見關鍵詞進行分析後得出其分布的統計模型,並由此推算目標郵件是垃圾郵件的可能性。這種方法具有一定的自適應、自學習能力,目前已經得到了廣泛的應用。最有名的垃圾郵件內容過濾是Spamassassin,它使用Perl語言實現,整合了以上兩種過濾方法,可以與當前各種主流的MTA整合使用。內容過濾是以上所有各種方法中耗費計算資源最多的,在郵件流程量較大的場合,需要配合高效能伺服器使用。
Sendmail是Redhat Linux以及大多數類Unix作業系統的郵件傳送代理,因此它是目前配置最廣泛的郵件伺服器。下面以Redhat Linux 9.0使用的Sendmail為例,介紹應對垃圾郵件的幾種具體方法。
(1)關閉Sendmail的Relay功能
所謂Relay就是指別人能用這台SMTP郵件伺服器給任何人發信,這樣別有用心的垃圾寄件者就可以使用這台郵件伺服器大量發送垃圾郵件,而最後別人投訴的不是垃圾寄件者,而是這台伺服器,因此必須關閉Relay。其方法就是,到Linux伺服器的/etc/mail目錄編輯access檔案,去掉"*relay"之類的設定,只留"localhost relay"和"127.0.0.1 relay"兩條即可。注意,修改access檔案後還要使用命令使修改生效:makemap hash access.db < access。
(2)在Sendmail中添加RBL功能
RBL(Realtime Blackhole List)是即時黑名單。國外有一些機構提供RBL服務,常用的RBL伺服器位址有relays.ordb.org、dnsbl.njabl.org、bl.spamcop.net、sbl.spamhaus.org、dun.dnsrbl.net和dnsbl.sorbs.net。查詢和刪除RBL中的IP地址可以到http://openrbl.org/和http://ordb.org。RBL將收集到的專發垃圾郵件的IP地址加入他們的黑名單,只要在Sendmail中加入RBL認證功能,就會使郵件伺服器在每次收信時都自動到RBL伺服器上去查實,如果信件來源於黑名單,則Sendmail會拒收郵件,從而使單位的使用者少受垃圾郵件之苦。在Sendmail中添加RBL認證,需要對sendmail.mc添加以下內容:
FEATURE(`dnsbl',`relays.ordb.org',`″Email blocked using ORDB.org - see _addr}″">″')
最後執行"m4 sendmail.mc>sendmail.cf"和"service sendmail restart"兩條命令,使有關Sendmail的修改生效。