|
一般情况下,原始的邮件服务器并没有垃圾邮件过滤功能。为了增添此功能,通常采用两种方案。第一,直接在邮件服务器上添加过滤模块。然而,一方面邮件服务器的工作性质决定其很难通过停止服务或者定期的暂停服务来安装或更新垃圾邮件过滤系统,同时也存在安全隐患。另一方面,针对不同的邮件服务器软件我们还需要编写不同的接口,很不方便。因此综合考虑安全性和便捷性,人们就更喜欢第二种过滤方式,即垃圾邮件过滤网关。我们将过滤网关放在与邮件服务器相同的网络环境下,只需在DNS服务器上做微小调整,过滤网关就可以正常工作。此外,过滤网关与邮件服务器使用的软件无关,一个网关可以同时为多个不同的邮件服务器提供运行支持。
本文主要介绍了利用开源反垃圾邮件平台SpamAssassin结合CCERT中文垃圾邮件过滤规则实现中文垃圾邮件过滤网关的方法。
运行框架
在实际连接中,过滤网关与邮件服务器处在相同的网络环境下。在逻辑框架中,邮件服务器的DNS MX记录指向邮件网关,这样所有发送到邮件服务器的邮件将首先经过网关处理,之后再转发给邮件服务器。
系统安装
下面将详细介绍如何安装一个垃圾邮件过滤网关。过滤网关使用Redhat 9操作系统,Sendmail 8.13.4,SpamAssassin 3.1.0,mimedefang 2.51,Perl 5.8.0。在安装Redhat9时选择全部安装(everything),安装所有组件,此时系统本身自带了Perl 5.8.0,Sendmail,SpamAssassin,除了Perl之外,Sendmail和SpamAssassin的版本都不是最新的,所以得重新安装。
安装Sendmail 8.13.4
可从网站http://www.sendmail.org下载最新版本,安装如下。
tarzvxf sendmail.8.13.4.tar.gz
cd sendmail-8.13.4
cd devtools/Site
创建site.config.m4 文件内容如下:
APPENDDEF(`confENVDEF',`-DSASL=2')
APPENDDEF(`conf_sendmail_LIBS',`-lsasl2')
然后
cd ../../sendmail
sh Build //编译sendmail
cd ../cf/cf //进入sendmail配置文件目录
cp generic-linux.mc sendmail.mc
然后对sendmail.mc文件进行编辑,加入必要的功能模块。
此例中sendmail.mc文件中的内容如下:
divert(0)dnl
VERSIONID(`Spam-checking gateway')
OSTYPE(linux)dnl
DOMAIN(generic)dnl
FEATURE(virtusertable)dnl
FEATURE(mailertable)dnl
FEATURE(access_db)dnl###NextPage###
FEATURE (`access_list')dnl
FEATURE(always_add_domain)dnl
FEATURE(nouucp,`reject')dnl
FEATURE(`relay_based_on_MX')dnl
FEATURE(`accept_unresolvable_domains')dnl
define(`confDEF_USER_ID',``8:12'')dnl
define(`confPRIVACY_FLAGS',`goaway,noreceipts,restrictmailq,restrictqrun,noetrn')dnl
define(`confTO_QUEUERETURN',`1h')dnl
define(`confTO_QUEUEWARN',`1d')dnl
define(`confMAX_DAEMON_CHILDREN',`60')dnl
define(`ConfMAX_MESSAGE_SIZE',`10000000')dnl
define(`confMAX_CONNECTION_RATE_THROTTLE',`10')dnl
define(`confMAX_RCPTS_PER_MESSAGE',`500')dnl
define(`confMILTER_LOG_LEVEL', `8')dnl
INPUT_MAIL_FILTER(`mimedefang',
`S=unix:/var/spool/MIMEDefang/mimedefang.sock,F=,T=S:60s;R:60s;E:60s')dnl
define(`confAUTH_MECHANISMS',`LOGIN PLAIN GSSAPI DIGEST-MD5')dnl
TRUST_AUTH_MECH(`LOGIN PLAIN GSSAPI DIGEST-MD5')dnl
DAEMON_OPTIONS(`Port=smtp, Name=MTA')dnl
FEATURE(`no_default_msa')dnl
DAEMON_OPTIONS(`Port=587, Name=MSA, M=Ea')dnl
MAILER(local)dnl
MAILER(smtp)dnl
MAILER(procmail)dnl
编译sendmail
sh Build sendmail.cf
将生成的配置文件安装到相应的目录中
sh Build install-cf
将编译的sendmail文件安装到相应目录中
cd ../../sendmail
sh Build install
到此,sendmail安装成功。
安装SpamAssassin 3.1.0
可从网站http://SpamAssassin.apache.org获得最新版程序。SpamAssassin的安装很简单,如下操作:
tarvxf Mail-SpamAssassin-3.1.0.tar.gz
cd Mail-SpamAssassin-3.1.0
perl Makefile.PL
make
make install
不报错的话就安装成功了。添加中文垃圾邮件过滤规则规则可从
http://www.ccert.edu.cn/spam/sa/Chinese_rules.cf下载,把该规则放在/etc/mail/SpamAssassin目录下。
安装Mimedefang
可从网站http://www.mimedefang.org下载最新版本。这是一个结合sendmail和Perl的过滤软件,同时还能调用SpamAssassin判定垃圾邮件,此软件依赖很多Perl模块,因此在安装之前请确保已经安装了如下模块:
Digest-SHA1-2.00.tar.gz
IO-stringy-2.110.tar.gz
MailTools-1.1401.tar.gz
MIME-Base64-3.03.tar.gz
MIME-tools-5.417.tar.gz
Net-DNS-0.48.tar.gz###NextPage###
这些模块都能在网站http://www.cpan.org上找到。所有模块安装好后mimedefang的安装就非常简单了:
tar -zvxf mimedefang-2.51.tar.gz
cd mimedefang-2.51
./configure
Make
Make install
安装好后,将examples目录下的启动脚本init-script拷贝到/etc/init.d目录下。到此必要的程序都已经安装完毕。
运行mimedefang:/etc/init.d/init-script start
运行sendmail:/etc/init.d/sendmail start
中文过滤规则随时都在更新,因此用户可以在crontab中加入下载命令定时更新自己的规则,但注意每次更新都需要重启加载SpamAssassin规则的程序。假如用户想一个月更新一次,那么在root的crontab中应该添加一行:
0 0 1 * * wget -N -P /etc/mail/SpamAssassin
www.ccert.edu.cn/spam/sa/Chinese_rules.cf; /etc/init.d/init-script restart
安装mimedefang后,SpamAssassin的用户定义配置文件并不是缺省的local.cf而是samimedefang.cf。
邮件路由配置
域名服务器的配置不变,将域名MX记录指向过滤网关。过滤网关更改配置文件,编辑/etc/mail目录下的mailertable文件,添加内容如下:
example.com esmtp:internal.example.com
或者
example.com esmtp:[192.168.0.1]
internal.example.com和192.168.0.1为邮件服务器的域名和IP.编辑保存后必须运行如下命令
makemap hash mailertable.db < mailertable
编辑/etc/mail目录下的access文件,添加内容如下:
internal.example.com RELAY
makemap hash access.db < access
重启sendmail进程就行了。
实用分析
过滤网关会在每一封邮件头中加上X-Scanned-By: MIMEDefang 2.51。因此看到这个扩展信头表明系统配置成功。
为了尽量减少误判,建议使用SpamAssassin提供的白名单功能。比如在/etc/mail/SpamAssassin/ sa-mimedefang.cf中添加
whitelist_from *@cernet.edu.cn
会使所有来自cernet.edu.cn的邮件被视为正常邮件。
如果希望一个网关同时过滤多个邮件服务器的邮件,只有把所有邮件服务器的DNS MX纪录指向邮件网关,并在邮件网关配置相应的邮件路由。
如果不希望垃圾邮件直接发送到邮件服务器(未经过网关),可以设置邮件服务器只接受来自过滤网关的邮件。
|