![是否可以在 smtp_sasl_password_maps 中针对特定地址禁用中继身份验证?](https://linux22.com/image/793492/%E6%98%AF%E5%90%A6%E5%8F%AF%E4%BB%A5%E5%9C%A8%20smtp_sasl_password_maps%20%E4%B8%AD%E9%92%88%E5%AF%B9%E7%89%B9%E5%AE%9A%E5%9C%B0%E5%9D%80%E7%A6%81%E7%94%A8%E4%B8%AD%E7%BB%A7%E8%BA%AB%E4%BB%BD%E9%AA%8C%E8%AF%81%EF%BC%9F.png)
有些电子邮件托管商很混蛋。无论你的黑名单状态如何,SPK、DKIM 或 DMARC,他们都会屏蔽你的电子邮件。
为了解决这个问题,我使用 设置了一个中继sender_dependent_relayhost_maps
。我们的中继上有多个具有不同用户名/密码的域。例如,以下是 上的两个域smtp_sasl_password_maps
:
@example.com user1/pass1
@example.net user2/pass2
现在,因为我想与那些糟糕的电子邮件主机合作来解决这个问题,所以我添加了自己的电子邮件,如下所示sender_dependent_relayhost_maps
:
[email protected] DUNNO
example.com relay
example.net relay
一般来说,这是可行的,但是当我使用发送电子邮件时[email protected]
,postfix 会尝试使用 user1/pass1 与非中继服务器进行身份验证。
文档说:
如果未找到用户名:密码条目,则 Postfix SMTP 客户端将不会尝试向远程主机进行身份验证。
有没有其他方法可以禁用身份验证?
答案1
文档是正确的,但你的问题是@example.com
匹配[email protected]
。我认为你不能简单地添加一行空的用户名和密码,因为查找表应该是具有非空值的键值对——即使表本质上是一个列表。
但是,对于某些表,Postfix 只需要知道查找键是否存在。这里可以使用任何非空的查找结果值:不使用查找结果。
然而,这hash:
并不是唯一的Postfix 查找表类型regexp:
。您可以使用类型查找表来实现您想要的效果,而不是:
smtp_sasl_password_maps = regexp:/etc/postfix/smtp_sasl_password_maps
然后使用常用表达在文件中记录REGEXP_TABLE(5)
:
if !/^me@example\.com$/
/@example\.com$/ user1:pass1
endif
/@example\.net$/ user2:pass2
最后,测试一下postmap -q
:
$ /usr/sbin/postmap -q "[email protected]" regexp:./smtp_sasl_password_maps
user1:pass1
$ /usr/sbin/postmap -q "[email protected]" regexp:./smtp_sasl_password_maps
user2:pass2
$ /usr/sbin/postmap -q "[email protected]" regexp:./smtp_sasl_password_maps
$