因为我的网络邮件程序不支持 STARTTLS,而我想为本地主机上的每个人启用中继,所以如果连接是从本地主机建立的,我想让 Exim 仅在没有 TLS 的情况下公布 AUTH PLAIN 和 LOGIN。
换句话说,我希望 Exim 根据所连接的客户端来宣传以下可能性:
- 本地主机(TLS 之前):
- 身份验证明文
- 验证登录
- 启动TLS
- 任何其他主机(TLS 之前):
- 启动TLS
- 任何其他主机(TLS 之后):
- 身份验证明文
- 验证登录
这样最终我可以确保登录信息仅通过环回或加密连接传输。
我猜测正确的做法是要求该authenticators
部分中的每个人都使用 TLS:
plain:
public_name = PLAIN
server_advertise_condition = ${if !eq{$tls_cipher}{}{yes}{no} }
# ...
但是我找不到检查当前连接的客户端的方法。我最好的猜测$host
(似乎在某些配置示例中使用)始终是未定义的。
有什么想法我可以让它工作吗?
答案1
您必须auth_advertise_hosts
按如下方式设置:
. . . . . .
daemon_smtp_ports = 25 : 465 : 587
tls_advertise_hosts = *
tls_on_connect_ports = 465 : 587
auth_advertise_hosts = localhost : ${if eq{$tls_cipher}{}{nope}{*}}
. . . . . .
如果发送方使用 TLS,auth_advertise_hosts
则将扩展为localhost : *
。否则auth_advertise_hosts
将扩展为localhost : nope
。无论如何,本地主机都会被邀请进行身份验证,而其他主机只有在使用 TLS 时才会被邀请(因为模式nope
不会匹配任何真实主机)。