Postfix não conectando ao pool de postgres com endereço IP local

0

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)

    
por Lucas 09.04.2015 / 14:53

2 respostas

0

Após algumas discussões no irc, foi apontado que o Postfix não parece estar honrando a configuração port= para conexões locais - a mensagem de erro estava claramente tentando falar com a porta 5432, mudando a porta de escuta pgbouncer para 5432 resolveu o problema.

Obrigado -Myon!

(é sempre tão simples quando você sabe a resposta ...)

    
por 09.04.2015 / 15:29
0

Com base na página manpage aqui:

link

A porta opcional precisa ser especificada nos campos hosts com a sintaxe hostname:port :

  hosts  The hosts that Postfix will try to connect to  and  query  from.
          Specify unix: for UNIX-domain sockets, inet: for TCP connections
          (default).  Example:
              hosts = host1.some.domain host2.some.domain:port
              hosts = unix:/file/name

Um campo porta independente parece não existir.

    
por 10.04.2015 / 21:30