2.对远程主机提供的SMTP会话信息进行确认
另一个阻挡垃圾邮件的有效方法是在SMTP会话期间对远程主机所使用的SMTP信息进行验证。很多MTA程序允许配置对进入的SMTP信息进行严格的检查。两个经常被检查的SMTP命令是HELO(对于ESMTP为EHLO)和MAIL FROM。
HELO命令用来找出远程服务器的真实身份。通过执行DNS主机名查找时,对由HELO命令所提供的无效信息进行过滤。
MAIL FROM命令用于确定邮件发送者。正常的MAIL FROM命令包括接收邮件地址的正式域名(Fully Qualified Domain Name,FQDN)格式,不符合要求的将拒绝接收。
如果使用Qmail的SMTP信息检查,必须使用一些Qmail的补丁程序,包括qmail-badhelo_diff.patch、 qmail-badmailfrom-wildcard.patch、qmail-badrcptto_diff.patch、 qmail-reject_percent_diff.patch、qmail-limit-bounce-size.patch和 qmail-smtpd-auth-0.31.patch。
3.通过查找已知的垃圾邮件记号过滤进入的信息
通过以上的一些措施,有相当一部分的垃圾邮件会被阻止连接。但只是从发送邮件服务器的特征,如主机地址、IP和连接数量等来杜绝垃圾源还远远不够,还需要仔细检查邮件本身是否包含有垃圾内容。所以,需要在应用层上做内容过滤。
(1)使用qmail-qfilter过滤带有特定词语的邮件
qmail-qfilter是一个允许在Qmail队列程序前加入基于Perl的过滤器脚本。此脚本可以定义多条过滤规则,针对邮件中的任何数据进行扫描和过滤,不论数据信息是在邮件头还是邮件体中。例如:
#!/usr/bin/perlwhile(){print;exit 31 if /^Subject: Make more money/;exit 31 if /^From: 123\@spamco.com/}
这种方式的优点是简单,缺点是不够智能,且对中文过滤不起作用。由于它是置于qmail-queue程序前执行,因此它的效率直接对邮件系统产生影响,加上过滤效果并不显著,因此不建议使用。
(2)使用SpamAssassin软件分析邮件是否为垃圾邮件
SpamAssassin是一个非常优秀的、基于贝叶斯算法、功能强大的反垃圾邮件开源软件。
SpamAssassin的判断是一种给邮件进行评分的系统。根据邮件的各种特征可以给出符合条件的正或负的评分,加在一起就是总的评分,这个分值越高就越有可能是垃圾邮件。
通常可以设置一个区别的分值,比如默认是5分,等于或高于此分值的邮件会被判断为垃圾邮件,从而让邮件系统选择进行何种处理。SpamAssassin也可以在调用Razor及DCC等数据库的基础上,再采用人工加权或scored的方法进行垃圾邮件识别。在本例邮件系统中使用了以下技术减少垃圾邮件的侵入。
◆ 下载并安装DCC和Razor的Perl源码包,使用DCC和Razor的特征数据库,为SpamAssassin的评分提供更准确的信息。
◆ 下载互联网上由中国反垃圾邮件联盟提供的垃圾邮件信息,分别放在SpamAssassin的特征库中。如chese_diy.cf文件内容为:
body ch_free1 /免费的/body ch_free2 /激情的/......score ch_free1 0.5score ch_free2 1.5score ch_free3 1.5score ch_free4 3.0......
如果邮件内容包括以上这些词语,SpamAssassin评出的分值就会高出区别分值,邮件系统就会认为这是一封内容超标的垃圾邮件而拒绝接收。这种方法的优点是可以根据实际情况灵活调整对应的分值,使之更符合要求,有效降低误报、误杀率;缺点是查杀效率较低,影响邮件系统的性能。建议在硬件配置比较高的机器上采用。
其它的方法还包括使用Maildrop过滤及分类投递邮件等。
最后,简单地说一下防止病毒。如果想使用免费的防毒软件可以考虑基于个人版的Linux杀毒软件,如BitDefender公司的BitDefender-Qmail工具,再配合Qmail-Scanner(原名scan4virus)。这是一个专门为Qmail开发的邮件扫描脚本程序,用Perl编写,可以支持多个Unix下的专业查毒软件,安装和使用比较简单。需要注意的是,它需要最新的Perl 5.8版本支持,因此使用此程序需要升级系统的Perl版本。
如果是构建商用邮件系统,建议购买商业版杀毒软件。这样,无论是在查杀病毒的效率上,还是病毒特征库的更新速度上都会更有保证。