PostgreSQL Hardening: Rollen, pg_hba.conf und TLS

PostgreSQL ist eine leistungsstarke relationale Datenbank, die sich durch Stabilität und umfangreiche Sicherheitsfeatures auszeichnet. Ein korrekt gehärtetes PostgreSQL-System reduziert das Risiko von unbefugtem Zugriff, Datenverlust oder Manipulation. In diesem Leitfaden erfahren Einsteiger, IT-Studierende und Junior Network Engineers, wie Rollen, pg_hba.conf und TLS-Konfiguration genutzt werden, um PostgreSQL sicher zu betreiben.

PostgreSQL Installation und erster Zugriff

PostgreSQL lässt sich über die Paketmanager der gängigen Linux-Distributionen installieren. Nach der Installation sollte der Zugriff abgesichert werden.

# Ubuntu/Debian
sudo apt update
sudo apt install postgresql postgresql-contrib

# CentOS/RHEL
sudo yum install postgresql-server postgresql-contrib

# Dienst starten und aktivieren
sudo systemctl start postgresql
sudo systemctl enable postgresql

# PostgreSQL-CLI als Benutzer postgres
sudo -i -u postgres
psql

Rollen und Benutzerverwaltung

PostgreSQL nutzt Rollen, die sowohl Benutzer als auch Gruppen darstellen. Jede Anwendung sollte einen eigenen, minimal privilegierten Benutzer erhalten.

Rollen anlegen

-- Rolle für Webanwendung
CREATE ROLE webapp LOGIN PASSWORD 'SicheresPasswort!';
GRANT CONNECT ON DATABASE webapp_db TO webapp;
GRANT USAGE ON SCHEMA public TO webapp;
GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO webapp;

Admin-Rollen und Superuser

Superuser-Rechte nur für administrative Aufgaben nutzen und nicht für Anwendungen.

CREATE ROLE admin LOGIN PASSWORD 'AdminPasswort!' SUPERUSER;

pg_hba.conf konfigurieren

Die Datei pg_hba.conf steuert den Zugriff auf die Datenbank und sollte restriktiv konfiguriert werden.

sudo nano /etc/postgresql/13/main/pg_hba.conf

Beispiele für sichere Einträge

  • Lokal nur ident oder peer: local all all peer
  • IPv4 von Webserver erlauben: host webapp_db webapp 192.168.250.0/24 md5
  • IPv6 von internem Subnetz: host webapp_db webapp 2001:db8:abcd:250::/64 scram-sha-256

Nach Änderungen PostgreSQL neu laden:

sudo systemctl reload postgresql

TLS/SSL für verschlüsselte Verbindungen

TLS schützt die Datenübertragung zwischen Client und Server. PostgreSQL kann Zertifikate für verschlüsselte Verbindungen nutzen.

# Beispiel: Zertifikate in /etc/ssl/postgresql/
ssl = on
ssl_cert_file = '/etc/ssl/postgresql/server.crt'
ssl_key_file = '/etc/ssl/postgresql/server.key'
ssl_ca_file = '/etc/ssl/postgresql/ca.crt'

Verbindung erzwingen

Nur verschlüsselte Verbindungen zulassen:

hostssl   webapp_db   webapp   192.168.250.0/24   scram-sha-256

Logging und Monitoring

Fehler und Zugriffe sollten protokolliert werden, um Probleme frühzeitig zu erkennen.

# PostgreSQL Logging aktivieren
sudo nano /etc/postgresql/13/main/postgresql.conf

logging_collector = on
log_directory = 'pg_log'
log_filename = 'postgresql-%Y-%m-%d.log'
log_statement = 'ddl'
log_connections = on
log_disconnections = on

Netzwerk- und Subnetzplanung

Für Multi-Server Setups ist eine saubere Subnetzplanung wichtig, insbesondere bei Replikation oder Remote-Zugriff.

IPv4 Subnetz

<math>
Server-IP = 192.168.250.10/24
Subnetzadresse = 192.168.250.10 & 255.255.255.0 = 192.168.250.0
Broadcastadresse = 192.168.250.0 | ~255.255.255.0 = 192.168.250.255
</math>

IPv6 Subnetz

<math>
Server-IP = 2001:db8:abcd:250::10/64
Subnetzadresse = 2001:db8:abcd:250:: & ffff:ffff:ffff:ffff:: = 2001:db8:abcd:250::0
Broadcastadresse = 2001:db8:abcd:250:ffff:ffff:ffff:ffff
</math>

Best Practices

  • Superuser nur für Administration nutzen, nicht für Anwendungen
  • Rollen mit minimalen Rechten pro Anwendung erstellen
  • pg_hba.conf restriktiv konfigurieren
  • TLS/SSL aktivieren und hostssl verwenden
  • Passwörter stark und regelmäßig ändern
  • Logging aktivieren für Verbindungen, Abfragen und Fehler
  • Subnetze und IPs für Remote-Zugriff sorgfältig planen
  • Regelmäßige Backups der Datenbanken erstellen
  • Updates für PostgreSQL und Betriebssystem zeitnah durchführen
  • Monitoring für Serverressourcen, Verbindungen und Performance einrichten

Konfiguriere Cisco Router & Switches und liefere ein Packet-Tracer-Lab/GNS3

Ich biete professionelle Unterstützung im Bereich Netzwerkkonfiguration und Network Automation für private Anforderungen, Studienprojekte, Lernlabore, kleine Unternehmen sowie technische Projekte. Ich unterstütze Sie bei der Konfiguration von Routern und Switches, der Erstellung praxisnaher Topologien in Cisco Packet Tracer, dem Aufbau und Troubleshooting von GNS3- und EVE-NG-Labs sowie bei der Automatisierung von Netzwerkaufgaben mit Netmiko, Paramiko, NAPALM und Ansible. Kontaktieren Sie mich jetzt – klicken Sie hier.

Meine Leistungen umfassen:

  • Professionelle Konfiguration von Routern und Switches

  • Einrichtung von VLANs, Trunks, Routing, DHCP, NAT, ACLs und weiteren Netzwerkfunktionen

  • Erstellung von Topologien und Simulationen in Cisco Packet Tracer

  • Aufbau, Analyse und Fehlerbehebung von Netzwerk-Labs in GNS3 und EVE-NG

  • Automatisierung von Netzwerkkonfigurationen mit Python, Netmiko, Paramiko, NAPALM und Ansible

  • Erstellung von Skripten für wiederkehrende Netzwerkaufgaben

  • Dokumentation der Konfigurationen und Bereitstellung nachvollziehbarer Lösungswege

  • Konfigurations-Backups, Optimierung bestehender Setups und technisches Troubleshooting

Benötigen Sie Unterstützung bei Ihrem Netzwerkprojekt, Ihrer Simulation oder Ihrer Network-Automation-Lösung? Kontaktieren Sie mich jetzt – klicken Sie hier.

Related Articles