Linux安全应用之防垃圾邮件server的构建
一.垃圾邮件产生的原因
垃圾邮件
(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主机,通过它们来完毕收件人server名字解析及发送的工作。后来,为了避免成为垃圾邮件的中转站,各种主流MTA程序的默认设置都改为默认禁止开放转发。并且,越来越多的开放转发的server都被列入各种黑名单过滤。Intemet上可用的开放转发的主机正在不断降低。于是,垃圾邮件制造者開始广泛使用本身具有收件server名字解析功能的群发工具和邮件列表系统。
这些发送者通常使用家庭宽带进行发送,其IP地址也不断变化。为追踪和屏蔽制造了障碍。垃圾邮件的发送环节与对抗垃圾邮件的过滤环节具有直接的相应关系。在这个环节上可用的技术非常多,用户应当从自身的实际情况出发进行遴选和应用。
以下介绍眼下广泛使用的防垃圾邮件技术。
(1).SMTP用户认证
眼下常见并十分有效的方法是,在MTA上对来自本地网络以外的Intemet的发信用户进行SMTP认证,仅同意通过认证的用户进行远程转发。这样既可以有效避免MTA主机为垃圾邮件发送者所利用。又为出差在外或在家工作的员工提供了便利。假设不採取SMTP认证,则在不牺牲安全的前提下。设立面向Intemet的Web邮件网关也是可行的。
此外。假设SMTP服务(MTA)和POP3服务集成在同一主机上,则在用户试图发信之前对其进行POP3訪问验证(POP before SMTP)就是一种更加安全的方法。但在应用的时候要考虑到当前支持这样的认证方式的邮件client程序还不多。
(2).逆向名字解析
不管哪一种认证。其目的都是避免
MTA被垃圾邮件发送者所利用,但对于发送到本地的垃圾邮件仍然无可奈何。要解决问题,最简单有效的方法是对发送者的IP地址进行逆向名字解析。通过DNS查询来推断发送者的IP与其声称的名字是否一致,比如。其声称的名字为mx.yahoo.com,而其连接地址为20.200.200.200,与其DNS记录不符。则予以拒收。
这样的方法能够有效过滤掉来自己主动态IP的垃圾邮件。对于某些使用动态域名的发送者,也能够依据实际情况进行屏蔽。
可是上面这样的方法对于借助Open Relay的垃圾邮件依旧无效。对此,更进一步的技术是如果合法的用户仅仅使用本域具有合法Internet名称的MTA主机发送E-Mail。比如。若发件人的邮件地址为somebody@google.com。则其使用的MTA的Internet名字应具有google.com的后缀。这样的限制并不符合SMTP协议,但在多数情况下是切实有效的。
须要指出的是,逆向名字解析须要进行大量的DNS查询,从而耗用大量的系统资源和网络资源,为了提高性能和避免出现因为DNS服务中止或查询超时,该方法并未被普遍採用。
(3).实时黑名单过滤
以上介绍的防范措施对使用自身合法域名的垃圾邮件仍然无效,对此比較有效的方法就是使用黑名单服务了。黑名单服务是基于用户投诉和採样积累而建立的、由域名或IP组成的数据库,最著名的是RBL、DCC和Razor等。这些数据库保存了频繁发送垃圾邮件的主机名字或IP地址,供MTA进行实时查询以决定是否拒收对应的邮件。
可是。眼下各种黑名单数据库难以保证其正确性和及时性。比如。北美的
RBL和DCC包括了我国大量的主机名字和IP地址。当中有些是早期的Open Relay造成的,有些则是因为误报造成的。
这些迟迟得不到纠正,在一定程度上阻碍了我国与北美地区的邮件联系。也妨碍了我国的用户使用这些黑名单服务。在我国。黑名单服务仍处在起步阶段,可用server较少,其有效性也没有得到充分验证。
(4).内容过滤
即使使用了前面诸多环节中的技术。仍然会有相当一部分垃圾邮件漏网。对此情况眼下最有效的方法是基于邮件标题或正文的内容过滤。
当中比較简单的方法是。结合内容扫描引擎,依据垃圾邮件的经常使用标题语、垃圾邮件受益者的姓名、电话号码、Web地址等信息进行过滤。
更加复杂但同一时候更具智能性的方法是,基于贝叶斯概率理论的统计方法所进行的内容过滤。该算法最早由
Paul Graham提出(http://www.paulgraham.com/spam.html),并使用他设计的Arc语言实现。这样的方法的理论基础是通过对大量垃圾邮件中常见关键词进行分析后得出其分布的统计模型,并由此推算目标邮件是垃圾邮件的可能性。
这样的方法具有一定的自适应、自学习能力。眼下已经得到了广泛的应用。
最有名的垃圾邮件内容过滤是Spamassassin,它使用Perl语言实现。集成了以上两种过滤方法。能够与当前各种主流的MTA集成使用。
内容过滤是以上全部各种方法中耗费计算资源最多的,在邮件流量较大的场合,须要配合高性能server使用。
三、构建实例
以下以
Linux系统上最传统的Sendmailserver(其它邮件server的设计思路一相似的)为例。採用上面介绍过的几种技术应对垃圾邮件的危害。
(1)关闭Sendmail的Relay功能
所谓
Relay就是指别人能用这台SMTP邮件server给不论什么人发信,这样别实用心的垃圾发送者就能够使用这台邮件server大量发送垃圾邮件,最后导致别人投诉的不是垃圾发送者。而是这台server。因此。必须关闭Relay。
其方法就是。到Linuxserver的/etc/mail文件夹编辑access文件。去掉“*relay”之类的设置,仅仅留“localhost relay”和“127.0.0.1 relay” 两条就可以。
注意,改动access文件后还要使用“makemap hash access.db<access”命令使改动生效。
(2)打开Sendmail的SMTP认证功能
关掉了Relay功能。用户就不能使用client软件发信,此时须要Sendmail配置,开放其SMTP认证功能。再在client如OE、foxmail等其中打开SMTP认证,这样就能够正常使用SMTPserver了。
在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服务,经常使用的RBLserver地址有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认证功能,就会使邮件server在每次收信时都自己主动到RBLserver上去查实,假设信件来源于黑名单,则Sendmail会拒收邮件。从而使单位的用户少受垃圾邮件之苦。
在Sendmail中加入RBL认证,仅仅要对sendmail.mc加入下面几句话:
FEATURE('dnsbl','relays.ordb.org','"Email blocked using ORDB.org-see <http://ORDB.org/lookup/host=" $&{client_addr}">" ')
FEATURE ('dnsbl','dnsbl.njab1.org',' ','"451 Temporary、lookup failurefor" $&{client_addr}" in cbl.anti-spam.org.cn" ')
上面每行表示添加一个RBLserver。最后运行“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万台Unixserver上使用了SpamAssassin。
SpamAssassin利用
Perl语言来对邮件内容进行规则匹配。从而达到推断过滤垃圾邮件的目的。它的推断方式是基于评分的方式,也就是说假设这封邮件符合某条规则,则给与一定分值;当累计的分值超过了一定限度时,则判定该邮件为垃圾邮件。SpamAssassin可以方便地同sendmail或qmail等软件配合使用。关于SA的安装使用和配置的具体说明。可以參考其使用手冊http://spamassassin.apache.org/。
本文出自 “李晨光原创技术博客” 博客。请务必保留此出处http://chenguang.blog.51cto.com/350944/862523