歡迎您光臨本站 註冊首頁

我在反垃圾的路上狂奔

←手機掃碼閱讀     火星人 @ 2014-03-04 , reply:0

我在反垃圾的路上狂奔

兩周前, 受命為公司部署反垃圾郵件系統. 那天我的噩夢開始了.

對郵件伺服器的了解不多,只是很久以前學習TCP/IP的時候看過MAIL工作的一些原理, 現在也差不多忘乾淨了.  還好有個地方叫互連網, 我可以從那裡得到想要的一切.

查過資料才知道,反垃圾郵件系統從功能上分為兩類。

1. 基於內容 以SpamAssasin為代表。
2. 基於行為 以Spam Locker為代表。

SpamAssasin 被認為是最好的反垃圾軟體,SpamAssasin將其邏輯封裝在一個設計精良的、抽象化的API中,因此它可被集成到電子郵件數據流中的任何地方。它號稱9x%的識別率。高識別率的代價是以犧牲性能換來的,每一封郵件都要使用大量規則去對比,系統開銷可想而知。如果運行在千萬級用戶的系統上.......難以想象

而Spam Locker是基於行為的反垃圾,在SENDER與MAIL SERVER進行命令交換時就可以識別垃圾郵件,從而斷開TCP連接,極大的節省了系統資源和帶寬。而APF的機制更可以將反垃圾系統和郵件系統分別置於不同的伺服器上,進一步提高了系統的穩定性,降低了資源成本。
這兩種系統由於機制不同,所以沒有可比性,但我更傾基於行為的反垃圾郵件系統。

兩周前下載並安裝了ExtMail發布的Spam Locker(以下簡稱SL)開源反垃圾郵件程序。SL採用PERL語言開發,通過補丁形式支持QMAIL。在MAIL SERVER接收到RCPT TO后調用APF插件,向指定IP發送如下數據:

request=smtpd_access_policy
protocol_state=RCPT
protocol_name=SMTP
client_address=82.135.209.55
client_name=unknow
helo_name=82-135-209-55.ip.zebra.lt
sender=pulp@dcba.com
recipient=liming@abcd.com
queue_id=

SL收到數據后調用各種模塊對數據進行分析,最後返回OK/DUNNO/REJECT三種狀態。但是到最後我也沒弄清楚模塊之間的優先順序到底是怎樣,導致正常郵件不斷的被退回。

悲劇開始了。

總公司的郵件設置很奇怪,發信使用了第三方服務,造成MX記錄不匹配。有些SMTP SERVER的IP還被RBL列入黑名單。這些自然都被SL擋了回去,設置白名單也無濟於事。

總公司的人急了。

南京公司內部有3台SMTP,用戶沒有進行統一的設置,而另外2台也沒有SMTP認證,導致發信者的域名與發信IP不符,結果就被當做垃圾。在本地DNS增加了MX記錄記錄也不行。SL的日誌中明明讀取了本地DNS的信息,也返回了我設置的記錄,依舊把正常郵件當垃圾。鑒於此情況我發信給公司全體人員,要求修改SMTP伺服器,怕有些人不懂如何設置,我製作了3個版本的郵件客戶端圖文並貌的說明文件,但修改者寥寥,而我每天奔波在那些不仔細閱讀說明的人中,筋疲力盡。要命的是總經理的不斷問我,質問郵件為什麼總發不出去,還收不到???

我哭了。

綜合以上情況,最後不得不關閉了SL。

PS:在使用SL過程中還發現了詭異的幽靈記錄

10-24 12:42:00 : http://bl.extmail.org/cgi/freq? ,from=<> to=<> helo=<> client=<>]
10-24 13:05:24 : http://bl.extmail.org/cgi/freq? ,from=<> to=<> helo=<> client=<>]
10-24 13:05:51 : http://bl.extmail.org/cgi/freq? ,from=<> to=<> helo=<> client=<>]
10-24 13:05:57 : http://bl.extmail.org/cgi/freq? ,from=<> to=<> helo=<> client=<>]
10-24 13:11:54 : http://bl.extmail.org/cgi/freq? ,from=<> to=<> helo=<> client=<>]
10-24 13:12:13 : http://bl.extmail.org/cgi/freq? ,from=<> to=<> helo=<> client=<>]
10-24 13:12:19 : http://bl.extmail.org/cgi/freq? ,from=<> to=<> helo=<> client=<>]

在SL版問過也沒人解答, 覺得這是SL的BUG. 因為在APF的日誌中沒有提交空信息的記錄。

如果要在公司現有環境中部署反垃圾郵件,且不需要用戶更改設置,就必須建立一套自己的反垃圾規則。經過兩周的測試,總結了一些經驗,也搜集到足夠的資料。下一步打算開發一套自己的反垃圾系統。這樣可以不再受第三方規則的困擾,將郵件控制權把握在自己手中(並不是說SL不好,也許是自己太笨,沒弄明白)。

這個系統的雛形已經實現(VB6下的多線程模式),和SL的工作原理一樣,可以說是WINDOWS下的Spam Locker。只是判斷規則按照內部需要自己完善。我的PERL很弱,否則就可以在SL的基礎上修改一下。經過4天的測試,運行十分穩定,識別效率和效果也非常好。吸取前次部署SL的經驗,這次打算測試一個模塊,上線一個模塊,發現問題馬上調整。

反垃圾郵件的是痛苦的,不可能一步到位,最痛苦的是要面對用戶的指責,質疑。也許我功力不夠,也許是降大任前的苦其心志。我依舊奔在反垃圾的路上。

如果能夠順利到達終點,我會把相關資料整理成詳細文擋,希望後來的兄弟不要象我般如此痛苦。

[ 本帖最後由 pencat 於 2007-10-29 22:42 編輯 ]
《解決方案》

回復 #1 pencat 的帖子

垃圾郵件確實讓人頭痛,我的經驗是不能單靠一方面技術解決垃圾郵件問題, 我的解決辦法是 spamassassin + rbl 評分 + 關鍵字評分
《解決方案》

公司的情況比較特殊 MAIL SERVER已經滿負荷運行了, 2G內存都用滿了,  很難再支持spamassassin 這樣龐然大物.   rbl 雖然方便 但是誤傷率太高.
《解決方案》

要我看,吹噓9x%的垃圾郵件過濾沒有見到,或者9x%的過濾代價就是大量誤判。rbl國內公司用不現實,遇到個誤判收不到訂單之類你就要被批一頓。教你個損招,叫客戶用outlook 2003自帶的垃圾郵件過濾,然後告訴他誤判了到垃圾箱去找,如果客戶抱怨誤判,垃圾郵件多之類就說微軟這麼大的公司做的都這樣,我也沒辦法了。順便罵一頓微軟。
《解決方案》

樓上的哥們方法不錯,但俺們經理也不是吃乾飯的。 這麼干俺是要下崗的

通過觀察發現 有30%左右的垃圾郵件 是自動生成用戶名 向你的伺服器循環發送.  我維護了一個域內用戶和信任關係列表。 這樣用一個很簡單的規則就檔住了30% 的垃圾  準確率是100%

rbl 是靠不住的,除非是自己維護的rbl server  國外提供的服務不考慮,國內提供的更不考慮.

[ 本帖最後由 pencat 於 2007-10-31 09:13 編輯 ]
《解決方案》

用多個rbl 進行綜合評分,而不是常用的一符合 rbl 就拒絕,這種方式還是比較有效的,如果一個ip 被幾個 rbl 列入了,基本就肯定是 垃圾ip了,spamassiass 如果配置成 daemon運行方式 消耗資源還是比較小的
《解決方案》

rbl 除非很快  訪問那麼多rbl 速度必然會下降.  spamassiass 在daemon方式下運行還沒測試過, 不過再小也小不過基於行為連接的軟體.

exmail.org 提供的spam locker就很好 不過統計界面不太友好,根據他的機制我重寫了個win下的 現在正在跑, 效果還不錯.

http://blog.bigcomic.com/upload/119388685525_p0.png


web界面

http://blog.bigcomic.com/upload/p1.png

http://blog.bigcomic.com/upload/p2.png

[ 本帖最後由 pencat 於 2007-11-1 11:27 編輯 ]
《解決方案》

推薦用商業反垃圾病毒郵件網關, 省很多事情。
《解決方案》

第三方的東西用著不放心
《解決方案》

郵件網關用著還可以呀

應該比較放心,因為你是掏錢的,還有很多服務,壞了直接替換上了
可以查郵件,屏蔽郵件,功能還很強大..

[火星人 ] 我在反垃圾的路上狂奔已經有510次圍觀

http://coctec.com/docs/service/show-post-34122.html