Postfix利用擋信機制來消除垃圾郵件的隱患
“不請自來的大宗郵件”(Unsolicited Bulk E-mail,UBE),或“不請自來的廣告郵件”(Unsolicited Commercial E-mail,UCE),就是一般俗稱的“垃圾郵件”(spam),寄件人沒有事先征得收件人的同意,就擅自寄送大量(煩人的)郵件給一大群陌生的收件 人,這樣的行為稱為“濫發垃圾郵件”,而專門干這種事的人,叫做“垃圾郵件發送者”(spammer)。垃圾郵件之所以存在,是因為寄送成本便宜。郵遞量 從幾百人增加到幾千人并不會增加太多成本,所以,來郵件發送者的目標就是盡量收集多的郵件地址。本文就介紹下Postfix利用擋信機制來消除垃圾郵件隱患,先為大家介紹下垃圾郵件的本質和由來。
垃圾郵件的本質
大部分的垃圾郵件都是商業廣告,但是這些廣告絕大部分都是唬人的騙局。垃圾郵件發送者才不在乎郵件內容是否能引起收件人的興趣,而且他們的信息通常就是謊 言,若有其事的宣稱收件人曾經跟他們公司有過怎樣的關系,或是從天而降的伙伴那時得知你需要什么信息,所以特地寫信給你云云。。。。。簡直是鬼話連篇。有 些信息被刻意便造成煞有介事的樣子,讓你誤以為有兩個正在進行某種交易,談論到他們的產品或服務有多么好,而你是因為他們不小心寄錯郵件所以才會收到郵 件。。。。。。總之,他們想盡辦法意圖勾起你貪小便宜的心,而誘使你上當。
垃圾郵件經常提供“我不要再收到這樣的郵件”的提示,比方說,要求你回信到某個郵箱,或是到某個網頁填寫你的郵件地址,或是點擊一個含有特殊查詢字符串的網址等。
然而,這樣的選退機制本身通常也是騙局,垃圾郵件發送者利用這種方法來確定你的郵件地址確實有效的,而且你是屬于那種比較容易受騙上當的人。換言之,如果你真的傻傻的遵照指示執行,換來的只是被更多垃圾郵件發送者知道你的郵件地址,而你也將會收到更多的垃圾郵件。
垃圾郵件發送者通常是試圖隱藏他們的行蹤的線索,避免被人逆向追查出來。假的回信地址與捏造的郵件標題,是最常使用的伎倆。他們在Internet上到處 搜尋沒有妥善特定的系統,好讓他們能夠匿名寄出大量垃圾郵件。更高明的技術是入侵防備不當的系統,植入他們刻意設計的秘密relay server。此外,垃圾郵件的內容通常經過特殊編碼或是安插隨機字母,試圖通過過濾程序的分析。
垃圾郵件發送者使用的某些伎倆,其副作用甚至必濫發垃圾郵件的行為本身更糟糕。就“漫無目標法”而言,他們不管郵件地址實際存在與否,而盲目的將垃圾郵件 送到他們認為可能存在的郵件地址。另一種“字典攻擊法”則是預先收集所謂的“人名”,并從DNS查出各網域的MX服務器,集中寄出垃圾郵件到成功可能性最 高的郵件地址。兩種伎倆都會無端造成受害系統的額外負擔。
垃圾郵件的問題
雖然小規模的垃圾郵件似乎不是什么大問題,但是在Internet上,這卻是相當嚴重的問題,甚至被認為是電子商務的殺手。一個為幾百人或幾千人提供郵件 服務的系統,如果每人每天都收到幾百份垃圾郵件,那這個系統就快要癱瘓了。垃圾郵件的發送成本很低,但是垃圾郵件受害人卻要付出真實的代價,這顯然是不公 平的,因為垃圾郵件無端的占據了收件人的郵箱配額,浪費收件人的磁盤空間與網絡帶寬。
垃圾郵件帶來的另一項損害是浪費技術支持人員的時間。雖然技術人員或管理員刻意幫助用戶清理被塞爆的郵箱,但是,垃圾郵件的量有時候大到系統甚至無法勝任 其原來的任務。垃圾郵件的這種副作用,無異于刻意的“拒絕服務攻擊”。就算沒嚴重到這種地步,夾雜在正常郵件中的垃圾郵件還是會干擾用戶的閱讀,如果垃圾 郵件太多,甚至容易使人忽略重要郵件或誤刪正常郵件。
關于垃圾郵件的一項重要課題,在于如何處理寄給不明用戶的郵件。有些郵件系統在發現收件地址無效時,當場就予以拒收(reject),郵件沒機會進入隊 列;有些系統則必須先收下郵件,然后才當成“無法投遞的郵件”而退信,而這些退信很容易就塞滿隊列,進而干擾合法郵件的遞送。由于垃圾郵件的回復地址通常 是無效的,所以退信不能立刻寄出去,而會在隊列里待上好一陣子,在服務器嘗試了多次無謂的遞送之后,才會因為過期而被移除隊列。
垃圾郵件發送者還有一種令人發指的惡行,他們會冒充無辜第三者的名義來濫發垃圾郵件,使得該受害者收到大量的退信通知。大量濫發垃圾郵件時,發信系統勢必 時常遭到退信。當垃圾郵件發送者使用別人的open relay濫發垃圾郵件時,如果放任讓退信或拒收通知函寄送到管理員郵箱,勢必會引起管理員的警覺,一旦管理員關閉掉open relay或修補系統漏洞之后,他們將不能再繼續使用該系統濫發垃圾郵件。因此,他們冒用無辜第三者的郵件地址為發信地址,使退信通知送到該無辜地址,借 此延后管理員發覺系統被濫用的時間。而那位被冒用名義的無辜受害人將收到上千甚至上百萬封退信通知。這種情況我們稱之為“背黑鍋”,因為受害人并未參與濫 發垃圾郵件的惡行。在大多數情況下,擺脫黑鍋的唯一辦法是放棄那個地址,改用另一個新地址。
開放轉發(open relay)
如果你的系統不得不服務來自Internet的客戶端,你有責任避免系統成為開放轉發,以免垃圾郵件發送者使用你的系統來轉發垃圾郵件。open relay是一種特殊的郵件系統,這類系統不限制客戶端的位置,也不查證郵件是否寄給直轄網域,就原意收下并代為轉寄到最終目的地。在垃圾郵件還不泛濫的 年代,郵件系統管理員多半愿意提供轉發服務,好讓他們的用戶不管旅行到世界哪一個角落,都能通過他們的服務器寄信。因此,開放轉發服務是當時的smtp服 務器軟件(sendmail 8之前得安版本)的默認配置。然而,隨Internet的普及,立意很好的open relay現在反而成為垃圾郵件跳板的代名詞。因為對于郵件的終點站而言,這類郵件看起來就像是直接從open relay發出的一樣,垃圾郵件發送者就是利用此一特性來隱藏真實的發信地點。現在,幾乎所有新一代的smtp軟件都默認配置都會限定轉發功能的服務對 象,而postfix當然也不例外。
倘若你的系統被當成open relay使用,最可能出現的癥狀是寄信效率明顯變低,因為它正忙著寄送大量的垃圾郵件,無暇遞送合法用戶的正常郵件。如果你愿意讓自己的系統成為垃圾郵 件的幫兇,你還得小心有心人利用你的open relay來攻陷其他系統。而且在你的系統轉發了大量的垃圾郵件之后,你的網絡將有很高的機率被列入黑名單,到那時候,將有許多站點拒收來自于你的網絡的 全部郵件--包括垃圾郵件與合法郵件。
辨別垃圾郵件
只要你的系統不被當成open relay使用,至少刻意放心它不會被用來攻擊其他系統,而你下一步,應該是保護自己以及你的用戶,想辦法盡量減少收到垃圾郵件。理論上,郵件服務器應該 能夠拒收任何看起來像垃圾郵件的郵件。然而,雖然人類有能力一眼就認出垃圾郵件,但是要求計算機精確認出垃圾郵件而不發生誤判,根本是不可能的。實際上, 一旦你開始拒收垃圾郵件,必定有可能將合法郵件按誤當在門外。
拒收被誤當成垃圾郵件的合法郵件,這種事件我們稱之為誤判。你的垃圾郵件抵制措施要盡量達成兩個相互違背的目標;盡可能擋掉可疑的垃圾郵件和盡可能降低誤 判機率。你采取的管制措施越嚴格,發生誤判的風險就越高。要采取嚴格到何種程度的管理措施,取決于發生誤判所造成的嚴重性有多高。對于完全不容許誤判的環 境(比方說,專用來接收客戶訂單的郵件系統),只能采取最寬松的管制,也就是接收所有的垃圾郵件。相對的,如果不在乎誤判或是能夠事先協調好用戶,則可疑 采取最嚴格的管制;只有事先特許的個人才能使用郵件系統,也就是所謂的“白名單”。事先批準似乎過于嚴苛,但是,當垃圾郵件問題已經嚴重到不可收拾的地 步,白名單已經成為越來越普遍的選擇。
計算機要如何判斷來信是否為垃圾郵件?主要判定依據有二,首先是“郵件來源”,其次是“信息內容”。前者是在收信期間檢查送信方是否為已知的垃圾郵件來 源,或是其寄信行為是否符合濫發垃圾郵件的條件。后者是在收下郵件后,檢查信息內容是否包含可被判定為垃圾郵件的字眼或其他條件。先不管實行細節上的困 難,只要郵件管理員能夠預先設想到各種判定技術的盲點,就能夠兼顧“盡可能擋掉可疑的垃圾郵件”與“盡可能降低誤判機率”這兩項彼此違背的目標。
#p#
依據客戶端判別垃圾郵件
這里所謂的“客戶端”是指在smtp交互過程中的寄信方。如你所知,在smtp對話過程中,服務器端(收信方)可得到對方的ip地址、主機名稱與郵件地 址。這些信息片斷都可以用來與一組已知的黑名單比對,借此決定應該接收還是拒收郵件。被列在黑名單中的系統,有可能真的是垃圾郵件發送者擁有的主機,但也 有可能是無辜的open relay系統,目前,Internet上已經很難找到“刻意為了提供轉發服務而架設的服務器主機”,大部分的open relay多半是倒霉的、無辜的或無知的管理員所架設的系統,open relay并非他們的本意。但不管是哪一種情況,如果你發現某特定對象經常給你寄垃圾郵件,你可以考慮將對方列入黑名單。不過,依據ip地址、主機名稱或 郵件地址來判定垃圾郵件,最大的問題是這類信息都可被假造。雖然偽造ip地址需要非常高的技術,但是信封地址是很容易假造的。
dns-based黑名單
為了抑止Internet上垃圾郵件的日益泛濫,各種自發性的抵制技術與網絡服務應運而生,其中一類頗有爭議的技術稱為“dns-based黑名單”或 “實時黑名單”。這類技術的原理,是將已知的open relay或垃圾郵件來源記錄在一個動態數據庫,并通過DNS系統開放給MTA server查詢。他們的構想是搶先一步提供預判結果給合法的MTA server,減輕郵件管理員自己維護黑名單的負擔。以往,垃圾郵件發送者還會使用自己的系統來濫發垃圾郵件,或是搜尋open relay來轉發垃圾郵件;近年來,這群人的行為越來越猖狂,他們幾乎已經不再使用自己的系統發垃圾郵件,而是尋找有機可乘的受害系統,植入可讓他們濫發 垃圾郵件的代理軟件,而被脅持的系統能夠甚至可能被用來發動DOS攻擊。有些機構的DNSBL專門提供這類非自愿的垃圾郵件轉發的查詢服務。
通常,RBL系統的查詢服務是通過dns提供的。對于每一個被認定為垃圾郵件來源的ip地址,在rbl所有者的網域空間里都有一個對應的PTR記錄, MAT在收信期間向RBL系統查詢客戶端的ip地址,借此決定應該接收還是拒收郵件。舉例來說,假設有一家(虛構的)RBL服務機構,他們的網域名稱為 nospam.example.com,位于192.168.254.31的主機已經被他們認定為垃圾郵件來源,于是,nospam公司在他們的網域空間 里創建一個dns ptr記錄,31.254.168.192。nospam.example.com當192.168.254.31主機連接到你的postfix系統, postfix可查詢該ip地址是否在nospam.example.com網域下有一個PRT記錄,如果有,表示該ip地址已被認定為垃圾郵件來源, postfix可當場拒絕該主機的寄信要求。
在你決定使用DNSBL服務之前,必須非常謹慎小心。有許多被用來轉發垃圾郵件的open relay系統,它們本身也提供服務給一般的正常用戶。你雖然擋掉了來自這些系統的垃圾郵件,但也擋掉了源自同系統能夠的合法郵件。此外,將是否收信的決 定權交給無責任的第三方,由別人決定誰能夠誰不能夠寄信給你的用戶,是一種推卸責任的行為。但如果你真的深受垃圾郵件之害,在你研究出適當的抵制方法之 前,DNSBL服務確實能夠幫上忙。如果你決定使用某家公司的服務,請務必仔細檢視他們的服務條款與政策。再一次的,你在“盡可能擋掉可疑的垃圾郵件”與 “盡可能降低誤判機率”之間取得平衡點。
依據內容判別垃圾郵件
除了以客戶端判別條件之外,郵件內容通常也可作為供判別垃圾郵件的特征。垃圾郵件時常出現某些特定的廣告語。依據郵件內容來辨識垃圾郵件,并非沒有誤判的 可能。想像一下,如果你經常收到大量關于低率房貸的垃圾郵件,你可能會想要擋掉含有類似“lomorratetgagewest”詞組的郵件。當然,這樣 確實可擋掉不少垃圾郵件,但是,你可能也擋掉了銀行同意核發低利率貸款給你的朋友的通知信。
判別技術的困難處
不管以客戶端還是郵件內容作為判別依據,垃圾郵件發送者總是有辦法找到辦法避過你的抵制措施。合法郵件與垃圾郵件之間,總是一有段難以理清的模糊地帶。當你努力收集黑名單的同時,垃圾郵件發送者也正在尋找新的代罪羔羊(這種無辜系統的數量之多,遠超過你的想像)。
你可能發現,在你收到的垃圾郵件中,有許多具有相同的回信地址。當然,你確實可使用回信地址來阻擋垃圾郵件,但是,他們多半采用“邊打邊跑”戰術。他們先 向免費郵件網站申請一個郵箱,然后使用該地址送出千萬封垃圾郵件,過了幾天之后,他們便放棄原來的郵箱,另外再申請一個新郵箱。所以,被你列入黑名單的回 信地址,過不了幾天就不會再出現了。
就算是專門的內容過濾系統,也必須隨垃圾郵件發送者的干擾伎倆而調整。舉例來說,很多濾信軟件會擋掉正文含有 “viagra”字樣的郵件,于是,垃圾郵件發送者便將HTML注釋標記嵌在這類關鍵詞句中--將“viagra"改成“vi[:alpha:]/ reject suspicious embedded html comments
postfix的擋信機制
本章的其余內容討論阻擋垃圾郵件的技術層面的問題,解釋postfix提供的UBE檢查機制。按照UBE的判別依據,postfix提供的檢查機制可分四大類:
客戶端判別規則
postfix提供四種檢查客戶端身份的參數,每一種參數都可設定一系列決定如何響應客戶端的限制條件。如果條件成立,可能的響應動作包括ok(收下郵 件)與reject(當場拒收)。例如,你可疑設定一條檢查規則。擋掉來自特定ip地址的郵件。相對的,如果條件不成立,則由后續條件繼續處理(這種結果 通常以DUNNO表示)。
語法檢查參數
postfix內置一系列專用檢查語法的參數,可用來核驗客戶端的smtp對話內容是否符合標準規定。由于垃圾郵件發送者通常不遵守標準規定,則對于不符合規定的客戶端或郵件,你可以要求postfix予以拒收。有些語法檢查參數也可作為客戶端判別規則。
內容檢查
你可以將一組描述垃圾郵件特征的正則表達式寫在查詢表中,要求postfix依據樣式表來檢查郵件的標題與正文內容。
自定義過濾規則
你可將一系列內置的限制條件組織成新的過濾規則。
設定postfix的垃圾郵件標識參數時,你還必須指定如何處理被辨認出來的垃圾郵件。一般而言,postfix可以當場拒收,或是收下郵件但是暫存在另一個隊列,或是交給外部過濾程序去處理。
通過上文的詳細介紹,我們都知道到底是如何辨別垃圾郵件和如何利用postfix的擋信機制來消除垃圾郵件的隱患。
【編輯推薦】