Redhat, spamassassin反垃圾邮件的配置(含中文垃圾邮件)
本人使用RedHat Linux企业版服务器,自带了Sendmail邮件服务器和spamassasin发垃圾邮件装备。以前一直没有启用spamassasin,只是使用 SendMail作为内部邮件服务器,随着时间的推移,垃圾邮件非常繁多,让大家痛苦不堪。在实在不能忍受了之后,终于决定启动spamssasin重型 “装备”,开始与垃圾邮件做斗阵。
1.什么是spamassassin?
比较标准的解释有两种:
(1)官方解释(http://wiki.apache.org/spamassassin/): “SpamAssassin is a mature, widely-deployed open source project that serves as a mail filter to identify spam”;
(2)百度百科(http://baike.baidu.com/view/1465405.htm):SpamAssassin 是一种安装在邮件伺服主机上的邮件过滤器,用来辨识垃圾信。它是使用大量的预设规则检查垃圾信,这些规则会检查寄到网域内所有邮件的标头,内文,以及送信 者。他采取的过滤方式是采用记分制,也就是说会根据我们所设定的标准来给予分数超过标准值的时候即判定为 SPAM(垃圾邮件)。
总之,spamassassin就是 spam assassin(垃圾邮件杀手),不但能标识垃圾邮件,而且可以过滤垃圾邮件(或阻止垃圾邮件打扰用户)。
2.如何安装spamassassin?
掠过。
3.如何使用spamassassin?
3.1启动spamd
# /usr/bin/spamd --daemonize --pidfile /var/run/spamd.pid
说明:启动命令为spamd,设置为后台程序,并将运行时的PID写入文件/var/run/spamd.pid文件中。
3.2下载中文垃圾垃圾邮件过滤规则Chinese_rules.cf
# wget -N -P /usr/share/spamassassin www.ccert.edu.cn/spam/sa/Chinese_rules.cf
3.3每次更新Chinese_rules.cf需要重启spamd方法如下
# kill -HUP `cat /var/run/spamd.pid`
如果希望每月自动更新中文垃圾垃圾邮件过滤规则,可以在/etc/crontab文件最后加上一行。
# vi /etc/crontab (加一行)
0 0 1 * * root wget -N -P /usr/share/spamassassin www.ccert.edu.cn/spam/sa/Chinese_rules.cf;kill -HUP `cat /var/run/spamd.pid`
4.下载并安装MIME-tools
wget http://www.mimedefang.org/static/MIME-tools-5.420.tar.gz
tar zxf MIME-tools-5.420.tar.gz && cd MIME-tools-5.420
perl Makefile.pl && make && make install
5.下载并安装mimedefang
#记得先安装MIME-tools
官网地址: http://www.mimedefang.org/
下载URL: http://www.mimedefang.org/static/mimedefang-2.57.tar.gz
tar zxf mimedefang-2.57.tar.gz && cd mimedefang-2.57
./configure #如果有报错, 请参考提示信息修改,我机器报错及解决办法在下面.
make && make install
useradd defang
cp examples/init-script /etc/init.d/ #这个是启动脚本
注: 1) #./configure报错信息:
configure: WARNING: Oops.. I couldn't find libmilter.a or libmilter.so. Please install Sendmail
configure: WARNING: and its libraries. You must run Build in the libmilter/ directory
configure: WARNING: to compile libmilter.
configure: WARNING: Oops.. I couldn't find libmilter/mfapi.h. Please install Sendmail 8.12
configure: WARNING: and its header files.
#解决办法就是安装sendmail-devel包
2) #如果留意./configure时最后的信息的话, 会提示了这么一行
#Note: The MIMEDefang user 'defang' does not seem to exist. Please create this user before continuing.
#那么我们增加这个用户即可, 记得如果不增加这个用户的话, 在后面运行脚本的时候也会提示的.
#make install后, 系统也有提示, 内容如下
Please create the spool directory, '/var/spool/MIMEDefang', if it does not exist. Give it mode 700 or 750, and make it owned by the user and group you intend to run MIMEDefang as.Please do the same with the quarantine directory, '/var/spool/MD-Quarantine'.
#照做即可, 我的机器安装后就已生成这两个目录, 权限为700, 不需要调整.
6. 配置sendmail.cf文件 (vi /etc/mail/sendmail.cf)
1). 找到这行
# Input mail filters
在这行下面添加一行, 内容如下
O InputMailFilters=mimedefang
2).再找到
##### MAIL FILTER DEFINITIONS
在下面找个合适地方,添加一行,内容如下
Xmimedefang, S=unix:/var/spool/MIMEDefang/mimedefang.sock, F=,T=S:60s;R:60s;E:60s
/etc/init.d/sendmail restart #重启sendmail
7. 可以发邮件测试一下, 如果每一封邮件头都被加上了X-Scanned-By: MIMEDefang 2.57, 可以认为配置成功.(这个在maillog中也有记录)
其它:
1). 中文过滤规则随时都在更新,因此用户可以在crontab中加入下载命令定时更新自己的规则,但注意每次更新都需要重启加载SpamAssassin规则的程序。假如用户想一个月更新一次,那么在root的crontab中应该添加一行:
0 0 1 * * wget -N -P /usr/share/spamAssassin http://www.ccert.edu.cn/spam/sa/Chinese_rules.cf; /etc/init.d/init-script restart
2). 安装mimedefang后,SpamAssassin的用户定义配置文件并不是缺省的local.cf而是samimedefang.cf。
3). 如需要做垃圾邮件网关,需要注意
域名服务器的配置不变,将域名MX记录指向过滤网关。过滤网关更改配置文件,编辑/etc/mail目录下的mailertable文件,添加内容如下:
zhangjianfeng.com esmtp:internal.zhangjianfeng.com
或者
zhangjianfeng.com esmtp:[192.168.0.1]
internal.zhangjianfeng.com和192.168.0.1为邮件服务器的域名和IP.
编辑保存后必须运行如下命令
makemap hash mailertable.db < mailertable
编辑 /etc/mail目录下的access文件,添加内容如下:
internal.zhangjianfeng.com RELAY
makemap hash access.db < access
重启sendmail进程就行了。
如果希望一个网关同时过滤多个邮件服务器的邮件,只有把所有邮件服务器的DNS MX纪录指向邮件网关,并在邮件网关配置相应的邮件路由。
4).为了尽量减少误判,建议使用SpamAssassin提供的白名单功能。比如在/etc/mail/SpamAssassin/sa-mimedefang.cf中添加
whitelist_from *@cernet.edu.cn
会使所有来自cernet.edu.cn的邮件被视为正常邮件。
#Follow is diables some bad rules for chinese mail
#################################################
score SUBJ_FULL_OF_8BITS 0.0
score BASE64_ENC_TEXT 0.0
score BAYES_99 0.1
score BAYES_90 0.1
score BAYES_80 0.1
score BAYES_70 0.1
score BAYES_60 0.1
score FROM_ILLEGAL_CHARS 0.1
score HEAD_ILLEGAL_CHARS 0.1
score SUBJ_ILLEGAL_CHARS 0.1
score MIME_BASE64_TEXT 0.1
score FAKE_HELO_AOL 0.1
score NO_RDNS_DOTCOM_HELO 0.1
score CHINA_HEADER 0.1
故整理了一下CBL/CDL/CBL+/CBL-的在Spamassassin里的配置格式,
其中有些设置了检查返验证码,有些没设,以及分值的设定等等,这些可根据各自的实际情况设置。
其中我们推荐优先使用CBL-和CML。
CODE |
#最佳推荐之使用CBL-# header RCVD_IN_CBLLESS eval:check_rbl('cblless', 'cblless.anti-spam.org.cn.', '127.0.8.5') describe RCVD_IN_CBLLESS Received via a relay in cblless.anti-spam.org.cn tflags RCVD_IN_CBLLESS net score RCVD_IN_CBLLESS 3.5 #最佳推荐之使用CML# #header RCVD_IN_CBL eval:check_rbl('cbl', 'cbl.anti-spam.org.cn.') #header RCVD_IN_CBL_DIALUP eval:check_rbl('cdl-notfirsthop', 'cdl.anti-spam.org.cn.', '127.0.8.4') #header RCVD_IN_CBL_PLUS eval:check_rbl('cblplus', 'cblplus.anti-spam.org.cn.') |
以下两行另存为一个.cf文件 ,过滤指定主题和内容
header CN_SUBJECT_992 Subject =~ /135/
describe CN_SUBJECT_992 Subject contains "135"
score CN_SUBJECT_992 0.3
body CN_BODY_977 /91/.com/
describe CN_BODY_977 Body contains "91/.com"
score CN_BODY_977 1.500
body CH_FREE /免费/
describe CH_FREE 内有中文字"免费",疑为垃圾信件。
score CH_FREE 15
#whitelist_from *@163.com
whitelist_from *@koowo.com
blacklist_from *@listhost.us
更多spamassassin配置参数,请参见命令 perldoc Mail::SpamAssassin::Conf
vi /etc/procmailrc
# 启动SpamAssassin系統, filter all incoming mail through SpamAssassin and tags probable spam with a unique header
# 小于100K的信件要执行检查, 超过直接放过他!
#### 如果看到是被打上Spam字样,就送入nulluser信箱
#SHELL=/bin/sh
#LOGFILE=/var/log/procmail.log #如果启用这个,就是加日志功能
:0fw: spamassassin.lock
* < 100000 #
| /usr/bin/spamassassin #仅检查100K以内的邮件
:0:
* ^X-Spam-Flag: Yes
/var/mail/nulluser
種垃圾郵件後續處理方式(要修改/etc/procmailrc )
1.直接刪除(較不建議)
:0:
* ^X-Spam-Status: Yes
/dev/null
2.移到spam帳號下
:0:
* ^X-Spam-Status: Yes
/var/spool/mail/spam
建立spam帳號
useradd spam
passwd spam
touch /var/spool/mail/spam
chown spam /var/spool/mail/spam(這樣才不會有權限問題)
3.移到每位user的home/mail/廣告信
:0:
* ^X-Spam-Status: Yes
$HOME/mail/廣告信
cd /root
pico -w touch_file.sh
—–touch_file.sh——–
for i in /home/*
do
#mkdir $i/mail
touch $i/mail/廣告信
chown `basename $i /home/` $i/mail/廣告信
done
——–
chmod +x touch_file.sh
./touch_file.sh
1.中文垃圾邮件过滤规则集(sendmail+Spamassassin+mimedefang环境)(http://blog.chinaunix.net/u/17657/showart_244852.html)
2.用 SpamAssassin 消灭垃圾邮件(http://www.ibm.com/developerworks/cn/linux/other/l-spam/index.html)
3.基于sendmail的反垃圾邮件服务器的研究与实现(http://hi.baidu.com/findi/blog/item/991905af125780fcfbed501f.html)