У меня есть postfix
почтовый сервер, который связывается с базой данных, чтобы запрашивать и проверять адреса электронной почты и т. Д. Он соединяется с помощью pgbouncer
циклического соединения, однако моя проблема заключалась в том, что «вышибала» находится на конце базы данных, поэтому соединения с и из база данных не зашифрована и потенциально может быть проблемой безопасности.
Я установил локальный экземпляр pgbouncer
на почтовом сервере вместе, stunnel
чтобы, по крайней мере, дать им возможность инициировать SSL-соединение между ними, однако по какой-то изумительной причине postfix
, из-за сентиментальности, пагубности или просто потому, что он просто упрямый, отказывается соблюдать с переключением. Вот пример одного из файлов поиска виртуальных псевдонимов, расположенных в каталоге postfix:
# ------- # p-alias # ------- hosts=10.0.0.123 port=6432 dbname=mail user=user1 password=password query=SELECT destination FROM v_alias WHERE source = '%s'
чтобы проверить это, вы можете запросить тестовый адрес электронной почты, например, так
console:~$ postmap -q test@testy.net pgsql:/etc/postfix/p-alias
и результат:
tester.mc_testy_tester@test_email_address.com
все хорошо, теперь, чтобы создать почти идентичный конфиг, который указывает на локальный пулер
console:~$ cp /etc/postfix/p-alias /etc/postfix/p-alias2 console:~$ vi /etc/postfix/p-alias2
измените ip на localhost:
# ------- # p-alias2 # ------- hosts=localhost port=6432 dbname=mail user=user1 password=password query=SELECT destination FROM v_alias WHERE source = '%s'
поставьте ту же команду:
console:~$ postmap -q test@testy.net pgsql:/etc/postfix/p-alias2
и выплевывает следующую ошибку
postmap: warning: connect to pgsql server localhost: could not connect to server: Connection refused?? Is the server running on host "localhost" (::1) and accepting?? TCP/IP connections on port 5432?? could not connect to server: Connection refused?? Is the server running on host "localhost" (127.0.0.1) and accepting?? TCP/IP connections on port 5432?? postmap: fatal: table pgsql:/etc/postfix/p-alias2: query error: Operation now in progress
Два вышибала практически идентичны, файлы pgbouncer.ini такие же, как и userlist.txt, единственное заметное отличие заключается в их физическом расположении и соединении. Поскольку у меня не установлен psql
клиент на почтовом сервере (пытаясь установить через дистрибутивы Linux, я попытался добавить слишком много зависимостей на мой вкус), я вместо этого прибегнул к имитации запросов с помощью Python, чтобы убедиться, что я ничего не пропустил глупо:
import psycopg2 conn = psycopg2.connect( "host='10.0.0.123' port='6432' dbname=mail user='user1' password='password'" ) dbh = conn.cursor() dbh.execute( "SELECT destination FROM v_alias WHERE source = 'test@testy.net'" ) dbh.fetchone() # Result: # ('tester.mc_testy_tester@test_email_address.com',) conn.commit() conn.close() # ----------------------------------- # All is tickety boo, as it should be # now let's repeat with the local ip # ----------------------------------- conn = psycopg2.connect( "host='localhost' port='6432' dbname=mail user='user1' password='password'" ) dbh = conn.cursor() dbh.execute( "SELECT destination FROM v_alias WHERE source = 'test@testy.net'" ) dbh.fetchone() # Result: # ('tester.mc_testy_tester@test_email_address.com',) conn.commit() conn.close()
оба работали безотказно, так что, насколько я могу судить, это работает, и не должно быть никаких проблем. Postfix явно думает иначе.
Итак, я предположил, что, возможно, проблема была в stunnel, вот конфиг:
client = yes pid = /var/run/stunnel.pid [pgbouncer] protocol = pgsql accept = 6433 connect = 10.0.0.123:5432
Я обхожу pgbouncer и запрашиваю локальный stunnel
# ------- # p-alias3 # ------- hosts=127.0.0.1 port=6433 dbname=mail user=user1 password=password query=SELECT destination FROM v_alias WHERE source = '%s'
почтовая карта отказывается соблюдать
console:~$ postmap -q test@testy.net pgsql:/etc/postfix/p-alias3 postmap: warning: connect to pgsql server 127.0.0.1: could not connect to server: Connection refused?? Is the server running on host "127.0.0.1" and accepting?? TCP/IP connections on port 5432?? postmap: fatal: table pgsql:/etc/postfix/p-alias3: query error: Operation now in progress
неудачно.
Для полноты картины приведу примерный фрагмент файла pgbouncer.ini.
[databases] ; ... ;mail = host=localhost port=6433 dbname=mail mail = host=10.0.0.123 port=5432 dbname=mail [pgbouncer] listen_addr = * listen_port = 6432 ; ... auth_type = md5 auth_file = /etc/pgbouncer/userlist.txt pool_mode = transaction server_reset_query = DISCARD ALL server_check_query = SELECT 1 server_check_delay = 30 ; ...
Я пробую pgbouncer с stunnel или без него и прямо в базу данных, а postfix отказывается признать наличие локального хоста, работает с python и не работает с postmap.
Очевидно, что это просто не нравится localhost.
Итак, Postfix, что ты хочешь от меня? !!!
(Postfix - версия 2.11.0)