Exim4 要求除本地主机外的所有主机都使用 TLS

Exim4 要求除本地主机外的所有主机都使用 TLS

因为我的网络邮件程序不支持 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不会匹配任何真实主机)。

相关内容