对 alias_maps 和 virtual_alias_maps 感到困惑

Nee*_*eel 29 email debian postfix sendmail alias

我已经重新阅读了关于这个的文档以及这里的其他帖子,这对我来说仍然很不清楚。我一直在测试各种事物理解之间的区别alias_maps,并virtual_alias_maps和我没有看到后缀使用这2个单独的设置。这是我到目前为止发现的(注意 - 我在与我的 Web 服务器相同的服务器中使用 postfix 作为空客户端来仅发送电子邮件)

1) /etc/aliases 文件:

root: me@somedomain.com
Run Code Online (Sandbox Code Playgroud)

当我将上述内容添加到alias_maps. 但是,我也注意到一些其他服务(如mail命令)不尊重这一点,并尝试将电子邮件直接发送到不存在的 root@mydomain.com(我认为myorigin这是添加@mydomain.com的后缀设置) . 为了解决这个问题,我然后添加了virtual_alias_maps

2) /etc/postfix/virtual

root     me@someotherdomain.com
Run Code Online (Sandbox Code Playgroud)

添加上述内容后,所有服务都使用此虚拟别名电子邮件。我还注意到,一旦我添加了上述内容,即使fail2ban 也开始忽略我在/etc/aliases/文件中的初始设置并开始遵循虚拟文件中给出的电子邮件地址。

现在这让我更加困惑——

  1. /etc/aliases/当虚拟别名映射中的电子邮件似乎覆盖它时,为什么我们需要?

  2. 拥有这两个单独的别名映射的目的是什么,我们何时决定何时使用什么?

  3. 为什么fail2ban(配置为发送到root@localhost)首先遵循alias_maps(/etc/aliases/) 中给出的电子邮件地址,然后决定忽略virtual_alias_maps添加过的那个地址?

  4. 为什么并非所有服务都读取 /etc/aliases 中提到的电子邮件别名,而它们仅在将电子邮件别名添加到虚拟别名映射中时才起作用?

从昨天开始,我已经花了几个小时,但仍然不确定。有人可以帮我清除我的困惑吗?

编辑: 这是使用mail root命令将电子邮件发送到 root 时的邮件日志。在 /etc/aliases/ 中提到了 root 的别名电子邮件。但是直到我将此根别名电子邮件从 移动aliases_mapsvirtual_aliases_maps

在提及根电子邮件别名时记录/etc/aliases/

Nov 14 16:39:27 Debian postfix/pickup[4339]: 0F12643432: uid=0 from=<root>

Nov 14 16:39:27 Debian postfix/cleanup[4495]: 0F12643432: message-id=<20141114110927.0F12643432@Debian.domainname.com>

Nov 14 16:39:27 Debian postfix/qmgr[4338]: 0F12643432: from=<root@domainname.com>, size=517, nrcpt=1 (queue active)

Nov 14 16:39:27 Debian postfix/error[4496]: 0F12643432: to=<root@domainname.com>, orig_to=<root>, relay=none, delay=0.04, delays=0.03/0/0/0.01, dsn=4.4.1, status=deferred (delivery temporarily suspended: connect to domainname.com[128.199.147.136]:25: Connection refused)
Run Code Online (Sandbox Code Playgroud)

这是根从移动电子邮件别名后日志/etc/aliases//etc/postfix/virtual哪里电子邮件传递的是变更后的成功:

Nov 14 16:44:58 Debian postfix/pickup[4545]: ADD9A43436: uid=0 from=<root>

Nov 14 16:44:58 Debian postfix/cleanup[4563]: ADD9A43436: message-id=<20141114111458.ADD9A43436@Debian.domainname.com>

Nov 14 16:44:58 Debian postfix/qmgr[4544]: ADD9A43436: from=<root@domainname.com>, size=453, nrcpt=1 (queue active)

Nov 14 16:45:00 Debian postfix/smtp[4551]: ADD9A43436: to=<admin@somesite.com>, orig_to=<root>, relay=somesite.com[108.160.157.120]:25, delay=1.9, delays=0.03/0/0.97/0.88, dsn=2.0.0, status=sent (250 OK id=1XpEqC-0002ry-9s)

Nov 14 16:45:00 Debian postfix/qmgr[4544]: ADD9A43436: removed
Run Code Online (Sandbox Code Playgroud)

mas*_*oeh 45

一些背景

Postfix 从旧的 sendmail 继承了一些功能,如 milter 和别名。该文件/etc/aliasesaliases继承的一部分,由alias_maps. 另一方面,postfix 有virtual_maps/virtual_alias_maps用于处理电子邮件别名。那么它们之间有什么区别呢?

范围 alias_maps

  • 仅用于本地(8) 交付

  • 在后缀地址类,电子邮件将交付由当地(8)如果收件人的域名中列出mydestination

  • 查找输入从完整的电子邮件ADDRES仅本地部分(例如,从myuser@example.com为myuser)了。它丢弃收件人的域部分。

  • 查找结果可以包含一个或多个以下:

    • 电子邮件地址:电子邮件将转发到电子邮件地址
    • /file/name:电子邮件将附加到/file/name
    • |command : 通过管道传送到命令的邮件
    • :include:/file/name : 包含来自/file/name 的别名

范围 virtual_alias_maps

  • virtual(5) 交付使用

  • 总是在任何其他地址类之前第一次调用。它不关心收件人域是否被列入mydestinationvirtual_mailbox_domains或其他地方。它将覆盖在其他地方定义的地址/别名。

  • 查找输入有一定的格式

    • user@domain:它将逐字匹配user@domain

    • 用户:当站点等于 时,当站点被列在或当它被列在或时,它将匹配用户@site 。此功能与本地别名(5) 数据库的功能重叠。$myorigin$mydestination$inet_interfaces$proxy_interfaces

    • @domaindomain无论本地部分如何,它都会匹配任何电子邮件

  • 查找结果必须是

    • 合法的邮件地址
    • 没有域的用户。$myorigin如果append_at_myorigin设置为是,则后缀将附加

当虚拟别名映射中的电子邮件似乎覆盖它时,为什么我们需要 /etc/aliases?

正如你在上面看到的,alias_maps(/etc/aliases) 有一些额外的功能(除了转发),比如管道到命令。与此相反,virtual_alias_maps它只是转发电子邮件。

拥有这两个单独的别名映射的目的是什么,我们何时决定何时使用什么?

alias_maps缺点是,如果原来的收件人有你无法区分root@example.comroot@example.net。两者都将映射到alias_maps. 换句话说,您可以使用 定义不同的转发地址virtual_alias_maps

为什么fail2ban(配置为通过电子邮件发送到root@localhost)首先遵循alias_maps(/etc/aliases/)中给出的电子邮件地址,然后在添加virtual_alias_maps后决定忽略它?

在添加 virtual_alias_maps 之前:root@localhost 是别名,alias_maps 因为 localhost 列在mydestination.

定义 virtual_alias_maps 后:条目root(在 virtual_alias_maps 中)没有域部分,并且 localhost 列在 中mydestination,因此它将匹配root me@example.com

为什么并非所有服务都读取 /etc/aliases 中提到的电子邮件别名,而它们仅在将电子邮件别名添加到虚拟别名映射中时才起作用?

命令mail root将向 root 发送电子邮件。由于缺少域部分,postfix trivial-rewrite会将 myorigin 附加到域部分。因此,邮件将发送到root@myorigin

在添加 virtual_alias_maps 之前: 不幸的是,myorigin未在 中列出mydestination,因此不会由 处理alias_maps

添加 virtual_alias_maps 后:条目root(在 virtual_alias_maps 中)没有域部分和 myorigin(显然)与 相同myorigin,因此它将匹配root me@example.com