我正在尝试使用 Exim 充当 SMTP 服务器,以智能主机的形式将邮件中继到我们的 Mandrill 服务。(这样做的目的是使用 Exim 验证 IMAP 邮件的用户身份,并根据我们的 LDAP 服务器验证他们的身份,同时依靠 Mandrill 进行投递。)
我最初将 Exim 设置为 smarthost,并将 Mandrill 设置放在 Exim 文件夹中的 .client 文件中。这工作正常,我能够使用 telnet 或 MUA 发送邮件,并且 Mandrill 可以正确中继邮件。
然后我启用了 TLS 和身份验证,并阻止未经身份验证的用户使用 Exim。这也正常工作 - TLS 可以运行,我可以连接并进行身份验证。但此身份验证中的某些内容破坏了智能主机中继 - 我怀疑是因为 Exim 将我的“本地”LDAP 身份验证凭据传递给 Mandrill,而不是我指定的 .client 凭据。我的主日志文件中的错误如下所示:
2014-04-24 06:54:53 1WchYz-0007Db-3E RCPT TO::host smtp.us-east-1.mandrillapp.com [54.237.217.91] 后远程邮件服务器出现 SMTP 错误: 454 4.7.1: 中继访问被拒绝
如何设置 Exim 来验证传入用户,但使用一组不同的凭据来验证 SMTP 中继?
答案1
两次认证是独立的。
您启用 Exim 来使用客户端身份验证器对传出连接进行身份验证。您需要在 Exim 文件中passwd.client
为需要进行身份验证的每个服务器配置一行。手册页exim_passwd_client
描述了密码文件的格式。
传入身份验证通过服务器身份验证器完成。这些可能在默认配置中被注释掉。手册页exim_passwd
描述了 passwd 文件。您应该考虑在提交端口 (587) 上启用 TLS,以便用户发送消息。文件开头的以下宏应该启用传入身份验证。
auth_advertise_hosts = ${if eq{$tls_cipher}{}{}{*}}
daemon_smtp_ports = 25 : 587
要允许经过身份验证的用户发送外发邮件,您需要在某些时候接受连接。您的配置中有处理本地发件人的规则,例如:
accept
hosts = +relay_from_hosts
control = submission/sender_retain
添加如下规则:
accept
authenticated = *
control = submission/sender_retain