Debian

對 alias_maps 和 virtual_alias_maps 感到困惑

  • March 26, 2021

我已經重新閱讀了關於這個的文件以及這裡的其他文章,這對我來說仍然很不清楚。我一直在測試各種東西以了解和之間的區別alias_mapsvirtual_alias_maps我沒有看到在 postfix 中使用這兩個單獨的設置。這是我到目前為止發現的*(注意 - 我在與我的 Web 伺服器相同的伺服器中使用 postfix 作為空客戶端僅發送電子郵件)*:

  1. /etc/aliases 文件:
root: me@somedomain.com

當我將上述內容添加到alias_maps. 但是,我也注意到其他一些服務(如mail命令)不尊重這一點,並嘗試將電子郵件直接發送到不存在的 root@mydomain.com(我認為它myorigin是添加 @mydomain.com 的後綴設置) . 為了解決這個問題,我添加了virtual_alias_maps

  1. /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這是使用命令 將電子郵件發送到 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)

這是將 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/aliasesaliases繼承的一部分,由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

  • virtual(5) 傳遞使用

  • 總是在任何其他地址類之前第一次呼叫。它不關心收件人域是否列在mydestinationvirtual_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

引用自:https://serverfault.com/questions/644306