
我讓 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
我考慮的選擇:
添加
header_checks
選項並使用PREPEND
文件中的操作。快到了,但是:
- 它需要匹配現有標頭,然後在後續匹配中再添加一個標頭。
From
例如,我並不總是已經存在某個標頭,甚至可能缺少一個標頭。- 我認為,如果您已經存在
header_checks
,則沒有簡單的方法可以堆疊兩個文件。header_check
建立一個自訂應用程序,使用米爾特協議並將其連接到 Postfix
smtpd_milters
。當然,這會起作用。我可以在我自己的應用程式中檢查郵件,然後在那裡注入標頭。對於像添加標題這樣的簡單任務似乎過度設計。此外,它需要額外的維護,需要運行另一個守護程式應用程式、相當多的樣板程式碼等。
正如評論中所建議的,使用
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