A tabela abaixo mostra quais protocolos/portas podem ser usados em cada etapa da transferência de e-mail. A tabela também indica quais protocolos/portas desejo usar na postfix
configuração do meu servidor marcando-os com ✘ ou ✔.
n | Operação | remetente | receptor | possíveis protocolos/portas |
---|---|---|---|---|
1 | "envio de correio" | MUÁ | MSA | (✘) SMTP 25 (✘) SMTP 25 e STARTTLS (✘) SMTP 587 e STARTTLS (✔) SMTPS 465 e TLS implícito |
2 | "servidor interno" | MSA | MTA | / |
3... | "retransmissão de correio" | MTA | MTA | (✘) SMTP 25 (✘) SMTP 25 & STARTTLS (✔) SMTP 25 & STARTTLS & DANE |
n-2 | "servidor interno" | MTA | MDA | / |
n - 1 | "servidor interno" | MDA | EM | / |
n | "acesso à caixa de correio" | EM | MUÁ | (✘) POP3 110 e STARTTLS (✘) POP3S 995 e TLS implícito(✘) IMAP 143 e STARTTLS (✔) IMAPS 993 e TLS implícito |
Antes de continuar, peço que você concorde ou discorde de duas suposições:
SUPOSIÇÃO A:
Eu presumo deesseresposta antiga que Postfixserviço 465
foi renomeado para smtps
algum lugar ao longo do caminho. Portanto estou usandoserviço smtps
para poder ouvir"envio de correio"Porta SMTPS 465
.
SUPOSIÇÃO B:
A parte superior do meu /etc/postfix/master.cf
arquivo fica assim:
# ==========================================================================
# service type private unpriv chroot wakeup maxproc command + args
# (yes) (yes) (no) (never) (100)
# ==========================================================================
smtp inet n - y - - smtpd
smtps inet n - y - - smtpd
-o syslog_name=postfix/smtps
-o smtpd_tls_security_level=encrypt
-o smtpd_use_tls=yes
-o smtpd_tls_wrappermode=yes
-o smtpd_tls_protocols=!SSLv2,!SSLv3,!TLSv1,!TLSv1.1
-o smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
-o smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
...
Eu leioaquique:
postfix/smtpd
- é o processo daemon SMTP para"correspondência recebida"e encaminhá-lo para o local interno apropriado.
postfix/smtp
- é o processo daemon SMTP para"correspondência expedida"para o mundo.
Então agora estou assumindo que postfix/smtpd
está escutando na 465
porta"e-mail recebido"de usuários locais e na porta 25
para"e-mail recebido"de qualquer outro lugar. Também estou assumindo que postfix/smtp
está usando a porta 25
para onde envia"e-mail de saída".
PROBLEMA:
Quando eu estava configurando o Postfix em algum lugar ao longo do caminho, desabilitei uma seção TLS inteira /etc/postfix/main.cf
porque não queria que as configurações globais atrapalhassem minhas configurações para serviços individuais que eu defini dentro /etc/postfix/master.cf
.
Como você pode ver, não usei nenhuma -o
opção de serviço smtp
, mas usei muitas -o
opções de serviço smtps
. O que mais me confunde é que na documentação oficial /etc/postfix/main.cf
posso encontrar muitas opções quase duplicadas como:
De acordo com o texto citado devo usar:
- aqueles que começam com
smtp_
for"correspondência expedida" - aqueles que começam com
smtpd_
for"correio recebido".
Se minha filosofia estiver correta, então minha configuração atual deverá funcionar. Isso acontece parcialmente porque posso obter um handshake TLS 1.3 usando openssl
um comando em um computador diferente como este:
┌───┐
│ $ │ ziga > ziga--workstation > ~
└─┬─┘
└─> openssl s_client -connect pis.eu:465 -tls1_3
CONNECTED(00000003)
depth=0 CN = tek-eu
verify error:num=18:self signed certificate
verify return:1
depth=0 CN = tekpi-eu
verify return:1
---
Certificate chain
0 s:CN = tek-eu
i:CN = tek-eu
---
Server certificate
-----BEGIN CERTIFICATE-----
< REMOVED FOR CLARITY >
-----END CERTIFICATE-----
subject=CN = tek-eu
issuer=CN = tek-eu
---
No client certificate CA names sent
Peer signing digest: SHA256
Peer signature type: RSA-PSS
Server Temp Key: X25519, 253 bits
---
SSL handshake has read 1286 bytes and written 313 bytes
Verification error: self signed certificate
---
New, TLSv1.3, Cipher is TLS_AES_256_GCM_SHA384
Server public key is 2048 bit
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
Early data was not sent
Verify return code: 18 (self signed certificate)
---
---
Post-Handshake New Session Ticket arrived:
SSL-Session:
Protocol : TLSv1.3
Cipher : TLS_AES_256_GCM_SHA384
Session-ID: 45F832A32F5F27CEAA41B271F28545ECA98DC1AC61F51A484123DD28B2535C30
Session-ID-ctx:
Resumption PSK: 3175AD1641D8D77511FD5C76508D339D01F5D1CE02DBF90F33FEBD334A7E76FD44B52808A846C281616469143977B6F1
PSK identity: None
PSK identity hint: None
SRP username: None
TLS session ticket lifetime hint: 7200 (seconds)
TLS session ticket:
< REMOVED FOR CLARITY >
Start Time: 1607602078
Timeout : 7200 (sec)
Verify return code: 18 (self signed certificate)
Extended master secret: no
Max Early Data: 0
---
read R BLOCK
220 mail.pis.eu -------> "HELLO!"
Acima usei um parâmetro -tls1_3
que deve funcionar porque meu parâmetro de configuração -o smtpd_tls_protocols=!SSLv2,!SSLv3,!TLSv1,!TLSv1.1
deve proibir qualquer handshake diferente de TLS 1.2 e TLS 1.3. Mas se alterar o parâmetro -tls1_3
para -tls1
tentar o handshake TLS 1, ele terá sucesso!?
┌───┐
│ $ │ ziga > ziga--workstation > ~
└─┬─┘
└─> openssl s_client -connect pis.eu:465 -tls1
CONNECTED(00000003)
depth=0 CN = tek-eu
verify error:num=18:self signed certificate
verify return:1
depth=0 CN = tek-eu
verify return:1
---
Certificate chain
0 s:CN = tek-eu
i:CN = tek-eu
---
Server certificate
-----BEGIN CERTIFICATE-----
< REMOVED FOR CLARITY >
-----END CERTIFICATE-----
subject=CN = tek-eu
issuer=CN = tek-eu
---
No client certificate CA names sent
Peer signing digest: MD5-SHA1
Peer signature type: RSA
Server Temp Key: X25519, 253 bits
---
SSL handshake has read 1385 bytes and written 227 bytes
Verification error: self signed certificate
---
New, TLSv1.0, Cipher is ECDHE-RSA-AES256-SHA
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
Protocol : TLSv1
Cipher : ECDHE-RSA-AES256-SHA
Session-ID: C1E39786A475DA48ED222EAB5247CCE57D49875AE9A442A73027FBE1F9BB7C4D
Session-ID-ctx:
Master-Key: 5900F37B79A7949871008A827904F2BA907F42EE8BBC73328CD49DF7E37AF2687C06B316922D7D76DDC36FA1DF912E7A
PSK identity: None
PSK identity hint: None
SRP username: None
TLS session ticket lifetime hint: 7200 (seconds)
TLS session ticket:
< REMOVED FOR CLARITY >
Start Time: 1607602884
Timeout : 7200 (sec)
Verify return code: 18 (self signed certificate)
Extended master secret: yes
---
220 mail.pis.eu -------> "HELLO!"
Como é que isso deu certo? O que estou fazendo de errado? Atualmente minha configuração só tem -o smtpd_
opções. Devo também usar -o smtp_
opções? Onde devo colocar isso?
Como você vê, estou confuso...