Linux安全应用之防垃圾邮件服务器的构建
一
.垃圾邮件产生的原因
垃圾邮件
(SPAM) 也称作UCE(Unsoticited Commercial Email.未经许可的商业电子邮件)或UBE(Unsolicited Bulk Email,未经许可的大量电子邮件)。首次关于垃圾邮l件的记录是1985年8月的一封通过电子邮件发送的连锁信,一直持续到1993年6月出现了名为“Make Money Fast 的电子邮件。1994年4月SPAM一词首次出现.当时Canter和Siegel律师事务所把一封信发送到6000多个新闻组,宣传获得美国国内绿卡的法律支持。这时开始,很多商人瓤利用垃圾邮件广告。1995年首个专门用于发送垃圾邮件的程序Floodgate发布,诙程序能够自动地把邮件发送给大批人。同年8月开始出现出售邮件地址的事件。从此,垃圾邮件频频出现.也引起了人们的反感。
垃圾邮件产生的原因是多方面的,主要有多种原因。主要是经济利益的驱使,电子邮件在海量“群发”方面具有得天独厚的便利性。所以屡禁不绝。垃圾邮件和病毒有很多相似之处,他们都具有蔓延性、变化性,但是垃圾邮件的产生和蔓延与病毒有很大的不同。病毒的制造和蔓延一般来说并不能给制造者和传播者带来直接或间接的经济利益;而垃圾邮件的制造和散发能够给发送者带来直接或间接的经济利益。
二
.垃圾邮件防御手段
对于垃圾邮件的防治,由于垃圾邮件是用专门的邮址搜索软件和邮件群发软件来完成网上邮址收集和邮件散发的,一个邮址搜索软件每次可以搜索到几万至十几万个有用邮址,一个邮件群发软件每天可以发送上百万封同样或不同内容的垃圾邮件,所以对于自动化的垃圾邮件制造方式用人工手段进行删除显得无能为力,必须借助一定的技术手段对付批量垃圾邮件。
有了邮件地址和邮件内容,垃圾邮件发送者要做的就是在尽量短的时间内将垃圾邮件发送出去。他们通常使用专用的群发工具或邮件列表系统来达到目的。早些时候,
Sendmail等多数MTA默认设置是开放转发(Open Relay)的,任何用户都可以通过Intemet上大量存在的开放转发MTA主机来发送邮件。于是,垃圾邮件制造者会首先查找一定数量响应速度快的、开放转发的MTA主机,通过它们来完成收件人服务器名字解析及发送的工作。后来,为了避免成为垃圾邮件的中转站,各种主流MTA程序的默认设置都改为默认禁止开放转发,而且,越来越多的开放转发的服务器都被列入各种黑名单过滤。Intemet上可用的开放转发的主机正在不断减少。于是,垃圾邮件制造者开始广泛使用本身具有收件服务器名字解析功能的群发工具和邮件列表系统。这些发送者通常使用家庭宽带进行发送,其IP地址也不断变化,为追踪和屏蔽制造了障碍。垃圾邮件的发送环节与对抗垃圾邮件的过滤环节具有直接的对应关系,在这个环节上可用的技术很多,用户应当从自身的实际情况出发进行遴选和应用。下面介绍目前广泛使用的防垃圾邮件技术。
(1).SMTP
用户认证
目前常见并十分有效的方法是,在
MTA上对来自本地网络以外的Intemet的发信用户进行SMTP认证,仅允许通过认证的用户进行远程转发。这样既能够有效避免MTA主机为垃圾邮件发送者所利用,又为出差在外或在家工作的员工提供了便利。如果不采取SMTP认证,则在不牺牲安全的前提下,设立面向Intemet的Web邮件网关也是可行的。
此外,如果
SMTP服务(MTA)和POP3服务集成在同一主机上,则在用户试图发信之前对其进行POP3访问验证(POP before SMTP)就是一种更加安全的方法。但在应用的时候要考虑到当前支持这种认证方式的邮件客户端程序还不多。
(2).逆向名字解析
无论哪一种认证,其目的都是避免
MTA被垃圾邮件发送者所利用,但对于发送到本地的垃圾邮件仍然无可奈何。要解决这个问题,最简单有效的方法是对发送者的IP地址进行逆向名字解析。通过DNS查询来判断发送者的IP与其声称的名字是否一致,例如,其声称的名字为mx.yahoo.com,而其连接地址为20.200.200.200,与其DNS记录不符,则予以拒收。这种方法可以有效过滤掉来自动态IP的垃圾邮件。对于某些使用动态域名的发送者,也可以根据实际情况进行屏蔽。
但是上面这种方法对于借助
Open Relay的垃圾邮件依然无效。对此,更进一步的技术是假设合法的用户只使用本域具有合法Internet名称的MTA主机发送E-Mail。例如,若发件人的邮件地址为[email protected],则其使用的MTA的Internet名字应具有google.com的后缀。这种限制并不符合SMTP协议,但在多数情况下是切实有效的。
需要指出的是,逆向名字解析需要进行大量的
DNS查询,从而耗用大量的系统资源和网络资源,为了提高性能和避免出现由于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集成使用。
内容过滤是以上所有各种方法中耗费计算资源最多的,在邮件流量较大的场合,需要配合高性能服务器使用。
三、构建实例
下面以
Linux系统上最传统的Sendmail服务器(其他邮件服务器的设计思路一类似的)为例,采用上面介绍过的几种技术应对垃圾邮件的危害。
(1)关闭Sendmail的Relay功能
所谓
Relay就是指别人能用这台SMTP邮件服务器给任何人发信,这样别有用心的垃圾发送者就可以使用这台邮件服务器大量发送垃圾邮件,最后导致别人投诉的不是垃圾发送者,而是这台服务器。因此,必须关闭Relay。其方法就是,到Linux服务器的/etc/mail目录编辑access文件,去掉“*relay”之类的设置,只留“localhost relay”和“127.0.0.1 relay” 两条即可。
注意,修改
access文件后还要使用“makemap hash access.db
(2)打开Sendmail的SMTP认证功能
关掉了
Relay功能,用户就不能使用客户端软件发信,此时需要Sendmail配置,开放其SMTP认证功能,再在客户端如OE、foxmail等当中打开SMTP认证,这样就可以正常使用SMTP服务器了。
在
Red Hat Linux 5.0中配置SMTP认证非常方便,首先用“rpm –qal grep sasl”命令检查有没有安装cyrus-sasl软件包。如果没有安装的话,则用命令“rpm -ivh cyrus-sasl.rpm”安装所有软件包,接着打开/etc/mail/sendmail.mc文件,修改如下三行:
dnl TRUST_AUTH_MECH ('DIGEST-MD5 CRAM-MD5 LOGIN PLAIN') dnl
dnl define ('confAUTH_MECHANISMS','DIGEST-MD5 CRAM-MD5 LOGIN PLAIN') dnl
DAEMON_OPTIONS ('Port=smtp,Addr=127.0.0.1,Name=MTA')
将它们修改如下:
TRUST_AUTH_MECH ('DIGEST-MD5 CRAM-MD5 LOGIN PLAIN') dnl
define ('confAUTH_MECHANISMS','DIGEST-MD5 CRAM-MD5 LOGIN PLAIN') dnl
DAEMON_OPTIONS ('Port=smtp,Addr=0.0.0.0,Name=MTA')
(3)在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地址可以到www.spamhaus.org查询。RBL将收集到的专发垃圾邮件的IP地址加入他们的黑名单,只要在Sendmail中加入RBL认证功能,就会使邮件服务器在每次收信时都自动到RBL服务器上去查实,如果信件来源于黑名单,则Sendmail会拒收邮件,从而使单位的用户少受垃圾邮件之苦。
在
Sendmail中添加RBL认证,只要对sendmail.mc添加以下几句话:
FEATURE('dnsbl','relays.ordb.org','"Email blocked using ORDB.org-see " ')
FEATURE ('dnsbl','dnsbl.njab1.org',' ','"451 Temporary、lookup failurefor" $&{client_addr}" in cbl.anti-spam.org.cn" ')
上面每行表示增加一个
RBL服务器。最后执行“m4 sendmail.mc>sendmail.cf”和“service sendmail restart”两条命令,使有关Sendmail的修改生效。
除了利用
sendmail的自带功能,还能够利用其他的专用工具来防止垃圾邮件,比较著名的有由Matt Sergeant、Craig Hughes和Justin Mason于2001年4月首次发布的SpamAssassin (SA)。SA目前最新版本是3.0.2,它是较为流行的反垃圾邮件软件。据SpamAssassin供应商Deersoft的统计,目前大约有3万台Unix服务器上使用了SpamAssassin。
SpamAssassin利用
Perl语言来对邮件内容进行规则匹配,从而达到判断过滤垃圾邮件的目的。它的判断方式是基于评分的方式,也就是说如果这封邮件符合某条规则,则给与一定分值;当累计的分值超过了一定限度时,则判定该邮件为垃圾邮件。SpamAssassin能够方便地同sendmail或qmail等软件配合使用。关于SA的安装使用和配置的详细说明,可以参考其使用手册http://spamassassin.apache.org/。