Ich habe einen postfix
E-Mail-Server, der eine Datenbank zum Abfragen und Überprüfen von E-Mail-Adressen usw. kontaktiert. Er stellt eine pgbouncer
Verbindung her, um die Verbindungen zu durchlaufen. Mein Problem war jedoch, dass sich der 'Bouncer' auf der Datenbank befindet, also Verbindungen von und zu Die Datenbank ist unverschlüsselt und könnte ein Sicherheitsrisiko darstellen.
Ich habe pgbouncer
auf dem Mail-Server eine lokale Instanz von installiert, stunnel
um den beiden zumindest die Chance zu geben, eine SSL-Verbindung zwischen den beiden aufzubauen, jedoch aus irgendeinem trügerischen Grund postfix
, durch Sentimentalität, Schädlichkeit oder einfach nur weil sie sich hartnäckig weigern will mit der Umschaltung. Hier ist ein Beispiel für eine der Nachsuchdateien für virtuelle Aliasnamen, die sich im Postfix-Verzeichnis befinden:
# ------- # 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 folgt abfragen
console:~$ postmap -q test@testy.net pgsql:/etc/postfix/p-alias
und das Ergebnis:
tester.mc_testy_tester@test_email_address.com
Alles in Ordnung und gut, 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
Ändern Sie die IP-Adresse in localhost:
# ------- # p-alias2 # ------- hosts=localhost port=6432 dbname=mail user=user1 password=password query=SELECT destination FROM v_alias WHERE source = '%s'
Stellen Sie den gleichen Befehl auf:
console:~$ postmap -q test@testy.net 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 alle identisch, die Dateien pgbouncer.ini und die userlist.txt sind die gleichen. Der einzige erkennbare Unterschied ist der physische Standort und die Verbindung. Da ich keinen psql
Client auf dem E-Mail-Server installiert habe (der Versuch, über Linux Distros zu installieren, viel zu viele Abhängigkeiten für meinen Geschmack hinzufügt), habe ich stattdessen die Abfragen mit Python nachgeahmt, um zu überprüfen, ob ich nichts übersehen habe 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 = '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()
beide funktionierten problemlos, so weit ich weiß, funktioniert das und es sollte keine Probleme geben. Postfix denkt eindeutig anders.
Also nahm ich an, dass es vielleicht der Stunnel war, der 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 verweigert die Einhaltung
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
kein Glück.
Der Vollständigkeit halber handelt es sich hier um einen guten 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, der mit Python funktioniert und mit Postmap fehlschlägt.
Ganz offensichtlich mag es localhost nicht.
Also, Postfix, was willst du von mir? !!!
(Postfix ist Version 2.11.0)