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

技術小胖子發表於2017-11-08

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

.垃圾郵件產生的原因
垃圾郵件(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月開始出現出售郵件地址的事件。從此,垃圾郵件頻頻出現.也引起了人們的反感。
垃圾郵件產生的原因是多方面的,主要有多種原因。主要是經濟利益的驅使,電子郵件在海量“群發”方面具有得天獨厚的便利性。所以屢禁不絕。垃圾郵件和病毒有很多相似之處,他們都具有蔓延性、變化性,但是垃圾郵件的產生和蔓延與病毒有很大的不同。病毒的製造和蔓延一般來說並不能給製造者和傳播者帶來直接或間接的經濟利益;而垃圾郵件的製造和散發能夠給傳送者帶來直接或間接的經濟利益。
.垃圾郵件防禦手段
對於垃圾郵件的防治,由於垃圾郵件是用專門的郵址搜尋軟體和郵件群發軟體來完成網上郵址收集和郵件散發的,一個郵址搜尋軟體每次可以搜尋到幾萬至十幾萬個有用郵址,一個郵件群發軟體每天可以傳送上百萬封同樣或不同內容的垃圾郵件,所以對於自動化的垃圾郵件製造方式用人工手段進行刪除顯得無能為力,必須藉助一定的技術手段對付批量垃圾郵件。
有了郵件地址和郵件內容,垃圾郵件傳送者要做的就是在儘量短的時間內將垃圾郵件傳送出去。他們通常使用專用的群發工具或郵件列表系統來達到目的。早些時候,Sendmail等多數MTA預設設定是開放轉發(Open Relay)的,任何使用者都可以通過Intemet上大量存在的開放轉發MTA主機來傳送郵件。於是,垃圾郵件製造者會首先查詢一定數量響應速度快的、開放轉發的MTA主機,通過它們來完成收件人伺服器名字解析及傳送的工作。後來,為了避免成為垃圾郵件的中轉站,各種主流MTA程式的預設設定都改為預設禁止開放轉發,而且,越來越多的開放轉發的伺服器都被列入各種黑名單過濾。Intemet上可用的開放轉發的主機正在不斷減少。於是,垃圾郵件製造者開始廣泛使用本身具有收件伺服器名字解析功能的群發工具和郵件列表系統。這些傳送者通常使用家庭寬頻進行傳送,其IP地址也不斷變化,為追蹤和遮蔽製造了障礙。垃圾郵件的傳送環節與對抗垃圾郵件的過濾環節具有直接的對應關係,在這個環節上可用的技術很多,使用者應當從自身的實際情況出發進行遴選和應用。下面介紹目前廣泛使用的防垃圾郵件技術。
(1).SMTP使用者認證
目前常見並十分有效的方法是,在MTA上對來自本地網路以外的Intemet的發信使用者進行SMTP認證,僅允許通過認證的使用者進行遠端轉發。這樣既能夠有效避免MTA主機為垃圾郵件傳送者所利用,又為出差在外或在家工作的員工提供了便利。如果不採取SMTP認證,則在不犧牲安全的前提下,設立面向Intemet的Web郵件閘道器也是可行的。
此外,如果SMTP服務(MTA)和POP3服務整合在同一主機上,則在使用者試圖發信之前對其進行POP3訪問驗證(POP before SMTP)就是一種更加安全的方法。但在應用的時候要考慮到當前支援這種認證方式的郵件客戶端程式還不多。
2).逆向名字解析
無論哪一種認證,其目的都是避免MTA被垃圾郵件傳送者所利用,但對於傳送到本地的垃圾郵件仍然無可奈何。要解決這個問題,最簡單有效的方法是對傳送者的IP地址進行逆向名字解析。通過DNS查詢來判斷髮送者的IP與其聲稱的名字是否一致,例如,其聲稱的名字為mx.yahoo.com,而其連線地址為20.200.200.200,與其DNS記錄不符,則予以拒收。這種方法可以有效過濾掉來自動態IP的垃圾郵件。對於某些使用動態域名的傳送者,也可以根據實際情況進行遮蔽。
但是上面這種方法對於藉助Open Relay的垃圾郵件依然無效。對此,更進一步的技術是假設合法的使用者只使用本域具有合法Internet名稱的MTA主機傳送E-Mail。例如,若發件人的郵件地址為somebody@google.com,則其使用的M他的Internet名字應具有google.com的字尾。這種限制並不符合SMTP協議,但在多數情況下是切實有效的。
需要指出的是,逆向名字解析需要進行大量的DNS查詢,從而耗用大量的系統資源和網路資源,為了提高效能和避免出現由於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整合使用。
內容過濾是以上所有各種方法中耗費計算資源最多的,在郵件流量較大的場合,需要配合高效能伺服器使用。
三、構建例項
下面以Linux系統上最傳統的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的SMTP認證功能
關掉了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`)
3)在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地址可以到www.spamhaus.org查詢。RBL將收集到的專發垃圾郵件的IP地址加入他們的黑名單,只要在Sendmail中加入RBL認證功能,就會使郵件伺服器在每次收信時都自動到RBL伺服器上去查實,如果信件來源於黑名單,則Sendmail會拒收郵件,從而使單位的使用者少受垃圾郵件之苦。
Sendmail中新增RBL認證,只要對sendmail.mc新增以下幾句話:
FEATURE(`dnsbl`,`relays.ordb.org`,`”Email blocked using ORDB.org-see <http://ORDB.org/lookup/host=” $&{client_addr}”>” `)
FEATURE (`dnsbl`,`dnsbl.njab1.org`,` `,`”451 Temporary、lookup failurefor” $&{client_addr}” in cbl.anti-spam.org.cn” `)
上面每行表示增加一個RBL伺服器。最後執行“m4 sendmail.mc>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。
SpamAssassin利用Perl語言來對郵件內容進行規則匹配,從而達到判斷過濾垃圾郵件的目的。它的判斷方式是基於評分的方式,也就是說如果這封郵件符合某條規則,則給與一定分值;當累計的分值超過了一定限度時,則判定該郵件為垃圾郵件。SpamAssassin能夠方便地同sendmail或qmail等軟體配合使用。關於SA的安裝使用和配置的詳細說明,可以參考其使用手冊http://spamassassin.apache.org/




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


相關文章