带有 SRS 守护进程的 exim4 配置

带有 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(以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 标记发件人地址、可能拒绝任何未标记的退回等。因此,如果能提供好的教程,我们将不胜感激。谢谢!

相关内容