我正在努力使用外部 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(以data开头的行)。
我不确定先决条件:
senders = ! :
此行应阻止路由器因错误消息而运行。
condition = ${if ! match_domain{$sender_address_domain}{+local_domains}}
此行应阻止路由器运行来自本地发送者的消息。
domains = ! +local_domains : ! +relay_to_domains
此行应阻止路由器运行发送给本地收件人的消息或中继消息。
有人可以澄清一下吗?
(我用的是手动的作为起点,尽管没有成功。
答案1
您没有正确测试。您传递给 SRS 守护程序的信息不正确:
FORWARD $sender_address_local_part@$sender_address_domain $domain\n
这并没有达到你想要的效果:$domain 包含收件人域,而不是发送域。你想重写返回到转发邮件的域的路径,这是可行的,但不能像这样工作:邮件到达你的 SRS 路由器后转发已经完成,因此 $domain 不再包含邮件发送到的域。您应该使用 $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
您只需要确保域列表 local_domains 确实包含您所有的本地域(至少它应该包含当前路由消息的 $original_domain 和 $sender_address_domain)。
如果您的代码正在运行,请记录您的配置并在此处给我们一些提示。您需要安排更多事项:ACL 以验证传入的 SRS 标记退回邮件、取消标记 SRS 标记邮件以将其列入灰名单、取消标记退回、确保不向外发邮件添加任何其他标记(如 BATV)、变通接受带有破损案例的 SRS 标记邮件、重写退回错误消息文本以不包含 SRS 标记发件人地址、可能拒绝任何未标记的退回等。因此,如果能提供好的教程,我们将不胜感激。谢谢!