Não é possível conectar o Postfix ao AWS MySQL RDS por SSL SSL_CTX_set_default_verify_paths

1

Eu estou tentando configurar um servidor de e-mail com o Postfix (3.3.0) com domínios virtuais, consultados em uma instância do Amazon RDS MySQL (8.0.11), com SSL entre o servidor de e-mail e a instância do RDS.

Estou no começo de configurar isso, por isso não ativei nenhum serviço avançado; Acabei de instalar o Postfix e o Dovecot, e tentei enviar um e-mail via telnet do local para o servidor de e-mail. Isso falha (o que é bom, esse é o ponto de teste), mas estou tendo problemas para identificar a origem da falha. Em particular, o postfix não quer funcionar, mas o postmap parece funcionar bem!

O erro principal retornado quando feito via postfix parece ser "SSL_CTX_set_default_verify_paths". Olhando por aqui, só consigo encontrar duas questões realmente relevantes, uma das quais foi respondida por um simples erro de digitação no arquivo de configuração; o outro parecia fazer com permissões de leitura postfix no arquivo CA. Eu não tenho (pelo menos isso em particular) erro de digitação, e tenho certeza que não é um problema de permissão de arquivo, mas, talvez eu esteja errado.

Veja como a falha do postfix se parece:

$telnet localhost 25
EHLO <my.working.mailserver>
MAIL FROM: <[email protected]>
RCPT TO: postmaster@localhost

E aqui está o que o registro de e-mail diz:

Nov  2 11:09:31 ip-172-31-7-179 postfix/smtpd[11883]: connect from localhost[127.0.0.1]
Nov  2 11:09:45 ip-172-31-7-179 postfix/trivial-rewrite[11879]: warning: connect to mysql server <my.rds.endpoint>:<myport>: SSL connection error: SSL_CTX_set_default_verify_paths failed
Nov  2 11:09:45 ip-172-31-7-179 postfix/trivial-rewrite[11879]: warning: virtual_alias_domains: mysql:/etc/postfix/mysql_alias.cf: table lookup problem
Nov  2 11:09:45 ip-172-31-7-179 postfix/trivial-rewrite[11879]: warning: virtual_alias_domains lookup failure
Nov  2 11:09:58 ip-172-31-7-179 postfix/trivial-rewrite[11879]: warning: virtual_alias_domains: mysql:/etc/postfix/mysql_alias.cf: table lookup problem
Nov  2 11:09:58 ip-172-31-7-179 postfix/trivial-rewrite[11879]: warning: virtual_alias_domains lookup failure
Nov  2 11:09:58 ip-172-31-7-179 postfix/smtpd[11883]: NOQUEUE: reject: RCPT from localhost[127.0.0.1]: 451 4.3.0 <postmaster@localhost>: Temporary lookup failure; from=<[email protected]> to=<postmaster@localhost> proto=ESMTP helo=<my.working.mailserver>

MAS, se eu tentar pesquisar postmaster @ localhost com postmap, parece funcionar muito bem:

$sudo -upostfix postmap -q postmaster@localhost mysql:/etc/postfix/mysql_alias.cf  
root@localhost

e com alguma verbosidade:

$sudo -upostfix postmap -v -q postmaster@localhost mysql:/etc/postfix/mysql_alias.cf
postmap: name_mask: all
postmap: inet_addr_local: configured 2 IPv4 addresses
postmap: inet_addr_local: configured 2 IPv6 addresses
postmap: cfg_get_str: /etc/postfix/mysql_alias.cf: user = postfix
postmap: cfg_get_str: /etc/postfix/mysql_alias.cf: password = <password>
postmap: cfg_get_str: /etc/postfix/mysql_alias.cf: dbname = <db_name>
postmap: cfg_get_str: /etc/postfix/mysql_alias.cf: result_format = %s
postmap: cfg_get_str: /etc/postfix/mysql_alias.cf: option_file = <NULL>
postmap: cfg_get_str: /etc/postfix/mysql_alias.cf: option_group = client
postmap: cfg_get_str: /etc/postfix/mysql_alias.cf: tls_key_file = <NULL>
postmap: cfg_get_str: /etc/postfix/mysql_alias.cf: tls_cert_file = <NULL>
postmap: cfg_get_str: /etc/postfix/mysql_alias.cf: tls_CAfile = /etc/mysql/ssl/rds-combined-ca-bundle.pem
postmap: cfg_get_str: /etc/postfix/mysql_alias.cf: tls_CApath = <NULL>
postmap: cfg_get_str: /etc/postfix/mysql_alias.cf: tls_ciphers = <NULL>
postmap: cfg_get_bool: /etc/postfix/mysql_alias.cf: tls_verify_cert = on
postmap: cfg_get_bool: /etc/postfix/mysql_alias.cf: require_result_set = on
postmap: cfg_get_int: /etc/postfix/mysql_alias.cf: expansion_limit = 0
postmap: cfg_get_str: /etc/postfix/mysql_alias.cf: query = SELECT destination FROM aliases WHERE mail = '%s' AND enabled=1
postmap: cfg_get_str: /etc/postfix/mysql_alias.cf: domain = 
postmap: cfg_get_str: /etc/postfix/mysql_alias.cf: hosts = <my.rds.endpoint>:<myport>
postmap: dict_open: mysql:/etc/postfix/mysql_alias.cf
postmap: dict_mysql_get_active: attempting to connect to host <my.rds.endpoint>:<myport>
postmap: dict_mysql: successful connection to host <my.rds.endpoint>:<myport>
postmap: mysql:/etc/postfix/mysql_alias.cf: successful query result from host <my.rds.endpoint>:<myport>
postmap: dict_mysql_lookup: retrieved 1 rows
root@localhost

Como eu disse, eu não acho que seja um problema de permissão de arquivo, porque eu estou fazendo o sufixo como postfix, e todos os serviços de postfix, exceto o mestre, estão rodando como esse usuário

$ps -auxw | grep postfix
root     11864  0.0  0.4  67376  4100 ?        Ss   11:09   0:00 /usr/lib/postfix/sbin/master -w
postfix  11874  0.0  0.5  73808  5172 ?        S    11:09   0:00 pickup -l -t unix -u -c
postfix  11875  0.0  0.5  73856  5428 ?        S    11:09   0:00 qmgr -l -t unix -u
postfix  11877  0.0  0.6  88668  6608 ?        S    11:09   0:00 cleanup -z -t unix -u -c
postfix  11879  0.0  0.6  88500  6288 ?        S    11:09   0:00 trivial-rewrite -n rewrite -t unix -u -c
postfix  11884  0.0  0.7  87248  7988 ?        S    11:09   0:00 tlsmgr -l -t unix -u -c
postfix  11972  0.0  0.6  88668  6496 ?        S    11:51   0:00 cleanup -z -t unix -u -c
cwr      11974  0.0  0.1  14856  1080 pts/1    S+   11:53   0:00 grep postfix

Estou sentindo falta de algo simples? Como o postmap em execução como o usuário postfix funciona bem ao ler a mesma configuração do postfix em si, mas o postfix não funciona?

Para ficar completo, observe que o comando postmap estava lendo mysql:/etc/postfix/mysql_alias.cf . Aqui estão os principais bits do main.cf:

alias_maps = hash:/etc/postfix/aliases
alias_database = hash:/etc/postfix/aliases
# this specifies where the virtual mailbox folders will be located
virtual_mailbox_base = /var/spool/mail/virtual
# this is for the mailbox location for each user
virtual_mailbox_maps = mysql:/etc/postfix/mysql_mailbox.cf
# and this is for aliases
virtual_alias_maps = mysql:/etc/postfix/mysql_alias.cf
# and this is for domain lookups
virtual_mailbox_domains = mysql:/etc/postfix/mysql_domains.cf

Esses três arquivos são bem diretos, eu acho:

$sudo cat /etc/postfix/mysql_alias.cf 
hosts = <my.rds.endpoint>:<myport>
user = <postfix_db_user>
password = <postfix_db_user_pass>
dbname = <db_name>
query = SELECT destination FROM aliases WHERE mail = '%s' AND enabled=1
tls_CAfile = /etc/mysql/ssl/rds-combined-ca-bundle.pem
tls_verify_cert = yes

Quaisquer pensamentos sobre como corrigir ou depurar isso ainda mais seriam muito apreciados.

    
por philolegein 02.11.2018 / 13:08

0 respostas