导语:这份指南旨在对Postfix的安全性能进行强化,以增加针对垃圾邮件滥用以及可能出现的泄露敏感数据问题的防范。

Postfix和Sendmail是Linux上最常用的邮件服务器系统。与Sendmail相比,Postfix的配置要简单很多,更容易上手。

本文将主要介绍Postfix的安全配置指南,旨在对Postfix的安全性能进行强化,以增加针对垃圾邮件滥用以及可能出现的泄露敏感数据问题的防范。下面我们正式开始!

为什么要对Postfix进行加固?

事实上,我们必须承认一件事——进入互联网的任何一项服务都会在不久之后就被自动化脚本所滥用。例如一个出现问题的Postfix可能会为每个人发送信息,而不仅仅是你网络系统。这种类型的配置称为“开放式继电器”,他会很快就使你的系统被各种拉黑。如果只是一个测试系统,那么你很幸运。但如果你有客户对他有使用依赖,那么你就有的解释了。

除此之外,对Postfix加固的另一个原因是目前越来越多的隐私需求。大多数传统协议(包括SMTP发送电子邮件)在优先级列表中没有安全隐私权。这些协议可以与其他系统共享数据,并且无需任何形式的保护。而这可能导致从当地IT管理员到可能的中央情报局或国家安全局中未经授权的人员窥探数据。

准备

下面就到了获取技术并进行配置测试的时间了。值得注意的是许多加固指南和博客似乎都忘记了系统加固的一个重要部分:准备工作。那么就让我们从这一步开始吧。

测试现有的Postfix配置

可能你自己都不知道你当前的配置可能会出现错误,所以最好还是先来测试一下。

postconf 1> /dev/null

postconf的命令可以用于显示后缀配置,或进行变更。在这种情况下,我们将所有正常输出(stdout)重定向到数字垃圾桶(/dev/null)。如果你的配置有任何错误或警告,它们就会显示显示。事实上我们的系统就有一个警告,当我们在我们自己的审核工具Lynis中实施相关测试时,我们发现了这一点。

postfix-postconf-show-warnings.png

如果你得到了任何输出项,那么明智的做法是先解决这些问题,然后重新启动Postfix服务以查看错误或警告是否消失。

备份你的Postfix配置

这一步大家都知道,但是却经常被跳过。但如果你进行系统加固,最好还是请先进行备份。第一个备份是创建一个/ etc / postfix目录的副本。

tar czf /root/postfix-$(date "+%F").tar.gz /etc/postfix

为了后续的故障排除或比较配置,使用postconf  存储副本也是明智之举。这个我们可以很容易地与diff命令一起使用。

postconf > /root/postconf-$(date "+%F")

找到你的Postfix版本

postconf mail_version | awk -F" = " '{print $2}'

另一种方法是使用包管理器来查找'postfix'包的版本。对于Debian和Ubuntu用户,可以使用dpkg命令来实现。

dpkg -l postfix

加固步骤

随着所有的准备工作结束,现在起Postfix加固步骤就开始了。其中每个步骤都将改变Postfix中的特定区域,一些是为了防止信息泄露,其他的则是提高稳定性或增加发送内容的隐私性。

基本加固

禁用VRFY(验证)

VRFY命令是短期的“验证”,它可以用于查看邮件服务器上的电子邮件地址是否有效。虽然这非常适合进行故障排除,如果一个帐户存在并可能提供垃圾邮件,那么它也允许其他人进行有针对性的猜测。另外还有一点就是通常不需要在两个邮件服务器之间传送VRFY命令。

postconf -e disable_vrfy_command=yes

注意:更改每个项目后,重新启动或重新加载Postfix并查看Postfix的错误,这里有一种方法是通过在日志文件上保持观察。

网络接口(inet_interfaces)

检查的第一个设置是Postfix正在侦听的接口。此设置称为inet_interfaces,默认情况下配置为all。如果你只想将消息转发到其他系统,例如发送外发电子邮件,则不需要在所有网络接口上监听。配置Postfix只在本地接口上监听,这可以通过将inet_interface设置为仅环回来实现。

postconf -e inet_interfaces=loopback-only

重新启动Postfix后,测试您的配置。在这种情况下,我们可以使用netstat或ss的输出。

输出ss命令以显示Postfix正在侦听的网络端口:

postfix-hardening-network-localhost.png

其中有一些更改可能需要重新启动Postfix,更改inet_interfaces设置时,重新加载不够。

如果你正在配置为其他系统中继的系统,那么你会希望在所有网络接口上侦听,或者仅在本地主机和主要网络接口上进行侦听。

电子邮件中继

放置邮件服务器时的第一条规则救是要避免其是开放的中继系统。这是一个接受来自所有系统的电子邮件并对他们进行转发的系统。垃圾邮件发送者将很快找到你的主机并对其进行滥用,然后发送他们的消息。 

网络

中继配置有几个参数:第一个是mynetworks设置,通常只包括本地网络接口(lo)的网络地址。

mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [:: 1] / 128

如果要扩展此列表,只需添加网段或单个系统。指定相关网络掩码,单个IPv4地址为/ 32,IPv6为/ 128。

由于此设置中的空格,请在使用postconf命令时添加引号。

postconf -e mynetworks="127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128"

域名

第二层定义什么电子邮件接受并因此进行中继,正在使用目标域。相关的设置是relay_domains,哪些域名首先接受电子邮件。

测试Postfix中继

您可以通过设置与其他系统的连接来测试您的配置是否正确设置。Telnet到其他系统,并运行以下命令

helo yourdomain.com
mail from:[email protected]
rcpt to:[email protected]
data

数据

更换地址,看看是否可以将邮件转发到您自己的域外的地址。例如,您可以使用Gmail或Hotmail地址作为接收方。

如果都配置正确了能避免打开中继,那么就会获得中继访问被拒绝的消息。

Relay access denied (in reply to RCPT TO command)

传入电子邮件配置

以smtpd开头的配置项 指向SMTP守护进程,这是处理传入请求的守护进程。

启用HELO

人们通常会问“你好”或是类似的话语,而邮件服务器则是使用HELO命令或EHLO(扩展版本)执行此操作。如果没有使用这一内容的服务器通常是未正确配置,或仅发送垃圾邮件。

postconf -e smtpd_helo_required=yes

传出电子邮件配置

通常只有几台机器可以接收传入的电子邮件,所有其他服务器都需要发送电子邮件。这可能与系统通知或需要发送电子邮件的帐户激活或密码重置的Web应用程序相关。

相关和有用的命令

postqueue -f(刷新邮件队列并重试发送所有电子邮件)

加密和隐私

启用TLS日志记录

要查看TLS中的详细信息,需要增加Postfix日志记录的级别。可将smtp_tls_loglevel(传出)或   smtpd_tls_loglevel(传入)设置为值1(1)。

postconf -e smtp_tls_loglevel=1

测试键

使用OpenSSL,你就可以轻松的去测试SMTP配置和相关密码。测试领域之一是初始连接握手的强度,这通常通过交换加密密钥的  Diffie – Hellman(DH)算法完成。

echo | openssl s_client -starttls smtp -connect localhost:25 -cipher "EDH" 2>/dev/null | grep -i -e "Server .* key"

注意:至少需要版本1.02的OpenSSL,否则不会显示所有的详细信息。

这个命令应该给你两行输出。第一行是临时密钥,使用DH时应至少为1024位,以防止Logjam攻击。

Server Temp Key: DH, 2048 bits

第二行是公钥大小,这通常是现代系统上的2048位密钥(或更高版本)。

Server public key is 2048 bit

源链接

Hacking more

...