Um servidor do CentOS 7 com postfix, dovecot e mailx precisa acomodar o email enviado por port 465
e recebido por port 25
. Quais arquivos e sintaxe específicos precisam ser alterados para realizar isso?
Aqui estão minhas tentativas até agora:
1.) Adicionei 465 inet n - - - - smtpd
a /etc/postfix/master.cf
na seguinte seção:
# Do not forget to execute "postfix reload" after editing this file.
#
# ==========================================================================
# service type private unpriv chroot wakeup maxproc command + args
# (yes) (yes) (yes) (never) (100)
# ==========================================================================
smtp inet n - n - - smtpd
465 inet n - - - - smtpd
2.) Em seguida, reiniciei o postfix digitando systemctl stop postfix
seguido por systemctl start postfix
e, em seguida, systemctl status postfix
.
3.) Em seguida, atribui a porta 25 e a porta 465 no firewall ao serviço SMTP. Eu testei para confirmar que o firewall estava permitindo a porta 465 digitando nc my.SERVER.ip.addr 465 < /dev/null
no terminal devbox e vendo que ele respondia imprimindo 220 mydomain.com ESMTP Postfix
. Eu então testei que o firewall estava permitindo que a porta 25 tivesse acesso SMTP enviando um email de teste de um servidor diferente e vendo que ele foi recebido por esse servidor, obviamente pela porta 25.
4.) Confirmei que o cliente Thunderbird no meu devbox tem a porta 465 definida para o smtp de saída na conta [email protected] da qual estou tentando enviar e-mails para fora do servidor usando o cliente Thunderbird do meu devbox.
5.) Em seguida, digitei tcpdump -n -i any tcp port 465
no terminal do servidor e também digitei tcpdump -n -i any tcp port 465
no terminal devbox.
6.) Com toda essa configuração, tentei usar o Thunderbird para enviar um email de teste de [email protected]
para [email protected]
. O Thunderbird expirou sem enviar o email, mas o seguinte tcpdump
foi impresso nos terminais de ambas as máquinas.
No servidor, isso resultou em:
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on any, link-type LINUX_SLL (Linux cooked), capture size 65535 bytes
15:26:40.204817 IP my.SERVER.ip.addr.urd > my.DEVBOX.ip.addr.40555: Flags [S.], seq 1955299233, ack 152228482, win 14480, options [mss 1460,sackOK,TS val 1056230222 ecr 5576928,nop,wscale 7], length 0
15:26:40.293442 IP my.DEVBOX.ip.addr.40555 > my.SERVER.ip.addr.urd: Flags [.], ack 1, win 115, options [nop,nop,TS val 5577014 ecr 1056230222], length 0
15:26:40.293926 IP my.SERVER.ip.addr.urd > my.DEVBOX.ip.addr.40555: Flags [P.], seq 1:43, ack 1, win 114, options [nop,nop,TS val 1056230312 ecr 5577014], length 42
15:26:40.298215 IP my.DEVBOX.ip.addr.40555 > my.SERVER.ip.addr.urd: Flags [F.], seq 1, ack 1, win 115, options [nop,nop,TS val 5577015 ecr 1056230222], length 0
15:26:40.298521 IP my.SERVER.ip.addr.urd > my.DEVBOX.ip.addr.40555: Flags [F.], seq 43, ack 2, win 114, options [nop,nop,TS val 1056230316 ecr 5577015], length 0
15:26:40.384890 IP my.DEVBOX.ip.addr.40555 > my.SERVER.ip.addr.urd: Flags [.], ack 43, win 115, options [nop,nop,TS val 5577104 ecr 1056230312], length 0
15:26:40.389738 IP my.DEVBOX.ip.addr.40555 > my.SERVER.ip.addr.urd: Flags [.], ack 44, win 115, options [nop,nop,TS val 5577113 ecr 1056230316], length 0
15:28:49.598741 IP my.DEVBOX.ip.addr.40557 > my.SERVER.ip.addr.urd: Flags [S], seq 1432245308, win 14600, options [mss 1460,sackOK,TS val 5706324 ecr 0,nop,wscale 7], length 0
15:28:49.598807 IP my.SERVER.ip.addr.urd > my.DEVBOX.ip.addr.40557: Flags [S.], seq 706641072, ack 1432245309, win 14480, options [mss 1460,sackOK,TS val 1056359616 ecr 5706324,nop,wscale 7], length 0
15:28:49.685239 IP my.DEVBOX.ip.addr.40557 > my.SERVER.ip.addr.urd: Flags [.], ack 1, win 115, options [nop,nop,TS val 5706409 ecr 1056359616], length 0
15:28:49.685304 IP my.DEVBOX.ip.addr.40557 > my.SERVER.ip.addr.urd: Flags [P.], seq 1:186, ack 1, win 115, options [nop,nop,TS val 5706409 ecr 1056359616], length 185
15:28:49.685328 IP my.SERVER.ip.addr.urd > my.DEVBOX.ip.addr.40557: Flags [.], ack 186, win 122, options [nop,nop,TS val 1056359703 ecr 5706409], length 0
15:28:49.700806 IP my.SERVER.ip.addr.urd > my.DEVBOX.ip.addr.40557: Flags [P.], seq 1:43, ack 186, win 122, options [nop,nop,TS val 1056359719 ecr 5706409], length 42
15:28:49.783363 IP my.DEVBOX.ip.addr.40557 > my.SERVER.ip.addr.urd: Flags [.], ack 43, win 115, options [nop,nop,TS val 5706510 ecr 1056359719], length 0
15:28:49.783411 IP my.SERVER.ip.addr.urd > my.DEVBOX.ip.addr.40557: Flags [P.], seq 43:154, ack 186, win 122, options [nop,nop,TS val 1056359801 ecr 5706510], length 111
15:28:49.868122 IP my.DEVBOX.ip.addr.40557 > my.SERVER.ip.addr.urd: Flags [.], ack 154, win 115, options [nop,nop,TS val 5706592 ecr 1056359801], length 0
15:30:36.430512 IP my.DEVBOX.ip.addr.40557 > my.SERVER.ip.addr.urd: Flags [F.], seq 186, ack 154, win 115, options [nop,nop,TS val 5813157 ecr 1056359801], length 0
15:30:36.430912 IP my.SERVER.ip.addr.urd > my.DEVBOX.ip.addr.40557: Flags [F.], seq 154, ack 187, win 122, options [nop,nop,TS val 1056466449 ecr 5813157], length 0
15:30:36.513221 IP my.DEVBOX.ip.addr.40557 > my.SERVER.ip.addr.urd: Flags [.], ack 155, win 115, options [nop,nop,TS val 5813243 ecr 1056466449], length 0
^C
19 packets captured
20 packets received by filter
0 packets dropped by kernel
No DEVBOX, isso resultou em:
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on any, link-type LINUX_SLL (Linux cooked), capture size 65535 bytes
12:32:00.232924 IP my.SERVER.ip.addr.urd > 10.0.0.2.40557: Flags [S.], seq 706641072, ack 1432245309, win 14480, options [mss 1460,sackOK,TS val 1056359616 ecr 5706324,nop,wscale 7], length 0
12:32:00.232992 IP 10.0.0.2.40557 > my.SERVER.ip.addr.urd: Flags [.], ack 1, win 115, options [nop,nop,TS val 5706409 ecr 1056359616], length 0
12:32:00.233212 IP 10.0.0.2.40557 > my.SERVER.ip.addr.urd: Flags [P.], seq 1:186, ack 1, win 115, options [nop,nop,TS val 5706409 ecr 1056359616], length 185
12:32:00.319025 IP my.SERVER.ip.addr.urd > 10.0.0.2.40557: Flags [.], ack 186, win 122, options [nop,nop,TS val 1056359703 ecr 5706409], length 0
12:32:00.334311 IP my.SERVER.ip.addr.urd > 10.0.0.2.40557: Flags [P.], seq 1:43, ack 186, win 122, options [nop,nop,TS val 1056359719 ecr 5706409], length 42
12:32:00.334359 IP 10.0.0.2.40557 > my.SERVER.ip.addr.urd: Flags [.], ack 43, win 115, options [nop,nop,TS val 5706510 ecr 1056359719], length 0
12:32:00.415529 IP my.SERVER.ip.addr.urd > 10.0.0.2.40557: Flags [P.], seq 43:154, ack 186, win 122, options [nop,nop,TS val 1056359801 ecr 5706510], length 111
12:32:00.415586 IP 10.0.0.2.40557 > my.SERVER.ip.addr.urd: Flags [.], ack 154, win 115, options [nop,nop,TS val 5706592 ecr 1056359801], length 0
12:33:46.981077 IP 10.0.0.2.40557 > my.SERVER.ip.addr.urd: Flags [F.], seq 186, ack 154, win 115, options [nop,nop,TS val 5813157 ecr 1056359801], length 0
12:33:47.066884 IP my.SERVER.ip.addr.urd > 10.0.0.2.40557: Flags [F.], seq 154, ack 187, win 122, options [nop,nop,TS val 1056466449 ecr 5813157], length 0
12:33:47.066946 IP 10.0.0.2.40557 > my.SERVER.ip.addr.urd: Flags [.], ack 155, win 115, options [nop,nop,TS val 5813243 ecr 1056466449], length 0
^C
11 packets captured
12 packets received by filter
0 packets dropped by kernel
Observe que os primeiros 7 itens na saída do servidor apareceram em um teste anterior, embora os comandos tcpdump -n -i any tcp port 465
(server e devbox) tenham sido executados ao mesmo tempo.
Observe que digitar postconf -n
no servidor resultou em:
alias_database = hash:/etc/aliases
alias_maps = hash:/etc/aliases
command_directory = /usr/sbin
config_directory = /etc/postfix
daemon_directory = /usr/libexec/postfix
data_directory = /var/lib/postfix
debug_peer_level = 2
debugger_command = PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin ddd $daemon_directory/$process_name $process_id & sleep 5
home_mailbox = Maildir/
html_directory = no
inet_interfaces = all
inet_protocols = all
mail_owner = postfix
mailq_path = /usr/bin/mailq.postfix
manpage_directory = /usr/share/man
mydestination = $myhostname, localhost.$mydomain, localhost
newaliases_path = /usr/bin/newaliases.postfix
queue_directory = /var/spool/postfix
readme_directory = /usr/share/doc/postfix-2.10.1/README_FILES
sample_directory = /usr/share/doc/postfix-2.10.1/samples
sendmail_path = /usr/sbin/sendmail.postfix
setgid_group = postdrop
unknown_local_recipient_reject_code = 550
Além disso, digitar postconf -M
no servidor resulta em:
smtp inet n - n - - smtpd
465 inet n - - - - smtpd
pickup unix n - n 60 1 pickup
cleanup unix n - n - 0 cleanup
qmgr unix n - n 300 1 qmgr
tlsmgr unix - - n 1000? 1 tlsmgr
rewrite unix - - n - - trivial-rewrite
bounce unix - - n - 0 bounce
defer unix - - n - 0 bounce
trace unix - - n - 0 bounce
verify unix - - n - 1 verify
flush unix n - n 1000? 0 flush
proxymap unix - - n - - proxymap
proxywrite unix - - n - 1 proxymap
smtp unix - - n - - smtp
relay unix - - n - - smtp
showq unix n - n - - showq
error unix - - n - - error
retry unix - - n - - error
discard unix - - n - - discard
local unix - n n - - local
virtual unix - n n - - virtual
lmtp unix - - n - - lmtp
anvil unix - - n - 1 anvil
scache unix - - n - 1 scache
O conteúdo de /var/log/maillog
nesse período de tempo foi:
Mar 3 15:22:05 mydomain postfix/postfix-script[8565]: starting the Postfix mail system
Mar 3 15:22:05 mydomain postfix/master[8567]: daemon started -- version 2.10.1, configuration /etc/postfix
Mar 3 15:23:40 mydomain postfix/smtpd[8572]: connect from unknown[my.DEVBOX.ip.addr]
Mar 3 15:25:26 mydomain postfix/smtpd[8572]: lost connection after UNKNOWN from unknown[my.DEVBOX.ip.addr]
Mar 3 15:25:26 mydomain postfix/smtpd[8572]: disconnect from unknown[my.DEVBOX.ip.addr]
Mar 3 15:26:40 mydomain postfix/smtpd[8572]: connect from unknown[my.DEVBOX.ip.addr]
Mar 3 15:26:40 mydomain postfix/smtpd[8572]: lost connection after CONNECT from unknown[my.DEVBOX.ip.addr]
Mar 3 15:26:40 mydomain postfix/smtpd[8572]: disconnect from unknown[my.DEVBOX.ip.addr]
Mar 3 15:28:49 mydomain postfix/smtpd[8578]: connect from unknown[my.DEVBOX.ip.addr]
Mar 3 15:30:36 mydomain postfix/smtpd[8578]: lost connection after UNKNOWN from unknown[my.DEVBOX.ip.addr]
Mar 3 15:30:36 mydomain postfix/smtpd[8578]: disconnect from unknown[my.DEVBOX.ip.addr]
Mar 3 15:33:40 mydomain postfix/anvil[8574]: statistics: max connection rate 1/60s for (465:my.DEVBOX.ip.addr) at Mar 3 15:23:40
Mar 3 15:33:40 mydomain postfix/anvil[8574]: statistics: max connection count 1 for (465:my.DEVBOX.ip.addr) at Mar 3 15:23:40
Mar 3 15:33:40 mydomain postfix/anvil[8574]: statistics: max cache size 1 at Mar 3 15:23:40
As configurações do servidor de saída no Thunderbird são:
Description: <Not Specified>
Server Name: mydomain.com
Port: 465
User Name: me
Authentication Method: Normal Password
Connection Security: SSL/TLS
Eu interpreto isso para significar que o bloqueio está no postfix. Então, o que eu altero para obter o postfix para permitir que clientes remotos enviem através de port 465
enquanto ainda permite que mensagens sejam recebidas de outros servidores através de port 25
?
EDITAR:
De acordo com as instruções no link fornecido pelo @sebix, tentei o seguinte:
Em /etc/postfix/main.cf
, descomentei a seguinte linha:
smtpd_tls_security_level = may
Em /etc/postfix/master.cf
, descomentei as duas linhas seguintes:
-o smtpd_tls_wrappermode=yes
-o smtpd_sasl_auth_enable=yes
No entanto, quando tentei enviar um email de teste, o Thunderbird respondeu com o seguinte diálogo de erro:
Sending of message failed.
The message could not be sent because the connection to SMTP server mydomain.com was
lost in the middle of the transaction. Try again or contact your network administrator.
EDIT # 2
De acordo com a sugestão de Esa Jokinen, tentei os seguintes comandos.
No DEVBOX, digitei telnet mydomain.com 587
e recebi o seguinte em resposta. Observe que as duas linhas em que adicionei a entrada possuem #
na frente delas, embora não haja #
no terminal. Eu adicionei o #
para ênfase / clareza:
Trying my.Server.ip.addr...
Connected to mydomain.com.
Escape character is '^]'.
220 mydomain.com ESMTP Postfix
# EHLO mydomain.com
250-mydomain.com
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
# STARTTLS
454 4.7.0 TLS not available due to local problem
Em seguida, no SERVIDOR, digitei openssl s_client -host localhost -port 587 -starttls smtp
. Isso resultou na seguinte saída:
CONNECTED(00000003)
140634999289760:error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol:s23_clnt.c:769:
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 244 bytes and written 284 bytes
---
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
---
No SERVER, eu digitei novamente postconf -n
e agora recebo a seguinte saída:
alias_database = hash:/etc/aliases
alias_maps = hash:/etc/aliases
command_directory = /usr/sbin
config_directory = /etc/postfix
daemon_directory = /usr/libexec/postfix
data_directory = /var/lib/postfix
debug_peer_level = 2
debugger_command = PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin ddd $daemon_directory/$process_name $process_id & sleep 5
home_mailbox = Maildir/
html_directory = no
inet_interfaces = all
inet_protocols = all
mail_owner = postfix
mailq_path = /usr/bin/mailq.postfix
manpage_directory = /usr/share/man
mydestination = $myhostname, localhost.$mydomain, localhost
newaliases_path = /usr/bin/newaliases.postfix
queue_directory = /var/spool/postfix
readme_directory = /usr/share/doc/postfix-2.10.1/README_FILES
sample_directory = /usr/share/doc/postfix-2.10.1/samples
sendmail_path = /usr/sbin/sendmail.postfix
setgid_group = postdrop
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtpd_tls_cert_file = </etc/pki/dovecot/certs/dovecot.pem
smtpd_tls_key_file = </etc/pki/dovecot/private/dovecot.pem
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtpd_use_tls = yes
unknown_local_recipient_reject_code = 550
No SERVER, eu digitei novamente postconf -M
e recebi o seguinte em retorno:
smtp inet n - n - - smtpd
587 inet n - - - - smtpd
submission inet n - - - - smtpd
-o smtpd_tls_security_level=encrypt
-o smtpd_sasl_auth_enable=yes
-o smtpd_sasl_type=dovecot
-o smtpd_sasl_path=private/auth
-o smtpd_sasl_security_options=noanonymous
-o smtpd_sasl_local_domain=$myhostname
-o smtpd_client_restrictions=permit_sasl_authenticated,reject
-o smtpd_sender_login_maps=hash:/etc/postfix/virtual
-o smtpd_sender_restrictions=reject_sender_login_mismatch
-o smtpd_recipient_restrictions=permit_sasl_authenticated,reject
pickup unix n - n 60 1 pickup
cleanup unix n - n - 0 cleanup
qmgr unix n - n 300 1 qmgr
tlsmgr unix - - n 1000? 1 tlsmgr
rewrite unix - - n - - trivial-rewrite
bounce unix - - n - 0 bounce
defer unix - - n - 0 bounce
trace unix - - n - 0 bounce
verify unix - - n - 1 verify
flush unix n - n 1000? 0 flush
proxymap unix - - n - - proxymap
proxywrite unix - - n - 1 proxymap
smtp unix - - n - - smtp
relay unix - - n - - smtp
showq unix n - n - - showq
error unix - - n - - error
retry unix - - n - - error
discard unix - - n - - discard
local unix - n n - - local
virtual unix - n n - - virtual
lmtp unix - - n - - lmtp
anvil unix - - n - 1 anvil
scache unix - - n - 1 scache
Em seguida, tentei enviar um email pelo servidor usando o cliente Thunderbird no devbox remoto. Após este teste, digitar nano /var/log/maillog
no SERVER fornece:
Mar 4 11:57:19 mydomain postfix/smtpd[11029]: error: open database /etc/postfix/virtual.db: No such file or directory
Mar 4 11:57:19 mydomain postfix/smtpd[11029]: warning: cannot get RSA certificate from file </etc/pki/dovecot/certs/dovecot.pem: disabling TLS support
Mar 4 11:57:19 mydomain postfix/smtpd[11029]: warning: TLS library problem: 11029:error:02001002:system library:fopen:No such file or directory:bss_file.c:398:fope$
Mar 4 11:57:19 mydomain postfix/smtpd[11029]: warning: TLS library problem: 11029:error:20074002:BIO routines:FILE_CTRL:system lib:bss_file.c:400:
Mar 4 11:57:19 mydomain postfix/smtpd[11029]: warning: TLS library problem: 11029:error:140DC002:SSL routines:SSL_CTX_use_certificate_chain_file:system lib:ssl_rsa$
Mar 4 11:57:19 mydomain postfix/smtpd[11029]: connect from unknown[98.244.12.133]
Mar 4 11:57:20 mydomain postfix/cleanup[11032]: 1FD8680B3BCE: message-id=<[email protected]>
Mar 4 11:57:20 mydomain postfix/qmgr[10139]: 1FD8680B3BCE: from=<[email protected]>, size=873, nrcpt=1 (queue active)
Mar 4 11:57:20 mydomain postfix/smtpd[11029]: disconnect from unknown[98.244.12.133]
Mar 4 11:57:20 mydomain postfix/local[11034]: 1FD8680B3BCE: to=<[email protected]>, orig_to=<postmaster>, relay=local, delay=0.07, delays=0.04/0.01/0/0.0$
Mar 4 11:57:20 mydomain postfix/qmgr[10139]: 1FD8680B3BCE: removed
Essas leituras indicam que o problema está nos certs. Observe que usei os certificados especificados em /etc/dovecot/conf.d/10-ssl.conf
. Eu apenas copiei e colei os urls dos dois arquivos cert / key depois de usar o nano para confirmar que cada arquivo existia e continha códigos de criptografia. E também ter certeza de apontar a chave para a chave e apontar o certificado para o certificado.
Eu fiz isso corretamente?
EDIT # 3
Alterei as referências de URL dos arquivos de chave de
smtpd_tls_cert_file = </etc/pki/dovecot/certs/dovecot.pem
smtpd_tls_key_file = </etc/pki/dovecot/private/dovecot.pem
para
smtpd_tls_cert_file = /etc/pki/dovecot/certs/dovecot.pem
smtpd_tls_key_file = /etc/pki/dovecot/private/dovecot.pem
Também removi os dois símbolos <
em /etc/dovecot/conf.d/10-ssl.conf
. (Esses dois símbolos onde antes desse teste começou). Em seguida, digitei sudo nano
para abrir o certificado e a chave para ter certeza de que eles estavam acessíveis nos locais fornecidos e eles estavam. Eu então tentei enviar outro e-mail através do servidor usando o cliente Thunderbird no meu devbox. Isso resultou em uma solicitação do Thunderbird para eu adicionar uma exceção para o certificado desconhecido. Quando aceitei o certificado desconhecido, o Thunderbird me deu uma caixa de diálogo com tempo limite de conexão e não conseguiu enviar o email, enquanto o seguinte foi gravado em /var/log/maillog
:
Mar 4 14:08:28 mydomain postfix/postfix-script[11361]: stopping the Postfix mail system
Mar 4 14:08:28 mydomain postfix/master[11293]: terminating on signal 15
Mar 4 14:08:33 mydomain postfix/postfix-script[11444]: starting the Postfix mail system
Mar 4 14:08:33 mydomain postfix/master[11446]: daemon started -- version 2.10.1, configuration /etc/postfix
Mar 4 14:08:44 mydomain postfix/smtpd[11451]: error: open database /etc/postfix/virtual.db: No such file or directory
Mar 4 14:08:44 mydomain postfix/smtpd[11451]: connect from unknown[my.DEVBOX.ip.addr]
Mar 4 14:08:44 mydomain postfix/smtpd[11451]: warning: SASL: Connect to private/auth failed: No such file or directory
Mar 4 14:08:44 mydomain postfix/smtpd[11451]: fatal: no SASL authentication mechanisms
Mar 4 14:08:45 mydomain postfix/master[11446]: warning: process /usr/libexec/postfix/smtpd pid 11451 exit status 1
Mar 4 14:08:45 mydomain postfix/master[11446]: warning: /usr/libexec/postfix/smtpd: bad command startup -- throttling
NOTA:
A remoção de <
de </etc/pki/dovecot/certs/dovecot.pem
e </etc/pki/dovecot/private/dovecot.pem
in /etc/dovecot/conf.d/10-ssl.conf
fez com que a conexão imap do JavaMail de um aplicativo em execução no servidor parasse de funcionar. Mas colocando o <
de volta no problema fixo. Isso pode se referir a uma pasta vinculada.