Como forçar o STARTTLS no Exim?

2

Estou aprendendo a configurar um servidor de e-mail. Eu consegui trabalhar com o postfix, agora tentando a mesma configuração com o Exim. Como posso forçar um cliente a assumir apenas a conexão STARTTLS para conexão de saída SMTP? Eu segui as instruções nesta questão.

Exigir STARTTLS para enviar e-mail no exim

Minha configuração parece agora como segue

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 reiniciado, sem erros. Então fiz alguns testes no link

O TestSender passou, eu poderia enviar e-mail sob comunicação segura. Mas o TestSenderAssureTLS falhou, o site pode negociar uma comunicação não criptografada.

O que estou perdendo?

Quando eu crio uma conta com o Thunderbird, ele autodetecta um canal SMTP não seguro, não um com STARTTLS. Configurar a conta e enviar e-mail é bem-sucedido. No entanto, quando faço uma conversa SMTP a partir do shell de um computador na rede, nenhuma autenticação é anunciada. Parece o seguinte:

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

Alguém poderia me indicar o que estou perdendo, como posso fazer testes melhores? Em um tópico relacionado, como posso anunciar a configuração que desejo para os clientes fazendo autdetect? Obrigado.

    
por Elan 31.05.2016 / 22:39

2 respostas

2

Uma conexão STARTTLS precisa ser iniciada sem segurança. A opção STARTTLS não é anunciada até depois do primeiro comando EHLO . Se você quiser impor STARTTLS , precisará adicionar ou modificar um ACL . Publiquei a Política de e-mail que eu aplico .

Se esse servidor for seu MX, você não deve impor STARTTLS em todas as conexões. Minha configuração requer STARTTLS para conexões que exigem AUTH . Isso não inclui conexões da minha LAN, mas se aplica a usuários que enviam e-mails do meu servidor enquanto estão em roaming. Eu também requer autenticação ocorre na porta de envio. Este é o básico do ACL que eu uso.

# 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 = *

# Padrão negar   negar     mensagem = AUTH não aceita

Você também pode impor TLS em um e-mail ACL . Esta ACL permite que remetentes externos enviem e-mails.

# 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.

Você deve considerar o uso de defer em vez de deny durante o teste das ACLs. As ACLs são ativadas adicionando as instruções acl à seção principal da configuração e as ACLs acima à seção ACL.

acl_smtp_auth = acl_local_auth   acl_smtp_mail = acl_local_mail_from

    
por 01.06.2016 / 02:12
0

De acordo com suas configurações ...

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

você precisa de uma conexão TLS para anunciar a autenticação, então inicie uma conexão com o openssl:

openssl s_client -connect hostname:25 -starttls smtp
    
por 05.12.2017 / 15:40

Tags