我已经在这里重新阅读这个文档以及其他文章,这对我来说还是很不清楚的。 我一直在testing各种事情,以了解alias_maps
和virtual_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/
文件中的初始设置,并开始遵循虚拟文件中给出的电子邮件地址。
现在这更让我困惑 –
为什么我们需要/etc/aliases/
在虚拟别名映射中的电子邮件似乎覆盖它?
有两个独立的别名映射的目的是什么?我们什么时候决定何时使用什么?
为什么fail2ban(configuration为通过电子邮件发送到root@localhost
)首先遵循alias_maps
(/ etc / aliases /)中给出的电子邮件地址,稍后决定忽略一次virtual_alias_maps
添加?
为什么不是所有的服务都读取/ etc / aliases中提到的电子邮件别名,并且只有当电子邮件别名被添加到虚拟别名映射中时,它们才能工作?
我从昨天开始花了几个小时,但仍然不确定。 有人能帮我解决我的困惑吗?
编辑:这是电子邮件发送到根使用mail root
命令的邮件日志。 在/ etc / aliases /中提到了root用户的别名。 但是,除非将此别名电子邮件从aliases_maps
移到virtual_aliases_maps
, aliases_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/aliases
是aliases
inheritance的一部分,由alias_maps
实现。 另一方面,postfix具有virtual_maps
/ virtual_alias_maps
用于处理电子邮件别名。 那么他们之间有什么区别呢?
alias_maps
仅用于本地(8)交付
根据postfix中的地址类别, 如果收件人域名在mydestination
中列出 ,电子邮件将由本地(8)传送
查找input只是来自完整电子邮件地址的本地部分(例如[email protected]的myuser)。 它丢弃收件人的域名部分。
查找结果可以包含以下一项或多项:
virtual_alias_maps
虚拟(5)交付使用
始终在任何其他地址类之前首先调用 。 它并不关心收件人域是否在mydestination
, virtual_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]
。
/etc/aliases
主要用于本地交付,例如,从cron发送邮件到根目录等等,很好地保持你的本地别名分离, virtual_alias_maps
也可以用于SQL DB,等等。
virtual_alias_maps
适用于具有虚拟用户(和虚拟域)的情况,通常不会映射到系统用户,但如果您没有虚拟域,且用户很less,则可能不需要这种function。
fail2ban不关心,它只是提交电子邮件给MTA。
你需要更具体一点,哪些服务,如何以及在哪里提交邮件?