设置 Exim 来验证用户身份,然后使用不同的身份验证通过智能主机中继 SMTP 邮件

设置 Exim 来验证用户身份,然后使用不同的身份验证通过智能主机中继 SMTP 邮件

我正在尝试使用 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

相关内容