Назад | Перейти на главную страницу

Exim4 требует TLS для всех хостов, кроме localhost

Поскольку мой веб-почтовый клиент не поддерживает STARTTLS, и я хочу включить ретрансляцию для всех на локальном хосте, я хотел бы, чтобы Exim рекламировал AUTH PLAIN и LOGIN только без TLS, если соединение было установлено с localhost.

Другими словами, я хотел бы, чтобы exim рекламировал следующие возможности в зависимости от подключенного клиента:

Так что, в конце концов, я могу гарантировать, что информация для входа передается только через шлейф или зашифрованное соединение.

Я предполагаю, что правильная строка для этого будет там, где мы требуем TLS от всех в authenticators раздел:

plain:
  public_name = PLAIN
  server_advertise_condition = ${if !eq{$tls_cipher}{}{yes}{no} }
  # ...

Но я не могу найти способ проверить, какой клиент сейчас подключен. Мое лучшее предположение $host (который, кажется, используется в некоторых примерах конфигурации) всегда не определен.

Есть идеи, как я могу заставить это работать?

Вы должны установить 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. Localhost будет приглашен для аутентификации в любом случае, в то время как другие хосты только тогда, когда они используют TLS (поскольку шаблон nope не будет соответствовать ни одному реальному хосту).