後綴 - 傳入和傳出郵件的不同標頭檢查
如何
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 的 MXa.a.a.a
,您可以將域的 MX 更改為 IPb.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
- 而不是簡單的正則表達式匹配,它將整個消息轉發到您的自定義腳本進行處理,然後可以通過檢查標題輕鬆區分傳入和傳出郵件,然後進行任何後處理隨心所欲。