Debian

帶有 SRS 守護程序的 exim4 配置

  • April 7, 2016

我正在努力使用外部 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 標記的發件人地址,可能拒絕任何未標記的退回,等等。所以一個好的教程將不勝感激。謝謝!

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