Postfix

後綴上特定中繼主機的 TLS

  • February 17, 2021

我想使用 python 在後綴中實現高級內容過濾。我已經從http://www.postfix.org/FILTER_README.html弄清楚了它的實現。但還有另一個問題,在從 python 腳本過濾後,我需要中繼到需要使用 TLS 的亞馬遜 ses。問題是如果我使用 TLS 配置 postfix,postfix-python 腳本會出錯,如果我不使用 TLS,postfix-Amazon SES 會出錯。有什麼想法可以解決這個問題嗎?

來自亞馬遜 SES 的錯誤:

Sep 29 07:09:41 mail postfix/qmgr[1935]: 4AC65C533B2: from=<ec2-user@xmail.xample.id>, size=663, nrcpt=1 (queue active)
Sep 29 07:09:41 mail postfix/error[2229]: 4AC65C533B2: to=<ilham.sulaksono@xample.com>, 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

Master.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

在Google上搜尋後,我找到了一種方法。即使不是某些特定中繼主機的預期。它在後綴中使用配置,因此使用 ssl 不需要後綴。使用以下行在 main.cf 中進行配置:

   smtp_tls_security_level = may 

如我所見,使 postfix 作為 SES 中繼工作的三個步驟:

1.拿到好證書

當然,這樣做的方法是使用 Let’s Encrypt。他們的導遊很好。因為這是一個電子郵件伺服器而不是 Web 伺服器,所以您可能需要進行 DNS 驗證並創建一個standalone證書。

  1. 使用良好的安全設置設置 postfix

現在您有了證書,您可以很好地配置它。最好的指南仍然是 Mozilla SSL 配置生成器。由於此伺服器將僅作為連接 AWS 的中繼,因此您可以使用高安全性現代設置

  1. 設置 SASL 身份驗證(無論是什麼)

老實說,我不知道 SASL 是什麼,但它可以工作,而且 AWS 有一個很好的指南。按照本指南為我解決了上述錯誤(我已經完成了前兩個步驟)。


一旦你完成了上述工作,你應該有一個從本地機器到具有良好安全性、自動更新證書等的 AWS SES 的良好中繼。

引用自:https://serverfault.com/questions/876089