如何通过筛选邮件来阻止垃圾邮件
我们都知道,垃圾邮件是一个很严重的问题。它会阻塞服务器、惹恼用户、占用带宽以及发送恶意邮件和内容不当的邮件。
是否可以采取某些措施来阻止垃圾邮件?
是的,如果运行的是 Microsoft Exchange Server 2003,您可能注意到去年十月发布的 Service Pack 2 (SP2) 中提供的新特性和新功能显著地增强了其抵制各种途径的垃圾邮件攻击的能力。Exchange Server 2003 使用多层反垃圾邮件防御,可以针对恶意邮件提供强有力的防护。Exchange 反垃圾邮件框架中的一个最重要元素是智能邮件筛选器 (IMF),它可以在服务器反垃圾邮件处理的最后阶段启用内容筛选。在 IMF 内部,一个鲜为人知的称为自定义权重列表 (CWL) 的模块增强了 SP2 的反垃圾邮件功能。让我们看看它的工作原理和使用方法。
什么是自定义权重列表?
CWL 是一个包含大量词或短语的 XML 文件,如果在邮件正文或主题中发现这些词或短语,则可以对由 IMF 分配的最终垃圾邮件信任级别 (SCL) 进行修改。这些词或短语称为自定义权重项,如下所示:
<?xml version="1.0" encoding="utf-8"?><CustomWeightEntries xmlns="http://schemas.microsoft.com/2005/CustomWeight"><CustomWeightEntry Type=" " Change=" " Text=" " />...</CustomWeightEntries>
您可以看到,它使用以下三个属性来检查电子邮件是否与某个词或短语匹配:Type 属性、Change 属性和 Text 属性。
Text 属性位于每个项的最后,而这正是 IMF 要在电子邮件中查找的内容。该属性可以是单个词或短语,也可以包含转义字符、大写 ASCII 字符或双字节字符以及任何 Unicode 词或短语,最长为 1000 个字符。一个 CWL 文件中可以有多个 Text 属性。Text 属性的主要用途之一是根据邮件主题和正文中的关键字拦截面向成人的广告。
IMF 要查看的位置取决于 Type 属性,该属性可以为 SUBJECT、BODY 或 BOTH(指示 Text 应匹配的电子邮件部分)。使用以下 Type 属性之一来指定将在邮件主题、邮件正文还是两者中执行匹配搜索:
Type = SUBJECT Type = BODY Type = BOTH
Change 属性可以是任何整数值(正整数或负整数)。该属性用于定义在 Text 属性匹配的情况下,应如何更改邮件的 SCL 值?如果发现匹配,Change 属性的值将会添加到原始 SCL 值(如果 Change 属性值为负,则实质上是减去)。如果组合(原始和 CWL)值超过 SCL 范围,则最终 SCL 分配将被规范化为 0C9。Change 属性也可以使用 MIN 和 MAX 关键字。每次具有 MIN 关键字的短语出现匹配时,则无论其他权重如何,邮件的 SCL 值都指定为 0。每次具有 MAX 关键字的短语出现匹配时,则无论其他权重如何,邮件的 SCL 值都指定为 9。如果 MIN 和 MAX 同时出现匹配,则邮件的 SCL 值指定为 0。为了确保拦截具有匹配特征的邮件项,请使用 MAX 关键字。
邮件项的 SCL 值在 0 和 9 之间,0 指示邮件最不可能是垃圾邮件,而 9 则指示最有可能是垃圾邮件。还有一个附加值“-1”(由 Exchange Server 保留),表示邮件来自受信任的、经过验证的源(其他已验证的 Exchange Server),因此可免除反垃圾邮件处理。默认情况下,启用使用该值;要禁用该值,请参阅 go.microsoft.com/fwlink/?LinkId=71143 上的《Intelligent Message Filter Operations Guide》。图 1 对 SCL 值做了解释。
自定义权重
如前所述,IMF 在反垃圾邮件处理的最后阶段发挥作用。邮件项通过 Exchange Server 2003 反垃圾邮件框架层(例如,连接和协议筛选层)之后,即成为 IMF 验证的主题。IMF 将处理此邮件项并指定相应的 SCL 值。然后 CWL 将检查此邮件,查看是否与任何自定义权重项匹配。如果发现匹配,Change 属性将应用于邮件的 SCL 值。因此,最终 SCL 分配如下所示:
Final SCL == original IMF SCL + CWL Change attrib.
IMF 启动时就将自定义权重项加载到内存;对 CWL 文件的任何更改都需要重新启动相应的 Exchange 和 SMTP 服务,以便将新项加载到内存。项被存储为哈希表,以便在只对邮件进行一次解析时,可以快速查找单个词和短语的匹配。
使用自定义权重列表
如果受到垃圾邮件攻击,并且攻击性邮件项的主题行具有一致的短语,您可以将该行的这一部分添加到 CWL 项,如下所示:
<CustomWeightEntry Type="SUBJECT" Change="MAX" Text="Bad Subject" />这将确保在每次遇到主题行为“Bad Subject”的邮件时,邮件的 SCL 值都将被强制为 9,该邮件则会被拦截。
另一方面,如果 IMF 错误地将某个邮件归类为垃圾邮件,您可以挽救此邮件。例如,假设拦截了主题行为“Build System Daily Mail”的自动生成的构建状态邮件。则可以添加以下 CWL 项:
<CustomWeightEntry Type="SUBJECT" Change="MIN" Text="Build System Daily Mail" />这将确保此类邮件的 SCL 值为 0,它们不会再被拦截。
如果您具有关键词或短语列表,并希望将其用作增加或减少邮件 SCL 值的修饰成分,则只需将其添加到 CWL 项。以下示例显示主题中的词 pear 应视为垃圾邮件指示标致;主题或正文中的 orange 应视为垃圾邮件指示标致;正文中的 banana 应视为正常邮件指示标致;主题或正文中的 strawberry 应视为正常邮件指示标致:
<CustomWeightEntry Type="SUBJECT" Change="3" Text="Pear" /><CustomWeightEntry Type="BOTH" Change="5" Text="Orange" /><CustomWeightEntry Type="BODY" Change="-2" Text="Banana" /><CustomWeightEntry Type="BOTH" Change="-4" Text="Strawberry" />遇到相应的匹配之后,IMF 将调整邮件中设置的最终 SCL 值。
优先级顺序
如果自定义权重项中既有正权重和负权重,又有某些 MIN 和 MAX 权重时,该怎么办?如果错误地为同一个自定义权重项分配了 MIN 和 MAX 关键字,则 MIN 优先,最终 SCL 值分配为 0。这样做是为了防止由于 CWL 文件配置错误而意外拦截邮件。优先级的顺序如下:
如果匹配一个具有 MIN 更改的项,则邮件的 SCL 值将为 0。
如果匹配一个具有 MAX 更改的项,并且没有 MIN 标记,则邮件的 SCL 值将为 9。
如果 MIN 项或 MAX 项都不匹配,则邮件的 SCL 值将由 IMF 加上任何匹配的自定义权重项的更改来确定。
例如,假设您有以下自定义权重项:
<CustomWeightEntry Type="BODY" Change="MIN" Text="hello" /><CustomWeightEntry Type="BODY" Change="MAX" Text="world" /><CustomWeightEntry Type="BODY" Change="1" Text="Internet" /><CustomWeightEntry Type="BODY" Change="-3" Text="place" />让我们看看如果传入邮件正文包含以下字符串时会怎么样:“Hello world and welcome to the Internet place”。IMF 返回的 SCL 值为 4,但是最终 SCL 值分配将为 0。这是因为字符串中的词“hello”与自定义权重项匹配,该项具有 MIN 更改关键字。此时不会考虑其他任何项。
现在让我们看看如果邮件正文包含字符串“Welcome to the world and the Internet place”时,会怎么样。因为与 Text 属性值“world”匹配,而该项包含 MAX 关键字,所以不管 IMF 生成的初始值如何,都会将最终 SCL 值设置为 9。由于没有可覆盖的 MIN 项,此邮件的 SCL 值将指定为 9,此邮件会被拦截。
再看看另一个有趣示例。假设邮件正文包含“world Internet place”字符串,而 IMF 返回的 SCL 值为 6,则最终 SCL 值分配应是多少?答案为 4:IMF 的初始 SCL 值 6 加上 1(因为与“Internet”项匹配)并减去 3(因为与“place”项匹配)。
子字符串、短语和 URL
CWL 不会将某个项与词的子字符串进行匹配,而是将较短的短语与较长短语的一部分进行匹配。假设要拦截主题行中带有“Free Watches”的邮件,如果将以下自定义权重项添加到 CWL 文件:
<CustomWeightEntry Type="SUBJECT" Change="MAX" Text="watch" />这不会达到预期目的。因为“watch”只是“watches”的子字符串,因此不会与 CWL 中的项匹配。您需要明确指出词“watches”或整个短语“Free Watches”。
根据此示例,现在假设已将自定义权重项从“watch”更改为“Free Watches”,字符串如下所示:
<CustomWeightEntry Type="SUBJECT" Change="MAX" Text="Free Watches" />如果电子邮件的主题为“Get your Free Watches Now!!!”,则会出现匹配。这是因为 CWL 文件中的短语将与此主题中找到的短语的一部分相匹配。
现在,假设您的自定义权重项中有以下 URL:
<CustomWeightEntry Type="SUBJECT" Change="MIN" Text="microsoft.com" />此标记将会与以下主题匹配:
www.microsoft.com
http://microsoft.com
http://www.microsoft.com
http://schemas.microsoft.com/2005/CustomWeight
这归因于自定义权重对其查看到的短语的标记方法。从本质上讲,只要字符类型中有中断,短语就会拆分为词,字符类型可以是字母数字以及其他任何类型:空格、制表符、逗号、句点和斜杠等等。(但是,空白则不同。空白会被丢弃,而其他标点符号都将成为短语中的词。)
在本示例中,www.microsoft.com 被转换为一个包含五个标记的短语 C www、句点、Microsoft、句点和 com。自定义权重项转换为一个包含三个标记的短语 C Microsoft、句点和 com。现在自定义权重项与主题短语的一部分相匹配。
特例
由于自定义权重项存储在 XML 文件中,因此在不编码的情况下,某些字符不能用于搜索项。例如,如果要拦截包含短语“<Hello>”的电子邮件,则自定义权重 XML 文件应包含以下项:
<CustomWeightEntry Type="SUBJECT" Change="MIN" Text="<Hello>" />
CWL 功能支持在 CWL 文件中使用 Unicode 字符。实际的自定义权重过程在语言上是不可知的 C 只要项中的词或短语与正在处理的电子邮件中的词或短语匹配,就会使用自定义权重。因此,图 2 中的自定义权重项完全合法。
但是,对于使用 High-ASCII 和双字节字符有几个忠告。首先,要确保您的自定义权重 XML 头文件中有正确编码,而文件也以正确编码保存。
其次,检查的电子邮件编码要正确。如果电子邮件的 MIME 类型不正确,或指定的字符编码错误,IMF 可能无法正确处理自定义权重项。
最后,由于在自定义权重中字符串的标记方法不同,CWL 文件中难于创建双字节字符短语,特别是东亚语言。这是因为用于标记很多欧洲语言的标点和空白字符的匹配效果不怎么理想。如果将 CWL 设置为使用双字节字符,请确保对其进行全方位测试,以便找到正确匹配的自定义权重项。
总结
准备使用 CWL 文件时,请记住,默认情况下,Exchange Server 2003 SP2 安装程序不会为您自动创建。您需要手动创建(有关详细信息,请参阅前面提到的《Intelligent Message Filter Operations Guide》)。请不要忘记,CWL 文件(MSExchange.UceContentFilter.xml)应始终位于 IMF 的工作路径中,如图 3 所示。
图 3 IMF 的工作路径 (单击该图像获得较小视图) 图 3 IMF 的工作路径 (单击该图像获得较大视图) 如果 CWL 文件不在 IMF 的工作目录中,则将无法运行。如果已经部署自定义权重并正在使用 IMF Update,请确保每次安装新的垃圾邮件定义时,将 CWL 文件移至新的 IMF 位置。您必须手动进行此操作。《Intelligent Message Filter Operations Guide》提供了如何启用 IMF Update 和如何确保自定义权重列表持续成功运行的详细信息。
Cam Frenette是 Microsoft 测试部门的软件设计工程师,就职于技术维护与安全小组,主攻反垃圾邮件技术。他拥有沃特卢大学数学学士学位。
Alexander Nikolayev是 Microsoft 的项目经理,负责服务器端协议、传输核心以及用于 Exchange 和 Windows Server 的反垃圾邮件组件。Alexander 拥有玛丽大学 MBA 学位。在 Exchange 团队博客上,可以浏览他发布的帖子。
摘自 October 2006 期刊 TechNet Magazine.