使用Postfix强制对传出SMTP进行加密


22

有谁知道如何告诉Postfix加密外发邮件?

我已将其配置为在接收时使用加密,但是无法对传出邮件进行加密。这是我的main.cf文件:

smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_unauth_destination
smtpd_sasl_auth_enable = yes
smtpd_sasl_path = smtpd
transport_maps = hash:/etc/postfix/transport

# tls config
smtp_use_tls = yes
smtpd_use_tls = yes
smtp_tls_note_starttls_offer = yes
smtpd_tls_key_file = /etc/postfix/ssl/smtpd.pem
smtpd_tls_cert_file = /etc/postfix/ssl/smtpd.pem
smtpd_tls_CAfile = /etc/postfix/ssl/smtpd.pem
smtpd_tls_loglevel = 1
smtpd_tls_received_header = yes
smtpd_tls_session_cache_timeout = 3600s
tls_random_source = dev:/dev/urandom

Answers:


30

smtp_tls_security_level =加密smtp_enforce_tls =是

对于特定的目的地,您可以使用smtp_tls_policy_maps

smtp_use_tls = YESsmtp_enforce_tls = YES已被弃用。在Postfix 2.3和更高版本中,请改用smtp_tls_security_level

切记:实施TLS加密可能会导致未配置TLS的SMTP主机出现邮件传递问题。如果使用服务器仅将邮件发送到配置了TLS的内部服务器,则在这种情况下就不成问题了。但是,如果使用服务器将邮件传递到公共服务器,则不能假定所有服务器都支持TLS。在这种情况下,请使用 smtp_tls_security_level =


1
我认为他只想从软件mailclient强制到发送邮件服务器。不是从邮件服务器到邮件服务器(请参阅他于2010年3月7日23:26发表的评论)
Cojones 2012年

4

这样做的目的是强制用户使用加密的传出smtp服务器配置其电子邮件客户端。使用当前的conf,Thunderbird让他们可以选择以纯文本格式与smtp服务器进行通信...

您必须在不重新编译源代码的情况下禁用Thunderbird中的选项,但是可以配置postfix stmpd守护程序(从客户端接收邮件)来强制加密。为此,请使用smtpd_tls_security_level = encrypt,它等效于过时的选项smtpd_use_tls = yessmtp_enforce_tls = yessmtpd_tls_security_level =加密smtp_enforce_tls =是意味着smtpd_tls_auth_only =是

来自有关smtpd_tls_security_level = encrypt的 postfix文档

强制性TLS加密:向SMTP客户端宣布STARTTLS支持,并要求客户端使用TLS加密。根据RFC 2487,在公开引用的SMTP服务器的情况下,不得使用此方法。相反,此选项应仅在专用服务器上使用。

如果使用公共服务器,则不能在端口25 / tcp上强制执行电子邮件加密。更好的解决方案是从客户端的postfix smtpd守护程序端口25 / tcp禁用邮件传递,并启用postfix提交守护程序(这是特殊的postfix smtpd守护程序,仅用于从本地客户端接收邮件,该客户端在端口587 / tcp上运行的RFC 4409中描述) 。为此,设置smtpd_tls_security_level = maypermit_sasl_authenticatedsmtpd_recipient_restrictions中删除。在master.cf关于提交守护程序的注释行中:

submission inet n       -       n       -       -   submission
  -o smtpd_tls_security_level=encrypt
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_recipient_resrictions=permit_sasl_authenticated,reject

1

只是好奇,您如何得知它没有使用TLS?smtp_tls_loglevel的默认值(与smtpd_tls_loglevel不同)为0,因此默认情况下,您在Postfix的日志中不会看到有关出站邮件TLS协商的任何信息。

如果将smtp_tls_loglevel设置为1或更高,则在发送消息时,您应该在日志中看到如下一行:

3月7日22:28:10机架postfix / smtp [27400]:初始化客户端TLS引擎

我承认我很懒,但是除此之外(和上面的ms注释),配置对我来说一目了然。


1
据我了解,Simon希望强制使用TLS对所有邮件进行加密。如果远程服务器支持,则smtp_use_tls = yes允许后缀使用TLS(smtp_use_tls = yes等效于smtp_tls_security_level = may)。如果外发邮件已使用TLS加密,则应在邮件日志中放置适当的邮件。没错,smtp_ *选项用于与smtpd_ *不同的postfix守护程序(smtpd_ *用于接收来自远程服务器的邮件,smtp_ *用于将邮件传递到远程服务器)。
相扑

实际上,我认为这个问题可能有点模棱两可。至少我不能说出Simon是否希望Postfix要求TLS还是仅在收件人的服务器支持TLS的情况下使用它。
jlupolt 2010年

1
感谢您的发言,我可能没有很好地解释我。这样做的目的是强制用户使用加密的传出smtp服务器配置其电子邮件客户端。使用当前的conf,Thunderbird让他们可以选择以纯文本格式与smtp服务器通信...可以避免这种情况吗?预先感谢,西蒙。
西蒙

识别TLS是否处于活动状态的简单方法是查看接收方的原始消息并查找Authentication-Results:domainkeys = neutral(无信号);这表明其未使用TLS
Scott Stensland '16
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.