Board logo

標題: [資源分享] [轉貼]Linux作業系統下防垃圾郵件基本功 [打印本頁]

作者: 祐祐    時間: 2010-8-11 11:25     標題: [轉貼]Linux作業系統下防垃圾郵件基本功

Linux作業系統下防垃圾郵件基本功
作者:曹江華


垃圾電子郵件成為了人們最頭疼的問題之一。在Windows作業系統中也許您已經嘗夠了垃圾郵件給您帶來的苦頭,不要以為在Linux作業系統平臺中就能避免垃圾電子郵件給我們帶來的騷擾,反擊和過濾垃圾電子郵件是一件很重要的工作。下面介紹一些在Linux中廣泛使用的防垃圾郵件技術。

(1)SMTP用戶認證

目前常見並十分有效的方法是,在郵件傳送代理(Mail Transport Agent,MTA)上對來自本地網路以外的互聯網的發信用戶進行SMTP認證,僅允許通過認證的用戶進行遠端轉發。這樣既能夠有效避免郵件傳送代理伺服器為垃圾郵件發送者所利用,又為出差在外或在家工作的員工提供了便利。如果不採取SMTP認證,則在不犧牲安全的前提下,設立面向互聯網的Web郵件閘道也是可行的。 此外,如果SMTP服務和POP3服務集成在同一伺服器上,在用戶試圖發信之前對其進行POP3訪問驗證(POP before SMTP)就是一種更加安全的方法,但在應用的時候要考慮到當前支援這種認證方式的郵件用戶端程式還不多。

(2)逆向名字解析

無論哪一種認證,其目的都是避免郵件傳送代理伺服器被垃圾郵件發送者所利用,但對於發送到本地的垃圾郵件仍然無可奈何。要解決這個問題,最簡單有效的方法是對發送者的IP位址進行逆向名字解析。通過DNS查詢來判斷發送者的IP與其聲稱的名字是否一致,例如,其聲稱的名字為mx.hotmail.com,而其連接位址為20.200.200.200,與其DNS記錄不符,則予以拒收。這種方法可以有效過濾掉來自動態IP的垃圾郵件,對於某些使用動態功能變數名稱的發送者,也可以根據實際情況進行遮罩。但是上面這種方法對於借助Open Relay的垃圾郵件依然無效。對此,更進一步的技術是假設合法的用戶只使用本域具有合法互聯網名稱的郵件傳送代理伺服器發送電子郵件。例如,若發件人的郵件地址為someone@yahoo.com,則其使用的郵件傳送代理伺服器的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?#93;`dnsbl',`relays.ordb.org',`″Email blocked using ORDB.org - see ″')



最後執行"m4 sendmail.mc>sendmail.cf"和"service sendmail restart"兩條命令,使有關Sendmail的修改生效。

(3)打開Sendmail的SMTP認證功能

1、伺服器端設置

關掉了Relay功能,用戶就不能使用用戶端軟體發信,此時需要Sendmail配置,開放其SMTP認證功能,再在用戶端如Outlook Express 、foxmail等當中打開SMTP認證,這樣就可以正常SMTP伺服器了。在Red Hat Linux 9.0中配置SMTP認證非常方便,首先用命令檢查有沒有安裝cyrus-sasl套裝軟體。

代碼:

#rpm -qa|grep sasl
cyrus-sasl-2.1.10-4
cyrus-sasl-plain-2.1.10-4
cyrus-sasl-devel-2.1.10-4
cyrus-sasl-md5-2.1.10-4



如果沒有安裝的話,用命令"rpm -ivh cyrus-sasl*.rpm"安裝所有套裝軟體,接著打開/etc/mail/sendmail.mc檔,修改如下三行:

代碼:

dnl TRUST_AUTH_MECH?#93;`DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
dnl define?#93;`confAUTH_MECHANISMS',`DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
DAEMON_OPTIONS?#93;`Port=smtp,Addr=127.0.0.1,Name=MTA')dn1



修改為:

代碼:

TRUST_AUTH_MECH?#93;`DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
define?#93;`confAUTH_MECHANISMS',`DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
DAEMON_OPTIONS?#93;`Port=smtp,Addr=192.168.1.200,Name=MTA')dn1



然後產生cf檔,並進行測試:

代碼:

#m4 sendmail.mc > sendmail.cf
#service sendmail restat
# sendmail d0.1 -bv root |grep SASL
NETUNIX NEWDB NIS PIPELINING SASL SCANF STARTTLS TCPWRAPPERS #修改成功標誌



下一步測試,以Telnet到TCP 25埠的方式:

代碼:

#telnet localhost 25
ehlo localhost
注意有沒有以下的資訊出?#123;.
250-xxxxxxxx
250-xxxxxxx
250-AUTH LOGIN CRAM-MD5 DIGEST-MD5
250-xxxxxx



Outlook Express 和Foxmail 使用LOGIN認證,Netscape Mail使用PLAIN認證。

2、用戶端設置

在Outlook Express主窗口,單擊"工具(T)"選單,在下拉選單中選中"帳號(A)"。在"Internet帳號"窗口中,選定某一郵件帳號,單擊"屬性(P)"。在彈出的帳號"屬性"視窗中(見圖3),選擇"伺服器"選項卡,選中"我的伺服器要求身份驗證(V)"。單擊旁邊的"設置(E)"按鈕,在"外發郵件伺服器"視窗中選擇"使用與接收郵件伺服器相同的設置(U)"。按"確定"後,設置便完成了。



圖1:Outlook Express SMTP認證的設置


(4)使用專用工具防止垃圾郵件

除了利用sendmail的自帶功能,還能夠利用其他的專用工具來防止垃圾郵件,比較著名的有由Matt Sergeant、Craig Hughes和Justin Mason於發佈的SpamAssassin(SA)。目前最新版本是3.0.2,它是較為流行的反垃圾郵件軟體,據SpamAssassin供應商 Deersoft的統計,目前大約有3萬台Unix伺服器上使用了SpamAssassin。SpamAssassin利用Perl語言來對郵件內容進行規則匹配,從而達到判斷過濾垃圾郵件的目的。它的判斷方式是基於評分的方式,也就是說如果這封郵件符合某條規則,則給與一定分值;當累計的分值超過了一定限度時,則判定該郵件為垃圾郵件。對Sendmail、Qmail、Postfix和Exim等各種郵件平臺都適用。當它被最終用戶或系統管理員調用時,它可以方便地與大多數流行的郵件處理系統進行介面互連。SpamAssassin在對一封信件應用了各項規則之後,生成一個分值來表示其為垃圾郵件的可能性。它可以設置上百條規則,包括對郵件頭的處理、對郵件內容的處理及對郵件結構的處理等。每條規則都對應一個分值(可正、可負),每封信件的分值就是所匹配規則的分值之和。如果分值為負,表示這封信件是正常的;相反,如果分值為正,則表示信件有問題。如果超過了某個默認的分值,篩檢程式就會標識其可能為垃圾郵件,然後交由用戶做出最終抉擇。SpamAssassin的安裝使用過程比較簡單,在互聯網上有專業文章介紹,更加專業的敍述可以查看:O'Reilly出版的 SpamAssassin,書號 ISBN : 0-596-00707-8,2004。這裏就不贅述了。

http://network.ccidnet.com/pub/article/c725_a273379_p1.html




歡迎光臨 UT男同志論壇 (http://blog.jdlog.com/) Powered by Discuz! 7.0.0