天天看點

Linux安全應用之防垃圾郵件伺服器的建構

Linux安全應用之防垃圾郵件伺服器的建構

<b>一</b><b>.垃圾郵件産生的原因</b>

垃圾郵件(SPAM) 也稱作UCE(Unsoticited Commercial Email.未經許可的商業電子郵件)或UBE(Unsolicited Bulk Email,未經許可的大量電子郵件)。首次關于垃圾郵l件的記錄是1985年8月的一封通過電子郵件發送的連鎖信,一直持續到1993年6月出現了名為“Make Money Fast 的電子郵件。1994年4月SPAM一詞首次出現.當時Canter和Siegel律師事務所把一封信發送到6000多個新聞討論區,宣傳獲得美國國内綠卡的法律支援。這時開始,很多商人瓤利用垃圾郵件廣告。1995年首個專門用于發送垃圾郵件的程式Floodgate釋出,诙程式能夠自動地把郵件發送給大批人。同年8月開始出現出售郵件位址的事件。從此,垃圾郵件頻頻出現.也引起了人們的反感。

垃圾郵件産生的原因是多方面的,主要有多種原因。主要是經濟利益的驅使,電子郵件在海量“群發”方面具有得天獨厚的便利性。是以屢禁不絕。垃圾郵件和病毒有很多相似之處,他們都具有蔓延性、變化性,但是垃圾郵件的産生和蔓延與病毒有很大的不同。病毒的制造和蔓延一般來說并不能給制造者和傳播者帶來直接或間接的經濟利益;而垃圾郵件的制造和散發能夠給發送者帶來直接或間接的經濟利益。

<b>二</b><b>.垃圾郵件防禦手段</b>

對于垃圾郵件的防治,由于垃圾郵件是用專門的郵址搜尋軟體和郵件群發軟體來完成網上郵址收集和郵件散發的,一個郵址搜尋軟體每次可以搜尋到幾萬至十幾萬個有用郵址,一個郵件群發軟體每天可以發送上百萬封同樣或不同内容的垃圾郵件,是以對于自動化的垃圾郵件制造方式用人工手段進行删除顯得無能為力,必須借助一定的技術手段對付批量垃圾郵件。

有了郵件位址和郵件内容,垃圾郵件發送者要做的就是在盡量短的時間内将垃圾郵件發送出去。他們通常使用專用的群發工具或郵件清單系統來達到目的。早些時候,Sendmail等多數MTA預設設定是開放轉發(Open Relay)的,任何使用者都可以通過Intemet上大量存在的開放轉發MTA主機來發送郵件。于是,垃圾郵件制造者會首先查找一定數量響應速度快的、開放轉發的MTA主機,通過它們來完成收件人伺服器名字解析及發送的工作。後來,為了避免成為垃圾郵件的中轉站,各種主流MTA程式的預設設定都改為預設禁止開放轉發,而且,越來越多的開放轉發的伺服器都被列入各種黑名單過濾。Intemet上可用的開放轉發的主機正在不斷減少。于是,垃圾郵件制造者開始廣泛使用本身具有收件伺服器名字解析功能的群發工具和郵件清單系統。這些發送者通常使用家庭寬帶進行發送,其IP位址也不斷變化,為追蹤和屏蔽制造了障礙。垃圾郵件的發送環節與對抗垃圾郵件的過濾環節具有直接的對應關系,在這個環節上可用的技術很多,使用者應當從自身的實際情況出發進行遴選和應用。下面介紹目前廣泛使用的防垃圾郵件技術。

<b>(1).SMTP</b><b>使用者認證</b>

目前常見并十分有效的方法是,在MTA上對來自本地網絡以外的Intemet的發信使用者進行SMTP認證,僅允許通過認證的使用者進行遠端轉發。這樣既能夠有效避免MTA主機為垃圾郵件發送者所利用,又為出差在外或在家工作的員工提供了便利。如果不采取SMTP認證,則在不犧牲安全的前提下,設立面向Intemet的Web郵件網關也是可行的。

此外,如果SMTP服務(MTA)和POP3服務內建在同一主機上,則在使用者試圖發信之前對其進行POP3通路驗證(POP before SMTP)就是一種更加安全的方法。但在應用的時候要考慮到目前支援這種認證方式的郵件用戶端程式還不多。

<b>(2).逆向名字解析</b>

無論哪一種認證,其目的都是避免MTA被垃圾郵件發送者所利用,但對于發送到本地的垃圾郵件仍然無可奈何。要解決這個問題,最簡單有效的方法是對發送者的IP位址進行逆向名字解析。通過DNS查詢來判斷發送者的IP與其聲稱的名字是否一緻,例如,其聲稱的名字為mx.yahoo.com,而其連接配接位址為20.200.200.200,與其DNS記錄不符,則予以拒收。這種方法可以有效過濾掉來自動态IP的垃圾郵件。對于某些使用動态域名的發送者,也可以根據實際情況進行屏蔽。

但是上面這種方法對于借助Open Relay的垃圾郵件依然無效。對此,更進一步的技術是假設合法的使用者隻使用本域具有合法Internet名稱的MTA主機發送E-Mail。例如,若發件人的郵件位址為[email protected],則其使用的MTA的Internet名字應具有google.com的字尾。這種限制并不符合SMTP協定,但在多數情況下是切實有效的。

需要指出的是,逆向名字解析需要進行大量的DNS查詢,進而耗用大量的系統資源和網絡資源,為了提高性能和避免出現由于DNS服務中止或查詢逾時,該方法并未被普遍采用。

<b>(3).實時黑名單過濾</b>

以上介紹的防範措施對使用自身合法域名的垃圾郵件仍然無效,對此比較有效的方法就是使用黑名單服務了。黑名單服務是基于使用者投訴和采樣積累而建立的、由域名或IP組成的資料庫,最著名的是RBL、DCC和Razor等,這些資料庫儲存了頻繁發送垃圾郵件的主機名字或IP位址,供MTA進行實時查詢以決定是否拒收相應的郵件。

但是,目前各種黑名單資料庫難以保證其正确性和及時性。例如,北美的RBL和DCC包含了我國大量的主機名字和IP位址,其中有些是早期的Open Relay造成的,有些則是由于誤報造成的。這些遲遲得不到糾正,在一定程度上阻礙了我國與北美地區的郵件聯系,也妨礙了我國的使用者使用這些黑名單服務。在我國,黑名單服務仍處在起步階段,可用伺服器較少,其有效性也沒有得到充分驗證。

<b>(4).内容過濾</b>

即使使用了前面諸多環節中的技術,仍然會有相當一部分垃圾郵件漏網。對此情況目前最有效的方法是基于郵件标題或正文的内容過濾。其中比較簡單的方法是,結合内容掃描引擎,根據垃圾郵件的常用标題語、垃圾郵件受益者的姓名、電話号碼、Web位址等資訊進行過濾。

更加複雜但同時更具智能性的方法是,基于貝葉斯機率理論的統計方法所進行的内容過濾,該算法最早由Paul Graham提出(http://www.paulgraham.com/spam.html),并使用他設計的Arc語言實作。這種方法的理論基礎是通過對大量垃圾郵件中常見關鍵詞進行分析後得出其分布的統計模型,并由此推算目标郵件是垃圾郵件的可能性。這種方法具有一定的自适應、自學習能力,目前已經得到了廣泛的應用。

最有名的垃圾郵件内容過濾是Spamassassin,它使用Perl語言實作,內建了以上兩種過濾方法,可以與目前各種主流的MTA內建使用。

内容過濾是以上所有各種方法中耗費計算資源最多的,在郵件流量較大的場合,需要配合高性能伺服器使用。

<b>三、建構執行個體</b>

下面以Linux系統上最傳統的Sendmail伺服器(其他郵件伺服器的設計思路一類似的)為例,采用上面介紹過的幾種技術應對垃圾郵件的危害。

<b>(1)關閉Sendmail的Relay功能</b>

所謂Relay就是指别人能用這台SMTP郵件伺服器給任何人發信,這樣别有用心的垃圾發送者就可以使用這台郵件伺服器大量發送垃圾郵件,最後導緻别人投訴的不是垃圾發送者,而是這台伺服器。是以,必須關閉Relay。其方法就是,到Linux伺服器的/etc/mail目錄編輯access檔案,去掉“*relay”之類的設定,隻留“localhost relay”和“127.0.0.1 relay” 兩條即可。

注意,修改access檔案後還要使用“makemap hash access.db&lt;access”指令使修改生效。

<b>(2)打開Sendmail的SMTP認證功能</b>

關掉了Relay功能,使用者就不能使用用戶端軟體發信,此時需要Sendmail配置,開放其SMTP認證功能,再在用戶端如OE、foxmail等當中打開SMTP認證,這樣就可以正常使用SMTP伺服器了。

在Red Hat Linux 5.0中配置SMTP認證非常友善,首先用“rpm –qal grep sasl”指令檢查有沒有安裝cyrus-sasl軟體包。如果沒有安裝的話,則用指令“rpm -ivh cyrus-sasl.rpm”安裝所有軟體包,接着打開/etc/mail/sendmail.mc檔案,修改如下三行:

dnl TRUST_AUTH_MECH ('DIGEST-MD5 CRAM-MD5 LOGIN PLAIN') dnl

dnl define ('confAUTH_MECHANISMS','DIGEST-MD5 CRAM-MD5 LOGIN PLAIN') dnl

DAEMON_OPTIONS ('Port=smtp,Addr=127.0.0.1,Name=MTA')

将它們修改如下:

TRUST_AUTH_MECH ('DIGEST-MD5 CRAM-MD5 LOGIN PLAIN') dnl

define ('confAUTH_MECHANISMS','DIGEST-MD5 CRAM-MD5 LOGIN PLAIN') dnl

DAEMON_OPTIONS ('Port=smtp,Addr=0.0.0.0,Name=MTA')

<b>(3)在Sendmail中添加RBL功能</b>

RBL(Realtime Blackhole List)是實時黑名單。國外有一些機構提供RBL服務,常用的RBL伺服器位址有relays.ordb.org、dnsbl.njabl.org、bl.spamcop.net、sbl.spamhaus.org、dun.dnsrbl.net和dnsbl.sorbs.net。

在Sendmail中添加RBL認證,隻要對sendmail.mc添加以下幾句話:

FEATURE('dnsbl','relays.ordb.org','"Email blocked using ORDB.org-see &lt;http://ORDB.org/lookup/host=" $&amp;{client_addr}"&gt;" ')

FEATURE ('dnsbl','dnsbl.njab1.org',' ','"451 Temporary、lookup failurefor" $&{client_addr}" in cbl.anti-spam.org.cn" ')

上面每行表示增加一個RBL伺服器。最後執行“m4 sendmail.mc&gt;sendmail.cf”和“service  sendmail restart”兩條指令,使有關Sendmail的修改生效。

除了利用sendmail的自帶功能,還能夠利用其他的專用工具來防止垃圾郵件,比較著名的有由Matt Sergeant、Craig Hughes和Justin Mason于2001年4月首次釋出的SpamAssassin (SA)。SA目前最新版本是3.0.2,它是較為流行的反垃圾郵件軟體。據SpamAssassin供應商Deersoft的統計,目前大約有3萬台Unix伺服器上使用了SpamAssassin。

 本文轉自 李晨光 51CTO部落格,原文連結:http://blog.51cto.com/chenguang/862523,如需轉載請自行聯系原作者