我已经重新阅读了关于这个的文档以及这里的其他帖子,这对我来说仍然很不清楚。我一直在测试各种东西以了解和之间的区别alias_maps
,virtual_alias_maps
我没有看到在 postfix 中使用这两个单独的设置。这是我到目前为止发现的(注意 - 我在与我的 Web 服务器相同的服务器中使用 postfix 作为空客户端仅发送电子邮件):
1) /etc/aliases 文件:
root: [email protected]
当我将上述内容添加到alias_maps
. 但是,我也注意到一些其他服务(如mail
命令)不尊重这一点,并尝试将电子邮件直接发送到不存在的 [email protected](我认为它myorigin
是添加 @mydomain.com 的后缀设置) . 为了解决这个问题,我添加了virtual_alias_maps
2) /etc/postfix/虚拟
root [email protected]
添加上述内容后,所有服务都使用此虚拟别名电子邮件。我还注意到,一旦我添加了上述内容,即使是 fail2ban 也开始忽略我在/etc/aliases/
文件中的初始设置,并开始遵循虚拟文件中给出的电子邮件地址。
现在这让我更加困惑 -
/etc/aliases/
当虚拟别名映射中的电子邮件似乎覆盖它时,为什么我们需要它?拥有这两个单独的别名映射的目的是什么?我们何时决定何时使用什么?
为什么fail2ban(配置为发送电子邮件至
root@localhost
)首先遵循alias_maps
(/etc/aliases/)中给出的电子邮件地址,然后决定忽略该电子邮件地址virtual_alias_maps
?为什么不是所有服务都读取 /etc/aliases 中提到的电子邮件别名,并且它们仅在将电子邮件别名添加到虚拟别名映射中时才起作用?
从昨天开始,我已经花了几个小时,但仍然不确定。有人可以帮我解决我的困惑吗?
编辑:mail root
这是使用命令
将电子邮件发送到 root 时的邮件日志。/etc/aliases/ 中提到了 root 的别名电子邮件。但是直到我将此根别名电子邮件从移动aliases_maps
到virtual_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)
这是将 root 的电子邮件别名从更改后电子邮件传递成功的位置移动后的/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 从旧的 sendmail 中继承了一些特性,比如 milter 和 aliases。该文件
/etc/aliases
是aliases
继承的一部分,由alias_maps
. 另一方面,后缀有virtual_maps
/virtual_alias_maps
用于处理电子邮件别名。那么它们之间有什么区别呢?范围
alias_maps
仅用于本地(8)交付
根据postfix 中的地址类别,如果收件人域名在
mydestination
查找输入只是来自完整电子邮件地址的本地部分(例如来自 [email protected] 的 myuser)。它丢弃收件人的域部分。
查找结果可以包含以下一项或多项:
范围
virtual_alias_maps
由virtual(5) 交付使用
总是在任何其他地址类之前第一次调用。它不关心收件人域是否列在
mydestination
或virtual_mailbox_domains
其他地方。它将覆盖在其他地方定义的地址/别名。查找输入具有某种格式
user@domain:它将匹配user@domain字面意思
user :当 site 等于、 site 列在 或 列在or时,它将匹配用户@site 。此功能与本地别名 (5) 数据库的功能重叠。
$myorigin
$mydestination
$inet_interfaces
$proxy_interfaces
@domain:它将匹配任何用于发送的电子邮件,
domain
无论本地部分如何查找结果必须是
$myorigin
如果append_at_myorigin
设置为yes ,后缀将附加正如你在上面看到的,
alias_maps
(/etc/aliases)有一些额外的特性(除了转发),比如管道到命令。与此相反virtual_alias_maps
,仅转发电子邮件。alias_maps
缺点是您无法区分原始收件人是[email protected]还是[email protected]。两者都将映射到alias_maps
. 换句话说,您可以使用 定义不同的转发地址virtual_alias_maps
。在添加 virtual_alias_maps 之前:root@localhost 是别名,
alias_maps
因为 localhost 列在mydestination
.定义 virtual_alias_maps 后:条目
root
(在 virtual_alias_maps 中)没有域部分,并且 localhost 已在 中列出mydestination
,因此它将匹配root [email protected]
。命令
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 [email protected]
。/etc/aliases
是否主要用于本地交付,例如,从 cron 到 root 的邮件等,保持本地别名分开很好,virtual_alias_maps
也可以与 SQL DB 一起使用,等等。virtual_alias_maps
适用于当您拥有虚拟用户(和虚拟域)时,通常不会映射到系统用户,但如果您没有虚拟域且用户很少,则可能不需要这种功能。fail2ban 不在乎,它只是向 MTA 提交电子邮件。
您需要更具体,哪些服务,他们如何以及在哪里提交邮件?