Exim

如何在 Exim 中強制 STARTTLS?

  • December 5, 2017

我正在學習設置郵件伺服器。我讓它與後綴一起工作,現在嘗試與 Exim 相同的配置。如何強制客戶端僅佔用 STARTTLS 連接以進行 SMTP 傳出連接?我按照這個問題中的說明進行操作。

在 exim 中發送電子郵件需要 STARTTLS

我的配置現在看起來如下

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而不是。denyACL 是通過acl在配置的 main 部分添加語句來啟用的,並將上述 ACL 到 ACL 部分。

acl_smtp_auth = acl_local_auth acl_smtp_mail = acl_local_mail_from

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