Postfix
後綴上特定中繼主機的 TLS
我想使用 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
證書。
- 使用良好的安全設置設置 postfix
現在您有了證書,您可以很好地配置它。最好的指南仍然是 Mozilla SSL 配置生成器。由於此伺服器將僅作為連接 AWS 的中繼,因此您可以使用高安全性現代設置。
- 設置 SASL 身份驗證(無論是什麼)
老實說,我不知道 SASL 是什麼,但它可以工作,而且 AWS 有一個很好的指南。按照本指南為我解決了上述錯誤(我已經完成了前兩個步驟)。
一旦你完成了上述工作,你應該有一個從本地機器到具有良好安全性、自動更新證書等的 AWS SES 的良好中繼。