我正在学习build立一个邮件服务器。 我得到它与后缀,现在尝试与Exim相同的configuration。 我如何强制客户端只接收SMTP传出连接的STARTTLS连接? 我按照这个问题的指示。
需要STARTTLS才能发送电子邮件
我的configuration看起来如下
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/上跑了一些testing
TestSender通过,我可以在安全通信下发送电子邮件。 但TestSenderAssureTLS失败,网站可以协商未encryption的通信。
我错过了什么?
当我使用Thunderbird创build帐户时,它会自动检测不安全的SMTP通道,而不是使用STARTTLS。 设置帐户并发送电子邮件成功。 但是,当我从networking中的计算机的shell进行SMTP对话时,不会通告任何身份validation。 它看起来如下:
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
有人能指出我所缺less的东西,我怎样才能做出更好的testing? 在一个相关的话题上,我如何宣传configuration,我希望客户端autdetect? 谢谢。
STARTTLS连接需要开始不安全。 直到第一个EHLO命令之后才会通告STARTTLS选项。 如果你想执行STARTTLS你将需要添加或修改一个ACL 。 我发表了我申请的电子邮件政策 。
如果此服务器是您的MX,则不应对所有连接执行STARTTLS 。 我的configuration需要STARTTLS进行需要AUTH连接。 这不包括来自我的局域网的连接,但适用于漫游时从我的服务器发送电子邮件的用户。 我也要求在提交端口上进行身份validation。 这是我使用的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不被接受
您也可以在邮件ACL强制使用TLS 。 此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.
testingACL时,应该考虑使用defer而不是deny 。 通过将acl语句添加到configuration的主要部分,并将上述ACL添加到ACL部分来启用ACL。
acl_smtp_auth = acl_local_auth acl_smtp_mail = acl_local_mail_from