我的邮件服务器受到 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_barracuda
或yes
;no
还为 创建一个 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 记录。