如何允许 postfix 解析带有百分号的收件人地址?

fun*_*der 3 postfix

我正在将邮件发送到 Postfix 邮件服务器。

  • 那封邮件的地址如下else%2bsomething@domain.com:(它基本上是 的 url 编码版本else+something@domain.com,它应该是 RFC 有效的。)
  • 发件人的邮件服务器被告知处理此消息: NOQUEUE: reject: RCPT from randostring.outbound.protection.outlook.com[...]: 454 4.7.1 <else%2bsomething@domain.com>: Relay access denied; from=<john.doe@live.com> to=<else%2bsomething@domain.com> proto=ESMTP helo=<morerando.outbound.protection.outlook.com>
  • 日志告诉我:generic_checks: name=defer_unauth_destination status=2,我认为这是这里的问题。
  • 我对 进行了 MySQL 查找,在$virtual_alias_domains创建上述日志消息期间不会对其进行查询。我认为它可能会被缓存一段时间,但我在这里可能完全错了。

我尝试过的:

  • 禁用/启用allow_percent_hack看看是否是这个原因,我被拒绝了。任何设置都没有任何变化。
  • 试图将 更改recipient_delimiter为 '%',这并没有改变任何东西。

我的问题:如何强制 postfix 发送此电子邮件?我真的不需要永久的解决方案,因为我认为这是一个边缘情况。

加分项,如果你能向我解释为什么没有收到这封电子邮件,因为我真的很想知道为什么会这样。:)


编辑#1:

我发现工作和非工作消息的标志不同。

  • 传递的消息: Flag: 1024
  • 未送达消息: Flag: 1026

通过查看源代码中的不同位置(标志定义: https : //github.com/vdukhovni/postfix/blob/bfff4380a3b6fac2513c73531ee3a79212c08660/postfix/src/global/resolve_clnt.h#L36 usage- L37github.com/vdukhovni/postfix/blob/ed3f86da7c3e15cf1ec57241c1f6036d82b790da/postfix/src/trivial-rewrite/resolve.c#L467-L468),我发现,那只要还有另外一个@!或者%在电子邮件地址,它套一个routed标志,稍后处理。

我还没有发现的是,我怎么能

a) 防止这种情况发生

或者

b) 一起破解一些东西,让他真正“回到”我的服务器。

fja*_*rlq 5

这两个设置的组合可以解决问题:

allow_percent_hack = no
allow_untrusted_routing = yes
Run Code Online (Sandbox Code Playgroud)

不过要小心!该后缀的文件覆盖的默认设置时会发出警告的潜在的“一个讨厌的开放中继漏洞” allow_untrusted_routing

如果没有这些设置,Postfix 拒绝这种目标地址,因为默认设置allow_percent_hack = yes告诉 Postfix 支持称为“所谓的 %-hack”的过时源路由机制,如RFC 1711 的第 7 节所述,而默认设置allow_untrusted_routing = no告诉Postfix 拒绝来自不受信任的客户端的源路由。

换句话说,Postfix 默认拒绝这种目的地,因为它认为else%2bsomething@domain.com意思是“else@2bsomething通过以下方式传递domain.com”,但由于垃圾邮件发送者,只有受信任的客户端才被允许这样做。