Postfix stellt keine Verbindung zum Postgres-Pool mit lokaler IP-Adresse her

0

Ich habe einen postfixE-Mail-Server, der sich mit einer Datenbank in pgbouncerVerbindung setzt, um E-Mail-Adressen usw. abzufragen und zu überprüfen. Die Verbindung wird hergestellt, um Verbindungen zu durchlaufen Die Datenbank ist unverschlüsselt und kann möglicherweise ein Sicherheitsproblem darstellen.

Ich installierte eine lokale Instanz pgbouncerauf dem Mailserver zusammen mit stunnelzumindest auf die beiden die Chance zu geben , eine SSL - Verbindung zwischen den beiden, aber aus irgendeinem infurating Grund anstiften, postfixdurch Sentimentalität, Schädlichkeit oder einfach nur , weil es schlicht hartnäckig weigert zu erfüllen mit der Umstellung. Hier ist ein Beispiel für eine der virtuellen Alias-Suchdateien im Postfix-Verzeichnis:

# -------
# p-alias
# -------
hosts=10.0.0.123
port=6432
dbname=mail
user=user1
password=password
query=SELECT destination FROM v_alias WHERE source = '%s'

Zum Testen können Sie eine Test-E-Mail-Adresse wie diese abfragen

console:~$ postmap -q [email protected] pgsql:/etc/postfix/p-alias

und das Ergebnis:

tester.mc_testy_tester@test_email_address.com

Alles in Ordnung und gut, um jetzt eine nahezu identische Konfiguration zu erstellen, die auf den lokalen Pooler verweist

console:~$ cp /etc/postfix/p-alias /etc/postfix/p-alias2
console:~$ vi /etc/postfix/p-alias2

ändere die IP in localhost:

# -------
# p-alias2
# -------
hosts=localhost
port=6432
dbname=mail
user=user1
password=password
query=SELECT destination FROM v_alias WHERE source = '%s'

stelle es den gleichen Befehl:

console:~$ postmap -q [email protected] pgsql:/etc/postfix/p-alias2

und es spuckt den folgenden Fehler aus

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

Die beiden Bouncer sind nahezu identisch, die pgbouncer.ini-Dateien und die userlist.txt sind identisch. Der einzige bemerkbare Unterschied besteht in ihrem physischen Standort und ihrer Verbindung. Da ich keinen psqlClient auf dem E-Mail-Server installiert habe ( ich habe versucht, über Linux-Distributionen zu viele Abhängigkeiten hinzuzufügen, die mir gefallen), habe ich stattdessen die Abfragen mit Python nachgeahmt, um zu überprüfen, ob mir nichts entgangen ist dumm:

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()

beide haben reibungslos funktioniert, soweit ich das beurteilen kann, sollte es keine probleme geben. Postfix denkt eindeutig anders.

Also nahm ich an, dass vielleicht der Stunnel das Problem war, hier ist die Konfiguration:

client = yes
pid = /var/run/stunnel.pid
[pgbouncer]
        protocol = pgsql
        accept = 6433
        connect = 10.0.0.123:5432

Ich umgehe den pgbouncer und frage den lokalen Stunnel ab

# -------
# 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 weigert sich zu entsprechen

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

kein Glück.

Der Vollständigkeit halber hier ein fairer Teil der 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

; ...

Ich versuche pgbouncer mit stunnel oder ohne und direkt in die Datenbank und postfix weigert sich zu akzeptieren, dass es einen localhost gibt, er funktioniert mit Python und schlägt mit postmap fehl.

Es ist klar, dass es localhost einfach nicht mag.

Also, Postfix, was willst du von mir? !!!

(Postfix ist Version 2.11.0)

Lucas
quelle

Antworten:

0

Nach einigen Diskussionen über irc wurde darauf hingewiesen, dass Postfix die port=Einstellung für lokale Verbindungen anscheinend nicht einhält. Die Fehlermeldung hat eindeutig versucht, mit Port 5432 zu sprechen. Das Ändern des pgbouncer-Listen-Ports auf 5432 behebt das Problem.

Vielen Dank - Myon!

(Es ist immer so einfach, wenn Sie die Antwort wissen ...)

Lucas
quelle
0

Basierend auf der Manpage hier:

http://www.postfix.org/pgsql_table.5.html

Der optionale Port muss in den Hostfeldern mit der folgenden hostname:portSyntax angegeben werden:

  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

Ein unabhängiges Portfeld scheint nicht zu existieren.

Daniel Vérité
quelle