Не удается подключить Postfix к AWS MySQL RDS через SSL SSL_CTX_set_default_verify_paths
Я пытаюсь настроить почтовый сервер с Postfix (3.3.0) с виртуальными доменами, запрашиваемый у экземпляра Amazon RDS MySQL (8.0.11), с SSL между почтовым сервером и экземпляром RDS.
Я только начинаю это настраивать, поэтому не включил никаких дополнительных сервисов; Я только что установил Postfix и Dovecot и попытался отправить почту через telnet с локального на почтовый сервер. Это терпит неудачу (это нормально, вот в чем смысл тестирования), но у меня возникают проблемы с определением причины сбоя. В частности, postfix не хочет работать, но, похоже, postmap работает нормально!
Ошибка ядра, возвращаемая после выполнения постфикса, выглядит как "SSL_CTX_set_default_verify_paths". Оглядываясь здесь, я могу найти только два действительно важных вопроса, на один из которых ответила простая опечатка в файле конфигурации; другая из которых, похоже, была связана с разрешениями чтения постфикса в файле CA. У меня нет (по крайней мере, этой) опечатки, и я почти уверен, что это не проблема с правами доступа к файлам, но, возможно, я ошибаюсь.
Вот как выглядит сбой из postfix:
$telnet localhost 25
EHLO <my.working.mailserver>
MAIL FROM: <me@example.com>
RCPT TO: postmaster@localhost
И вот что говорит почтовый журнал:
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=<me@example.com> to=<postmaster@localhost> proto=ESMTP helo=<my.working.mailserver>
НО, если я попытаюсь найти postmaster@localhost с postmap, он, похоже, будет работать нормально:
$sudo -upostfix postmap -q postmaster@localhost mysql:/etc/postfix/mysql_alias.cf
root@localhost
и с некоторым многословием:
$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
Как я уже сказал, я не думаю, что это проблема с правами доступа к файлам, потому что я использую postfix, и все службы postfix, кроме master, работают под этим пользователем.
$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
Я что-то упустил? Как может postmap работать как пользователь postfix, если он читает ту же конфигурацию, что и сам postfix, но postfix не работает?
Для полноты обратите внимание, что команда postmap читала mysql:/etc/postfix/mysql_alias.cf
, Вот ключевые биты 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
Я думаю, эти три файла довольно просты:
$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
Будем весьма благодарны за любые мысли о том, как это исправить или отладить дальше.
1 ответ
Я столкнулся с аналогичной проблемой, но я обнаружил, что если я использую локальный IPv4 RDS, все работает как положено. Мне интересно, удалось ли вам это решить?
Я не буду вдаваться в подробности моей конкретной проблемы, а просто ради контекста: аутентификация работает с точки зрения dovecot, однако при попытке отправить электронное письмо я получаю следующую ошибку:
451 4.3.0 <user@domain.com>: Temporary lookup failure
и в/var/log/maillog
Я получил:
Jan 22 13:15:27 ip-1-1-1-1 postfix/submission/smtpd[4726]: dict_mysql_get_active: attempting to connect to host rds-test.us-east-1.rds.amazonaws.com
Jan 22 13:15:27 ip-10-1-1-1 postfix/submission/smtpd[4726]: warning: connect to mysql server rds-test.us-east-1.rds.amazonaws.com: Unknown MySQL server host 'rds-test.us-east-1.rds.amazonaws.com' (16)
Jan 22 13:15:27 ip-10-1-1-1 postfix/submission/smtpd[4726]: warning: mysql:/etc/postfix/mysql-email2email.cf lookup error for "user@domain.com"
Да, я забыл упомянуть, что когда я подключаюсь с самой постфиксной машины, а не с какой-то удаленной, используя$ openssl s_client -connect 127.0.0.1:25 -starttls smtp
РДС больше нетUnknown MySQL
и я могу отправлять электронные письма.