如何在 Postfix 上通过安全身份验证启用端口 587 的 TLS?

2 postfix

如何使我的 Postfix 服务器仅在端口 587 上发送邮件,并通过安全身份验证(使用系统 Linux 用户)启用端口 587 的 TLS?

首先,这个问题可能看起来太宽泛,但我在互联网上找不到单一的解决方案。很多文章确实给出了解决方案,但他们跳过了一些部分。

我想强制身份验证并强制 TLS 连接。

如果有人问我,我可以发布配置。

提前致谢。我是 postfix 的新手。另外,我可以看看http://www.postfix.org/documentation.html,但在你告诉我之前,我无法正确理解它,因此,我确信我会弄乱配置,并使我的服务器无法使用。另外,这里的 postfix 是使用 apt 包管理器安装的。但我确信这与 ubuntu 没有特别关系。在使用 postfix 之前我使用的是 Exim4,但是对 Exim 的支持很少,因为人们大多在 cPanel 中使用它,所以我没有得到普通的 Exim 支持。

这需要紧急帮助,因为我们服务器的安全处于危险之中。

小智 5

要启用端口 587,请编辑文件/etc/postfix/master.cf

vi /etc/postfix/master.cf
Run Code Online (Sandbox Code Playgroud)

并删除该行前面的#(取消注释该行):

#submission inet n - n - - smtpd
Run Code Online (Sandbox Code Playgroud)

使其看起来像这样:

submission inet n - n - - smtpd
Run Code Online (Sandbox Code Playgroud)

您可能需要取消注释此行之后启用 SASL 身份验证的其他行。每条新行都应以空格开头!

 -o syslog_name=postfix/submission
 -o smtpd_tls_security_level=encrypt
 -o smtpd_sasl_auth_enable=yes
 -o smtpd_client_restrictions=permit_sasl_authenticated,reject
Run Code Online (Sandbox Code Playgroud)

根据您的环境在/etc/postfix/main.cf中配置所有其他设置。

此外,您可能需要配置 TLS 设置:

# TLS parameters
# you need to specify a real certificate location
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert.key
smtpd_use_tls=yes
smtpd_tls_received_header = yes
smtpd_tls_session_cache_timeout = 3600s
smtp_tls_session_cache_database = btree:$data_directory/smtp_tls_session_cache
smtpd_sasl_tls_security_options=noanonymous
smtpd_tls_auth_only=yes
Run Code Online (Sandbox Code Playgroud)

根据您是否使用 dovecot 接收电子邮件,您可能需要添加:

smtpd_sasl_security_options = noanonymous
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/dovecot-auth
broken_sasl_auth_clients=yes
Run Code Online (Sandbox Code Playgroud)

附加安全限制:

smtpd_relay_restrictions=permit_mynetworks,permit_sasl_authenticated,reject_unauth_destination
smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject_non_fqdn_helo_hostname,reject_non_fqdn_sender,reject_unknown_sender_domain,reject_non_fqdn_recipient,reject_unknown_recipient_domain
Run Code Online (Sandbox Code Playgroud)

检查并重新启动 postfix:

postfix check
systemctl restart postfix
Run Code Online (Sandbox Code Playgroud)

您可以确保 postfix 现在正在侦听端口 25 和 587:

netstat -na | grep LISTEN | grep 25
netstat -na | grep LISTEN | grep 587
Run Code Online (Sandbox Code Playgroud)

不要忘记在防火墙中允许端口 587。

创建 postfix 用户是另一回事。正如评论中提到的,您应该使用 SQL 来存储邮箱(邮件用户)。如果你不想这样做,你可以使用Linux用户,这里有详细描述。

PS 我认为在这里提供完整的配置是不可行的,因为它总是非常依赖于具体的案例要求和您的环境。