Поскольку мой веб-почтовый клиент не поддерживает 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
не будет соответствовать ни одному реальному хосту).