如何在 Exim 中強制 STARTTLS?
我正在學習設置郵件伺服器。我讓它與後綴一起工作,現在嘗試與 Exim 相同的配置。如何強制客戶端僅佔用 STARTTLS 連接以進行 SMTP 傳出連接?我按照這個問題中的說明進行操作。
我的配置現在看起來如下
MAIN_TLS_ENABLE = yes MAIN_TLS_CERTIFICATE = /etc/ssl/certs/ssl-cert-snakeoil.pem MAIN_TLS_PRIVATEKEY = /etc/ssl/private/ssl-cert-snakeoil.key .ifdef MAIN_TLS_ENABLE # Defines what hosts to 'advertise' STARTTLS functionality to. The # default, *, will advertise to all hosts that connect with EHLO. .ifndef MAIN_TLS_ADVERTISE_HOSTS MAIN_TLS_ADVERTISE_HOSTS = * .endif tls_advertise_hosts = MAIN_TLS_ADVERTISE_HOSTS auth_advertise_hosts = ${if eq{$tls_in_cipher}{}{}{*}}
重新啟動Exim,沒有錯誤。然後我在http://checktls.com/中進行了一些測試
TestSender 通過,我可以在安全通信下發送電子郵件。但是 TestSenderAssureTLS 失敗了,網站可以協商一個未加密的通信。
我錯過了什麼?
當我使用 Thunderbird 創建一個帳戶時,它會自動檢測一個不安全的 SMTP 通道,而不是一個帶有 STARTTLS 的通道。設置帳戶並發送電子郵件成功。但是,當我從網路中的電腦外殼進行 SMTP 對話時,不會公佈任何身份驗證。它看起來如下:
EHLO <subdomain>.<domain> 250-betelgeuse Hello <subdomain>.<domain> [10.0.14.34] 250-SIZE 52428800 250-8BITMIME 250-PIPELINING 250-STARTTLS 250 HELP AUTH LOGIN 503 AUTH command used when not advertised
有人可以指出我所缺少的東西,我怎樣才能做出更好的測試?在相關主題上,我如何向執行 autdetect 的客戶端宣傳我希望的配置?謝謝你。
連接
STARTTLS
需要以不安全的方式啟動。該選項在第一個命令STARTTLS
之後才公佈。EHLO
如果要強制執行STARTTLS
,則需要添加或修改ACL
. 我發布了我應用的電子郵件政策。如果此伺服器是您的 MX,則不應強制
STARTTLS
所有連接。我的配置需要STARTTLS
連接需要AUTH
. 這不包括來自我的 LAN 的連接,但適用於漫遊時從我的伺服器發送電子郵件的使用者。我還要求在送出埠上進行身份驗證。這是ACL
我使用的基礎知識。# This access control list is used after an auth command. acl_local_auth: # Deny authentication on unencrypted links deny !encrypted = * message = AUTH encryption is required # Deny if AUTH isn't on submission port (autolist enabled) deny !condition = ${if eq {$interface_port}{587}} message = AUTH requires submission port # Accept if encrypted (should not get here if unencrypted) accept encrypted = *
預設拒絕拒絕消息 = AUTH 不接受
您也可以
TLS
在郵件中強制執行ACL
。此 ACL 允許外部發件人發送郵件。# This access control list is used for every MAIL FROM command in an # incoming SMTP message. acl_local_mail_from: # Accept if locally trusted hosts accept hosts = : +relay_from_hosts # Accept if authenticated ## May want to check domain is local accept authenticated = * # Accept the null sender - bounce messages and receipts accept senders = : # Accept if not local domain - recipient ACL will handle relaying # More checks on sender in recipient ACL. accept !hosts = : +relay_from_hosts !sender_domains = +local_domains # Default deny deny message = $sender_address is not authorized to send email on this connection.
您應該在測試 ACL 時考慮使用
defer
而不是。deny
ACL 是通過acl
在配置的 main 部分添加語句來啟用的,並將上述 ACL 到 ACL 部分。acl_smtp_auth = acl_local_auth acl_smtp_mail = acl_local_mail_from