在过去的一年中,如何解决垃圾邮件是我们大家都关注的问题。我们通过启用网景邮件服务器(Netscape Messaging Server)上的UBE过滤,摆脱了邮件垃圾的困扰,也使某些一度中断的通往国外的邮路得到恢复。本文介绍我们在Netscape邮件服务器上实施邮件过滤的经验。
Netscape邮件服务器的UBE插件
1.关于Netscape邮件服务器的SMTP插件
3.x版后Netscape邮件服务器提供了一个应用编程接口,方便第三方开发服务器插件,来扩展邮件服务器的特定站点功能。SMTP插件就是利用该编程接口开发的,它可对信头和信体进行预处理,包括字符集转换、内容过滤以及拆分信封信息进行重新定义等等。SMTP插件作用于服务器处理邮件的两个特定时段:邮件收到后(PostSmtpAccept)或邮件递送前(PreSmtpDeliver),前者实际是MTA过滤,后者是MDA过滤,在这两个时段拦截进出的邮件,分析其特征,在放行之前采取适当的行动。
2.UBE 插件简介
UBE插件是SMTP 插件的一种,3.x版后Netscape邮件服务器内预建了该插件,随邮件服务器自动安装。它提供了灵活的、可订制的过滤能力来移除或重定向不需要的信息。UBE即Unsolicited Bulk Email,由UCE(Unsolicited Commercial Email)演化而来,英文俗称spam(垃圾邮件)。UBE 插件支持简单的脚本语言,可按需订制,创建过滤规则(rule),生成过滤指令(filter)。UBE 插件就是做MTA过滤,它在PostSmtpAccept时段产生动作,逐一检查要求发送的邮件与过滤指令的匹配程度,有选择地删除、拦截和重定向那些有UBE特征的数据流。不受过滤规则影响的邮件可继续进行正常行程。
过滤指令就是筛选邮件的标准,在任何时候只要邮件信息满足这个标准,就触发你在其中指定的动作(action)。你可创建不同类型的过滤指令,根据情况的变化随时激活或禁用它们。通过Netscape服务器的管理界面或直接编辑所在的UBEfilter.cfg文件是操作过滤的两个途径。
3.UBE过滤指令的格式
一条过滤指令在UBE配置文件UBEfilter.cfg中就是一行纯文本文字,包含3到5个字段。顺序如下:
[:label] | MessageField | MatchCriterion | Action | [argument] [:label]――过滤指令的标签。仅当本指令是另一条过滤指令的跳转(JUMP)动作的目的地时才用标签来识别。
MessageField――过滤指令所分析邮件的信头(Header)或信封(envelope)中的一部分。过滤指令利用这些信息来决定如何处理邮件。信头由客户端(client)在发送邮件时产生,信封是服务器在将邮件从发送者传送到接收者过程中发送或再转发信息时产生的,包含了关于该邮件的一些关键信息。RFC821定义了一些标准的Header field,包括To、From、Sender、Reply-To、Content-type、Subject等等。
在应用过滤规则时,你可以规定UBE插件既检查信封也检查信头,也可以加一个标记 (tag)――envonly来指示过滤指令仅仅考查信封信息。由于信头比信封更容易被邮件发送者改变,使用该标记可以抵制基于信头信息的欺骗攻击。可用于过滤规则的信封项包含:submitted-date、host-from、user-from、auth-sender、mail-exts、channel-to、rcpt-exts、messages-size、MTA-hops等等。
MatchCriterion――关于messagefield的相应匹配标准。它是一些字符串或规则表达式。Messagefield与MatchCriterion的结合称作过滤规则的声明。比如:Subject“Bad mail”就是一个声明。声明的状态,即匹配或不匹配决定了该规则是否被应用。
Action――规定了当声明匹配时UBE插件采取的动作。可用的Action有:copy、drop、exit、holdcopy、holdonly、jump、reject、run等等。
[argument]――用于对某些特殊动作做附加说明。说明文字随退信一起发给发件人。
邮件过滤
下面来看如何利用UBE 插件设计一套过滤规则对垃圾邮件实行Anti-Relay。
1.如果你在防火墙外面安装了一个独立的外部邮件服务器,设置它只接收外部邮件但并不向外转发内部邮件,也就是说只是一个MX,那么通过检查Channel-To 信封项就能有效地阻止relaying。
* Channel-To “xyz.com” EXIT
Channel-To
表示特定发件指向,后跟邮件接收者列表,相当于SMTP的rcpt to命令后跟的邮件接收人,可以是单个邮件地址、邮件列表或一个邮件域;
xyz.com
表示具体匹配标准,这里指xyz.com域内的所有信箱;
EXIT
表示只要是发给xyz.com域内任意信箱的邮件,无须下面的过滤就可放行。
* $ANY “.*”REJECT “We accept mail for XYZ Company only”
$ANY
任意信封项;
.*
匹配任意字符串(可以为空);
REJECT
表示通不过上一条过滤的邮件就退回发送者;
We accept mail for XYZ Company only
Argument,是在退函中的附言。
第一条规则对接收方是内部域xyz.com的邮件放行并退出UBE filter的检查。
第二条规则将任何不匹配第一条规则的邮件退回(reject)发送者。
2.如果发送、接收邮件都使用同一个邮件服务器,就需要预先加一步过滤:首先查看Auth-sender信封项,验证发件人是不是本地用户,即对发件人进行SMTP认证。
* Auth-sender“.+”EXIT
Auth-Sender
信封项,是当客户端要求服务器对其进行“发件认证”时所发出邮件的信封中特有的一项,不要求“发件认证”的邮件无此项。该项内容在服务器收到客户端发来的邮件后,根据其提供的userID和passwd值由服务器填写,内容就是发件人的Email地址。之后邮件服务器将邮件交给UBE插件进一步处理。UBE插件通过检查这个信封项可让邮件服务器仅仅传送经过认证的本地用户发来的信。
.+
不可为空的任意字符串,可以是任意一个Email地址。
EXIT
表示无须再进行下面的过滤即可放行。
这里要注意:应限制过滤规则的Message field是envonly,以免恶意的邮件发送者改变信头,冒充本地用户。
3.如果你的企业网内部有几个分支局域网也部署着邮件服务器,都通过总部邮件服务器收发邮件,则还应制定一条规则检查那些要求转发的信息来源。即:
* Host-From “10.x.x.x ” EXIT
Host-From
信封项与之直接相连的,需要本服务器帮助其转发邮件的其它服务器的IP地址。这一规则限制了服务器转发非法邮件。
10.x.x.x
内部子域邮件服务器的IP地址。
EXIT
表示无须再进行下面的过滤即可放行。
以上设置能够阻止邮件服务器Relay无关邮件。但应该注意:一般不推荐对向内和向外的邮件采用同一台邮件服务器来处理,这会使你的邮件系统对外部攻击更为开放。
设计UBE filter
我们的企业网邮件系统是这样部署的:总部邮件服务器部署在防火墙的DMZ区,负责向内向外的邮件收发,各分支局域网的邮件服务器放在内部。我们在总部邮件服务器上首先创建了以下几条过滤规则:
* Auth-Sender“.+” EXIT
* Host-From“subdom mailserver IP” EXIT
* Channel-To“academy.net” EXIT
* $ANY“.*” DROP (garbage@academy.net)
最后一条过滤规则表示通不过上述任一条过滤规则的邮件就丢弃到garbage邮箱中,而不是退回发件人,这样做的好处是能减轻邮件服务器的负担,避免由于不存在的发件人而造成来回退信,挤占资源。另外,在分支局域网的邮件服务器中也应做以上的第一、三、四条设置。
在垃圾邮件不甚严重时,也可将第四条指令改为:
* +$ANY“.*” REJECT“SMTP authentication needed”
“SMTP authentication needed”是在退函中的附言。这样,尚未添加发件认证的Outlook Express用户可在退信中获得“SMTP authentication needed”提示。
UBE插件是按照过滤规则在配置文件中的排列顺序拦截邮件、逐一比较,这个顺序很重要,它决定了你的邮件过滤工作是否正常。
局域网内垃圾邮件处理办法
以上四条措施保证了邮件服务器不会受到来自Internet的垃圾邮件的攻击。但随着Sircam、求职信等病毒在因特网上的泛滥,我们的邮件服务器再次遭受重创。这几种蠕虫病毒拥有自己的SMTP引擎,能进行邮件路由,它们从系统相关文件及注册表中搜集用户使用的SMTP服务器的IP,利用系统默认账号,对通讯簿中的账号或众多自造的不存在的Email账号疯狂地发送带毒的电子邮件,挤占网络带宽。企业网用户机器中一般都填有本企业邮件服务器地址信息,这种病毒就会对本企业邮件服务器产生过大负载。病毒发信甚至无须打开Outlook Express,发出的信都不可能要求认证,若收件人地址在本域以外时,病毒发出的垃圾邮件将无法通过上述UBE过滤而被当作垃圾投入garbage信箱。但如果收件人地址在本域内,病毒发出的邮件将顺利通过上述第三条过滤,使病毒迅速在局域网内蔓延。为此,我们加了一条过滤规则放在第二条,它针对来自本域内的邮件,只要它未通过第一条认证(如病毒所为),同样投入garbage垃圾邮箱,使得未通过发信认证但又是本域用户发的信也被过滤掉。即:
* Auth-Sender“.+” EXIT
* User-From“academy.net” JUMP (badmail)
* Host-From“subdom mailserver IP” EXIT
* Channel-To“academy.net” EXIT
* :badmail $ANY“.*” DROP (garbage@academy.net)
badmail是第5条规则的标签。前面曾提到,当一条规则(第5条)是另一条规则(第2条)的JUMP动作的目标时就需要使用标签来标识这条目标规则。
过滤虽然堵住了垃圾邮件,但并不能降低邮件服务器的负担。病毒的发信频率极高,单机达到2-3封/秒,如果有几台、几十台终端中毒,同时用该企业网的邮件服务器发信,不仅服务器本身,而且用于UBE过滤的garbage邮箱都将不堪重负。既然问题主要出自病毒,那么根本的解决办法就从防毒入手,从源头堵住垃圾邮件。于是我们给邮件服务器添加病毒扫描功能――设置一条检查信头项subject内容的规则,当邮件的subject为某种流行病毒的特征主题时,直接将其清除。这可用以代替某些外加的邮件内容安全检查软件。这一过滤规则是这样的:
if (Subject=sircam’subject)
then RUN (VirusScan.exe)或
if(Subject= sircam’subject) then DROP (garbage@academy.net)
UBE插件所内置的RUN这一动作扩展了UBE 插件的能力,使它不仅与Messaging server配合传送邮件,还能触发一个外部程序与UBE过滤器协同处理邮件。以这种方式调用的外部程序除了能够进行病毒扫描,还能执行其它一些自己编写的脚本程序。
在服务器上设置完以上几条过滤规则并使之生效后,还有三项工作要做:①将邮件服务器的SMTP设置改为ESMTP; ②新建garbage账号,取消其邮箱大小限制,并做好计划任务:每10至20分钟自动清空garbage信箱;③通知所有内网Outlook Express用户设置“请求发信认证”。
值得一提的是,现在高版本的Netscape邮件服务器已增加了Antirelay功能,这样对有规律的垃圾邮
件可用Antirelay进行抵御,对量少的特殊垃圾邮件用UBE进行过滤,这种配合使得控制垃圾邮件的效率更高.