Postgres Sicherheit

Hey… ich habe privat einen Postgres Server auf Debian am laufen. Nun beschäftigt mich die Frage wie ich den Postgres Server sicher bekomme.

Meine bisherigen Sicherheitseinstellungen sind:

  • Zugriff nur von bestimmten IP’s erlauben
  • User posgres nur local erlauben
  • Für jede Datenbank einen eigenen User
  • Für jeden Account ein Passwort festlegen; Mindestens 16 Zeichen z.B: akJd§1?ß94Kdjd!
  • Standardport von 5432 auf einen beliebigen anderen Port legen

Aber was noch? Ich finde auch bedänklich das man quasi auf dem Postgres Port überhaupt nen Response bekommt und somit weiß auf dem Port die DB läuft…

Falls einer noch ein paar mehr Tips hat, wäre ich sehr dankbar!

Gruß Markus

Ausschalten?

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.


Andreas

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.

CU Uwe

Nicht vom Standard Port antworten lassen, bezog sich auf Port-Knocking…

Hm… VPN ist ne gute Idee… Da muss ich mal schauen wie ich das am besten löse…

Ziel ist es einen Postgres Cluster mit 2 Knotenpunkten von 2-3 Webservern errechen zu lassen… und das möglichst sicher.

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 …