Wichtige Konfigurationseinstellungen zur Sicherung Ihrer PostgreSQL-Datenbank

Diese Anleitung beschreibt wichtige Konfigurationseinstellungen zur Härtung der PostgreSQL-Sicherheit. Erfahren Sie, wie Sie die moderne Authentifizierung mit `pg_hba.conf` (SCRAM-SHA-256) erzwingen, obligatorische SSL/TLS-Verschlüsselung implementieren und die Angriffsfläche durch Einschränkung von Netzwerk-Listenern minimieren. Wesentlich für Produktionsstabilität und Compliance.

38 Aufrufe

Essentielle Konfigurationseinstellungen zur Absicherung Ihrer PostgreSQL-Datenbank

Die Absicherung einer PostgreSQL-Datenbank ist von größter Bedeutung, um sensible Daten zu schützen und die Einhaltung von Vorschriften zu gewährleisten. Als fortschrittliche Open-Source-Relationale-Datenbank bietet PostgreSQL robuste Konfigurationsmechanismen zur Zugriffskontrolle, zur Verschlüsselung der Kommunikation und zur Minimierung potenzieller Schwachstellen. Dieser Leitfaden befasst sich mit den kritischen Konfigurationsdateien und Parametern, die für die Etablierung einer gehärteten Sicherheitslage für Produktionsumgebungen erforderlich sind.

Effektive PostgreSQL-Sicherheit basiert auf zwei Hauptpfeilern: der Kontrolle, wer sich verbinden darf und wie sie sich verbinden. Wir werden wichtige Einstellungen in postgresql.conf und die entscheidende Datei für die Client-Authentifizierung, pg_hba.conf, untersuchen und die Implementierung obligatorischer Verschlüsselung mittels SSL/TLS erläutern.

1. Absicherung der Client-Authentifizierung mit pg_hba.conf

Die Host-basierte Authentifizierungsdatei (pg_hba.conf) legt fest, welche Hosts eine Verbindung herstellen können, als welche PostgreSQL-Benutzer sie sich verbinden können, auf welche Datenbanken sie zugreifen können und – am wichtigsten – welche Authentifizierungsmethode für diese Verbindung erforderlich ist.

Verständnis der pg_hba.conf-Struktur

Jede Zeile in pg_hba.conf folgt einem bestimmten Format:

TYP DATENBANK BENUTZER ADRESSE METHODE [OPTIONEN]

  • TYP: Verbindungstyp (z. B. local, host, hostnossl, hostssl).
  • DATENBANK: Name(n) der Zieldatenbank.
  • BENUTZER: Rolle(n) des Zieldatenbankbenutzers.
  • ADRESSE: IP-Adressbereich des Clients.
  • METHODE: Authentifizierungsmechanismus (z. B. scram-sha-256, md5, reject, trust).

Best Practices für Authentifizierungsmethoden

Verwenden Sie niemals die Methode trust in der Produktion, da sie es jedem, der die Verbindungskriterien erfüllt, ermöglicht, sich ohne Passwort zu verbinden. Die empfohlenen modernen Authentifizierungsmethoden sind:

Empfohlen: scram-sha-256

SCRAM (Salted Challenge Response Authentication Mechanism) bietet erhebliche Verbesserungen gegenüber älteren Passwortmethoden wie md5, indem es stärkere Hashing-Algorithmen verwendet und Replay-Angriffe verhindert. Dies sollte Ihre Standardwahl für Remote-Verbindungen sein.

# Erzwinge SCRAM für alle Remote-Verbindungen auf Port 5432
host    all     all     0.0.0.0/0       scram-sha-256

Lokale Verbindungen

Für Verbindungen, die vom Server selbst stammen (z. B. Anwendungen, die auf demselben Rechner laufen), verwenden Sie lokale Sockets. Die sicherste Einstellung ist oft peer (für Unix-Domain-Sockets) oder scram-sha-256, wenn Sockets deaktiviert oder eingeschränkt sind.

# Verwende Peer-Authentifizierung für lokale Verbindungen über Unix-Sockets
local   all     all             peer

Explizites Ablehnen von Verbindungen

Verwenden Sie die Methode reject, um Verbindungen von gefährlichen oder nicht vertrauenswürdigen Netzwerken explizit zu blockieren.

# Blockiere alle Verbindungen aus einem bekannten unsicheren IP-Bereich
host    all     all     192.168.1.0/24  reject

Praktischer Tipp: Nach der Änderung von pg_hba.conf müssen Sie die Konfiguration neu laden, damit die Änderungen wirksam werden (z. B. pg_ctl reload oder Senden eines SIGHUP-Signals an den Postmaster-Prozess).

2. Implementierung von SSL/TLS-Verschlüsselung

Um das Abfangen sensibler Daten (einschließlich Passwörtern) über das Netzwerk zu verhindern, ist die Erzwingung der SSL/TLS-Verschlüsselung für alle Remote-Verbindungen obligatorisch.

Konfiguration in postgresql.conf

Stellen Sie sicher, dass die folgenden Parameter in Ihrer Hauptkonfigurationsdatei korrekt eingestellt sind:

  • ssl = on: Aktiviert die SSL-Unterstützung global.
  • ssl_cert_file: Pfad zur Serverzertifikatsdatei (z. B. server.crt).
  • ssl_key_file: Pfad zur privaten Schlüsseldatei des Servers (z. B. server.key).

Erzwingen von SSL in pg_hba.conf

Um Clients zur Verwendung von SSL zu zwingen, ändern Sie den Verbindungstyp in pg_hba.conf von host auf hostssl:

# Erlaube nur Verbindungen über SSL/TLS
hostssl all     all     0.0.0.0/0       scram-sha-256

Wenn Sie Legacy-Clients haben, die SSL nicht unterstützen können, können Sie explizit Nicht-SSL-Verbindungen zulassen, sie aber auf nicht sensible Operationen beschränken. Eine pauschale Ablehnung wird jedoch bevorzugt.

3. Minimierung der Angriffsfläche

Sicherheit bedeutet, die Exposition des Datenbankservers gegenüber externen Bedrohungen zu reduzieren. Dies wird hauptsächlich durch Netzwerkkonfiguration und das Deaktivieren unnötiger Funktionen gesteuert.

Begrenzung der Netzwerk-Listenadresse

Standardmäßig kann PostgreSQL auf allen Netzwerkschnittstellen lauschen (listen_addresses = '*'). Zur Erhöhung der Sicherheit konfigurieren Sie es explizit so, dass es nur auf den spezifischen Schnittstellen lauscht, die externen Zugriff benötigen, oder auf localhost, wenn nur lokale Anwendungen eine Verbindung herstellen.

In postgresql.conf:

# Lausche nur auf localhost (127.0.0.1), wenn möglich
listen_addresses = 'localhost'

# ODER, lausche nur auf einer spezifischen privaten Netzwerkschnittstelle
# listen_addresses = '192.168.1.10'

Sicherheitshinweis: Wenn listen_addresses auf * gesetzt ist, werden alle Schnittstellen verwendet. Stellen Sie sicher, dass pg_hba.conf streng kontrolliert, welche IP-Bereiche eine Verbindung herstellen können.

Deaktivieren unnötiger Erweiterungen und Funktionen

Jede aktivierte Erweiterung birgt potenzielle Komplexität und Angriffsvektoren. Überprüfen Sie regelmäßig installierte Erweiterungen und entfernen Sie alle, die für Ihre Produktionslast nicht aktiv genutzt werden. Dies minimiert die gesamte Angriffsfläche.

Passwortsicherheit und Rollen

Stellen Sie sicher, dass alle administrativen Rollen (wie der Standardbenutzer postgres) starke, komplexe Passwörter haben, die mit ALTER USER gesetzt werden:

ALTER USER postgres WITH PASSWORD 'YourStrongAndComplexPassword123!';

Wenden Sie das Prinzip der geringsten Rechte an: Anwendungsbenutzer sollten nur SELECT, INSERT, UPDATE und DELETE-Berechtigungen für die spezifischen Tabellen haben, die sie benötigen, und keinen Superuser-Status.

4. Überwachungs- und Protokollierungskonfiguration

Obwohl keine strikte Zugriffskontrollmaßnahme, ist eine robuste Protokollierung entscheidend für die Erkennung und Untersuchung von Sicherheitsvorfällen. Konfigurieren Sie die Protokollierungsparameter in postgresql.conf, um relevante Ereignisse zu erfassen.

Wichtige Einstellungen für die Sicherheitsüberwachung:

  • log_statement = 'ddl' oder 'all': Protokolliert alle Data Definition Language (DDL)-Befehle (wie CREATE TABLE, ALTER USER). Setzen Sie dies während Sicherheitsüberprüfungen vorübergehend auf 'all', beachten Sie aber die Leistungsauswirkungen.
  • log_connections = on: Protokolliert jeden erfolgreichen Verbindungsversuch.
  • log_disconnections = on: Protokolliert, wenn Clients die Verbindung trennen.
  • log_duration = on: Protokolliert die Ausführungszeit aller Anweisungen, was manchmal ungewöhnliche Aktivitätsmuster aufdecken kann.

Durch die Kombination strenger Zugriffsregeln in pg_hba.conf, erzwungener Verschlüsselung über SSL, einer eingeschränkten Abhöradresse und umfassender Protokollierung legen Sie eine solide Grundlage für die Absicherung Ihrer PostgreSQL-Bereitstellung.

Zusammenfassung der wichtigsten Sicherheitsschritte

  1. pg_hba.conf aktualisieren: Verwenden Sie scram-sha-256 oder peer für die Authentifizierungsmethoden.
  2. Verschlüsselung erzwingen: Setzen Sie ssl = on in postgresql.conf und verwenden Sie hostssl-Einträge in pg_hba.conf.
  3. Abhören einschränken: Konfigurieren Sie listen_addresses nur für notwendige Schnittstellen und vermeiden Sie nach Möglichkeit das Standard-*.
  4. Prinzip der geringsten Rechte erzwingen: Beschränken Sie Datenbankrollen auf die absolut erforderlichen Berechtigungen für ihre Funktion.
  5. Konfiguration neu laden: Laden Sie PostgreSQL immer neu oder starten Sie es neu, nachdem Sie Sicherheitsdateien geändert haben, um die Änderungen anzuwenden.