Email

後綴 - 傳入和傳出郵件的不同標頭檢查

  • January 15, 2017

如何header_checks使用 postfix 為傳入和傳出郵件應用不同的方法?

預設情況下,所有 header_checks 都應用於傳入和傳出。

header_checks由完成,cleanup所以我認為您不能僅將其應用於傳入或傳出。

smtp_header_checks僅適用於外發郵件(smtp 客戶端)

如果有一個郵件標頭可用於辨識哪些是傳入郵件,哪些是傳出郵件,使用 postfix 3.2 或更高版本,您可以將header_checks短路,例如:

/^Received: .*detect_outgoing_mails/ PASS
/^X-Something: this rule will only match on incoming mails/ HOLD

(但它仍然讓您只能選擇匹配所有(如前)或僅匹配傳入或僅傳出郵件,並且需要相對較新的後綴版本)

作為一種更好的選擇,如果您始終可以在一個埠(送出:tcp/587)上接收“傳出”郵件(來自您充當郵件中繼伺服器的客戶端的郵件)並在 tcp/25 上接收傳入郵件,您應該能夠用於master.cf覆蓋每個 header_checks,如下所示:

submission inet n       -       n       -       -       smtpd
 -o smtpd_enforce_tls=yes
 -o smtpd_sasl_auth_enable=yes
 -o smtpd_client_restrictions=permit_sasl_authenticated,reject
 -o header_checks=pcre:/etc/postfix/header_checks.relay

smtp      inet  n       -       -       -       200     smtpd
 -o strict_rfc821_envelopes=yes
 -o header_checks=pcre:/etc/postfix/header_checks.mx

但是,如果您中繼的客戶也使用 tcp/25 作為世界其他地方,那麼這將不起作用。如果他們這樣做了,您可以為他們設置備用埠並且它會起作用,但其可行性取決於您說服所有使用者更改其設置的能力。

如果您有多餘的 IP 可用,您還可以使其對使用者幾乎透明:假設您smtp.example.org同時作為使用者的中繼伺服器和帶有 IP 的 MX a.a.a.a,您可以將域的 MX 更改為 IP b.b.b.b,然後使用一個 smtpd 伺服器a.a.a.a使用一組標頭檢查,另一個 smtpd 伺服器b.b.b.b使用另一組標頭檢查。如果您只為來自 192.168.xx/24 的使用者進行中繼,這將更加容易,您甚至可以保持相同的 DNS 名稱並使用 DNS 視圖為內部客戶端提供內部 IP,為世界其他地方提供外部 IP。

第三種方法是使用 postfix FILTER功能而不是header_check- 而不是簡單的正則表達式匹配,它將整個消息轉發到您的自定義腳本進行處理,然後可以通過檢查標題輕鬆區分傳入和傳出郵件,然後進行任何後處理隨心所欲。

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