Postfix、Dovecot 和 catch-all

Postfix、Dovecot 和 catch-all

我已经使用以下方式设置了我的邮件服务器Digital Ocean 的指南, 其次是另一位导游。所以,现在如果我发送邮件到torvin@mydomain,它就可以正常工作。

现在我正尝试为所有未送达的邮件设置一个万能地址。到目前为止我尝试过的方法:

1)更换

local_recipient_maps = proxy:pgsql:/etc/postfix/pgsql-boxes.cf $alias_maps

行如下:

local_recipient_maps =
luser_relay = torvin

我在日志中看到的结果:

postfix/lmtp[32692]: D5AD540085: to=, reply=mail.mydomain[private/dovecot-lmtp], delay=0.21, delays=0.17/0.01/0.01/0.02, dsn=5.1.1, status=bounced (host mail.mydomain[private/dovecot-lmtp] 说: 550 5.1.1 用户不存在: thisisjustatest@mydomain (回复 RCPT TO 命令))

2)取而代之

alias_maps = hash:/etc/aliases proxy:pgsql:/etc/postfix/pgsql-aliases.cf

alias_maps = hash:/etc/aliases pcre:/etc/aliases_pcre proxy:pgsql:/etc/postfix/pgsql-aliases.cf

并创建/etc/aliases_pcre以下内容:

/.*/    torvin

结果是无限循环:

to=、relay=local、delay=0.01、delays=0/0/0/0、dsn=5.4.6、status=bounced (torvin@mydomain 的邮件转发循环)

3)相反尝试

virtual_alias_maps = pcre:/etc/aliases_pcre

现在我的所有邮件都发送到torvin,并且从未传递给系统中的任何其他现有用户。

请帮忙!

答案1

这是因为/.*/也包括torvin。我假设您的proxy:pgsql:有关于此用户的信息,但pcre:/etc/aliases_pcre在此之前被查看。在这种情况下,最简单的解决方案是重新排序它们。此外,简单的hash:数据库行将与您的 PCRE 方法相同。@example.com [email protected]/.*/

除了技术实现之外,拥有这样的在具有多个用户的域上捕获所有内容是一个坏主意。不会有任何需要注意的实际消息。您将获得以下内容:

  • 垃圾邮件对于不存在的常见地址,例如[email protected]。这是最常见的。
  • 发送给其他人的消息。想象一下,有人试图在 上向 Jane Smith 发送机密信息,但忘记了点号或输入错误,例如。通常,发件人会收到用户不存在的通知,仔细检查电子邮件地址并重新发送消息。使用 catch-all 后,这种情况就不会发生。相反,这个人处于尴尬且很可能是非法的境地。<[email protected]><[email protected]><[email protected]>torvin

两者都应使用 SMTP 进行处理连接阶段拒绝

答案2

当将 Postfix 与 Dovecot LMTP 一起使用时,catchall 功能不像 Postfixluser_relay或 Cryus那样受原生支持lmtp_catchall_mailbox

实现它的可接受方式是使用 Postfix 的virtual_alias_maps = hash:/etc/postfix/virtual_alias

如果只有一个邮箱:

@example.com    [email protected]

如果有多个邮箱,/etc/postfix/virtual_alias则列出所有邮箱并将其别名化:

[email protected]    [email protected]
[email protected]   [email protected]
@example.com    [email protected]

这个方法在《Postfix The Definitive Guide》一书中有提到。

更新

alias_maps并且luser_relay是 Postfix 本地传送代理 (LDA) 内的层。结帐https://www.postfix.org/postconf.5.html#mailbox_transport.别名 > .forward 文件 > mailbox_transport > mailbox_command > home_mailbox > mail_spool_directory > fallback_transport > luser_relay。

如果您使用 lmtp,您可以完全替换 Postfix 本地传送代理。local_transport = lmtp:unix:private/dovecot-lmtp并将所有别名放入 virtual_alias 中virtual_alias_maps = proxy:pgsql:/etc/postfix/pgsql-aliases.cf

虚拟别名会重写所有本地、所有虚拟和所有远程邮件目的地的收件人地址。https://www.postfix.org/virtual.5.html 我认为本地别名是多余的,并且仍然存在只是为了兼容性。

local_recipient_maps可能会因为 smtpd_reject_unlisted_recipient 规则而被忽略。

当 1) 地址与虚拟 (5) 别名或规范 (5) 映射不匹配,并且 2) 地址对于其地址类无效时,该地址被视为“未知”。

virtual_alias 中存在一个包含所有信息的行,这意味着每个地址都将被接受。

相关内容