我使用 Postfix 向组织外部的邮件服务器发送邮件,该服务器经常拒绝/延迟我的邮件。我的 Postfix 服务器发现这些邮件被延迟,并再次尝试,最终成功发送。最终投递可能需要长达一小时的时间,这让我的用户不满意。相比之下,从我的 Postfix 服务器向其他主机发送邮件则正常。
我现在发现了这个域名的第二个非官方 MX,它不是拒绝/延迟邮件。对域执行 DNS MX 查询时不会出现此第二个 MX。因此,对于问题域,我想使用这个第二个 MX 作为后备。也就是说:每当主 MX 延迟邮件时,请在非官方的第二个 MX 上重试。
我看到已经有一个 postfix 配置“smtp_fallback_relay”。但是文档似乎表明我无法将 fallback 的使用限制在单个域中。文档也没有提到延迟消息处理。
那么有没有办法在 Postfix 中配置单域、延迟重试回退主机?
作为参考,我附上了我的 postconf 输出(主机名和 IP 地址是假的):
alias_database = hash:/etc/aliases
alias_maps = hash:/etc/aliases, hash:/etc/postfix/legacy_mailman, ldap:/etc/postfix/ldap-aliases.cf
append_dot_mydomain = no
biff = no
config_directory = /etc/postfix
default_destination_concurrency_limit = 2
inet_interfaces = all
inet_protocols = all
local_destination_concurrency_limit = 2
local_recipient_maps = $alias_maps
mailbox_size_limit = 0
mydestination = myhost.my.network, localhost.my.network, localhost, my.network
myhostname = myhost.my.network
mynetworks = 127.0.0.0/8, [::ffff:127.0.0.0]/104, [::1]/128, 10.10.10.0/24
myorigin = my.network
readme_directory = no
recipient_delimiter = +
relay_domains = $mydestination
relayhost =
smtp_fallback_relay = the.problem.host
smtp_header_checks =
smtpd_banner = $myhostname ESMTP $mail_name
virtual_alias_maps = hash:/etc/postfix/virtual
答案1
smtp_fallback_relay
不处理延期消息;它将被尝试立即地当主要目的地不可用时。
这通常是您想要的 - 正如设置所示,它是倒退为了中继邮件。
我建议您调查一下为什么该邮件服务器拒绝您的邮件。
话虽如此,有几种方法可以解决这个问题。
第一个也是最简单的解决方案是本地伪造此 MX,以便 Postfix 在正常交付期间包含它。
为此,请设置smtp_host_lookup
为本国的;这将查阅您的 /etc/hosts 文件以及 DNS(通过本机系统解析器,或者更具体地说,通过 nsswitch.conf 中配置的任何内容。)
你也可以安装类似域名系统允许您覆盖或将特定的 DNS 条目添加到现有域;如果两个中继都有 MX 记录,则这是唯一基于 DNS 的解决方案,因为 /etc/hosts 仅支持 A 记录。
后缀解决方案涉及一些查找技巧,这只有在使用 SQL 映射时才有可能:
您必须添加一个 transport_maps 条目,其中包含一个查找,该查找可以根据带外操作返回替代结果;例如,定期检查 MX 可用性(通过 cron 或类似程序)可以替换改变此特定域的下一跳的正则表达式查找表;postfix 将立即获取对这些表的更改。
答案2
以下是我在 Ubuntu Lucid 上使用的配置:
apt-get install dnsmaq
在
/etc/dnsmasq.d
,添加文件problem_domain_mx_override.conf
:mx-host=problem.domain,existing-mx.problem.domain,25 mx-host=problem.domain,backdoor-mx.problem.domain,10
- 后门的值较低,因此将首先尝试,但如果后门消失,将回退到标准 mx
/etc/init.d/dnsmasq restart
在
/etc/resolv.conf
:search my.domain nameserver 127.0.0.1 nameserver 8.8.8.8 # "normal" name servers
/etc/init.d/postfix restart
- 似乎重新加载 postfix 不足以接受 DNS 欺骗