帶有 SRS 守護程序的 exim4 配置
我正在努力使用外部 SRS 守護程序(Debian 軟體包 srs)設置 exim 4。srsd 正在執行並且可以很好地來迴轉換地址。我不能使用 exim 的內置 srs 程式碼,因為它在 Debian 中沒有啟用(知道我可以自己編譯,但這不是一個選項)。
我遇到的問題是 exim 中的 srs_forward 路由器將 SRS 標籤添加到轉發的郵件。我有以下重定向路由器,它應該只針對來自非本地發件人和非本地收件人的非錯誤消息執行,這些消息不會轉發給另一個 mx - 至少我理解 srs 將應用於此類消息。請糾正我,如果這是錯誤的。我有以下程式碼:
srs_forward: debug_print = "R: srs_forward for $local_part@$domain" driver = redirect senders = ! : condition = ${if ! match_domain{$sender_address_domain}{+local_domains}} domains = ! +local_domains : ! +relay_to_domains address_data = ${readsocket{/tmp/srsd}\ {FORWARD $sender_address_local_part@$sender_address_domain $domain\n}\ {5s}{\n}{:defer: SRS daemon failure}} errors_to = ${quote_local_part:${local_part:$address_data}}@${domain:$address_data} data = ${quote_local_part:$local_part}@$domain headers_add = X-SRS: Sender address rewritten from $sender_address to ${quote_local_part:${local_part:$address_data}}@$$ repeat_use = false allow_defer no_verify
我可以測試和工作的內容:返迴路徑生成正確(帶有address_data和errors_to的行,以及to-address(以數據開頭的行)。
我不確定前提條件:
senders = ! :
此行應防止路由器執行錯誤消息。
condition = ${if ! match_domain{$sender_address_domain}{+local_domains}}
此行應防止路由器執行來自本地發件人的消息。
domains = ! +local_domains : ! +relay_to_domains
此行應防止路由器執行發送給本地收件人的消息或中繼消息。
有人可以澄清一下嗎?
(我使用手冊作為起點,雖然沒有成功。)
你沒有正確測試。您傳遞給 SRS 守護程序的資訊不正確:
FORWARD $sender_address_local_part@$sender_address_domain $domain\n
這不符合您的要求: $domain 包含收件人域而不是發送域。您打算將返迴路徑重寫到轉發消息的域的意圖是光榮的,但不會像這樣工作:轉發完成後,消息會到達您的 SRS 路由器,所以 $ domain doesn’t contain anymore the domain the message was sent to. You should use $ primary_hostname 或 $original_domain。所以這條線應該是這樣的:
address_data = ${readsocket{/tmp/srsd}\ {FORWARD $sender_address_local_part@$sender_address_domain $original_domain\n}\ {5s}{\n}{:defer: SRS daemon failure}}
與您的先決條件有關的,它們都很好。您可以將“發件人”和“條件”行放在一起:
senders = ! : ! *@+local_domains
您只需要確保 domainlist local_domains 確實包含您的所有本地域(至少它應該包含目前路由的消息 $ original_domain and $ 發件人地址域)。
如果您的程式碼正在執行,請記錄您的配置並在此處給我們一些提示。您還需要安排幾件事:ACL 驗證傳入 SRS 標記的退回郵件,取消標記 SRS 標記的郵件以列入灰名單,取消標記退回,確保不要將任何其他標籤(如 BATV)添加到傳出郵件中,解決方法以接受帶有 SRS 標記的郵件粉碎的情況下,重寫退回錯誤消息文本以不包括 SRS 標記的發件人地址,可能拒絕任何未標記的退回,等等。所以一個好的教程將不勝感激。謝謝!