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

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

中国教育网 > 教育信息化
您现在的位置: EDU首页 > 教育信息化 > 技  术
设计并实现基于SpamAssasin的反垃圾邮件客户端
http://www.edu.cn   2008-08-04 作者:孙彬;孙东红

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

  一般来说,垃圾邮件的过滤层次可以分为基于服务器的过滤和基于客户端的过滤两种。目前,基于服务器反垃圾邮件产品的开发相对比较成熟,CCERT也推出了基于中文分析的垃圾邮件过滤网关。服务器端的垃圾邮件过滤方案具有不占用用户系统资源、管理便捷等优点。然而,对于部分用户而言,用户更希望能够将定制过滤规则、是否采取过滤手段的决定权掌握在自己手里。因此,本文通过设计并实现基于客户端过滤的垃圾邮件解决方案以满足单个用户在终端过滤垃圾邮件的需求。

  运行框架

图1 反垃圾邮件客户端逻辑框架图

  图1为反垃圾邮件客户端的逻辑框架示意图。反垃圾邮件客户端工作于MUA的前一层,对于用户是透明的,每当用户收取邮件时,客户端会在MUA的前一层对邮件进行分析过滤,如果是垃圾邮件,会在邮件的尾部加上[AntiSpam]标签再交给MUA处理。

  详细设计

图2 反垃圾邮件客户端结构图

  如图2所示,反垃圾邮件客户端由:Email数据包截获模块、管道控制模块、邮件检测模块、配置管理模块、规则更新模块、用户界面模块等六个模块组成。通信过程可以描述为:由“Email数据包截获模块”在会话层截获Email数据包,通过“管道控制模块”将截获的Email数据包交给“邮件检测模块”处理;“邮件检测模块”分析邮件结束后再由管道控制模块将分析结果反馈给“Email数据包截获模块”,如果判定结果认定是垃圾邮件,“Email数据包截获模块”将在邮件内容中添加上“垃圾邮件标识”后继续将数据包上传给应用层的MUA。

  Email数据包截获模块

  Email数据包截获模块主要功能是每当本地的MUA(Outlook、foxmail等)收取邮件时,邮件拦截并存储在本地磁盘中。该模块采用SPI技术来实现,工作于会话层。

  邮件检测模块

  邮件检测模块主要功能是分析并判断存储在本地磁盘上的一封电子邮件是否是垃圾邮件,通过执行SpamAssassin.exe完成该模块的功能。SpamAssassin.exe是一个已编译好的Windows下的可执行程序,它使用Perl语言开发, SpamAssassin.exe调用SpamAssassin Perl开发包程序。该模块的输入与输出分别为:

  输入:电子邮件在本地的存储路径;

  输出:是否为垃圾邮件的标志

  0-垃圾邮件

  1-正常邮件

  2、3-错误标示

  管道控制模块

  邮件检测模块的SpamAssassin.exe是一个可执行的程序,“Email数据包截获模块”是一个VC的模块,我们通过设计“管道控制模块”实现VC程序调用可执行程序SpamAssassin.exe,因此,“管道控制模块”相当于“Email数据包截获模块”和“邮件检测模块”的接口。“管道控制模块”调用“邮件检测模块”进行垃圾邮件判别,并将结果反馈给“Email数据包截获模块”。

  配置管理模块

  配置管理模块是实现访问、管理配置文件和规则集的中控模块,是其他模块访问配置文件的接口。主要有以下功能:

  1) 提供读取配置文件、规则集的接口,其他程序通过接口函数能获取配置信息;

  2) 修改创建配置文件、规则集,其他程序通过接口函数能修改配置、规则。

  规则更新模块

  本客户端是一个基于评分的系统,在规则集中的每条规则都有相应的分值,每匹配一条规则就给邮件加上相应的分数,当一封邮件的总得分超过一个预定的阀值就把这封邮件认定为垃圾邮件。

  过滤规则包括邮件头规则、邮件体规则、邮件地址黑白名单、URI黑名单、DNS黑名单等多种规则,过滤规则的质量是过滤准确度的关键,为了应对各种类型的垃圾邮件,提高垃圾邮件的过滤效果,过滤规则需要经常更新。“规则更新模块”提供了下载、更新规则集的功能,使反垃圾邮件的能及时地使用最新的规则过滤垃圾邮件。

  规则更新模块提供了两种工作模式:定时更新和手动更新。可以根据用户的要求,设置更新的时间定时更新;也可以当用户触发更新的信号时,客户端连接Update服务器手动更新。

  关键问题

  Email数据包拦截

  开发一个对用户透明的反垃圾邮件客户端,首先需要解决的问题是要在MUA的前一层将Email数据包拦截下来,网络封包的截获技术主要有以下几种:

  1) NDIS中间驱动程序截获网络封包;

  2) 过滤驱动程序截获网络封包;

  3) 使用Winsock2 SPI截获网络封包。

  相比之下,前两者的工作层次比较低,可以在较低的层次截获网络封包,但都属于驱动程序的范畴,对代码质量要求很高,一点的失误都可能会产生非常严重的后果。而SPI工作与应用层的层面,它虽然不能截获底层的网络封包,但完全可以满足反垃圾邮件客户端截获封包的需要,考虑到系统的安全性,我们使用SPI技术来截获网络封包。

  SPI(Service Provider Interface)直译过来就是服务提供者接口。Winsock 2是围绕着Windows开放系统架构(WOSA,Windows Open System Architecture)来设计的,WOSA在Winsock和Winsock应用程序之间有一个标准API;在Winsock和Winsock服务提供者(比如TCP/IP)之间有一个标准的SPI。我们通过这个接口就可以实现Email数据包的截获程序。

  VC中调用SpamAssassin

  SpamAssassin是Perl开发包,SPI程序需要由VC来开发,如何将二者有机地结合起来呢,可以采用两种方法:

  第一,嵌入式Perl。使用一些接口函数,在C程序中实现一个嵌入的Perl解释器,用来解释执行一些Perl程序。

  第二,Windows管道技术。使用SpamAssassin开发一个检测垃圾邮件的Perl程序,并利用Perl编译器,将其编译成为一个Windows下的可执行程序,然后使用Windows管道技术在VC程序中调用这个可执行程序来判断垃圾邮件。

  从效率的角度考虑,由于两者最终都要实现在C程序中调用Perl,效率的差别都不大。但嵌入式Perl在使用Perl的模块时非常复杂,而使用SpamAssassin时无法避免要调用很多其他的模块,因此,我们在反垃圾邮件客户端开发过程中选择使用Windows管道技术。

  经过测试,采用统一规则的反垃圾邮件客户端能够保障漏判率低于1%时,垃圾邮件识别率达到80%左右。此外,我们发现,如果用户自定义的规则更新频繁,或者增加与规则更新服务器的个性化交互反馈学习机制,可以进一步提高垃圾邮件的识别率。在小范围内测试时,我们的最高识别率可以达到97.6%,误判率0.7%,这个结果是令人满意的。然而,时间效率仍旧有些不尽人意,我们下一步的工作重心将落在实现提高时间效率上。

(作者单位为CCERT中心)

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

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

MOOC风暴来袭

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

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