在 Exim4 中使用不同的传输方式进行域名转发

在 Exim4 中使用不同的传输方式进行域名转发

我尝试在 Debian 6 或 7 下配置 exim4,如下所示:

  • 对于转发到“虚拟”域的邮件,直接通过 SMTP 发送
  • 对于所有其他邮件,请通过 Amazon SES 发送

第一个项目似乎是必要的,因为 SES 不允许发送“发件人”地址与该 AWS 帐户的有效配置域不匹配的消息(如果有人知道使用 SES 执行此操作的方法,那将是一个首选解决方案,尽管我很确定这是不可能的)。

因此,现在该系统与 SES 配合良好;一切都正确发送,exim 配置正确,等等。从那时起,我定义了一些我想要转发的新虚拟域,例如/etc/exim4/virtual/example.com

user : [email protected]

然后我创建了一个新的路由器,例如/etc/exim4/conf.d/router/090_exim4-config_virtual_redirect包含:

sender_redirect:
  driver = redirect
  domains = dsearch;/etc/exim4/virtual
  data = ${lookup{$local_part}lsearch{/etc/exim4/virtual/$domain}}

到目前为止,一切运行正常 - exim 尝试将消息中继到[email protected][email protected]但由于上面提到的 SES 限制,该过程会失败。

此时,我希望此路由器直接在服务器之间发送消息,而不影响服务器上任何其他邮件的发送。

这可能吗?我感觉这里缺少了一个小补充,但我还没能找到它。

答案1

我能够解决这个问题,而且解决方案非常简单。我使用了一个名为redirect_router(在这里阅读) 告诉 Exim 开始使用指定的路由器处理当前路由器生成的下一个地址,从而允许它按顺序跳过任何前面的路由器。

然后我将路由器结构定义为:

  1. Amazon SES 路由器
  2. 重定向路由器
  3. 默认路由器链(从dnslookup_relay_to_domainsDebian 的默认配置开始)

因此我的重定向路由器如下所示:

sender_redirect:
  driver = redirect
  redirect_router = dnslookup_relay_to_domains
  domains = dsearch;/etc/exim4/virtual 
  data = ${lookup{$local_part}lsearch{/etc/exim4/virtual/$domain}}

还需要编辑该/etc/exim4/update-exim4.conf.conf文件以确保其example.com被列为本地域,如下所示(仅显示相关行):

dc_eximconfig_configtype='internet'
dc_other_hostnames='server.hostname.com;example.com'
dc_local_interfaces='0.0.0.0'

internet值指示 exim 充当一个互联网站点,直接与其他服务器通信,而不是仅通过智能主机。必须能够通过 SMTP 直接发送和接收邮件。

告诉0.0.0.0Exim 绑定到所有 IPv4 接口(默认为仅127.0.0.1允许服务器从远程主机接收邮件)。我不确定是否有更好/更安全的设置,但我不想指定实际的外部 IP,因为它可能会在 EC2 环境中发生变化。

一旦完成所有这些,您就可以执行操作/etc/init.d/exim4 restart来获取更改,然后一切都应该正常工作。

希望这可以帮助到别人;我不知道这是否是“正确”或“最佳”的方法,但它似乎完美地满足了我的目的。

相关内容