郵件過濾的好幫手 - Spamassassin
1 .套件安裝
建立給掛載光碟的資料夾
# mkdir /cdrom
掛載光碟
# mount /dev/cdrom /cdrom
# cd /cdrom/CentOS/
安裝Spamassassin 套件
rpm -ivh \
perl-Archive-Tar-1.30-1.fc6.noarch.rpm \
perl-Compress-Zlib-1.42-1.fc6.i386.rpm \
perl-Digest-HMAC-1.01-15.noarch.rpm \
perl-Digest-SHA1-2.11-1.2.1.i386.rpm \
perl-HTML-Parser-3.55-1.fc6.i386.rpm \
perl-HTML-Tagset-3.10-2.1.1.noarch.rpm \
perl-IO-Socket-INET6-2.51-2.fc6.noarch.rpm \
perl-IO-Socket-SSL-1.01-1.fc6.noarch.rpm \
perl-IO-Zlib-1.04-4.2.1.noarch.rpm \
perl-Net-DNS-0.59-3.el5.i386.rpm \
perl-Net-IP-1.25-2.fc6.noarch.rpm \
perl-Net-SSLeay-1.30-4.fc6.i386.rpm \
perl-Socket6-0.19-3.fc6.i386.rpm \
perl-URI-1.35-3.noarch.rpm \
perl-libwww-perl-5.805-1.1.1.noarch.rpm \
spamassassin-3.2.4-1.el5.i386.rpm
2 . 設定 Spamassassin 的設定檔 /etc/mail/spamassassin/local.cf
2.1 備份local.cf的設定:
# cp /etc/mail/spamassassin/local.cf /etc/mail/spamassassin/local.cf.bak
2.2 local.cf 可參照下列網站產生 http://www.yrex.com/spam/spamconfig.php
# vi /etc/mail/spamassassin/local.cf
把上列網址產出的貼到 local.cf 內 vi /etc/mail/spamassassin/local.cf
required_score 8.0
rewrite_header subject [SPAM]
report_safe 1
use_bayes 1
bayes_auto_learn 1
skip_rbl_checks 0
use_razor2 1
use_dcc 1
use_pyzor 1
ok_languages all
ok_locales all
always_add_headers 0 # 不是spam就不要動它的頭
report_safe 0 # 就算是spam也不要亂搞它的身體
use_terse_report 1 # 不需要詳細的報告
spam_level_stars 0 # 用不到星星
3 . 新增一spamfilter使用者
# useradd -s /sbin/nologin spamfilter
# passwd spamfilter
4 . 編寫 filter script
# vi /usr/local/sbin/filter.sh
#!/bin/bash
exec /usr/bin/spamc -d 127.0.0.1 -f -p 783 -t 30 -e /usr/sbin/sendmail -i "$@"
exit $?
5 . 修改/usr/local/sbin/filter.sh檔案擁有者及權限
# chown spamfilter.spamfilter /usr/local/sbin/filter.sh
# chmod 755 /usr/local/sbin/filter.sh
6 . 設定 postfix
再來,我們需要再設定 postfix 一下,讓 postfix 在接收信件時,使用 SpamAssassin 來做信件過濾,其中會設定到最重要的 /etc/postfix/master.cf 檔,所要請記得要特別小心!
# vi /etc/postfix/master.cf
#修改以下兩個項目
smtp inet n - n - - smtpd -o content_filter=postfixfilter
smtp unix - - n - - smtp -o content_filter=postfixfilter
#在最後一行加入以下句子
postfixfilter unix - n n - - pipe flags=Rq user=spamfilter argv=/usr/local/sbin/filter.sh -f ${sender} -- ${recipient}
重新啟動 ####(記得postfix 也要重新啟動)####
# chkconfig spamassassin on
# service spamassassin restart
# service postfix restart
7 . Spamassassin 學習
以後如果收到沒判定的垃圾信的話,就把信 "以附加檔案方式轉寄" 給自己 Server 上的spam信箱, 如果是被Spamassassin 誤判為垃圾信的郵件,就把它轉寄給nonspam也就是說, 讓這兩個信箱收集可以給Spamassassin 學習的範本。
先新增兩帳號 sapm、nonspam
# useradd -s /sbin/nologin spam
# useradd -s /sbin/nologin nonspam
# passwd spam
# passwd nonspam
學習黑白名單的指令
#sa-learn -D --showdots --spam --mbox /var/spool/mail/spam #學習黑名單
#sa-learn -D --showdots --ham --mbox /var/spool/mail/nonspam #學習白名單
學習完成後, 即可將 spam 與 nonspam 信箱清空:
# true > /var/spool/mail/spam
# true > /var/spool/mail/nonspam
自動更新中國的一個Spamassassin發展團體所出的過濾規則
# wget -N -P /usr/share/spamassassin www.ccert.edu.cn/spam/sa/Chinese_rules.cf
將學習黑白名單自動化
以上是透過手動的方式更新Spamassassin的過濾條件,下面我們可以利用一些自動化的方式每過自動更新Spamassassin。以下請自行編寫自動執行檔的內容
# vi /root/sa-learn.sh
#!/bin/bash
sa-learn --spam --mbox /var/spool/mail/spam
true > /var/spool/mail/spam
sa-learn --ham --mbox /var/spool/mail/nonspam
sa-update -D --nogpg
/usr/bin/wget -N -P /usr/share/spamassassin www.ccert.edu.cn/spam/sa/Chinese_rules.cf
排程自動執行執行sa-learn.sh
# chmod 700 /root/sa-learn.sh
# crontab -e
在行末新增一行
1 1 * * * /root/sa-learn.sh # 在每天的一點一分執行sa-learn.sh檔案
9 . 一些小祕技
黑白名單的統計資料學習統計資料
# sa-learn --dump magic
白名單設置
Spamassassin 安裝完成之後,無論是公司內部或是公司外部都會做掃描,可以做白名單來預防類似誤判的事件發生。
header LOCAL_RCVD From =~ /(example|.example\.com\.tw)/
describe LOCAL_RCVD Received from local machine
score LOCAL_RCVD -1000
使用Procmail自動刪除刪除一定分數的垃圾信
Spamassassin的預設功能上並沒有將垃圾信自動刪除的機制,不過我們可以用Procmail的過濾表投機制來達成一定分數以上的SPAM Mail自動刪除。
開啟procmail功能
# vi /etc/postfix/main.cf
新增以下參數
mailbox_command = /usr/bin/procmail
編輯 Procmail 的規則檔案
# vi /etc/procmailrc
新增以下設定
:0
* ^X-Spam-Level: \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
/dev/null
或是可以把垃圾信歸檔到Roundcube的垃圾信資料夾
:0
* ^X-Spam-Status: Yes
$HOME/mail/Spam
# service postfix restart