对alias_maps和virtual_alias_maps感到困惑


22

我已经重新阅读了此文档以及此处的其他文章,这对我来说仍然很不清楚。我一直在测试各种东西以了解和之间的区别,alias_maps并且virtual_alias_maps在postfix中看不到这两个单独设置的使用。到目前为止,这是我发现的结果(注意-我在与Web服务器相同的服务器上使用postfix作为空客户端仅发送电子邮件)

1)/ etc / aliases文件:

root: me@somedomain.com

当我将以上内容添加到中时alias_maps,我注意到某些服务(例如fail2ban)能够选择此选项,并且它将根电子邮件发送到提到的别名电子邮件地址。但是,我也注意到某些其他服务(例如mail命令)不遵守此规定,并尝试将电子邮件直接发送到不存在的root@mydomain.com(我认为其后缀myorigin设置将添加@ mydomain.com) 。为了解决这个问题,我然后添加了virtual_alias_maps

2)/ etc / postfix /虚拟

root     me@someotherdomain.com

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

现在,这让我更加困惑-

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

  2. 具有这两个单独的别名映射的目的是什么?何时确定何时使用什么?

  3. 为什么fail2ban(配置为通过电子邮件发送至root@localhost)首先跟随alias_maps(/ etc / aliases /)中指定的电子邮件地址,然后又决定忽略virtual_alias_maps添加后的电子邮件地址?

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

自昨天以来我已经花了几个小时,仍然不确定。有人可以帮我消除困惑吗?

编辑: 这是使用mail 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)

这是根从移动电子邮件别名后日志/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

I also noticed that some other services (like mail command) does not respect this->请显示与此情况相关的
邮件日志

@masegaloeh已用邮件日志更新了我的帖子
Neel

Answers:


35

一些背景

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

参数 alias_maps

  • 仅用于本地(8)交付

  • 根据postfix中的地址类别,如果收件人域名在列表中列出,则电子邮件将通过local(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等于,网站在中列出或在或中列出时,它将与用户 @site 匹配。此功能与本地aliases(5)数据库的功能重叠。$myorigin$mydestination$inet_interfaces$proxy_interfaces

    • @domain:它将与打算发送的任何电子邮件匹配,而不受domain本地限制

  • 查找结果必须是

    • 合法的邮件地址
    • 没有域的用户。后缀将追加$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发送电子邮件。由于缺少域部分,因此后缀琐碎重写将myorigin附加到域部分。因此,邮件将发送到root @ myorigin

在添加virtual_alias_maps之前:很遗憾,myorigin未在中列出mydestination,因此不会使用别名alias_maps

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


1
句子alias_maps缺点是您可以区分... 可以这个词的意思是不能。否则,我将毫无意义。
DanielBöhmer

2
  1. /etc/aliases主要用于本地传递,例如从cron到root的邮件发送,等等,最好将本地别名分开,virtual_alias_maps也可以与SQL DB一起使用,等等。

  2. virtual_alias_maps 适用于当您有虚拟用户(和虚拟域)时,这些用户通常不映射到系统用户,但是如果您没有虚拟域且用户很少,则可能不需要这种功能。

  3. fail2ban不在乎,它只是向MTA提交电子邮件。

  4. 您需要更具体,哪些服务,如何以及在何处提交邮件?


@NickW谢谢您:(1)对于No:4,mail命令是执行此操作的服务之一。我的意思是,如果/ etc / aliases主要用于本地交付给本地用户,那么mail root命令实际上应该不属于此类?为什么在本地交付时,此服务为什么要考虑/ etc / aliases中的信息?(2)考虑到这些对我的情况下,是那么好做法有两种提到的用户别名电子邮件地址/etc/aliases,以及virtual_alias_maps使他们的一切工作?
Neel 2014年

1
1.好的,/etc/aliases默认情况下,mail命令应该使用一个非常愚蠢的问题,您确实newaliases在更新文件后运行了,对吗?2.我想说这太过分了,如果人们要从本地计算机接收邮件,则值得配置脚本以使用其正确的电子邮件地址,这样它将通过后缀路由,并传递到正确的目的地。
NickW 2014年

嗨@NickW是的,我确实newaliases在更改后使用重建了别名。我唯一能想到的是为什么不使用别名的原因可能是由于@$domain_name在用户之后添加了postfix设置,因此virtual_alias_maps需要重定向这些电子邮件。我在postfix文档中阅读了这篇文章,也许这就是为什么mailroot命令无法使用的原因aliasespostfix.org/STANDARD_CONFIGURATION_README.html#some_local总之,非常感谢您帮助我更好地理解了Nick。我真的很感激.. :)
Neel 2014年

很高兴为您提供了帮助:)
NickW 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.