Estou tentando fazer com que o Postfix encaminhe mensagens via LMTP para o Dovecot. Isso funciona bem quando o TLS está desativado nas configurações de ambos os lados.
Depois que as configurações de TLS são habilitadas, o Postfix se conecta via LMTP e o Dovecot vê a conexão, mas ambos os servidores parecem ficar presos lá, sem mais informações nos logs (logs abaixo).
Quais são as configurações corretas de TLS para que isso funcione?
Estas são as partes relevantes dos arquivos de configuração para ambos os servidores configurados atualmente:
/etc/dovecot/dovecot.conf
:
protocols = imap lmtp
# Enable SSL (global) for IMAP connections
ssl = required
ssl_cert = </etc/ssl/imap.domain.com/imap.domain.com.crt
ssl_key = </etc/ssl/imap.domain.com/imap.domain.com.key
protocol lmtp {
ssl_cert = </etc/ssl/imap.domain.com/imap.domain.com.crt
ssl_key = </etc/ssl/imap.domain.com/imap.domain.com.key
ssl_ca = </etc/ssl/imap.domain.com/authority.crt
ssl_verify_client_cert = yes
auth_ssl_require_client_cert = yes
ssl=required
}
service lmtp {
user = vmail
inet_listener lmtp {
address = * ::
port = 24
ssl=yes
}
}
/etc/postfix/main.cf
:
lmtp_use_tls = yes
lmtp_tls_security_level=encrypt
lmtp_tls_loglevel = 2
lmtp_tls_session_cache_database = btree:${data_directory}/lmtp_cache
lmtp_tls_CApath = /etc/ssl/certs
lmtp_tls_CAfile=/etc/ssl/domain.com/authority.crt
lmtp_tls_cert_file=/etc/ssl/domain.com/domain.com.client.crt
lmtp_tls_key_file=/etc/ssl/domain.com/domain.com.key
lmtp_tls_note_starttls_offer = yes
Log de e-mail do servidor Dovecot:
lmtp(1939): Info: Connect from xx.xx.xx.xx
lmtp(2500): Debug: SSL: where=0x10, ret=1: before SSL initialization
lmtp(2500): Debug: SSL: where=0x2001, ret=1: before SSL initialization
lmtp(2500): Debug: SSL: where=0x2002, ret=-1: before SSL initialization
lmtp(2500): Debug: SSL: where=0x2002, ret=-1: before SSL initialization
lmtp(2500): Debug: SSL: where=0x2002, ret=-1: before SSL initialization
lmtp(1944): Info: Disconnect from xx.xx.xx.xx: Disconnected for inactivity (state=GREETING)
O log de e-mail do servidor Postfix:
Nov 1 22:35:18 servername postfix/lmtp[65067]: initializing the client-side TLS engine
Nov 1 22:35:18 servername postfix/lmtp[65050]: 9935F2317D: to=<[email protected]>, relay=remote.server.com[yy.yy.yy.yy]:24, delay=1220, delays=920/0.02/300/0, dsn=4.4.2, status=deferred (lost connection with remote.server.com[yy.yy.yy.yy] while receiving the initial server greeting)
Atualizar
Se eu correr:
openssl s_client -connect domain.com:24 -CAfile /etc/ssl/domain.com/authority.crt
na máquina Postfix, ele se conecta via TLS ao servidor Dovecot via LMTP, e posso emitir comandos telnet para o Dovecot. Parece que o Dovecot está aceitando conexões TLS, mas quando o Postifx tenta se conectar, a negociação é interrompida.
Se eu correr:
openssl s_client -starttls lmtp -connect domain.com:24 -CAfile /etc/ssl/domain.com/authority.crt
Eu apenas entendo:
CONNECTED(00000003)
e não pode emitir nenhum comando telnet.
Se (de acordo com seu teste openssl s_client) agrupar corretamente toda a sessão LMTP em TLS funcionar, e é apenas o hack de compatibilidade STARTTLS que está causando problemas.. diga ao Postfix para fazer o primeiro.
No entanto, verifique se suas configurações para exigir um certificado de cliente são eficazes. Os
s_client
resultados do seu teste ainda não parecem ter estabelecido essa parte. Além disso, elimine aslmtp_use_tls
configurações - elas são substituídas e obsoletas pelolmtp_tls_security_level
.