Postfix 安全防护实战及垃圾邮件防范

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

实战构建安全 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 中广泛使用的防垃圾邮件技术。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/d5268b917b865a444c84e20fb01df3f9.html