Postfix 上特定中继主机的 TLS

Postfix 上特定中继主机的 TLS

我想使用 python 在 postfix 中实现高级内容过滤。我已经找到了实现方法http://www.postfix.org/FILTER_README.html。但还有另一个问题,在从 python 脚本过滤后,我需要中继到需要使用 TLS 的 amazon ses。问题是,如果我使用 TLS 配置 postfix,postfix-python 脚本将出错,如果我不使用 TLS,postfix-Amazon SES 将出错。有什么想法可以解决这个问题吗?

来自亚马逊 SES 的错误:

Sep 29 07:09:41 mail postfix/qmgr[1935]: 4AC65C533B2: from=<[email protected]>, size=663, nrcpt=1 (queue active)
Sep 29 07:09:41 mail postfix/error[2229]: 4AC65C533B2: to=<[email protected]>, relay=none, delay=8999, delays=8999/0.01/0/0.01, dsn=4.0.0, status=deferred (delivery temporarily suspended: SASL authentication failed; server email-smtp.us-west-2.amazonaws.com[34.211.81.29] said: 530 Must issue a STARTTLS command first)

Main.cf 配置:

queue_directory = /var/spool/postfix
daemon_directory = /usr/libexec/postfix
mail_owner = postfix
myhostname = xmail.xample.id
mydomain = xmail.xample.id
myorigin = $mydomain
inet_protocols = all
mydestination = $myhostname, localhost.$mydomain, localhost, mydomain
mynetworks_style = host
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
debug_peer_level = 2
debugger_command =
         PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
         ddd $daemon_directory/$process_name $process_id & sleep 5

sendmail_path = /usr/sbin/sendmail.postfix
newaliases_path = /usr/bin/newaliases.postfix
mailq_path = /usr/bin/mailq.postfix
setgid_group = postdrop
html_directory = no
manpage_directory = /usr/share/man
sample_directory = /usr/share/doc/postfix-2.10.1/samples
readme_directory = /usr/share/doc/postfix-2.10.1/README_FILES

smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
smtp_sasl_auth_enable = yes
smtp_sasl_security_options = noanonymous
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
relayhost = [email-smtp.us-west-2.amazonaws.com]:587
smtpd_sasl_local_domain = $myhostname
#smtp_use_tls = yes
#smtp_tls_security_level = encrypt
#smtp_tls_note_starttls_offer = yes
content_filter = scan:localhost:10025
receive_override_options = no_address_mappings

主控.cf:

#
# Postfix master process configuration file.  For details on the format
# of the file, see the master(5) manual page (command: "man 5 master").
#
# Do not forget to execute "postfix reload" after editing this file.
#
# ==========================================================================
# service type  private unpriv  chroot  wakeup  maxproc command + args
#               (yes)   (yes)   (yes)   (never) (100)
# ==========================================================================
smtp      inet  n       -       n       -       -       smtpd

#628       inet  n       -       n       -       -       qmqpd
pickup    unix  n       -       n       60      1       pickup
cleanup   unix  n       -       n       -       0       cleanup
qmgr      unix  n       -       n       300     1       qmgr
#qmgr     unix  n       -       n       300     1       oqmgr
tlsmgr    unix  -       -       n       1000?   1       tlsmgr
rewrite   unix  -       -       n       -       -       trivial-rewrite
bounce    unix  -       -       n       -       0       bounce
defer     unix  -       -       n       -       0       bounce
trace     unix  -       -       n       -       0       bounce
verify    unix  -       -       n       -       1       verify
flush     unix  n       -       n       1000?   0       flush
proxymap  unix  -       -       n       -       -       proxymap
proxywrite unix -       -       n       -       1       proxymap
smtp      unix  -       -       n       -       -       smtp
relay     unix  -       -       n       -       -       smtp
#       -o smtp_helo_timeout=5 -o smtp_connect_timeout=5
showq     unix  n       -       n       -       -       showq
error     unix  -       -       n       -       -       error
retry     unix  -       -       n       -       -       error
discard   unix  -       -       n       -       -       discard
local     unix  -       n       n       -       -       local
virtual   unix  -       n       n       -       -       virtual
lmtp      unix  -       -       n       -       -       lmtp
anvil     unix  -       -       n       -       1       anvil
scache    unix  -       -       n       -       1       scache

scan unix - - n - 10 smtp
        -o smtp_send_xforward_command=yes
        -o disable_mime_output_conversion=yes

localhost:10026 inet n - n - 10 smtpd
        -o content_filter=
        -o receive_override_options=no_unknown_recipient_checks,no_header_body_checks,no_milters
        -o smtpd_authorized_xforward_hosts=127.0.0.0/8

答案1

在谷歌上搜索了一番后,我找到了一种方法。尽管它不是针对某些特定中继主机而设计的。它使用 postfix 中的配置,因此 postfix 不需要使用 ssl。配置在 main.cf 中使用以下行:

    smtp_tls_security_level = may 

答案2

据我所知,要使 postfix 作为 SES 中继工作有三个步骤:

1. 取得好证书

当然,实现此目的的方法是使用 Let's Encrypt。他们的导游很好。因为这是一个电子邮件服务器而不是 Web 服务器,所以您可能需要进行 DNS 验证并创建证书standalone

2. 设置 Postfix 并设置良好的安全设置

现在您有了证书,您可以很好地配置它。最好的指南仍然是 Mozilla SSL 配置生成器。由于此服务器仅是连接到 AWS 的中继,因此您可以使用高度安全的现代环境

3. 设置 SASL 身份验证(无论它是什么)

老实说,我不知道 SASL 是什么,但它确实有效,而且 AWS 也有一个很好的指南。按照本指南操作,我修复了上述错误(我已经完成了前两个步骤)。


一旦完成上述工作,您就应该能够从本地机器顺利地中继到具有良好安全性、自动更新证书等的 AWS SES。

相关内容