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

Как заставить STARTTLS в Exim?

Я учусь настраивать почтовый сервер. Я получил работу с postfix, теперь пробую ту же конфигурацию с Exim. Как я могу заставить клиента использовать только STARTTLS-соединение для исходящего SMTP-соединения? Я выполнил инструкции в этом вопросе.

Требовать STARTTLS для отправки электронной почты в exim

Моя конфигурация теперь выглядит следующим образом

MAIN_TLS_ENABLE = yes
MAIN_TLS_CERTIFICATE = /etc/ssl/certs/ssl-cert-snakeoil.pem
MAIN_TLS_PRIVATEKEY = /etc/ssl/private/ssl-cert-snakeoil.key

.ifdef MAIN_TLS_ENABLE
# Defines what hosts to 'advertise' STARTTLS functionality to. The
# default, *, will advertise to all hosts that connect with EHLO.
.ifndef MAIN_TLS_ADVERTISE_HOSTS
MAIN_TLS_ADVERTISE_HOSTS = *
.endif
tls_advertise_hosts = MAIN_TLS_ADVERTISE_HOSTS

auth_advertise_hosts = ${if eq{$tls_in_cipher}{}{}{*}}

Перезапустил Exim, ошибок нет. Затем я провел несколько тестов в http://checktls.com/

TestSender прошел, я мог отправлять электронную почту в безопасном режиме. Но TestSenderAssureTLS не удалось, веб-сайт мог договориться о незашифрованном сообщении.

Что мне не хватает?

Когда я создаю учетную запись с Thunderbird, он автоматически определяет незащищенный канал SMTP, а не канал STARTTLS. Настройка учетной записи и отправка электронной почты завершены успешно. Однако, когда я устанавливаю SMTP-диалог из оболочки компьютера в сети, аутентификация не объявляется. Выглядит это так:

EHLO <subdomain>.<domain>
250-betelgeuse Hello <subdomain>.<domain> [10.0.14.34]
250-SIZE 52428800
250-8BITMIME
250-PIPELINING
250-STARTTLS
250 HELP
AUTH LOGIN
503 AUTH command used when not advertised

Может ли кто-нибудь указать мне, чего мне не хватает, как я могу улучшить тесты? По связанной теме, как я могу рекламировать конфигурацию, которую я хочу, клиентам, выполняющим автоматическое обнаружение? Спасибо.

А STARTTLS соединение должно быть незащищенным. В STARTTLS вариант не рекламируется до первого EHLO команда. Если вы хотите обеспечить соблюдение STARTTLS вам нужно будет добавить или изменить ACL. Я опубликовал Политика электронной почты Я применяю.

Если этот сервер является вашим MX, вы не должны применять STARTTLS на всех подключениях. Моя конфигурация требует STARTTLS для соединений, требующих AUTH. Это не относится к подключениям из моей локальной сети, но относится к пользователям, отправляющим электронную почту с моего сервера в роуминге. Я также требую, чтобы аутентификация происходила на порту отправки. Это основы ACL Я использую.

# This access control list is used after an auth command.
acl_local_auth:

# Deny authentication on unencrypted links
deny
  !encrypted = *
  message = AUTH encryption is required

# Deny if AUTH isn't on submission port (autolist enabled)
deny
   !condition = ${if eq {$interface_port}{587}}
   message = AUTH requires submission port

# Accept if encrypted (should not get here if unencrypted)
accept
  encrypted = *

# По умолчанию deny deny message = AUTH не принято

Вы также можете применить TLS по почте ACL. Этот ACL позволяет внешним отправителям отправлять почту.

# This access control list is used for every MAIL FROM command in an
# incoming SMTP message. 
acl_local_mail_from:

# Accept if locally trusted hosts
accept
  hosts = : +relay_from_hosts

# Accept if authenticated
## May want to check domain is local
accept
  authenticated = *

# Accept the null sender - bounce messages and receipts
accept
  senders = :

# Accept if not local domain - recipient ACL will handle relaying
# More checks on sender in recipient ACL.
accept
  !hosts = : +relay_from_hosts
  !sender_domains = +local_domains

# Default deny
deny
  message = $sender_address is not authorized to send email on this connection.

Вам следует подумать об использовании defer вместо того deny при тестировании ACL. Списки ACL включаются путем добавления acl операторы в основной раздел конфигурации, а приведенные выше списки ACL - в раздел ACL.

acl_smtp_auth = acl_local_auth acl_smtp_mail = acl_local_mail_from

По вашим настройкам ...

tls_advertise_hosts = MAIN_TLS_ADVERTISE_HOSTS
auth_advertise_hosts = ${if eq{$tls_in_cipher}{}{}{*}}

вам требуется соединение TLS для рекламы аутентификации, поэтому инициируйте соединение с openssl:

openssl s_client -connect hostname:25 -starttls smtp