020-29133788
    资 讯
    您的位置:首页 >> 资 讯 >> LINUX应用 >> Linux教程 >> 正文
    Linux作业系统下防垃圾邮件基本功

    点击:   发布日期:2013-01-09

    本文来自 www.020fix.com


    作者:曹江华


    垃圾电子邮件成为了人们最头疼的问题之一。在Windows作业系统中也许您已经尝够了垃圾邮件给您带来的苦头,不要以为在Linux作业系统平台中就能避免垃圾电子邮件给我们带来的骚扰,反击和过滤垃圾电子邮件是一件很重要的工作。下面介绍一些在Linux中广泛使用的防垃圾邮件技术。

    (1)SMTP用户认证

    目前常见并十分有效的方法是,在邮件传送代理(Mail Transport Agent,MTA)上对来自本地网路以外的互联网的发信用户进行SMTP认证,仅允许通过认证的用户进行远端转发。这样既能够有效避免邮件传送代理伺服器为垃圾邮件发送者所利用,又为出差在外或在家工作的员工提供了便利。如果不采取SMTP认证,则在不牺牲安全的前提下,设立面向互联网的Web邮件闸道也是可行的。 此外,如果SMTP服务和POP3服务集成在同一伺服器上,在用户试图发信之前对其进行POP3访问验证(POP before SMTP)就是一种更加安全的方法,但在应用的时候要考虑到当前支援这种认证方式的邮件用户端程式还不多。

    (2)逆向名字解析

    无论哪一种认证,其目的都是避免邮件传送代理伺服器被垃圾邮件发送者所利用,但对于发送到本地的垃圾邮件仍然无可奈何。要解决这个问题,最简单有效的方法是对发送者的IP位址进行逆向名字解析。通过DNS查询来判断发送者的IP与其声称的名字是否一致,例如,其声称的名字为mx.hotmail.com,而其连接位址为20.200.200.200,与其DNS记录不符,则予以拒收。这种方法可以有效过滤掉来自动态IP的垃圾邮件,对于某些使用动态功能变数名称的发送者,也可以根据实际情况进行遮罩。但是上面这种方法对于借助Open Relay的垃圾邮件依然无效。对此,更进一步的技术是假设合法的用户只使用本域具有合法互联网名称的邮件传送代理伺服器发送电子邮件。例如,若发件人的邮件地址为someone@yahoo.com,则其使用的邮件传送代理伺服器的Internet名字应具有yahoo.com 的尾码。这种限制并不符合SMTP协定,但在多数情况下是切实有效的。 需要指出的是,逆向名字解析需要进行大量的DNS查询。

    (3)即时黑名单过滤

    以上介绍的防范措施对使用自身合法功能变数名称的垃圾邮件仍然无效。对此比较有效的方法就是使用黑名单服务了。黑名单服务是基于用户投诉和采样积累而建立的、由功能变数名称或IP组成的资料库,最着名的是RBL、DCC和Razor等,这些资料库保存了频繁发送垃圾邮件的主机名字或IP位址,供MTA进行即时查询以决定是否拒收相应的邮件。但是,目前各种黑名单资料库难以保证其正确性和及时性。例如,北美的RBL和DCC包含了我国大量的主机名字和IP位址,其中有些是早期的Open Relay造成的,有些则是由于误报造成的。但这些迟迟得不到纠正,在一定程度上阻碍了我国与北美地区的邮件联繫,也妨碍了我国的用户使用这些黑名单服务。

    (4)内容过滤

    即使使用了前面诸多环节中的技术,仍然会有相当一部分垃圾邮件漏网。对此情况,目前最有效的方法是基于邮件标题或正文的内容过滤。其中比较简单的方法是,结合内容扫描引擎,根据垃圾邮件的常用标题语、垃圾邮件受益者的姓名、电话号码、Web位址等资讯进行过滤。更加复杂但同时更具智慧性的方法是,基于贝叶斯概率理论的统计方法所进行的内容过滤,该演算法最早由Paul Graham提出(http://www.paulgraham.com/spam.html),并使用他自己设计的Arc语言实现。这种方法的理论基础是通过对大量垃圾邮件中常见关键字进行分析后得出其分布的统计模型,并由此推算目标邮件是垃圾邮件的可能性。这种方法具有一定的自适应、自学习能力,目前已经得到了广泛的应用。最有名的垃圾邮件内容过滤是Spamassassin,它使用Perl语言实现,集成了以上两种过滤方法,可以与当前各种主流的MTA集成使用。内容过滤是以上所有各种方法中耗费计算资源最多的,在邮件流量较大的场合,需要配合高性能伺服器使用。




    Sendmail是Redhat Linux以及大多数类Unix作业系统的邮件传送代理,因此它是目前配置最广泛的邮件伺服器。下面以Redhat Linux 9.0使用的Sendmail为例,介绍应对垃圾邮件的几种具体方法。

    (1)关闭Sendmail的Relay功能

    所谓Relay就是指别人能用这台SMTP邮件伺服器给任何人发信,这样别有用心的垃圾发送者就可以使用这台邮件伺服器大量发送垃圾邮件,而最后别人投诉的不是垃圾发送者,而是这台伺服器,因此必须关闭Relay。其方法就是,到Linux伺服器的/etc/mail目录编辑access档,去掉"*relay"之类的设置,只留"localhost relay"和"127.0.0.1 relay"两条即可。注意,修改access档后还要使用命令使修改生效:makemap hash access.db < access。

    (2)在Sendmail中添加RBL功能

    RBL(Realtime Blackhole List)是即时黑名单。国外有一些机构提供RBL服务,常用的RBL伺服器地址有relays.ordb.org、dnsbl.njabl.org、bl.spamcop.net、sbl.spamhaus.org、dun.dnsrbl.net和dnsbl.sorbs.net。查询和删除RBL中的IP位址可以到http://openrbl.org/和http://ordb.org。RBL将收集到的专发垃圾邮件的IP地址加入他们的黑名单,只要在Sendmail中加入RBL认证功能,就会使邮件伺服器在每次收信时都自动到RBL伺服器上去查实,如果信件来源于黑名单,则Sendmail会拒收邮件,从而使单位的用户少受垃圾邮件之苦。在Sendmail中添加RBL认证,需要对sendmail.mc添加以下内容:

    代码:

    FEATURE?#93;`dnsbl',`relays.ordb.org',`″Email blocked using ORDB.org - see ″')



    最后执行"m4 sendmail.mc>sendmail.cf"和"service sendmail restart"两条命令,使有关Sendmail的修改生效。

    (3)打开Sendmail的SMTP认证功能

    1、伺服器端设置

    关掉了Relay功能,用户就不能使用用户端软体发信,此时需要Sendmail配置,开放其SMTP认证功能,再在用户端如Outlook Express 、foxmail等当中打开SMTP认证,这样就可以正常SMTP伺服器了。在Red Hat Linux 9.0中配置SMTP认证非常方便,首先用命令检查有没有安装cyrus-sasl套装软体。

    代码:

    #rpm -qa|grep sasl
    cyrus-sasl-2.1.10-4
    cyrus-sasl-plain-2.1.10-4
    cyrus-sasl-devel-2.1.10-4
    cyrus-sasl-md5-2.1.10-4



    如果没有安装的话,用命令"rpm -ivh cyrus-sasl*.rpm"安装所有套装软体,接着打开/etc/mail/sendmail.mc档,修改如下三行:

    代码:

    dnl TRUST_AUTH_MECH?#93;`DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
    dnl define?#93;`confAUTH_MECHANISMS',`DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
    DAEMON_OPTIONS?#93;`Port=smtp,Addr=127.0.0.1,Name=MTA')dn1



    修改为:

    代码:

    TRUST_AUTH_MECH?#93;`DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
    define?#93;`confAUTH_MECHANISMS',`DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
    DAEMON_OPTIONS?#93;`Port=smtp,Addr=192.168.1.200,Name=MTA')dn1



    然后产生cf档,并进行测试:

    代码:

    #m4 sendmail.mc > sendmail.cf
    #service sendmail restat
    # sendmail d0.1 -bv root |grep SASL
    NETUNIX NEWDB NIS PIPELINING SASL SCANF STARTTLS TCPWRAPPERS #修改成功标志



    下一步测试,以Telnet到TCP 25埠的方式:

    代码:

    #telnet localhost 25
    ehlo localhost
    注意有没有以下的资讯出?#123;.
    250-xxxxxxxx
    250-xxxxxxx
    250-AUTH LOGIN CRAM-MD5 DIGEST-MD5
    250-xxxxxx



    Outlook Express 和Foxmail 使用LOGIN认证,Netscape Mail使用PLAIN认证。

    2、用户端设置

    在Outlook Express主窗口,单击"工具(T)"选单,在下拉选单中选中"帐号(A)"。在"Internet帐号"窗口中,选定某一邮件帐号,单击"属性(P)"。在弹出的帐号"属性"视窗中(见图3),选择"伺服器"选项卡,选中"我的伺服器要求身份验证(V)"。单击旁边的"设置(E)"按钮,在"外发邮件伺服器"视窗中选择"使用与接收邮件伺服器相同的设置(U)"。按"确定"后,设置便完成了。



    图1:Outlook Express SMTP认证的设置


    (4)使用专用工具防止垃圾邮件

    除了利用sendmail的自带功能,还能够利用其他的专用工具来防止垃圾邮件,比较着名的有由Matt Sergeant、Craig Hughes和Justin Mason于发布的SpamAssassin(SA)。目前最新版本是3.0.2,它是较为流行的反垃圾邮件软体,据SpamAssassin供应商 Deersoft的统计,目前大约有3万台Unix伺服器上使用了SpamAssassin。SpamAssassin利用Perl语言来对邮件内容进行规则匹配,从而达到判断过滤垃圾邮件的目的。它的判断方式是基于评分的方式,也就是说如果这封邮件符合某条规则,则给与一定分值;当累计的分值超过了一定限度时,则判定该邮件为垃圾邮件。对Sendmail、Qmail、Postfix和Exim等各种邮件平台都适用。当它被最终用户或系统管理员调用时,它可以方便地与大多数流行的邮件处理系统进行介面互连。SpamAssassin在对一封信件应用了各项规则之后,生成一个分值来表示其为垃圾邮件的可能性。它可以设置上百条规则,包括对邮件头的处理、对邮件内容的处理及对邮件结构的处理等。每条规则都对应一个分值(可正、可负),每封信件的分值就是所匹配规则的分值之和。如果分值为负,表示这封信件是正常的;相反,如果分值为正,则表示信件有问题。如果超过了某个默认的分值,筛检程式就会标识其可能为垃圾邮件,然后交由用户做出最终抉择。SpamAssassin的安装使用过程比较简单,在互联网上有专业文章介绍,更加专业的敍述可以查看:O'Reilly出版的 SpamAssassin,书号 ISBN : 0-596-00707-8,2004。这里就不赘述了。