过滤软件一瞥
本文从特定的角度来研究过滤软件。对于正确识别垃圾邮件和合法消息这方面,我想了解这些不同的方法做得如何。为了回答这个问题,我没有将注意力特别放在配置过滤器应用程序,使之能使用各种“邮件传送代理(Mail Transfer Agents (MTA))”的细节上。在 MTA(譬如,Sendmail、QMail、Procmail、Fetchmail 以及其它邮件程序)的最佳配置方面,确实存在着许多奥妙。而且,许多电子邮件客户机都有自己的过滤选项和插件 API。幸运的是,我研究的大多数过滤器都带有相当出色的文档,里面讲述了如何配置它们以与各种 MTA 协同工作。
* 集合 2:我执行以下垃圾邮件过滤器(没有按特定的顺序):
o 识别特定的恶意邮件发送者。
o 查找作为 From: 邮件头的“<>”。
o 查找邮件头中的“@<”(出于许多原因,许多垃圾邮件都有这个标记)。
o 查找“Content-Type: audio”。我不需要这个,只有 virii 病毒需要(具体情况因人而异)。
o 在邮件头中查找“euc-kr”和“ks_c_5601-1987”,我不懂这种语言,但出于某些原因,我收到了大量韩国垃圾邮件(当然,对于真正的韩国读者,这条规则恐怕不太适合他)。
* 集合 3:存储那些已知是合法地址的消息。我有几条这样的规则,但它们都仅仅与文字 To: 域相匹配。
* 集合 4:查找那些在邮件头中具有合法地址,但通过上一个 To: 过滤器没有捕获到的消息。我发现,只要我的邮件地址出现在 Bcc: 域,其中有一串按字母顺序排列的地址(譬如,mertz1@……、mertz37@……等)时,那这封邮件肯定是不请自来的邮件。
* 集合 5:到此,所剩下的可能就是垃圾邮件(它可能有伪造的邮件头以避免被识别出发送者的身份)。
2.“白名单”/验证过滤器
对于垃圾邮件的过滤,有一种主动性相当强的技术,我想称之为“白名单加自动验证”方法。这里有几种工具可以实现带验证的“白名单”:TDMA 是一个深受大家喜爱的多平台开放源码工具;ChoiceMail 是一个针对 Windows 的商业性工具;其它大多数似乎都比较初级。(请参阅本文后面的参考资料,那里有一些链接。)
5. 贝叶斯(Bayesian)单词分布过滤器
Paul Graham 于 2002 年 8 月写了一篇极具争议的文章。在“A Plan for Spam”(请参阅本文后面的参考资料)中,Graham 提议建立垃圾邮件和非垃圾邮件单词的贝叶斯概率模型。Graham 的文章或者其它任何有关统计和概率的一般性文章都详细讲述了数学方面的背景知识,比我在这里讲得更透彻。
表 1. 垃圾邮件过滤技术量化的准确度
技术 合法邮件语言资料库
(正确识别 vs. 错误识别) 垃圾邮件语言资料库
(正确识别 vs. 错误识别)
"The Truth" 1851 vs. 0 1916 vs. 0
三元模型 1849 vs. 2 1774 vs. 142
单词模型 1847 vs. 4 1819 vs. 97
SpamAssassin 1846 vs. 5 1558 vs. 358
Pyzor 1847 vs. 0(4 个错误) 943 vs. 971(2 个错误)
* Lawrence Lessig 写了一些书和文章,对他戏称的“西海岸代码”和“东海岸代码”— 换句话说,指在华盛顿特区(以及其它地区)通过的法律和在硅谷(以及其它地方)所编写的软件 — 进行了深刻的对比。就 Lessig 的 Code and Other Laws of Cyberspace,我写了一篇短评。要更多地研究这方面的内容,请参阅 Lessig 的网站。
* 在 developerWorks 的 Linux 专区,查找更多有关 Linux 的文章。
关于作者
David Mertz 不喜欢垃圾邮件。他希望能感谢 Andrew Blais 对这篇文章中的测试所提供的帮助,以及感谢他能倾听 David 对于三元模型和它们的分发情况所进行的引人入胜的讲述。可以通过 [email protected] 与他联系;可在 http://gnosis.cx/publish/ 上了解他的生活。欢迎对过去、现在和以后的文章提出意见和建议。