Eu tenho um servidor de e-mail postfix
que está contatando um banco de dados para consultar e verificar endereços de e-mail etc. Ele se conecta usando pgbouncer
para percorrer conexões, mas meu problema é que o 'bouncer' está localizado no banco de dados, para que as conexões de e para o banco de dados não sejam criptografadas e possam ser um problema de segurança.
Eu instalei uma instância local de pgbouncer
no servidor de email junto com stunnel
para ao menos dar aos dois a chance de instigar uma conexão SSL entre os dois, mas por alguma razão infatora, postfix
, por sentimentalidade , pernicioso ou simplesmente porque é simples teimoso se recusa a cumprir a transição. Aqui está um exemplo de um dos arquivos de pesquisa de alias virtuais localizados no diretório 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'
para testá-lo, você pode consultar um endereço de e-mail de teste assim
console:~$ postmap -q [email protected] pgsql:/etc/postfix/p-alias
e o resultado:
tester.mc_testy_tester@test_email_address.com
tudo bem e bom, agora para criar uma configuração quase idêntica que aponta para o pooler local
console:~$ cp /etc/postfix/p-alias /etc/postfix/p-alias2
console:~$ vi /etc/postfix/p-alias2
mude o ip para localhost:
# -------
# p-alias2
# -------
hosts=localhost
port=6432
dbname=mail
user=user1
password=password
query=SELECT destination FROM v_alias WHERE source = '%s'
coloque o mesmo comando:
console:~$ postmap -q [email protected] pgsql:/etc/postfix/p-alias2
e apresenta o seguinte erro
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
Os dois bouncers são todos idênticos, os arquivos pgbouncer.ini são os mesmos, assim como o userlist.txt, a única diferença notável é sua localização física e conexão. Como eu não tenho psql
client instalado no servidor de e-mail (tentando instalar através de distros linux tentei adicionar dependências demais para o meu gosto), em vez disso eu recorri a mimitar as consultas com python para verificar se eu não tinha t perdeu alguma coisa boba:
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 = '[email protected]'" )
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 = '[email protected]'" )
dbh.fetchone()
# Result:
# ('tester.mc_testy_tester@test_email_address.com',)
conn.commit()
conn.close()
ambos funcionaram sem problemas, então, até onde eu sei, isso está funcionando e não deve haver problemas. Postfix claramente pensa o contrário.
Então eu presumi que talvez fosse o stunnel que era o problema, aqui está a configuração:
client = yes
pid = /var/run/stunnel.pid
[pgbouncer]
protocol = pgsql
accept = 6433
connect = 10.0.0.123:5432
Eu pulo o pgbouncer e questiono o stunnel local
# -------
# p-alias3
# -------
hosts=127.0.0.1
port=6433
dbname=mail
user=user1
password=password
query=SELECT destination FROM v_alias WHERE source = '%s'
postmap se recusa a cumprir
console:~$ postmap -q [email protected] 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
sem sorte.
Por uma questão de completude, aqui está um bom pedaço do 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
; ...
Eu tento pgbouncer com stunnel, ou sem e direto para o banco de dados e o postfix se recusa a aceitar que existe um localhost, ele funciona com python e falha com o postmap.
É evidente que não gosta de localhost.
Então, Postfix, o que você quer de mim? !!!
(o postfix é a versão 2.11.0)