使用 amavisd-new 和 Maia Mailguard 击败垃圾邮件和病毒

作者:Robert LeBlanc

随着垃圾邮件和电子邮件蠕虫的兴起,反垃圾邮件和反病毒解决方案制造商迎来了繁荣时期。欧洲和美国新的反垃圾邮件法律几乎没有解决这个问题,这种情况让许多人开始寻求技术解决方案:垃圾邮件和病毒过滤器。

然而,在每台桌面电脑上扫描和过滤内容既昂贵又不切实际。理想情况下,垃圾邮件和病毒问题应尽可能在源头解决,以保护下游的所有人。这种策略使组织能够将其资源集中在一个地方,通常是邮件网关。

然而,基于服务器的解决方案很少便宜。这些产品大多按每个邮箱许可,无论是作为邮件服务器的附加软件还是作为独立的内容过滤设备。这些解决方案可能花费数千美元,并且通常需要年度订阅费才能访问更新的病毒签名和垃圾邮件模式。

在本文中,我们将介绍一个开源内容过滤解决方案 amavisd-new,以及该项目的强大扩展 Maia Mailguard。

amavisd-new

从概念上讲,amavisd-new 是一个邮件过滤器——它从您的邮件网关接收邮件,扫描邮件中的病毒和垃圾邮件,隔离、拒绝或丢弃违规项目,并将其余邮件中继到下游的另一个邮件服务器以进行传递。在实践中,amavisd-new 通常夹在同一主机上运行的两个邮件服务器之间,尤其是在小型站点,在单台机器上托管邮件服务器和内容过滤器是切实可行的。较大的站点可能会选择在单独的内容过滤机器上一起安装 amavisd-new、SpamAssassin 和病毒扫描器。大型站点可能需要负载均衡的此类机器阵列。

amavisd-new 使用 Perl 编写,在设计时考虑了安全性和可靠性,并且在几乎所有 UNIX 平台上都能很好地工作。它是一个符合 RFC 的邮件处理程序,旨在永不丢失任何邮件。为此,amavisd-new 在下游邮件服务器完成操作之前不接受邮件项目的责任。这意味着在过滤邮件时发生的任何错误都不会导致邮件丢失;它仍然保留在上游邮件服务器的队列中。amavisd-new 提供四种类型的过滤:病毒/恶意软件扫描、垃圾邮件过滤、禁止危险附件类型和无效邮件标头。

病毒扫描

amavisd-new 不是病毒扫描器;相反,它是一个框架,可以调用一个或多个病毒扫描器。目前支持 30 多种流行的病毒扫描器,包括来自 Sophos、Symantec 和 Network Associates 等供应商的专有产品,以及开源 Clam Antivirus。

命令行和守护进程病毒扫描器都受支持,尽管守护进程扫描器比其命令行同类扫描器效率更高。如果您的邮件服务器处理大量邮件,您不希望为每个邮件项目将命令行扫描器加载到内存中并在之后卸载它。作为守护进程运行的病毒扫描器只需加载一次,然后保留在内存中,从而使该过程快得多。

如果您安装了多个病毒扫描器,您可以将它们排列在主组和辅助组中。如果主扫描器都无法运行,则会咨询辅助组。

垃圾邮件过滤

垃圾邮件过滤由 amavisd-new 通过与 SpamAssassin 集成来处理。amavisd-new 每个邮件项目调用 SpamAssassin 一次,无论有多少收件人,因此邮件列表帖子不会比发送给单个收件人的邮件消耗更多资源。

SpamAssassin 提供了一种广泛的垃圾邮件过滤方法,包括特征识别、DNSBL 和 SPF 查找、协作报告网络和贝叶斯学习机制。所有这些测试都为每个邮件项目的总分贡献一个数值分数,并且每个用户都可以指定一个阈值分数,以决定项目是垃圾邮件还是正常邮件。这是一个有效的组合,因为一种方法的优势弥补了另一种方法的弱点。

特征识别器检查电子邮件的标头或正文,以查找人类已识别为垃圾邮件或正常邮件(非垃圾邮件)标记的模式。Date: 标头包含未来 12 小时的时间,或者邮件包含图像但没有文本,这可能符合垃圾邮件症状,而包含一千多个单词的消息更有可能是正常邮件。

SpamAssassin 还可以针对多个基于 DNS 的阻止列表 (DNSBL) 检查连接邮件服务器或客户端的 IP 地址,以确定该地址是否是已知的垃圾邮件源。然而,与 DNSBL 的传统用法不同,SpamAssassin 不认为列表本身是致命的;它只是向邮件的总分添加一个值。这是一种更灵活的方法,让您可以根据您对该列表及其维护者政策的信任程度来调整分配给每个 DNSBL 的分数。即将推出的 SpamAssassin 3.0 还增加了对发件人策略框架 (SPF) 查找的支持,该查找尝试验证连接主机是否有权为其域发送邮件。

协作报告网络,例如 Vipul's Razor、Pyzor 和分布式校验和交换中心 (DCC),为 SpamAssassin 提供另一种资源进行咨询。其理念是,由于垃圾邮件被广播给数百万收件人,因此当您收到副本时,许多其他人已经收到了或多或少相同的副本。如果很多人已经报告该特定邮件为垃圾邮件,您自己的垃圾邮件过滤器应该能够在自己的决策过程中使用该事实。

最后但同样重要的是,SpamAssassin 提供了一种贝叶斯学习机制,这本质上是一种自动化的特征识别器。虽然上面列出的手动设计的特征识别器依赖于人类指出指示垃圾邮件或正常邮件的特征,但贝叶斯方法试图根据对您已收到的垃圾邮件和正常邮件的分析来自动挑选这些特征。

禁止危险附件类型

作为一种故障安全措施,阻止包含可执行附件的邮件通常是一个好主意,即使您的病毒扫描器可能声称它们是干净的。毕竟,病毒扫描器并非完美,并且全新的恶意软件可能在您的防病毒供应商提供新的签名来检测它之前到达您的网络。amavisd-new 允许您定义应隔离、拒绝或丢弃的文件扩展名、内容类别和 MIME 类型列表。

处理无效邮件标头

根据 RFC 2822,邮件标头不应包含任何高于 127 的字符,也不应包含任何 NUL 或裸回车符。此范围之外的字符应进行特殊编码,以便世界各地的邮件软件可以毫无混淆地解析它们。当带有无效标头的邮件到达时,它可能是编写不良的邮件客户端的产物,但通常这是垃圾邮件发送者使用的专门设计的程序的一种症状。这种所谓的“老鼠软件”的作者通常是说英语的人,他们通常不会想到他们的软件可能被说其他语言的垃圾邮件发送者使用。当这些垃圾邮件发送者尝试使用这些工具发送邮件时,老鼠软件不会对特殊字符进行编码,从而产生无效的邮件标头。使用 amavisd-new,您可以决定如何处理带有无效标头的邮件:隔离、拒绝、丢弃或放行。

设置内容过滤策略

amavisd-new 允许管理员定义系统范围的内容过滤策略,但这些设置可以在域和用户级别被覆盖。一些用户可能希望扫描他们的邮件以查找所有四种可疑内容类型——病毒、垃圾邮件、禁止的文件和错误标头——而其他用户可能更喜欢禁用其中一项或多项检查。一个用户可能希望将垃圾邮件分数为 5.0 或更高的邮件隔离,而另一个用户可能更喜欢在分数达到 4.0 或更高时在 Subject: 标头前加上特殊标签(例如 ***SPAM***),但仅在分数至少为 8.0 时才阻止它。这种对过滤过程的细粒度控制使管理员能够适应各种具有不同需求的用户。

同样,amavisd-new 在所有这三个级别都提供白名单和黑名单。这允许管理员定义系统范围的列表;在另一端,用户可以维护自己的个人列表。

隔离和通知选项

当 amavisd-new 阻止电子邮件时,可以将其配置为对该邮件执行多项操作。邮件可以存储在隔离目录或邮箱中,包括特殊的用户邮箱,例如 joe+spam。您还可以配置 amavisd-new 来拒绝邮件,拒绝从上游邮件服务器接受邮件或静默丢弃邮件。

如果您的组织政策要求您通知被阻止邮件的发送者,则可以将 amavisd-new 配置为这样做。然而,这是一个有争议的话题。很多人发现病毒警报和垃圾邮件投诉电子邮件现在更多的是一种滋扰而不是帮助,尤其因为这些项目的发件人地址通常是伪造的。如果您必须发送病毒通知,amavisd-new 提供了一种机制来列出已知伪造发件人地址的病毒,以便在检测到这些病毒时不会发出通知。此列表必须手动维护,并且必须与您的特定病毒扫描器生成的名称匹配。如果您发现更容易列出不伪造发件人地址的病毒,则可以使用反向列表。

Maia Mailguard

Maia Mailguard 项目最初是 amavisd-new 的一个简单的 Web 前端,旨在让用户调整其内容过滤器设置并从便捷的界面管理其隔离区。然而,该项目在 ISP、Web 邮件提供商和提供场外内容过滤的公司中非常受欢迎,并且这些更大规模的客户的需求很快将 Maia Mailguard 发展成为更加复杂的东西。

Maia Mailguard 是一个完整的垃圾邮件和病毒管理系统,由 PHP、SQL 和 Perl 脚本、MySQL 或 PostgreSQL 数据库,当然还有 amavisd-new、SpamAssassin 和受支持的病毒扫描器组成。可以从单个 Maia 界面管理内容过滤器阵列,所有阵列共享相同的 SQL 数据库。Maia Mailguard 旨在简化内容过滤、隔离管理和垃圾邮件报告,在许多方面是邮件用户的一种新型工具。

Web 界面

Maia 基于 Web 的界面允许用户针对各种来源进行身份验证,包括 POP3 或 IMAP 服务器、LDAP 服务器、外部 SQL 数据库或 Maia 自己的内部数据库。用户可以由管理员手动添加,也可以在邮件到达 Maia 之前未见过的本地地址时自动添加。

用户可以将多个电子邮件地址链接到他们的帐户,但每个电子邮件地址都有自己的内容过滤设置(图 1)。用户可以使用 Web 界面添加和删除其白名单和黑名单中的地址(图 2),而管理员可以从另一组网页管理域级别和系统范围的设置(图 3)。维护 amavisd-new 所有四种邮件类型以及列入黑名单和白名单的项目、超大项目、误报和漏报的统计信息(图 4)。其他表跟踪按类型和特定 SpamAssassin 规则触发频率排列的病毒。可以从这些数据动态生成图表,也可以按计划的时间间隔生成为静态页面。

Beating Spam and Viruses with amavisd-new and Maia Mailguard

图 1. 每个电子邮件地址都有自己的内容过滤器设置。

Beating Spam and Viruses with amavisd-new and Maia Mailguard

图 2. 用户维护自己的白名单和黑名单。

Beating Spam and Viruses with amavisd-new and Maia Mailguard

图 3. 管理员可以从 Web 界面配置大多数全局设置。

Beating Spam and Viruses with amavisd-new and Maia Mailguard

图 4. 统计表总结了您的过滤器看到的内容。

由于 Maia 将隔离管理和内容过滤控制权交给了用户自己,因此管理员在日常工作中没有太多工作要做。借助 Maia 的 Perl 脚本按计划的时间间隔运行以报告用户确认的垃圾邮件并使旧的隔离项目过期,该系统几乎可以自行管理。

隔离管理

当邮件代表用户被隔离时,用户必须有一种方便的方式来访问该邮件。Maia 提供了用户隔离区中项目的列表,按垃圾邮件分数排序,以便最有可能因错误而出现在那里的项目(误报)更靠近列表顶部,并且更容易发现(图 5)。

Beating Spam and Viruses with amavisd-new and Maia Mailguard

图 5. 用户的隔离区按垃圾邮件分数排序。

如果您不确定邮件是否合法,可以从主题行中单击主题以在 Maia 的邮件查看器中打开电子邮件(图 6)。邮件查看器可以安全地用于所有类型的邮件,因为它不会解码大多数附件,但会阻止远程图像并剥离可能将您重定向到另一个站点的 HTML 标签。您可以以解码形式或原始形式查看邮件,包括所有原始邮件标头。

Beating Spam and Viruses with amavisd-new and Maia Mailguard

图 6. 邮件查看器提供了一种安全的方式来检查可疑邮件。

如果您最终确定邮件是合法的,您可以单击按钮从隔离区中恢复该项目,并将其传递给您。同时,Maia 会将错误告知 SpamAssassin;贝叶斯学习系统将来不太可能犯同样的错误。您还可以配置 Maia 在您以这种方式恢复项目时自动将发件人的地址添加到您的白名单。

除了隔离区之外,Maia 还提供了一个正常邮件缓存,这本质上是您最近收到的合法邮件的列表(图 7)。正常邮件缓存的目的是让您报告以某种方式通过过滤器的垃圾邮件——误报。通过将这些项目正确标记为垃圾邮件,您可以帮助训练 SpamAssassin 的贝叶斯学习系统。

Beating Spam and Viruses with amavisd-new and Maia Mailguard

图 7. 正常邮件缓存允许用户报告误报。

隔离区和正常邮件缓存还为您提供了一种确认您收到的邮件状态的方法。这不仅有助于训练贝叶斯学习系统,而且还可以正确报告垃圾邮件,因为它已由人类确认。

垃圾邮件报告

大多数垃圾邮件过滤器只关心防御垃圾邮件的攻击,而很少或根本不采取任何措施来预防垃圾邮件。由于 Maia 允许用户确认其邮件的状态为垃圾邮件,并且不修改原始邮件标头,因此可以通过多种不同的方式报告此垃圾邮件。即将推出的 Maia 版本将支持详细的标头分析和半自动向 ISP 报告。这些报告有助于其他人更有效地阻止垃圾邮件,甚至可能导致对垃圾邮件发送者进行某种形式的惩罚。

在幕后,Maia 的自动化脚本定期处理隔离区,向 SpamAssassin 咨询的同一协作网络(Vipul's Razor、Pyzor 和 DCC)报告已确认的垃圾邮件。通过与这些网络共享此信息,您可以回馈一些东西,而不仅仅是从其他人的报告中受益。

有效、全面的解决方案

最终,最重要的是 amavisd-new 和 Maia Mailguard 的组合在将垃圾邮件拒之门外,同时将正常邮件拒之门外方面的有效性。从我自己的网站统计数据来看,这个数字令人耳目一新,为 99.22%,误报率为 0.26%,漏报率为 0.52%。最重要的是,这些误报可以很容易地从隔离区恢复,漏报可以从正常邮件缓存中报告。

对于病毒和其他形式的恶意软件,有效性数据甚至更令人印象深刻:100%。自从我安装此内容过滤解决方案以来的六个月中,我桌面机器上的病毒扫描器没有捕获到任何遗漏过滤器的内容。这在很大程度上归功于 amavisd-new 允许同时使用来自不同供应商的多个病毒扫描器的方式——一个扫描器遗漏的内容,另一个扫描器通常会捕获到。

从性能的角度来看,任何内容过滤解决方案都会在某种程度上减慢邮件处理速度。它通常会变成过滤器有效性和速度之间的权衡,因为您可以选择禁用某些过滤器和测试以提高邮件吞吐量。例如,我的 99.22% 有效性统计数据来自启用所有可用的测试和过滤器,但它也需要 1-3 秒才能在负载适中的双 PIII 733MHz、1GB RAM 的机器上处理每个邮件项目。更繁忙的站点可能无法容忍这种延迟。他们将不得不在禁用更耗时的测试、升级内容过滤器中的处理器和 RAM 以及切换到负载均衡的内容过滤器阵列之间做出选择。然而,Maia Mailguard 和 amavisd-new 正在一起用于托管超过 50,000 个用户的站点,每天处理超过 350,000 封电子邮件,因此如果您有硬件来处理它,该解决方案可以扩展。

正如许多人已经发现的那样,对抗垃圾邮件和病毒的一些最佳武器恰好是开源工具。借助 amavisd-new、Maia Mailguard、SpamAssassin 和 Clam Antivirus 等工具,您可以为您的网络提供世界一流的保护,而无需花费数万美元。

本文的资源: www.linuxjournal.com/article/7820

Robert LeBlanc 是 Renaissoft (www.renaissoft.com) 的总裁,Maia Mailguard 的作者,以及 AnswerSquad (www.answersquad.com) 的常驻反垃圾邮件专家。当他没有重新发明轮子或制造更好的捕鼠器时,可以在他的四只阿拉斯加克利凯犬 Zorro、Sikari、Piyomi,当然还有 Maia 的陪伴下找到他。

加载 Disqus 评论