TShopping

 找回密碼
 註冊
搜索
查看: 2250|回復: 4

[教學] 垃圾信攻防戰 - SpamAssassin

  [複製鏈接]
發表於 2009-2-1 23:30:58 | 顯示全部樓層 |閱讀模式
 
Push to Facebook Push to Plurk Push to Twitter 

參考文件
檔案下載
對 SPAM 的攻防,我之前在利用 Postfix 抵擋垃圾信 (new window) 就有簡單的提過,基本上,使用 postfix 的內建 header_checks 和 body_checks 可以應付一些陽春的垃圾信,最多再使用一些進階的選項來分析連線資訊。不過對於垃圾客的手法越來越新,使用這種手動更新 rule 的使法似乎成果有限而且非常累人,因此,在小弟飽受 SPAM 的威脅之下決定使用 Spamssassin 來抵制 SPAM。
安裝
安裝 HTML:: parser
其實 Spamssassin 是 Perl 的一個模組,當然我是使用 CPAN 這個好東西來安裝我所需要的模組,而在安裝 Spamssassin 之前,需要安裝 Perl 的 HTML:: parser Module。
  1. root # cpan HTML::Parser
複製代碼
安裝 SpamAssassin
當然 SpamAssassin 是主角啦!可以使用 Perl CPAN 來安裝,或是到 這裡 來下載安裝。
  1. root # cpan Mail::SpamAssassin
複製代碼
如此就安裝完畢。
安裝 Mail::SPF::Query
嗯,還需要 Mail::SPF:: query 這個模組,所以就安裝起來吧!
  1. root # cpan Mail::SPF::query
複製代碼
設定
設定 SpamAssassin 設定檔
SpamAssassin 的設定檔是放在 /etc/mail/SpamAssassin/local.cf 裡面,而且個檔案裡面定義了很多簡查規則,以下,我把最簡單的設定列出來。
  1. 多少分才判為 SPAM
  2. required_hits 5
  3. report_safe 1
  4. #若為 SPAM,是否設修改主旨
  5. rewrite_subject 1
  6. #修改主旨為 (當 rewrite_subject 是 1 的時候才會有用)
  7. rewrite_header Subject [SPAM]

  8. # Encapsulate spam in an attachment
  9. report_safe 1

  10. # Use terse version of the spam report
  11. use_terse_report 1

  12. # Enable the Bayes system
  13. use_bayes 1

  14. # Enable Bayes auto-learning
  15. auto_learn 1

  16. # Enable or disable network checks
  17. skip_rbl_checks 0
  18. use_razor2 1
  19. use_dcc 1
  20. use_pyzor 1

  21. # Mail using languages used in these country codes will not be marked
  22. # as being possibly spam in a foreign language.
  23. # - chinese english japanese
  24. ok_languages zh en ja

  25. # Mail using locales used in these country codes will not be marked
  26. # as being possibly spam in a foreign language.
  27. ok_locales en ja zh
複製代碼
這樣做,就可以把基本的 SpamAssassin 設定起來。
新增一個 spamfilter 使用者
這個 spamfilter 主要是 spamd 會使用的,所以請建立起來,當然這個帳號是不允許從外面登入的:
  1. root # useradd -s /bin/false spamfilter
複製代碼
編寫 filter script
  1. root # touch /usr/local/sbin/filter.sh
  2. root # vi /usr/local/sbin/filter.sh
  3. #!/bin/bash
  4. exec /usr/bin/spamc -d 127.0.0.1 -f -p 783 -t 30 -e /usr/sbin/sendmail -i "$@"
  5. exit $?
  6. root # chmod 755 /usr/local/sbin/filter.sh
複製代碼
你可以 按這裡 下載 filter.sh。
設定 postfix
再來,我們需要再設定 postfix 一下,讓 postfix 在接收信件時,使用 SpamAssassin 來做信件過瀘。其中會設定到最重要的 /etc/postfix/master.cf 檔,所要請記得要特別小心!
  1. root # vi /etc/postfix/master.cf
  2. ~ 略 ~
  3. #修改以下兩個項目
  4. smtp inet n - n - - smtpd -o content_filter=postfixfilter
  5. smtp unix - - n - - smtp -o content_filter=postfixfilter
  6. ~ 略 ~
  7. # 在最後一行加入以下句子
  8. postfixfilter unix - n n - - pipe flags=Rq user=spamfilter
  9. argv=/usr/local/sbin/filter.sh -f ${sender} -- ${recipient}
  10. root #
複製代碼
設定了 master.cf 之後,如果你在 main.cf 有設定其它的垃圾郵件規則的話,像是 header_checks 和 body_checks 的話,就請關閉吧,這種全文分析的工作可以讓 SpamAssassin 來做就可以了。
  1. root # vi /etc/postfix/master.cf
  2. #把 header_checks 和 body_checks 註解起來
  3. #header_checks = regexp:/etc/postfix/header_checks
  4. #body_checks = regxp:/etc/postfix/body_checks
  5. root #
複製代碼
重新啟動 postfix 和 SpamAssassin
  1. root # postfix stop; sleep 3; postfix start
  2. root # service spamassassin start
複製代碼
測試
當然要測試最直接的方法就是使用 telnet
  1. root # telnet 127.0.0.1 25
  2. Trying 127.0.0.1...
  3. Connected to mail-test.l-penguin.idv.tw (127.0.0.1).
  4. Escape character is '^]'.
  5. 220 l-penguin.idv.tw ESMTP Postfix
  6. MAIL FROM: babiku007@yahoo.com.tw
  7. 250 Ok
  8. RCPT TO: someone@your.domain.name
  9. 250 Ok
  10. DATA
  11. 354 End data with <CR><LF>.<CR><LF>
  12. Subject: Test SPAM mail
  13. XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X
  14. .
  15. 250 Ok: queued as 450BFC6249
  16. quit
  17. 221 Bye
  18. Connection closed by foreign host.
  19. root #
複製代碼
上面是一封 SPAM body 的測試內容,現在請看一下你的 maillog,就會發現這是一封分數很高的 SPAM。
  1. root # cat /var/log/maillog
  2. 1 Dec 4 1156 dns spamd[17862]: connection from mail-test.l-penguin.idv.tw [127.0.0.1] at port 39463
  3. 2 Dec 4 1156 dns spamd[17862]: info: setuid to spamfilter succeeded
  4. 3 Dec 4 1156 dns spamd[17862]: processing message <20051204035518.450BFC6249@l-penguin.idv.tw> for spamfilter:86.
  5. 4 Dec 4 1158 dns spamd[17862]: identified spam (999.6/5.0) for spamfilter:86 in 1.2 seconds, 487 bytes.
  6. 5 Dec 4 1158 dns spamd[17862]: result: Y 999 - ALL_TRUSTED,DNS_FROM_RFC_ABUSE,FROM_ENDS_IN_NUMS,GTUBE,NO_REAL_NAME,UNDISC_RECIPS scantime=1.2,size=487,mid=<20051204035518.450BFC6249@l-penguin.idv.tw>,autolearn=disabled
  7. 6 Dec 4 1158 dns postfix/pickup[18137]: 251C8C625F: uid=86 from=<babiku007@yahoo.com.tw>
  8. 7 Dec 4 1158 dns postfix/cleanup[18169]: 251C8C625F: message-id=<20051204035518.450BFC6249@l-penguin.idv.tw>
  9. 8 Dec 4 1158 dns postfix/pipe[18170]: 450BFC6249: to=<someone@your.domain.name>, relay=postfixfilter, delay=40, status=sent (l-penguin.idv.tw)
  10. 9 Dec 4 1158 dns postfix/qmgr[18138]: 450BFC6249: removed
  11. 10 Dec 4 1158 dns postfix/qmgr[18138]: 251C8C625F: from=<babiku007@yahoo.com.tw>, size=3186, nrcpt=1 (queue active)
  12. 11 Dec 4 1158 dns postfix/local[18174]: warning: dict_nis_init: NIS domain name not set - NIS lookups disabled
  13. 12 Dec 4 1158 dns postfix/local[18174]: 251C8C625F: to=<someone@your.domain.name>, relay=local, delay=0, status=sent (delivered to mailbox)
  14. 13 Dec 4 1158 dns postfix/qmgr[18138]: 251C8C625F: removed
  15. 14 Dec 4 1159 dns postfix/smtpd[18166]: disconnect from mail-test.l-penguin.idv.tw[127.0.0.1]

  16. root #
複製代碼
當你有看到信被打分數,就表示新的垃圾分析有在運作了。
分析
在你的 maillog 裡,會明顯看到這是一封分數高達 999 的 SPAM,現在我們來看看被認定為 SPAM 的信會長什麼樣子,當然以下我以 Openwebmail 來開啟我的信件。

若是為 SPAM,那麼就會在主旨的最前面多出個 [SPAM] 字樣,現在來看看表頭部份。
  1. Return-Path: <babiku007@yahoo.com.tw>
  2. X-Original-To: someone@your.domain.name
  3. Delivered-To: someone@your.domain.name
  4. Received: by l-penguin.idv.tw (Postfix, from userid 86)
  5. id 251C8C625F; Sun, 4 Dec 2005 1158 +0800 (CST)
  6. Received: from localhost by dns.l-penguin.idv.tw
  7. with SpamAssassin (version 3.0.4);
  8. Sun, 04 Dec 2005 1158 +0800
  9. From: babiku007@yahoo.com.tw
  10. To: undisclosed-recipients:;
  11. Subject: [SPAM] Test SPAM mail
  12. Date: Sun, 4 Dec 2005 1118 +0800 (CST)
  13. Message-Id: <20051204035518.450BFC6249@l-penguin.idv.tw>
  14. X-Spam-Flag: YES
  15. X-Spam-Checker-Version: SpamAssassin 3.0.4 (2005-06-05) on
  16. dns.l-penguin.idv.tw
  17. X-Spam-Level: **************************************************
  18. X-Spam-Status: Yes, score=999.6 required=5.0 tests=ALL_TRUSTED,
  19. DNS_FROM_RFC_ABUSE,FROM_ENDS_IN_NUMS,GTUBE,NO_REAL_NAME,UNDISC_RECIPS
  20. autolearn=disabled version=3.0.4
  21. X-Spam-Report:
  22. * 0.2 NO_REAL_NAME From: does not include a real name
  23. * 0.5 FROM_ENDS_IN_NUMS From: ends in numbers
  24. * 1.4 UNDISC_RECIPS Valid-looking To "undisclosed-recipients"
  25. * -2.8 ALL_TRUSTED Did not pass through any untrusted hosts
  26. * 1000 GTUBE BODY: Generic Test for Unsolicited Bulk Email
  27. * 0.4 DNS_FROM_RFC_ABUSE RBL: Envelope sender in abuse.rfc-ignorant.org
  28. MIME-Version: 1.0
  29. Content-Type: multipart/mixed; boundary="----------=_439268CE.44AD695C"
  30. Status: R
複製代碼
X-Spam-Level 後面接了個很多 "*",每個 * 都表示一個分數,而超過所設定的分數 (本例為 5),那麼就會在 X-Spam-Status 記錄為 Yes,判別為 SPAM。
應用
在使用過 SpamAssassin 之後,小弟本人是非常的建議使用,因為判別的精準度非常高,當然在 User 使用離線軟體 (如 Outlook) 時,再配合其過濾功能 (把 [SPAM] 開頭的信件直接刪除) 就能讓信件看起來更清爽。
後記
小弟在 12/04/2005 完成這篇文章之後,發現收到測試的 SPAM mail 越來越多了,這表示有很多網友觀看小弟的文章,小弟非常高興,但是也希望把 RCPT TO: 這個後面的 mail 改成您自己實際的測試帳號,不然小弟一開信就是一堆 Test SPAM Mail,開始有點吃不消了呢!


 

臉書網友討論
發表於 2011-10-25 00:44:29 | 顯示全部樓層
真好。。。。。。。。。  

版主招募中

發表於 2011-10-25 00:40:54 | 顯示全部樓層
有空一起交流一下  


發表於 2011-11-23 01:01:50 | 顯示全部樓層
感謝樓主  


發表於 2011-11-23 01:03:33 | 顯示全部樓層
真是汗啊  我的帖子好少啊  加油  


您需要登錄後才可以回帖 登錄 | 註冊 |

本版積分規則



Archiver|手機版|小黑屋|免責聲明|TShopping

GMT+8, 2016-12-11 00:55 , Processed in 0.060417 second(s), 19 queries .

本論壇言論純屬發表者個人意見,與 TShopping綜合論壇 立場無關 如有意見侵犯了您的權益 請寫信聯絡我們。

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表