SpamAssassin的中文规则研究及实践
陈光英,孙东红,段海新
清华大学信息网络工程研究中心 100084
{qa sundh dhx}@cernet.edu.cn
近年来,随着垃圾邮件对国际网络环境和网络经济的影响日益扩大,我国的垃圾邮件尤其是中文垃圾邮件问题已经成为阻碍Internet健康发展的主要障碍之
一.SpamAssassin是垃圾邮件过滤技术最为典型而广泛的应用平台,它通过邮件特征信息分析和基于规则的过滤方法消灭垃圾邮件.利用
SpamAssassin过滤中文垃圾邮件时,过滤效果依赖于中文规则的数目以及过滤规则的有效程度.SpamAssassin的中文规则少而且规则的形
式和权重值都亟待于合理的设置和调整.采用统计和遗传算法文中设计并实现了中文规则生成以及规则权重值的训练,同时通过CCERT(中国教育和科研计算机
网紧急响应小组)等提供的真实邮件信息进行了过滤实验,验证了设计方案并生成高效的SpamAssassin中文规则.
关键词: 垃圾邮件,SpamAssassin,中文规则, 权重值
引言
自从互联网普及以来,电子邮件成为人们生活中便捷的通信手段之一.然而,垃圾邮件像瘟疫一样蔓延,污染网络环境,占用了大量的传输,存储和运算资源,影响
网络的正常通信.垃圾邮件的内容形形色色,常见的包括广告,色情信息,病毒或蠕虫引起邮件深度扩散等诸多类型.由于垃圾邮件具有数量多,反复性,强制性,
欺骗性,不健康性和传播速度快等特点,严重干扰了人们的正常生活,浪费用户的时间,精力甚至造成很多额外的经济支出和信息安全隐患[1].
本文从反垃圾邮件的应用角度出发,详细剖析了垃圾邮件过滤器SpamAssassin的技术原理以及SpamAssassin在中文邮件检测中所遇到的问
题,研究了对SpamAssassin检测中文垃圾邮件的改进策略和解决方案,并依据研究成果基于中国教育科研网应急响应小组提供的真实数据开展进一步的
实验以及结果分析.
1.1垃圾邮件和反垃圾邮件技术
垃圾邮件虽然至今还没有一个准确的定义,但人们已经依据其诸多表征将垃圾邮件描述为:邮件通常是未经收件人主动请求又无法拒收的,大量的邮件的内容相似而
又隐藏或伪造了发件人身份,地址,标题等信息.随着垃圾邮件问题日趋严重,人们从未停止过对这类邮件的治理工作.自1994年12月,
spam一词开始用于表示垃圾邮件起,随着CAUCE (Coalition Against Unsolicited Commercial
E-mail)以及MAPS,SPAMHAUS,ORBS,SPAMCOP等国际组织和服务单位的相继成立,以及 RFC2502,
Anti-Spam Recommendations for SMTP
MTAs的正式发布都使得对反垃圾邮件技术的研究工作在国内外蓬勃的开展起来了,反垃圾邮件的产品研发和提供反垃圾邮件服务也成为近年来互联网经济链上最
有效益的经济增长点之一.
当前反垃圾邮件技术主要包括:垃圾邮件过滤技术,邮件服务器的安全管理和配置技术以及对简单邮件通信协议(SMTP)的改进研究等.这其中垃圾邮件的过滤
技术是当前最受注目的研究方向和反垃圾邮件产品的主流技术.SpamAssassin就是垃圾邮件过滤技术最为典型而广泛的应用平台[2].
1.2 SpamAssassin过滤垃圾邮件
spamAssassin是通过分析邮件信息并统计垃圾邮件相似度来判断是否为垃圾邮件的应用软件,是一种基于规则的垃圾邮件过滤器.一般来说,基于规则
的垃圾邮件过滤技术都依赖特定的电子邮件平台或者工具如Procmail等,
然而Procmail具有相当大的局限性,它使得构建在其上的任何垃圾邮件过滤器(例如JunkFilter和SpamBouncer)[3]太呆板和耗
时从而无法迅速适应垃圾邮件制造者的新手段,同时使用和定制的困难性使其对于某些类型的模式匹配也难以实现.更因为Procmail
并不是对每个人都适用,以Procmail为基础构建的邮件过滤器本质上就会有限制用户群的缺陷.SpamAssassin则弥补了这方面的缺陷,其开发
采用了新的平台语言Perl,Perl能够广泛应用在许多操作系统上,易于扩展,并能从各种环境和工具上调用,尤其擅长模式匹配.以Perl作为平台,使
得SpamAssassin很容易从脚本上被调用,所以可以恨容易的将几乎任何MTA配置成使用SpamAssassin来实现垃圾邮件过滤.
在基于规则的垃圾邮件过滤技术方面,SpamAssassin处于遥遥领先的地位,它曾被IBM指定为推荐的垃圾邮件过滤组件,并且已经被RedHat公
司OEM到RedHat
Linux的标准安装组件里.另一方面,尽管SpamAssassin并没有以Procmail为基础,但是它还是可以方便地与Procmail,
Sendmail或qmail以及其它MTA一起使用来为单一用户甚至整个站点过滤垃圾邮件.因为SpamAssassin 并不是诸如
Sendmail,Procmail 或qmail
之类的特定邮件系统的插件,而可成为是完全独立的平台,当它被最终用户或系统管理员调用时可以方便地与大多数流行的邮件处理系统进行接口互连.
1.3 SpamAssassin的原理及其对中文垃圾邮件检测的主要问题
与传统的基于规则的垃圾邮件过滤器相比,SpamAssassin的实现方法比较独特.尽管它仍然使用匹配规则来标识可能是垃圾邮件的邮件,但它采用了一
种对消息分类的方法.SpamAssassin没有寻求创建那些将消息标识为"垃圾邮件Spam
"或"非垃圾邮件No-spam"的规则,而是利用概率推断给定的消息是否为垃圾邮件.当SpamAssassin处理一封邮件时,它会对这封信件应用各
项规则,生成一个总的权重来表示其为垃圾邮件的可能性.标准 SpamAssassin
规则集中有几百条规则,包括对邮件头的处理,对邮件内容的处理及对邮件结构的处理等.每条规则都对应一个权重(可正,可负),每封信件的总权重就是所匹配
规则的权重之和.如果总权重为负,表示这封信件被判定为是"正常邮件";相反,如果总权重为正,则表示信件为"疑似垃圾邮件".如果总权重超过了某个默认
的阈值,过滤器就会将它判定为"垃圾邮件",进而对主题,主体和 X-Spam-Status
头添加一个标记,然后用户就可以使用自己喜欢的邮件用户代理程序的过滤功能将这些带有标记的垃圾邮件消息扫除到"垃圾邮件"文件夹或删除它们.
由于SpamAssassin采用这种概率统计的,基于权重的方法来处理邮件,而不是简单地接受或拒绝邮件,因此,即使有些规则不够完美,但是当与所有其
它规则的判定结果结合使用时,在垃圾邮件标识过程中,就能够起到很有效的作用.这与大多数以前的垃圾邮件过滤器的要求(每条规则必须保持完全独立)截然相
反.经过实践证明,这种方法不仅灵活性好,而且适应性强,能够有效地降低正常邮件的丢失几率,从而大大提高垃圾邮件的过滤效率.
pamAssassin充分利用了统计技术,可以自动地"学习"所接收邮件的特点,用以调整垃圾邮件的分值.比如,如果来自某个地址的邮件基本上全部属于
正常邮件,但偶尔其发送了一封广告信(通常广告信具有很高的分值),这时系统就会自动降低这封邮件的分值以确保检测的准确度.除了对邮件的信封,信头,信
体的分析和规则匹配检查以外,SpamAssassin还可以访问诸如商业黑名单服务和 Razor 及 DCC
垃圾邮件校验和数据库之类的外部数据库.如果消息的校验和出现在 Razor
中,则触发相应的规则,并将其对应的分数加到消息分数中.这些外部校验完全被视为类似的任意其它规则,当用户认为合适时,能够对与这些数据库中的一个匹配
相关的权重进行调整.由于SpamAssassin
可以不断地学习和访问动态数据库,甚至无需安装定期规则更新,所以与严格基于规则的系统相比,SpamAssassin更适合长时间地使用.
pamAssassin除了自带的规则以外,它还允许用户修改已有规则的权重或者定义自己的判定规则.用户可以通过创建
.spamassassin/user_prefs.cf或者修改local.cf[4]文件轻松定制如何标记和标识垃圾邮件,修改将消息标识为垃圾邮件
所需的阈值,创建新规则以及对现有规则重新设置权重等等.
SpamAssassin在国外已经得到了广泛的应用它对英文垃圾邮件的过滤已经达到了很高的准确度.目前国内也有不少用户在使用
SpamAssassin,很多国内反垃圾邮件产品的开发商都借鉴了SpamAssassin技术路线.然而尽管SpamAssassin在设计的时候考
虑了多种语言的兼容,但是它的某些规则的权重对于中文邮件来说有些偏高,中文用户使用前需要对规则权重进行较大的调整[5],因而
SpamAssassin中文垃圾邮件的检测还有很多亟待改进的地方.
经过分析我们认为,SpamAssassin对中文垃圾邮件检测不力的主要问题来自几个方面:其一,语言分析能力的差异.由于对中文语言缺乏理解
SpamAssassin的研发人员没有对中文规则进行深入地研究,SpamAssassin中的很多中文数据来自用户及志愿者的提供,而他们中的大多数
都非中文用户,因而容易出现中文邮件规则权重过高等问题;其二,目前广泛应用的SpamAssassin基本上都是比较适合英文用户的版本,其中的英文过
滤规则占总规则数的绝大部分,这些英文规则在中文邮件的检测过程中也会产生比较大的干扰;
其三,尽管SpamAssassin提供了比较合理而完善的过滤机制,但其仍就需要大量的邮件信息组成的训练数据集.我们在研究的过程中发现训练集的大小
会直接影响到过滤规则的质量和过滤效果,建立大规模的中文邮件数据库作为遗传算法的训练集,这样训练后产生的规则权重才具有实践意义.
3 提高SpamAssassin对中文垃圾邮件的过滤
我们将SpamAssassin检测中文垃圾邮件的改进策略融入到解决方案中,并将其分为生成中文规则和训练中文规则权值两部分内容.
3.1中文规则的生成
我们采用统计的方法从中文垃圾邮件集中建立中文邮件规则.考虑到邮件主题和内容都有自己的特点,我们将中文邮件规则分为两类:主题规则和内容规则,分别通过统计垃圾邮件集的主题和内容的词频统计出来.具体步骤如下:
(1)中文邮件解码.中文邮件常见的两种编码是Base64和QuotedPrint.
(2)分词,我们使用基于词典,最长词匹配以及从左到右切词的分词技术实现对解码后的中文邮件分词[6].
(3)词频统计并提取词频最大的1000主题词和1000个内容词.
(4)根据SA的规则写法标准,建立相应的SA规则.主题规则和内容规则的名字分别表示为"CN_subject_"和"CN_body_".例如: header CN_subject_2 Subject =~ /免费/
describe CN_subject_2 Most frequent word in Chinese spam subject
score CN_subject_2 0.1
(4)利用SA提供的mass-check脚本对中文规则进行评估,最后选出1000条最好的规则.
4.2 基于遗传算法的中文邮件规则权值的训练
我们采用遗传算法来训练规则的权值.在遗传算法中,染色体用所有中文规则的权值表示,优化目标是用该规则权值组对训练集的数据的测试得到的正确率[7].
训练时,我们把门限值定位2.8,比SA缺省的门限值(5)小.这样可以淹没英文规则对中文规则的干扰.通过训练,我们的到一组最好的权值.
4.3 实验
实验数据来自近年来CCERT(中国教育和科研计算机网紧急响应小组)的垃圾邮件事件响应信息库(70封左右/天)以及大量的蜜罐信箱和部分合作伙伴及志
愿者的电子信箱.实验中使用的训练集包括172,902封中文垃圾邮件和506,095封中文正常邮件.为了得出训练后的最好权值组合,我们对不同的门限
值进行了再一次测试,计算出不同门限值的错误率,查全率和查准率等.结果如图(一)和图(二)表示.
图(一)错误率随着门限值的曲线 图(二)垃圾邮件检测的ROC曲线
图(一)
是检测正常邮件和垃圾邮件的错误率随门限值的变化.随着门限值增大,检测垃圾邮件的错误率减低了,而监测正常邮件的错误率则增高了.换而言之,提高门限就
能检测出更多垃圾邮件,但其代价是误警率也会增高.这一特点从图(二)的ROC曲线中更明显,即查全率越大,误警率越大.实验结果表明,当门限值为
2.8,查全率为0.876,误警率为0.029.
4.4小结
提高和深入对中文垃圾邮件问题的研究是我国乃至全世界受其困扰的用户所渴望的.通过对SpamAssassin工作原理和中文过滤缺陷的深入研究和分析,
本文将对SpamAssassin检测中文垃圾邮件的改进策略与解决方案的设计结合在了一起,从中文规则的生成,规则权重值的训练以及通过实际的邮件信息
进行的实验结果都表明:完善中文规则后SpamAssassin过滤中文垃圾邮件效果有了很大提高,应用效果比较好.另一方面通过文中的实验生成的中文规
则信息形成了当前中文垃圾邮件过滤效果最佳的规则数据库,这也对我国的垃圾邮件过滤技术的发展具有很大促进作用.