混淆了alias_maps和virtual_alias_maps

我已经在这里重新阅读这个文档以及其他文章,这对我来说还是很不清楚的。 我一直在testing各种事情,以了解alias_mapsvirtual_alias_maps之间的差异,我没有看到在postfix中使用这两个单独的设置。 这是我到目前为止发现的(注意 – 我使用postfix在与我的web服务器相同的服务器作为空客户端发送电子邮件

1) / etc / aliases文件:

 root: [email protected] 

当我将上面的代码添加到alias_maps ,我注意到一些像fail2ban这样的服务能够select这个服务,并且将根邮件发送到提到的别名邮件地址。 但是,我也注意到一些其他服务(如mail命令)不尊重这一点,并试图直接发送到[email protected]这不存在(我认为它的后缀myorigin设置,即添加@mydomain。 COM)。 为了解决这个问题,我添加了virtual_alias_maps

2) / etc / postfix / virtual

 root [email protected] 

当上述添加时,所有的服务使用这个虚拟别名电子邮件。 我还注意到,一旦我添加上面,甚至fail2ban开始忽略我在/etc/aliases/文件中的初始设置,并开始遵循虚拟文件中给出的电子邮件地址。

现在这更让我困惑 –

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

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

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

  4. 为什么不是所有的服务都读取/ etc / aliases中提到的电子邮件别名,并且只有当电子邮件别名被添加到虚拟别名映射中时,它们才能工作?

我从昨天开始花了几个小时,但仍然不确定。 有人能帮我解决我的困惑吗?

编辑:这是电子邮件发送到根使用mail root命令的邮件日志。 在/ etc / aliases /中提到了root用户的别名。 但是,除非将此别名电子邮件从aliases_maps移到virtual_aliases_mapsaliases_maps邮件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=<[email protected]> Nov 14 16:39:27 Debian postfix/qmgr[4338]: 0F12643432: from=<[email protected]>, size=517, nrcpt=1 (queue active) Nov 14 16:39:27 Debian postfix/error[4496]: 0F12643432: to=<[email protected]>, 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) 

这是在根目录的电子邮件别名从/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=<[email protected]> Nov 14 16:44:58 Debian postfix/qmgr[4544]: ADD9A43436: from=<[email protected]>, size=453, nrcpt=1 (queue active) Nov 14 16:45:00 Debian postfix/smtp[4551]: ADD9A43436: to=<[email protected]>, 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 

    一些背景

    Postfix从早期的sendmailinheritance了一些function,如milter和别名。 文件/etc/aliasesaliasesinheritance的一部分,由alias_maps实现。 另一方面,postfix具有virtual_maps / virtual_alias_maps用于处理电子邮件别名。 那么他们之间有什么区别呢?

    参数alias_maps

    • 仅用于本地(8)交付

    • 根据postfix中的地址类别, 如果收件人域名在mydestination中列出 ,电子邮件将由本地(8)传送

    • 查找input只是来自完整电子邮件地址的本地部分(例如[email protected]的myuser)。 它丢弃收件人的域名部分。

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

      • 电子邮件地址 :电子邮件将转发到电子邮件地址
      • /文件/名称 :电子邮件将追加到/文件/名称
      • |命令 :邮件传送到命令
      • :include:/ file / name :包含/ file / name的别名

    参数virtual_alias_maps

    • 虚拟(5)交付使用

    • 始终在任何其他地址类之前首先调用 。 它并不关心收件人域是否在mydestinationvirtual_mailbox_domains或其他地方列出。 它将覆盖在其他地方定义的地址/别名。

    • 查找input有一些格式

      • user @ domain :它将从字面上匹配user @ domain

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

      • @domain :它将匹配任何旨在用于domain电子邮件,而不pipe本地部分

    • 查找结果必须是

      • 合法的邮件地址
      • 用户没有域名。 如果append_at_myorigin设置为yes, Postfix将追加$myorigin

    为什么我们需要/ etc /别名时,虚拟别名映射内的电子邮件似乎重写呢?

    正如你上面看到的, alias_maps (/ etc / aliases)有一些额外的function(转发除外),如pipe道命令。 它与仅转发电子邮件的virtual_alias_maps形成鲜明对比。

    有两个独立的别名映射的目的是什么?我们什么时候决定何时使用什么?

    如果原始收件人的forms为[email protected][email protected]则可以区分alias_maps缺点。 两者都将映射到alias_maps根条目。 另一方面,您可以使用virtual_alias_maps定义不同的转发地址。

    为什么fail2ban(configuration为通过电子邮件发送到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 [email protected]

    为什么不是所有的服务都读取/ etc / aliases中提到的电子邮件别名,并且只有当电子邮件别名被添加到虚拟别名映射中时,它们才能工作?

    命令的mail root将发送电子邮件到根。 由于缺less域名部分, postfix trivial-rewrite会将myorigin附加到域名部分。 所以,邮件将被发送到根@ myorigin

    添加virtual_alias_maps之前 :不幸的是, myorigin没有在mydestination列出,所以它不会被alias_maps别名。

    添加virtual_alias_maps之后 :入口root (在virtual_alias_maps中)没有域部分和myorigin(显然)与myorigin相同,所以它将匹配root [email protected]

    1. /etc/aliases主要用于本地交付,例如,从cron发送邮件到根目录等等,很好地保持你的本地别名分离, virtual_alias_maps也可以用于SQL DB,等等。

    2. virtual_alias_maps适用于具有虚拟用户(和虚拟域)的情况,通常不会映射到系统用户,但如果您没有虚拟域,且用户很less,则可能不需要这种function。

    3. fail2ban不关心,它只是提交电子邮件给MTA。

    4. 你需要更具体一点,哪些服务,如何以及在哪里提交邮件?