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.confmüssen Sie die Konfiguration neu laden, damit die Änderungen wirksam werden (z. B.pg_ctl reloadoder 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_addressesauf*gesetzt ist, werden alle Schnittstellen verwendet. Stellen Sie sicher, dasspg_hba.confstreng 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 (wieCREATE 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
pg_hba.confaktualisieren: Verwenden Siescram-sha-256oderpeerfür die Authentifizierungsmethoden.- Verschlüsselung erzwingen: Setzen Sie
ssl = oninpostgresql.confund verwenden Siehostssl-Einträge inpg_hba.conf. - Abhören einschränken: Konfigurieren Sie
listen_addressesnur für notwendige Schnittstellen und vermeiden Sie nach Möglichkeit das Standard-*. - Prinzip der geringsten Rechte erzwingen: Beschränken Sie Datenbankrollen auf die absolut erforderlichen Berechtigungen für ihre Funktion.
- Konfiguration neu laden: Laden Sie PostgreSQL immer neu oder starten Sie es neu, nachdem Sie Sicherheitsdateien geändert haben, um die Änderungen anzuwenden.