企业开源电子邮件系统安全保障实战精要: 第 2 部分,Postfix 安全防护实战及垃圾邮件防范

电子邮件系统已成为现代企业必不可少的网络基础设施,开源电子邮件系统也逐渐成为企业构建应用时的首选。然而,如何确保电子邮件系统安全,抵御垃圾邮件、邮件病毒等安全威胁是企业在应用构建过程中需要着重解决的问题。本系列的第一部分介绍了企业开源电子邮件系统原理及 Sendmail、Qmail 邮件服务安全防护实战,本文将详细介绍 Postfix 的安全防护实战,以及如何进行企业垃圾邮件防范。

李 洋, 信息安全顾问

李洋,博士,现任某大型金融公司信息安全顾问,多年来一直从事信息安全方面的研发和管理工作,具有丰富的互联网、电信网和金融行业信息安全管理、咨询和研发经验。目前关注开源系统安全、云安全、虚拟化安全等。



2013 年 4 月 22 日

实战构建安全 Postfix 电子邮件服务器

Postfix 是一个由 IBM 资助、由 Wietse Venema 负责开发的自由软件工程产物,它的目的就是为用户提供除 Qmail 之外的邮件服务器选择。Postfix 在快速、易于管理和提供尽可能的安全性方面都进行了较好的考虑。Postfix 是基于半驻留、互操作的进程的体系结构,每个进程完成特定的任务,没有任何特定的进程衍生关系,使整个系统进程得到很好的保护。同时 Postfix 也可以和 Qmail 邮件服务器保持兼容性以满足用户的使用习惯。

与 Qmail 相比,Postfix 最被人称道的地方就在于其配置文件的可读性很高。Postfix 的主配置文件是 /etc/postfix/main.cf。虽然该配置文件的内容比较多,但其中大部分内容都是注释(“#”号开头的行),真正需要自行定义的参数并不多。然而,为了对其进行安全配置,还是需要针对某些选项进行细心的设置。

在 main.cf 文件中,参数都是以类似变量的设置方法来设置的,这些参数的使用主要包含两部分的内容:

(1)定义和声明变量:例如 definename = good-better-best。等号左边是变量的名称,等号右边是变量的值。

(2)引用变量:可以在变量的前面加上符号“$”来引用该变量,如:myname = $ definename(相当于 definename = good-better-best)。

需要注意的是:等号两边需要有空格字符。此外,如果变量有两个以上的设置值,就必须用逗号“,”或者空格符“ ”将它们分开。

在熟悉了上述变量的定义和引用方法后,下面详细介绍如何安全、高效地配置 Postfix 服务器的相关选项。

设置 Postfix 服务监听的网络接口

默认情况下,inet_interfaces 参数的值被设置为 localhost,这表明只能在本地邮件主机上寄信。如果邮件主机上有多个网络接口,而又不想使全部的网络接口都开放 Postfix 服务,就可以用主机名指定需要开放的网络接口。不过,通常是将所有的网络接口都开放,以便接收从任何网络接口来的邮件,即将 inet_interfaces 参数的值设置为“all”,如下所示:

inet_interfaces = all

安全设置可接收邮件的主机名称或域名

mydestination 参数非常重要,因为只有当发来的邮件的收件人地址与该参数值相匹配时,Postfix 才会将该邮件接收下来。通过该选项的设置可以过滤掉许多没有经过认证和授权的邮件,从而节省服务器的存储空间,以及节省用户的邮件处理时间。举一个简单的例子,用户可以将该参数值设置为如下:

 accept_domain = test.net 
 mydestination = $accept_domain

这就表明无论来信的收件人地址是 X@test.net(其中 X 表示某用户在 test.net 域中的邮件账户名),Postfix 都会接收这些邮件。而除此之外的邮件,Postfix 都不会接受。

安全设置可转发邮件的网络(IP 设置)

有关安全设置可转发邮件的网络可以使用 mynetworks 参数来设置。可将该参数值设置为所信任的某台主机的 IP 地址,也可设置为所信任的某个 IP 子网或多个 IP 子网(采用“,”或者“ ”分隔)。

比如,用户可以将 mynetworks 参数值设置为 172.168.96.0/24,则表示这台邮件主机只转发子网 172.168.96.0/24 中的客户端所发来的邮件,而拒绝为其他子网转发邮件:

 mynetworks = 172.168.96.0/24

除了 mynetworks 参数外,还有一个用于控制网络邮件转发的参数是 mynetworks-style,它主要用来设置可转发邮件网络的方式。通常有以下三种方式:

  • class:在这种方式下,Postfix 会自动根据邮件主机的 IP 地址得知它所在的 IP 网络类型(即 A 类、B 类或是 C 类),从而开放的它所在的 IP 网段。
  • subnet:这是 postfix 的默认值,Postfix 会根据邮件主机的网络接口上所设置的 IP 地址、子网掩码来得知所要开放的 IP 网段。
  • host:在这种方式下,Postfix 只会开放本机。

通常,用户一般不需要设置 mynetworks-style 参数,而直接设置 mynetworks 参数。如果这两个参数都进行了设置,那么 mynetworks 参数的设置有效。

设置可转发邮件的网络(域名设置)

上面介绍的 mynetworks 参数是针对邮件来源的 IP 来设置的,而 relay_domains 参数则是针对邮件来源的域名或主机名来设置的,其实从原理上来说是一致的,不过是区分了 IP 地址和域名而已,不过,relay_domains 还需要依赖 DNS 这个基础设施。

例如,用户可以将 relay_domains 参数值设置为 test.net,则表示任何由域 test.net 发来的邮件都会被认为是信任的,Postfix 会自动对这些邮件进行转发,如下所示:

 relay_domains = test.net

那么,要使它能在实际网络中更好地转发邮件,还必须进行相应的 DNS 设置。那么,需要在该网络的 DNS 服务器上定义了一个主区域 test.net,并在该区域配置文件中定义了以下记录:

 // 定义邮件服务器的 IP 地址
 patterson.test.net. IN  A  172.168.96.254 
 // 定义邮件服务器的别名
 mail.test.net. IN CNAME  patterson.test.net. 
 // 定义优先级别
 test.net. IN MX  10 mail.test.net.

上述记录只对邮件服务器进行了定义,还有诸如 SOA、NS 等的定义,在这里就不再赘述。

Postfix 使用 SMTP 安全认证

如同前面所述的 Qmail 服务器面临的邮件转发的问题,在 Postfix 服务器中同样也存在。为了避免这种情况的出现,Postfix 默认不会对外开放转发功能,而仅对本机(localhost)开放转发功能。但是,在实际应用中,必须在 Postfix 主配置文件中通过设置 mynetworks、relay_domains 参数来开放一些所信任的网段或网域,否则该邮件服务器几乎没有什么用处。在开放了这些所信任的网段或网域后,还可以通过设置 SMTP 认证,对要求转发邮件的客户端进行用户身份(用户账户名与密码)验证。只有通过了验证,才能接收该用户寄来的邮件并帮助转发。同样,Postfix 中目前比较常用的 SMTP 认证机制是通过 Cyrus SASL 包来实现的。

默认情况下,Postfix 并没有启用 SMTP 认证机制。要让 Postfix 启用 SMTP 认证,就必须对 Postfix 的主配置文件 /etc/postfix/main.cf 进行修改。用户需要在 main.cf 文件中添加如下有关 SMTP 认证的设置部分:

 smtpd_sasl_auth_enable = yes 
 smtpd_sasl_local_domain = ''
 smtpd_recipient_restrictions = permit_mynetworks 
 permit_sasl_authenticated, reject_unauth_destination 
 broken_sasl_auth_clients=yes 
 smtpd_client_restrictions = permit_sasl_authenticated 
 smtpd_sasl_security_options = noanonymous

其中,每个选项的具体含义如下:

(1)smtpd_sasl_auth_enable:指定是否要启用 SASL 作为 SMTP 认证方式。默认不启用,这里必须将它启用,所以要将该参数值设置为 yes。

(2)smtpd_sasl_local_domain:如果采用 Cyrus-SASL 版进行认证,那么这里不做设置。

(3)smtpd_recipient_restrictions:表示通过收件人地址对客户端发来的邮件进行过滤。通常有以下几种限制规则:

  • permit_mynetworks:表示只要是收件人地址位于 mynetworks 参数中指定的网段就可以被转发邮件。
  • permit_sasl_authenticated:表示允许转发通过 SASL 认证的邮件。
  • reject_unauth_destination:表示拒绝转发含未信任的目标地址的邮件。

(4)broken_sasl_auth_clients:表示是否兼容非标准的 SMTP 认证。有一些 Microsoft 的 SMTP 客户端采用非标准的 SMTP 认证协议,只需将该参数设置为 yes 就可解决这类不兼容问题。

(5)smtpd_client_restrictions:表示限制可以向 Postfix 发起 SMTP 连接的客户端。如果要禁止未经过认证的客户端向 Postfix 发起 SMTP 连接,则可将该参数值设置为 permit_sasl_authenticated。

(6)smtpd_sasl_security_options:用来限制某些登录的方式。如果将该参数值设置为 noanonymous,则表示禁止采用匿名登录方式。

在完成上述设置后,必须使用命令 /etc/init.d/postfix reload 重新载入配置文件,或使用命令 /etc/init.d/postfix restart 重新启动 Postfix 服务,以使该配置生效。当然,这两个命令的具体使用需要根据不同的 Linux 版本来选用。

此外,由于当 Postfix 要使用 SMTP 认证时,会读取 /usr/lib/sasl2/smtpd.conf 文件中的内容,以确定所采用的认证方式,因此如果要使用 saslauthd 这个守护进程来进行密码认证,就必须确保 /usr/lib/sasl2/smtpd.conf 文件中的内容为:

 pwcheck_method: saslauthd

实战电子垃圾邮件防范

防治垃圾邮件的主流策略和技术

电子邮件的廉价和操作简便在给人们带来巨大便利的同时,也诱使有些人将它作为大量散发自己信息的工具,最终导致了互联网世界中垃圾邮件的泛滥。垃圾邮件问题已经极大地消耗了网络资源,并给人们带来了极大的不便。据中国互联网协会(ISC)反垃圾邮件状况调查显示,中国邮件用户平均每人每天收到邮件 17 封,占收到邮件总数的 70% 以上。

目前,垃圾电子邮件已成为人们最头疼的问题之一。在 Linux 操作系统平台中,反击和过滤垃圾电子邮件是一件很重要的工作。下面介绍一些在 Linux 中广泛使用的防垃圾邮件技术。

SMTP 用户认证技术

目前常见并十分有效的方法是,在邮件传送代理 MTA 上对来自本地网络以外的互联网的发信用户进行 SMTP 认证,仅允许通过认证的用户进行远程转发。这样既能够有效避免邮件传送代理服务器为垃圾邮件发送者所利用,又为出差在外或在家工作的员工提供了便利。如果不采取 SMTP 认证,那么在不牺牲安全的前提下,设立面向互联网的 Web 邮件网关也是可行的。此外,如果 SMTP 服务和 POP3 服务集成在同一服务器上,在用户试图发信之前对其进行 POP3 访问验证(POP before SMTP)就是一种更加安全的方法,但在应用的时候要考虑到当前支持这种认证方式的邮件客户端程序还不多。

逆向 DNS 解析

无论哪一种认证,其目的都是避免邮件传送代理服务器被垃圾邮件发送者所利用,但对于发送到本地的垃圾邮件仍然无可奈何。要解决这个问题,最简单有效的方法是对发送者的 IP 地址进行逆向名字解析。通过 DNS 查询来判断发送者的 IP 与其声称的名字是否一致,例如,其声称的名字为 mx.hotmail.com,而其连接地址为 20.200.200.200,与其 DNS 记录不符,则予以拒收。这种方法可以有效过滤掉来自动态 IP 的垃圾邮件,对于某些使用动态域名的发送者,也可以根据实际情况进行屏蔽。但是上面这种方法对于借助 Open Relay 的垃圾邮件依然无效。对此,更进一步的技术是假设合法的用户只使用本域具有合法互联网名称的邮件传送代理服务器发送电子邮件。例如,若发件人的邮件地址为 someone@yahoo.com,则其使用的邮件传送代理服务器的 Internet 名字应具有 yahoo.com 的后缀。这种限制并不符合 SMTP 协议,但在多数情况下是切实有效的。需要指出的是,逆向名字解析要进行大量的 DNS 查询。

实时黑名单过滤

以上介绍的防范措施对使用自身合法域名的垃圾邮件仍然无效。对此比较有效的方法就是使用黑名单服务了。黑名单服务是基于用户投诉和采样积累而建立的、由域名或 IP 组成的数据库,最著名的是 RBL、DCC 和 Razor 等,这些数据库保存了频繁发送垃圾邮件的主机名字或 IP 地址,供 MTA 进行实时查询以决定是否拒收相应的邮件。但是,目前各种黑名单数据库难以保证其正确性和及时性。例如,北美的 RBL 和 DCC 包含了我国大量的主机名字和 IP 地址,其中有些是早期的 Open Relay 造成的,有些则是由于误报造成的。但这些问题迟迟得不到纠正,在一定程度上阻碍了我国与北美地区的邮件联系,也妨碍了我国的用户使用这些黑名单服务。

白名单过滤

白名单过滤是相对于上述的黑名单过滤来说的。其建立的数据库的内容和黑名单的一样,但其性质是:库中存在的都是合法的,不应该被阻断。同样,该过滤方法存在的缺点与黑名单类似,也是更新和维护难以达到实时,一些正常的、不为系统白名单所收集的邮件有可能被阻断。从应用的角度来说,在小范围内使用白名单是比较成功的。

内容过滤

即使使用了前面诸多环节中的技术,仍然会有相当一部分垃圾邮件漏网。对此情况,目前最有效的方法是基于邮件标题或正文的内容过滤。其中比较简单的方法是,结合内容扫描引擎,根据垃圾邮件的常用标题语、垃圾邮件受益者的姓名、电话号码、Web 地址等信息进行过滤。更加复杂但同时更具智能性的方法是,基于贝叶斯(Bayes)概率理论的统计方法所进行的内容过滤,该算法最早由 Paul Graham 提出(http://www.paulgraham.com/spam.html),并使用他自己设计的 Arc 语言实现。这种方法的理论基础是通过对大量垃圾邮件中常见关键词进行分析后得出其分布的统计模型,并由此推算目标邮件是垃圾邮件的可能性。这种方法具有一定的自适应、自学习能力,目前已经得到了广泛的应用。最有名的垃圾邮件内容过滤是 SpamAssassin(将在后面详细介绍),其使用 Perl 语言实现,集成了以上两种过滤方法,可以与当前各种主流的 MTA 集成使用。内容过滤是以上所有各种方法中耗费计算资源最多的,在邮件流量较大的场合,需要配合高性能服务器使用。另外,当前也有很多学者将人工神经网络、支持向量机、Winnow 算法等及其学习的方法引入到内容过滤垃圾邮件的研究中来,并且取得了很好的效果。

配置 Sendmail 防范垃圾邮件

Sendmail 是 Red Hat Linux 以及大多数类 UNIX 操作系统的邮件传送代理,因此它是目前配置最广泛的邮件服务器。下面以 Red Hat Enterprise Linux 6 使用的 Sendmail 为例,介绍应对垃圾邮件的几种具体方法。其他开源邮件服务器防范垃圾邮件的配置,也可以参考本节的介绍进行配置。

关闭 Sendmail 的 Relay 功能

所谓 Relay 就是指别人能使用提供该功能的 SMTP 邮件服务器给任何人发信,这样别有用心的垃圾发送者就可以使用这台邮件服务器大量发送垃圾邮件,而最后别人投诉的不是垃圾发送者,而是这台服务器,因此必须关闭 Relay 这项功能。其方法就是,到 Linux 服务器的 /etc/mail 目录编辑 access 文件,去掉“*relay”之类的设置,只留“localhost relay”和“127.0.0.1 relay”两条即可。最后特别注意,修改 access 文件后还要使用命令使修改生效:

 #makemap hash access.db < access

在 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 地址可以到 http://openrbl.org/ 和 http://ordb.org。RBL 将收集到的专发垃圾邮件的 IP 地址加入他们的黑名单,只要在 Sendmail 中加入 RBL 认证功能,就会使邮件服务器在每次收信时都自动到 RBL 服务器上去查实,如果信件来源于黑名单,则 Sendmail 会拒收邮件,从而使用户少受垃圾邮件之苦。在 Sendmail 中添加 RBL 认证,需要对 sendmail.mc 添加以下内容:

 FEATURE(`dnsbl',`relays.ordb.org',` ″ Email blocked using ORDB.org - see ″')

最后执行“m4 sendmail.mc>sendmail.cf”和“service sendmail restart”两条命令,使有关 Sendmail 的修改生效。

服务器使用 SpamAssasin 防治垃圾邮件

SpamAssasin 是一个邮件过滤器,它部署在邮件服务器端,可以使用一系列的机制来确认垃圾邮件,这些机制包括:文本分析、Bayesian (贝叶斯判决规则)过滤、DNS 数据块列表,以及合作性的过滤数据库。SpamAssasin 并不能删除垃圾邮件,但它却可以阻止垃圾邮件。究其原因,主要在于它有如下一些特性:

  • 适用范围广:SpamAssasin 使用大量的本地和网络的测试来确认垃圾邮件特征。这使得垃圾邮件制造者在明确其制造的信息的可工作性时增加了难度。
  • 自由软件,应用广泛:与其它流行的开源软件一样,爱好者可以广泛的应用和修改、发布,应用前景很好。
  • 易于扩展:SpamAssasin 将反垃圾测试和配置信息存储在纯文本中,这使得配置和增加新的规则相当容易。
  • 灵活性:SpamAssasin 将其逻辑封装在一个设计精良的、抽象化的 API 中,因此它可被集成到电子邮件数据流中的任何地方。SpamAssasin 可被用于多种电子邮件系统中,其中包括:Procmail、Sendmail、Postfix、Qmail 等。
  • 易于配置:SpamAssasin 几乎不需要用户的配置。用户不必用邮件帐户或邮件列表的成员资格详细信息来不断地更新 SpamAssasin 配置。一旦分类,站点和用户规则就可以被运用于垃圾邮件。而且规则可以适用于邮件服务器,并且在以后又可以使用用户自己的邮件用户代理应用程序。

SpamAssasin 包括 spamd 守护进程和 spamc 客户端。虽然它包括 SpamAssasin 实用工具,但 SpamAssasin 文档建议使用 spamc 而非 SpamAssasin 来过滤邮件,因为 spamc 比 SpamAssasin 加载得更快。当 SpamAssasin 单独工作时,spamc 调用 spamd。spamd 守护进程派生子进程 ; 当 spamd 运行时,ps 除了显示 spamd 父进程外还显示几个 spamd 子进程:

 # ps -ef | grep spam 
 root 4254 1 0 14:17 ? 00:00:02 /usr/bin/spamd -d -c -m5 -H -r ... 
 root 4256 4254 0 14:17 ? 00:00:00 spamd child 
 root 4257 4254 0 14:17 ? 00:00:00 spamd child 
 root 4689 4662 0 16:48 pts/1 00:00:00 grep --color=auto spam

spamc 实用工具是一个过滤器:它从标准输入读取每个电子邮件,发送电子邮件到 spamd 进行处理,并把修改后的电子邮件写入到标准输出。spamd 守护进程使用多种技术来识别垃圾邮件:

  • Headeranalysis(标题分析):检查疑似垃圾邮件的标题,有些垃圾邮件被人采用某种技巧处理后,可能会被误认为是合法的电子邮件。
  • Text analysis(文本分析):检查电子邮件正文中的垃圾邮件特征。
  • Blacklists(黑名单):检查名单,看看发件人是否在现有垃圾邮件发送者列表中。
  • Database(数据库):检查针对 Vipul ’ s Razor(razor.sourceforge.net)的邮件签名,它是一个垃圾邮件跟踪数据库。

可以设置邮件服务器上的 SpamAssassin,以使它处理传递到本地系统的所有电子邮件,然后再发送到用户。另外,每个用户可以从他们的邮件客户端运行 SpamAssassin。无论哪种方式,本地系统必须运行 spamd,并且必须通过这个守护进程使用 spamc 过滤每封电子邮件。

安装 SpamAssasin

可以在网站上 http://spamassassin.apache.org/downloads.cgi 下载 SpamAssasin 的最新版本进行安装,目前其最新版本为 3.3.2,具体的安装步骤如下所示:

(1)解压缩软件包

 #tar xzvf Mail-SpamAssassin-3.3.2.tar.gz

(2)进入目录进行安装

 #./configure 
 #make & make install

配置与启动 SpamAssasin

就像大多数 Linux 应用程序一样,SpamAssasin 需要对配置文件的编辑。这个配置文件的路径是:/etc/mail/spamassassin/local.cf。

SpamAssassin 在许多位置可查找配置文件,详细信息请参阅 SpamAssassin 手册。最容易使用的配置文件是 /etc/mail/spamassassin/local.cf,可以编辑这个文件来全局配置 SpamAssassin。用户可以覆盖这些全局选项并在 ~/.spamassassin/user_prefs 文件中添加自己的选项。可以把本节讨论的选项放在这些文件中的任何一个。

例如,可以配置 SpamAssassin 来重写评级为垃圾邮件的邮件主题行。配置文件中的 rewrite_header 关键字可控制这种行为。跟随这个关键字的 Subject 字告诉 SpamAssassin 重写主题行。从以下行删除 # 就可以启用这种行为:

 # rewrite_header Subject *****SPAM*****

required_score 关键字指定:SpamAssassin 认为它是垃圾邮件之前一封电子邮件必须获得的最低得分。默认值是 5.00。设置此关键字到一个更高的数值,就能使 SpamAssassin 把较少的电子邮件标记为垃圾邮件。

 required_score 5.00

有时标记为垃圾邮件地址的邮件并不是垃圾邮件,或者来自该地址的邮件并不应该标记为垃圾邮件。使用 whitelist_from 关键字可指定不应该被视为垃圾邮件的地址,blacklist_from 用于指定应始终标记为垃圾邮件的地址:

 whitelist_from sams@example.com 
 blacklist_from *@spammer.net

可以在 whitelist_from 和 blacklist_from 行上指定多个地址,并用空格隔开。每个地址可以包含通配符。使用 whitelist_from *@example.com 将从 example.com 域发送电子邮件的每个人列入白名单。可以使用多个 whitelist_from 和 blacklist_from 行。

下面给出了一个配置该文件的示例:

 # How many hits before a message is considered spam. 
 required_score 7.5 
 # Change the subject of suspected spam 
 rewrite_header subject [SPAM] 
 # Encapsulate spam in an attachment (0=no, 1=yes, 2=safe) 
 report_safe 1 
 # Enable the Bayes system 
 use_bayes 1 
 # Enable Bayes auto-learning 
 bayes_auto_learn 1 
 # Enable or disable network checks 
 skip_rbl_checks 0 
 use_razor2 1 
 use_dcc 1 
 use_pyzor 1 
 # Mail using languages used in these country codes will not be marked 
 # as being possibly spam in a foreign language. 
 ok_languages all 
 # Mail using locales used in these country codes will not be marked 
 # as being possibly spam in a foreign language. 
 ok_locales all

其中,主要包括如下几个重点项需要进行设置:

  • required_score(评价阈值):设定该阈值通常情况下需要根据管理员的长期经验。阈值越低,就会有更少的邮件通过,因而将正常邮件误报为垃圾邮件的概率越高;阈值越高,则有可能将更多的垃圾邮件漏报为正常邮件,通常的默认值为 5。
  • Rewrite header Subjects(重写消息主题):通过这个选项,用户可以配置 SpamAssassin 用你选择的任何对象来编辑电子邮件的主题行。默认值设置为:[SPAM]。
  • bayes_auto_learn(使用自动学习):SpamAssassin 可以通过分析具有一定评价的消息,去自动化地整理其 Bayes(贝叶斯)数据库,这个评价强烈地显示了消息是垃圾还是非垃圾消息。
  • Enable or disable network checks(使用网络检查和检验):选择是否使用将消息检查和(Checksum)与已知的垃圾邮件相比较的服务:这些服务有:Vipul's Razor 2.x、 DCC、 Pyzor 等,不过只有当每种服务的客户端软件安装时这些服务才能正常工作。( 即通过 use_razor2, use_dcc, use_pyzor 进行 )。另外,该选项中还包括了 Enable RBL Checks(启用 RBL 检查),即选择 SpamAssassin 是否应使用 RBLS(DNS 黑名单)。这有助于检测难于检测的垃圾信息,但需要消耗一些时间、网络带宽以及一个可用的 DNS 服务器。
  • Languages(语言):最后两种配置是关于语言的,第一个是哪些语言应检查,默认选项是检查所有的语言,建议不要修改。

在成功配置好 SpamAssassin 后,需要启动 SpamAssassin 应用程序。要想运行 SpamAssassin,必须以根用户身份运行如下的命令:

 #/etc/rc.d/init.d/spamassassin start

配置与 sendmail 协同工作

现在 SpamAssassin 已经启动并正常运行,现在需要设置它与邮件传输代理(Mail Delivery Agent)一起工作。本节介绍它与 Sendmail 协同工作的设置,因为 Sendmail 是在 Linux 环境中应用最广泛的邮件传输代理。

用户需要编辑 /etc/mail/spamassassin/spamc.cf 文件,并增加如下内容:

:0fw 
 /usr/bin/spamc

现在 Sendmail 被设置为使用 SpamAssassin 来评价和过滤进入的垃圾邮件。

运行 SpamAssasin

随着 spamd 的运行,向 spamc 发送一个字符串可以查看其工作原理:

 $ echo "hi there" | spamc 
 X-Spam-Checker-Version: SpamAssassin 3.3.2-r929478 (2010-03-31) on sobell.com 
 X-Spam-Flag: YES 
 X-Spam-Level: ****** 
 X-Spam-Status: Yes, score=6.9 required=5.0 tests=EMPTY_MESSAGE,MISSING_DATE, 
 MISSING_HEADERS,MISSING_MID,MISSING_SUBJECT,NO_HEADERS_MESSAGE,NO_RECEIVED, 
 NO_RELAYS autolearn=no version=3.3.2-r929478 
 X-Spam-Report: 
 * -0.0 NO_RELAYS Informational: message was not relayed via SMTP 
 * 1.2 MISSING_HEADERS Missing To: header 
 * 0.1 MISSING_MID Missing Message-Id: header 
 * 1.8 MISSING_SUBJECT Missing Subject: header 
 * 2.3 EMPTY_MESSAGE Message appears to have no textual parts and no 
 * Subject: text 
 * -0.0 NO_RECEIVED Informational: message has no Received headers 
 * 1.4 MISSING_DATE Missing Date: header 
 * 0.0 NO_HEADERS_MESSAGE Message appears to be missing most RFC-822 
 * headers 
 hi there 
 Subject: [SPAM] 
 X-Spam-Prev-Subject: (nonexistent)

它首先会显示 Yes,即认定该邮件是垃圾邮件。SpamAssassin 使用评级系统,给一封电子邮件分配一个匹配命中数。如果该电子邮件收到的命中数超过所需的数量(默认为 5.0),SpamAssassin 则把它标记为垃圾邮件。字符串失败的原因是多方面的,都会在此状态行上列举。

以下列表是由 SpamAssassin 处理的一封真实垃圾邮件。它收到了 24.5 个命中,这几乎肯定是垃圾邮件。

 X-Spam-Status: Yes, hits=24.5 required=5.0 
 tests=DATE_IN_FUTURE_06_12,INVALID_DATE_TZ_ABSURD, 
 MSGID_OE_SPAM_4ZERO,MSGID_OUTLOOK_TIME, 
 MSGID_SPAMSIGN_ZEROES,RCVD_IN_DSBL,RCVD_IN_NJABL, 
 RCVD_IN_UNCONFIRMED_DSBL,REMOVE_PAGE,VACATION_SCAM, 
 X_NJABL_OPEN_PROXY 
 version=2.55 

 X-Spam-Level: ************************ 
 X-Spam-Checker-Version: SpamAssassin 2.55 (1.174.2.19-2003-05-19-exp) 
 X-Spam-Report: This mail is probably spam. The original message has been attached 
 along with this report, so you can recognize or block similar unwanted 
 mail in future. See http://spamassassin.org/tag/ for more details. 
 Content preview: Paradise SEX Island Awaits! Tropical 1 week vacations 
 where anything goes! We have lots of WOMEN, SEX, ALCOHOL, ETC! Every 
 man's dream awaits on this island of pleasure. [...] 
 Content analysis details: (24.50 points, 5 required) 
 MSGID_SPAMSIGN_ZEROES (4.3 points) Message-Id generated by spam tool (zeroes variant) 
 INVALID_DATE_TZ_ABSURD (4.3 points) Invalid Date: header (timezone does not exist) 
 MSGID_OE_SPAM_4ZERO (3.5 points) Message-Id generated by spam tool (4-zeroes variant) 
 VACATION_SCAM (1.9 points) BODY: Vacation Offers 
 REMOVE_PAGE (0.3 points) URI: URL of page called "remove"
 MSGID_OUTLOOK_TIME (4.4 points) Message-Id is fake (in Outlook Express format) 
 DATE_IN_FUTURE_06_12 (1.3 points) Date: is 6 to 12 hours after Received: date 
 RCVD_IN_NJABL (0.9 points) RBL: Received via a relay in dnsbl.njabl.org 
 [RBL check: found 94.99.190.200.dnsbl.njabl.org.] 
 RCVD_IN_UNCONFIRMED_DSBL (0.5 points) RBL: Received via a relay in unconfirmed.dsbl.org 
 [RBL check: found 94.99.190.200.unconfirmed.dsbl.org.] 
 X_NJABL_OPEN_PROXY (0.5 points) RBL: NJABL: sender is proxy/relay/formmail/spam-source 
 RCVD_IN_DSBL (2.6 points) RBL: Received via a relay in list.dsbl.org 
 [RBL check: found 211.157.63.200.list.dsbl.org.] 
 X-Spam-Flag: YES 
 Subject: [SPAM] re: statement

垃圾邮件黑名单

通常情况下,垃圾邮件发送者都会借助某些域和用户会发送垃圾信息。幸运的是,SpamAssassin 有一个对付已知垃圾邮件制造者的手段。设置黑名单是很简单的事情。用户可以向配置文件 etc/mail/spamassain/local.cf 添加黑名单。黑名单的书写方式如下所示:

 blacklist_from sample_email@sampledomain.com 
 blacklist_from *@sampledomain.com 
 blacklist_from *@sampledomain.com 
 blacklist_from *@sampledomain.com

上面的内容相当明显地向读者展示了如何配置黑名单。用户既可以配置具体的电子邮件地址(如 sample_email@sampledomain.com),也可以配置整个域(如 *@sampledomain.com)。另外,为了使用最新的网络上共享的垃圾邮件过滤信息,还可以从 http://www.sa-blacklist.stearns.org/sa-blacklist/sa-blacklist.current下载最新的黑名单。不过,这个列表相当庞大,且有可能不会非常适合用户的需要,因此在下载此列表并添加到用户的黑名单时还需要进行细致的过滤和筛选。


总结

本文详细介绍了 Postfix 的安全防护实战,以及如何进行企业垃圾邮件防范。至此为止,本系列的 2 篇文章从介绍企业电子邮件面临的安全威胁、原理出发,通过大量的配置和实战示例,详细讲述了企业如何对 3 种主流的开源电子邮件系统进行安全加固和配置,以及如何应用 SpamAssassin 进行垃圾邮件防范和治理,希望广大读者能从中受益,并应用到日常的信息安全工作和系统管理工作中。

参考资料

学习

讨论

条评论

developerWorks: 登录

标有星(*)号的字段是必填字段。


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件

 


在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。

所有提交的信息确保安全。

选择您的昵称



当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

标有星(*)号的字段是必填字段。

(昵称长度在 3 至 31 个字符之间)

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

 


所有提交的信息确保安全。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Linux
ArticleID=872946
ArticleTitle=企业开源电子邮件系统安全保障实战精要: 第 2 部分,Postfix 安全防护实战及垃圾邮件防范
publish-date=04222013