![对 alias_maps 和 virtual_alias_maps 感到困惑](https://linux22.com/image/645975/%E5%AF%B9%20alias_maps%20%E5%92%8C%20virtual_alias_maps%20%E6%84%9F%E5%88%B0%E5%9B%B0%E6%83%91.png)
我已经重新阅读了关于此内容的文档以及此处的其他帖子,但我仍然对此不太清楚。我一直在测试各种东西以了解alias_maps
和之间的区别virtual_alias_maps
,但我没有看到 Postfix 中这两个单独设置的用途。这是我目前发现的(注意 - 我在与我的 Web 服务器相同的服务器上使用 Postfix 作为空客户端仅发送电子邮件):
1)/etc/aliases 文件:
root: [email protected]
当我将上述内容添加到 时alias_maps
,我注意到一些服务(如 fail2ban)能够选择这一点,并将根电子邮件发送到提到的别名电子邮件地址。但是,我还注意到其他一些服务(如mail
命令)不尊重这一点,并尝试将电子邮件直接发送到[电子邮件保护]不存在(我认为是后缀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 中提到的电子邮件别名,而只有当电子邮件别名添加到虚拟别名映射中时它们才起作用?
从昨天开始我已经花了好几个小时,但仍然不确定。有人能帮我解决我的困惑吗?
编辑:
这是使用命令向 root 发送电子邮件时的邮件日志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
答案1
一些背景知识
Postfix 继承了旧版 sendmail 的一些功能,如 milter 和别名。文件/etc/aliases
是继承的一部分aliases
,由 实现alias_maps
。另一方面,postfix 有virtual_maps
/virtual_alias_maps
用于处理电子邮件别名。那么它们之间有什么区别?
范围alias_maps
仅用于本地(8) 配送
根据后缀中的地址类,电子邮件将通过本地发送(8)如果收件人域名在
mydestination
这查找结果可以包含下列一项或多项:
- 电子邮件地址:电子邮件将转发至电子邮件地址
- /文件名:电子邮件将附加到/文件名
- |命令:邮件通过管道发送到命令
- :包括:/文件/名称:包括来自的别名/文件名
范围virtual_alias_maps
用户虚拟(5) 交付
总是首次调用在其他任何地址类别之前。它不关心收件人域是否在 或其他地方列出
mydestination
。virtual_mailbox_domains
它将覆盖在其他地方定义的地址/别名。这查找输入有一定的格式
用户@域:它将匹配用户@域字面上地
用户:它将匹配用户@site 当 site 等于 时
$myorigin
、当 site 在 中列出时、或者当它在或$mydestination
中列出时。$inet_interfaces
$proxy_interfaces
此功能与本地别名(5)数据库的功能重叠。@领域:它将匹配任何电子邮件,
domain
无论本地部分如何
这查找结果必须是
- 合法的邮件地址
$myorigin
没有域的用户。如果append_at_myorigin
设置,Postfix 将附加是的
当虚拟别名映射中的电子邮件似乎覆盖它时,为什么我们需要 /etc/aliases 呢?
如上所示,alias_maps
(/etc/aliases) 除了转发之外,还有一些其他功能,例如管道到命令。相比之下,virtual_alias_maps
它只是转发电子邮件。
这两个单独的别名映射的目的是什么以及我们何时决定何时使用什么?
缺点alias_maps
是,你无法区分原始收件人是否[电子邮件保护]或者[电子邮件保护]。两者都将映射到 中的根条目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 [email protected]
为什么不是所有的服务都读取 /etc/aliases 中提到的电子邮件别名,而只有当电子邮件别名添加到虚拟别名映射中时它们才起作用?
命令mail root
将向 root 发送电子邮件。由于缺少域部分,后缀简单重写将 myorigin 附加到域部分。因此,邮件将发送到根@myorigin。
在添加 virtual_alias_maps 之前:遗憾的是,myorigin
未在 中列出mydestination
,因此不会被 处理alias_maps
。
添加 virtual_alias_maps 后:该条目root
(在 virtual_alias_maps 中)没有域部分,并且 myorigin(显然)与 相同myorigin
,因此它将匹配。root [email protected]
答案2
/etc/aliases
主要用于本地传送,例如从 cron 向 root 发送邮件等,最好将本地别名分开,virtual_alias_maps
也可以与 SQL DB 一起使用,等等。virtual_alias_maps
适用于当您有虚拟用户(和虚拟域)时,通常不会映射到系统用户,但如果您没有虚拟域,并且用户很少,则这种功能可能没有必要。fail2ban 并不关心,它只是将电子邮件提交给 MTA。
你需要更具体一点,哪些服务,如何以及在哪里提交邮件?