如何使用 Postfix 為任何傳入郵件新增單一標頭?

如何使用 Postfix 為任何傳入郵件新增單一標頭?

我讓 Postfix 運行在 master.cf 中配置的許多 smtpd 進程,如下所示:

# Internet facing one
1.2.3.4:25      inet  n       -       y       -       -       smtpd
  -o ...   # internet-only overrides

# Internal facing one
10.0.0.1:10026      inet  n       -       y       -       -       smtpd
  -o ...   # internal-only overrides

現在,我想新增一個帶有靜態名稱和值的標頭傳入郵件取決於接收郵件的 smtpd。

例子:

X-Gert-Postfix-Received-From: the evil internet

我考慮的選擇:

  1. 添加header_checks選項並使用PREPEND文件中的操作。

    快到了,但是:

    • 它需要匹配現有標頭,然後在後續匹配中再添加一個標頭。
    • From例如,我並不總是已經存在某個標頭,甚至可能缺少一個標頭。
    • 我認為,如果您已經存在header_checks,則沒有簡單的方法可以堆疊兩個文件。header_check
  2. 建立一個自訂應用程序,使用米爾特協議並將其連接到 Postfix smtpd_milters

    當然,這會起作用。我可以在我自己的應用程式中檢查郵件,然後在那裡注入標頭。對於像添加標題這樣的簡單任務似乎過度設計。此外,它需要額外的維護,需要運行另一個守護程式應用程式、相當多的樣板程式碼等。

  3. 正如評論中所建議的,使用check_recipient_access(相關問題)。

    header_checks與(見 1)相同的缺點。

我覺得我錯過了一些簡單的東西。有人有更好的點子嗎?

答案1

我認為,如果您有現有的 header_checks,則沒有簡單的方法可以堆疊兩個 header_check 檔案。

實際上有一種方法可以讓每個守護程式擁有多個獨立的 header_checks 檔案。

每個-omaster.cf 中的選項會覆寫 main.cf 中的預設值或任何後綴配置參數。每個守護程式都有不同的 header_checks (例如/etc/postfix/header_checks1/etc/postfix/header_checks2),你必須重寫每個標頭檢查範圍:

# Internet facing one
1.2.3.4:25      inet  n       -       y       -       -       smtpd
-o header_checks = regexp:/etc/postfix/header_checks1

# Internal facing one
10.0.0.1:10026      inet  n       -       y       -       -       smtpd
-o header_checks = regexp:/etc/postfix/header_checks2

這樣你就擁有了完全獨立的能力標頭檢查每個 smtpd 守護程式的檔案。從那裡您可以添加規則來前置您正在討論的標籤。

答案2

要解決以下限制smtpd_*_restrictions

一封郵件(即使是寄件人為「空」的郵件)也只有一個信封寄件者。所以使用check_sender_access而不是check_recipient_access.使用查找類型可能是static:因為我們不關心返迴路徑的細節。在任何檢查產生結果之前將其新增至您的 smtpd_sender_restrictions 清單ACCEPT(postfix 不會查詢超出的其他查找)。

# in main.cf
common_sender_restrictions =
  reject_non_fqdn_sender
  reject_unknown_sender_domain
  ..
internet_sender_restrictions =
  $common_sender_restrictions
  check_sender_access static:{PREPEND X-Gert-Postfix-Received-From: the evil internet}

# in master.cf
192.0.2.0:25        inet  n       -       y       -       -       smtpd
 -o smtpd_sender_restrictions=$internet_sender_restrictions
10.0.0.1:10026      inet  n       -       y       -       -       smtpd
 -o smtpd_sender_restrictions=$common_sender_restrictions

相關內容