對 alias_maps 和 virtual_alias_maps 感到困惑
我已經重新閱讀了關於這個的文件以及這裡的其他文章,這對我來說仍然很不清楚。我一直在測試各種東西以了解和之間的區別
alias_maps
,virtual_alias_maps
我沒有看到在 postfix 中使用這兩個單獨的設置。這是我到目前為止發現的*(注意 - 我在與我的 Web 伺服器相同的伺服器中使用 postfix 作為空客戶端僅發送電子郵件)*:
- /etc/aliases 文件:
root: me@somedomain.com
當我將上述內容添加到
alias_maps
. 但是,我也注意到其他一些服務(如myorigin
是添加 @mydomain.com 的後綴設置) . 為了解決這個問題,我添加了virtual_alias_maps
- /etc/postfix/虛擬
root me@someotherdomain.com
添加上述內容後,所有服務都使用此虛擬別名電子郵件。我還注意到,一旦我添加了上述內容,即使是 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=<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)
這是將 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=<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
一些背景
Postfix 從舊的 sendmail 中繼承了一些特性,比如 milter 和 aliases。該文件
/etc/aliases
是aliases
繼承的一部分,由alias_maps
. 另一方面,後綴有virtual_maps
/virtual_alias_maps
用於處理電子郵件別名。那麼它們之間有什麼區別呢?範圍
alias_maps
僅用於本地(8)傳遞
根據postfix 中的地址類別,如果收件人域名在
mydestination
查找輸入只是來自完整電子郵件地址的本地部分(例如來自 myuser@example.com 的 myuser)。它丟棄收件人的域部分。
查找結果可以包含以下一項或多項:
- 電子郵件地址:電子郵件將轉發到電子郵件地址
- /file/name:電子郵件將附加到*/file/name*
- |command : 通過管道傳送到命令的郵件
- :include:/file/name : 包含來自*/file/name的別名*
範圍
virtual_alias_maps
總是在任何其他地址類之前第一次呼叫。它不關心收件人域是否列在
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 ,後綴將附加當虛擬別名映射中的電子郵件似乎覆蓋它時,為什麼我們需要 /etc/aliases?
正如你在上面看到的,
alias_maps
(/etc/aliases)有一些額外的特性(除了轉發),比如管道到命令。與此相反virtual_alias_maps
,僅轉發電子郵件。擁有這兩個單獨的別名映射的目的是什麼?我們何時決定何時使用什麼?
alias_maps
缺點是您無法區分原始收件人是root@example.com還是root@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 發送電子郵件。由於缺少域部分,postfix trivial-rewrite會將 myorigin 附加到域部分。因此,郵件將發送到root@myorigin。在 virtual_alias_maps 添加之前: 不幸的是,
myorigin
沒有在 中列出mydestination
,所以它不會被alias_maps
.添加 virtual_alias_maps 後:條目
root
(在 virtual_alias_maps 中)沒有域部分和 myorigin(顯然)與 相同myorigin
,因此它將匹配root me@example.com
。