EXIM - 首先将本地邮件发送到 Gateway

EXIM - 首先将本地邮件发送到 Gateway

我的邮件服务器受到 Barracuda 设备的保护,可免受垃圾邮件的侵扰。我尝试配置 EXIM,首先将所有出站邮件转发到 Barracuda 服务器,包括本地域的邮件。扫描并允许邮件后,Barracuda 服务器会将本地邮件发送回我的邮件服务器,EXIM 配置将允许这些邮件被发送。我相信我可以通过以下配置的“域 =”部分的条件定义来实现这一点,但我不确定语法:

前往Barracuda 的路线:

司机 = 手动路线

域 = ?

传输 = remote_smtp

route_list = * barracuda.mydomain.com

忽略目标主机 = 0.0.0.0 : 127.0.0.0/8

不再

我可以为“域”写一个“if/else”语句吗(用简单的英语):

domains = !+local_domains(如果发件人是我的 Barracuda 服务器,则为除本地域之外的所有内容)否则 *(如果发件人是任何其他主机/IP 地址,则将所有域转发到 Barracuda)。

由于我无法相信我的用户不会互相发送垃圾邮件,因此所需的操作是让 EXIM 首先将本地邮件从发件人转发到 Barracuda 服务器,并识别它何时返回,以便可以在本地进行投递。

我希望这个问题有意义。我不确定使上述工作有效的语法。

如果有更好的方法,请随时告诉我。

答案1

我正在从主账户登录以提供更新。我尝试了此方法,获得了预期的结果

域 = ${if eq{$interface_port}{587}{*}{! +local_domains}}

如果我的客户端配置为在端口 587 上发送,而我的垃圾邮件网关在端口 25 上中继,那么我就能得到想要的结果。远程限制出站 SMTP 在端口 587 上,本地限制 25 上,这无论如何都是有意义的,因为许多 ISP 不允许出站端口 25,除非通过他们的 SMTP 服务器。

如果此方法有任何问题,我将更新此线程。

答案2

我会使用hosts = ...ACL 中的检查(例如,为 定义的 ACL acl_smtp_connect)来设置变量,例如$acl_c_is_from_barracudayesno还为 创建一个 ACL,acl_not_smtp_start将相同的变量设置为no。最可靠的检查是“这是否从 Barracuda 返回给我们”;如果没有,您需要将其发送给 Barracuda。请确保不要在未更新 Exim 的情况下将新 IP 添加到这些过滤框中,否则您将出现邮件循环。

如果您想防止这种可能性,您可以让过滤框发送到 Exim 服务器上的端口 26 而不是 25,并使用 IP 过滤器仅允许从过滤框访问该端口,并set acl_c_is_from_barracuda = yes根据 执行操作$received_port

然后,您可以调用第一个路由器barracuda_filter并包括:

condition = ${if !bool{$acl_c_is_from_barracuda}}

因此,如果它不是来自梭鱼,就将其发送给梭鱼。

然后后面的路由器就可以正常发送邮件了。

答案3

如果不使用 acls,您可以在路由器中使用:

condition = ${if !eq{$sender_host_name}{barracuda_hostname}}

或者

condition = ${if !eq{$sender_host_address}{barracuda_ipaddress}}

如果主机的地址在 dns 中没有 ptr 记录。

相关内容