根据目标 MX 记录中继主机

根据目标 MX 记录中继主机

我希望设置 Postfix 以根据目标主机名使用外部中继,即:

  • 如果目标主机名是 *.outlook.com,则使用中继 some_smtp.example.com
  • 如果有任何其他目标主机名,请使用本地中继

我所说的目标主机名是从 MX 记录获取的主机名。如果收件人域有 MX 记录microsoft-com.mail.protection.outlook.com,则使用不同的中继

我知道可以根据发送方地址指定中继(使用sender_dependent_relayhost_maps),但对于我的情况这是不切实际的。

目标是针对挑剔的目标主机使用不同的中继:可能是 Mandrill,或者另一个 Postfix 安装。

答案1

您可以设置传输图来有选择地选择具有@outlook.com目标地址的邮件并通过some_smtp.example.com如下所示的方式转发它们。

添加以下条目到/etc/postfix/transport

outlook.com smtp:[some_smtp.example.com]

添加以下条目到/etc/postfix/main.cf

transport_maps = hash:/etc/postfix/transport

执行以下命令后重启postfix

sudo postmap /etc/postfix/transport

答案2

Arul 的回答非常适合基于收件人域的传输。但是,由于您引用的是 MX 记录主机名而不是收件人域,因此答案不适用。

一个解决方案是使用check_recipient_mx_access。摘自官方文档

检查收件人_mx_access类型:表格

搜索为 RCPT TO 域的 MX 主机指定 access(5) 数据库,并执行相应的操作。注意:出于安全原因,不允许结果为“OK”。相反,请使用 DUNNO 来将特定主机从黑名单中排除。此功能在 Postfix 2.1 及更高版本中可用。

对于你的情况,只需将其放在check_recipient_mx_access hash:/etc/postfix/finickydestination适当的位置即可smtpd_*_restriction。在该文件中输入主机名

# /etc/postfix/finickydestination
.outlook.com FILTER smtp:[some_smtp.example.com]

不要忘记对文件进行 postmap 并执行 postfix reload。

参考):

答案3

正如@user221326(我没有足够的声望来发表评论)指出的那样,@masegaloeh 的回答将不是按照check_recipient_mx_access预期工作访问表ACTION

更多信息手册页

你想要的操作是FILTER这样的

.outlook.com FILTER smtp:[some_smtp.example.com]

请注意,如果有多个,FILTER只有最后一个会触发,因此请确保这在其他所有之后触发。

此外,仅当满足以下条件.outlook.com时,才会捕获子域名/超级域名(例如 whatever.protection.outlook.com):smtpd_access_maps不是否则parent_domain_matches_subdomains你想要outlook.com(没有前导点)

最后请记住,此操作适用于整封邮件只要一个收件人的 MX 与域匹配,只要您定义的目标不是 MDA,这应该不是问题。

干杯

答案4

正如上面评论的那样:“对于您的情况,只需将 check_recipient_mx_access hash:/etc/postfix/finickydestination 放在 smtpd_*_restriction 的适当位置。在该文件中输入主机名”

smtpd_sender_restrictions 不是合适的地方,因为在 smtp 事务中,postfix 不知道接收者是谁。

此外,如果您有更多 FILTER 语句(例如垃圾邮件/病毒扫描),它将覆盖该 FILTER 语句(如果它们发生在 smtpd_sender_restrictions 之后)。

相关内容