Im Ernst: warum sollte auf dem Port, wo das läuft, keine Antwort kommen? Entweder, Du willst Zugriffe über das Netz zulassen, dann geht das nicht anders. Oder Du willst das nicht, dann lasse ihn nicht am Port lauschen. Davon abgesehen: wieviele sicherheitsrelevante Bugs hatte PostgreSQL die letzten 20 Jahre? Ach ja: iptables existiert auch noch.
Bei mir kommt von ausserhalb des Intranet niemand direkt auf die Datenbank. Port 5432 ist am Gateway geschlossen. Leute, die einen ssh-key haben und Datenbanknutzer sind können sich einen ssh-Tunnel anlegen und sich darüber connecten. Webanwendungen oder Webservices haben ihre eigene Nutzerverwaltung, bzw. einen Nutzer mit angepassten Rechten, die nichts mit der DB zu tun hat oder nichts darf, so dass hier auch niemand direkt auf die DB kommt. Die Verwaltung der Zugriffe im Intranet erfolgt im Moment noch händisch, wird aber demnächst von einem ldap-server übernommen.
Gruß Uwe
Edit ein paar Anmerkungen:
\
Zugriff nur von bestimmten IP’s erlauben
Kann man machen, wird aber in einer mobilen und heterogenen Umgebung sehr lästig
User posgres nur local erlauben
Das sowieso.
Für jede Datenbank einen eigenen User
Kommt drauf an wieviele Datenbanken und Anwendungen du betreibst und wie die vernetzt sind.
Für jeden Account ein Passwort festlegen; Mindestens 16 Zeichen z.B: akJd§1?ß94Kdjd!
Schwierig, den Nutzern beizubringen, sich in einer heterogenen Diensteumgebung 15 solcher Passwörter zu merken. Ist aber abhänging von der Anwendung und könnte z.B. über einen LDAP vereinheitlicht werden.
Standardport von 5432 auf einen beliebigen anderen Port legen
Security by Obscurity bringt rein gar nix. Wenn einer mit nmap und Konsorten umgehen kann hat er den Port und die Anwendung innerhalb von Sekunden. Ich persönlich finde es auch bei der Administration lästig, sich ständig abweichende Ports merken zu müssen.
Wenn wirklich ein Zugriff von aussen notwendig sein sollte, würde ist ssh oder vpn empfehlen. Hat auch den Nebeneffekt das der traffic gleich verschlüsselt ist.
Port-Knocking … und wie bringst du das deinen Webservern bei? kopfschüttel
Wenn du die Webserver weisst, dann trag die IP-Adressen in die pg_hba.conf ein.
Zusätzlich erstell eine Firewall-Regel, die nur Traffic von diesen IP-Adressen durchlässt.
Als Bonus kommt ein Monitoring-System oben drauf, das den Traffic analysiert und nach verdächtigen Sachen Ausschau hält.
Das kann aber nicht alle Angriffe finden, von daher sollte man sich da nicht 100% drauf verlassen.
Oh, und du solltest dir im Klaren sein, das deine Webserver dann das Haupteinfallstor für Angriffe sein werden …