中国教育和科研计算机网
EDU首页 |  中国教育 |   高校科技 |   教育信息化 |   CERNET
教育信息化

资讯 | 专题 会议 观点 专栏 访谈 企业 产品 CIO 技术 校园信息化 下一代互联网 IPv6视频课堂

中国教育网 > 教育信息化
您现在的位置: EDU首页 > 教育信息化 > 技  术
实现基于SpamAssassin的中文垃圾邮件过滤网关
http://www.edu.cn   2008-08-11 作者:陈光英 孙东红

字体选择:【大】 【中】 【小】

   一般情况下,原始的邮件服务器并没有垃圾邮件过滤功能。为了增添此功能,通常采用两种方案。第一,直接在邮件服务器上添加过滤模块。然而,一方面邮件服务器的工作性质决定其很难通过停止服务或者定期的暂停服务来安装或更新垃圾邮件过滤系统,同时也存在安全隐患。另一方面,针对不同的邮件服务器软件我们还需要编写不同的接口,很不方便。因此综合考虑安全性和便捷性,人们就更喜欢第二种过滤方式,即垃圾邮件过滤网关。我们将过滤网关放在与邮件服务器相同的网络环境下,只需在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

  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

  这些模块都能在网站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纪录指向邮件网关,并在邮件网关配置相应的邮件路由。

  如果不希望垃圾邮件直接发送到邮件服务器(未经过网关),可以设置邮件服务器只接受来自过滤网关的邮件。

  来源:《中国教育网络》2005年11月刊

页面功能 【打印】 【关闭】 【我有话说

MOOC风暴来袭

版权所有:中国教育和科研计算机网网络中心 CERNIC,CERNET,京ICP备15006448号-16,京网文[2017]10376-1180号

关于假冒中国教育网的声明 | 有任何问题与建议请联络:Webmaster@staff.cernet.com