Redis-Installationen absichern: Essentielle Konfigurationstipps

Sichern Sie Redis mit Netzwerkbindung, geschütztem Modus, ACLs oder Passwörtern, sichererem Befehlszugriff, Firewall-Regeln, minimalen Berechtigungen und TLS.

So sichern Sie Redis-Installationen: Wichtige Konfigurationstipps

Redis ist schnell, einfach und wird oft von Anwendungscode mit Sitzungsdaten, Warteschlangen, Zählern und zwischengespeicherten Datensätzen verwendet. Das macht die Sicherheit von Redis wichtig: Eine exponierte Instanz kann es einem Angreifer ermöglichen, Daten zu lesen, Schlüssel mit FLUSHALL zu löschen oder administrative Befehle zu missbrauchen.

Ihr Ziel ist es, Redis nur von den Systemen aus erreichbar zu machen, die es benötigen, eine Authentifizierung zu verlangen, den Zugriff auf gefährliche Befehle einzuschränken und die Dateien zu schützen, die Konfiguration und persistierte Daten enthalten.


1. Netzwerkkonfiguration: Begrenzung der Exposition

Die unmittelbarste Sicherheitsmaßnahme ist die Kontrolle, auf welchen Netzwerkschnittstellen Redis lauscht. Viele paketierte Redis-Installationen binden standardmäßig an localhost, aber Container-Images, benutzerdefinierte Konfigurationsdateien und ältere Bereitstellungen können abweichen. Überprüfen Sie immer Ihre aktive redis.conf, anstatt anzunehmen, dass die Standardeinstellung sicher ist.

Binden an bestimmte Schnittstellen (bind)

Sie müssen Redis so konfigurieren, dass es nur auf den erforderlichen Schnittstellen lauscht. In den meisten Produktionsumgebungen bedeutet dies, nur an die Loopback-Adresse oder eine bestimmte private IP-Adresse zu binden, die von Anwendungsservern verwendet wird.

Nur interner oder lokaler Zugriff

Wenn sich Ihr Anwendungsserver auf demselben Host wie Redis befindet, binden Sie ausschließlich an die Loopback-Adresse.

# redis.conf Konfigurationsausschnitt
bind 127.0.0.1

Netzwerk-Privater Zugriff

Wenn sich Ihre Anwendungsserver in einem privaten Netzwerksegment befinden und Netzwerkzugriff benötigen, binden Sie an diese spezifische private IP-Adresse. Binden Sie Redis nicht an eine öffentliche, internetzugängliche IP. Wenn Sie Fernzugriff benötigen, platzieren Sie es in einem privaten Netzwerk und schränken Sie den Datenverkehr mit Firewall-Regeln oder Sicherheitsgruppen ein.

# Listen Sie die spezifischen internen IP-Adressen auf, die auf Redis zugreifen sollen
bind 192.168.1.100 10.0.0.5

Den geschützten Modus verstehen

Seit Redis 3.2 ist der geschützte Modus in Standard-Redis-Builds standardmäßig aktiviert. Er hilft, externen Zugriff zu blockieren, wenn Redis nicht explizit für Remote-Clients konfiguriert ist. Behandeln Sie ihn als Sicherheitsnetz, nicht als Ihre Hauptkontrolle. Verwenden Sie Bindungseinschränkungen, Authentifizierung und Firewall-Regeln.

Wenn Sie ihn für eine bestimmte Konfiguration deaktivieren müssen, können Sie Folgendes verwenden:

protected-mode no

Warnung: Deaktivieren Sie den protected-mode nur, wenn Sie bind, Authentifizierung und Netzwerkfilterung korrekt konfiguriert haben.

2. Authentifizierung und Zugriffskontrolle

Sobald der Netzwerkzugriff eingeschränkt ist, ist die nächste Verteidigungsebene die Authentifizierung. Clients sollten nur dann mit Redis interagieren können, wenn sie ein gültiges Passwort angeben oder vorzugsweise das moderne Access Control List (ACL)-System verwenden.

Implementierung von Passwortschutz (requirepass)

Verwenden Sie die requirepass-Direktive in Ihrer redis.conf-Datei, um die Client-Authentifizierung zu erzwingen. Dies fungiert als globales gemeinsames Geheimnis für grundlegende Sicherheit.

# Setzen Sie ein starkes, eindeutiges Passwort
requirepass T4h!S_Is_V3ry_S3cure_P@ss

Um eine Verbindung mit einem Passwort herzustellen, müssen Clients den Befehl AUTH verwenden:

# Beispiel mit redis-cli
$ redis-cli
127.0.0.1:6379> AUTH T4h!S_Is_V3ry_S3cure_P@ss
OK
127.0.0.1:6379> PING
PONG

Erweiterte Sicherheit: Redis Access Control Lists (ACLs)

Für Produktionsumgebungen mit Redis 6.0 und höher sind ACLs die bevorzugte Authentifizierungsmethode. ACLs ermöglichen es Ihnen, mehrere Benutzer mit spezifischen Passwörtern und granularen Berechtigungen zu definieren (z. B. Benutzer A kann nur lesen, Benutzer B kann in bestimmte Keyspaces schreiben).

Die ACL-Konfiguration umfasst typischerweise die Definition von Benutzern und deren Regeln in redis.conf oder einer separaten ACL-Datei:

# Beispiel-ACL-Benutzerdefinitionen in redis.conf oder einer aclfile
user default off
user app_reader on >app_read_P@ss ~cache:* +get +scan
user app_writer on >app_write_P@ss ~data:* +set +del

Umbenennen oder Deaktivieren gefährlicher Befehle

Bestimmte administrative Befehle (wie FLUSHALL, CONFIG, KEYS und SHUTDOWN) können bei Missbrauch Betriebsstörungen verursachen oder sensible Konfigurationsdetails preisgeben. Es ist eine bewährte Praxis, diese Befehle entweder in obskure Namen umzubenennen oder sie vollständig zu deaktivieren.

Um einen Befehl umzubenennen, verwenden Sie rename-command:

# CONFIG-Befehl umbenennen, um unbefugte Änderungen zu verhindern
rename-command CONFIG HIDE_MY_CONFIG

# FLUSHALL vollständig deaktivieren
rename-command FLUSHALL ""

3. Betriebssicherheit – Best Practices

Über die interne Redis-Konfiguration hinaus ist die Anwendung robuster externer betrieblicher Sicherheitsmaßnahmen für eine vollständige Sicherheitslage entscheidend.

Strenge Firewall-Regeln durchsetzen

Unabhängig von der Einstellung der bind-Direktive erzwingen Sie immer die Netzwerkfilterung mit Cloud-Sicherheitsgruppen, iptables oder ähnlichen Firewall-Lösungen. Der Redis-Standardport (6379) sollte nur für die spezifischen IP-Adressen oder IP-Bereiche Ihrer vertrauenswürdigen Anwendungsserver geöffnet sein.

Beispiel-Firewall-Regel (Linux/iptables)

Erlauben Sie eingehenden Datenverkehr auf Port 6379 nur von einer bekannten Anwendungsserver-IP (192.168.1.50):

# Bestimmten Anwendungsserver erlauben
iptables -A INPUT -p tcp -s 192.168.1.50 --dport 6379 -j ACCEPT

# Anderen eingehenden Redis-Datenverkehr ablehnen
iptables -A INPUT -p tcp --dport 6379 -j DROP

Ausführung mit minimalen Berechtigungen

Führen Sie den Redis-Serverprozess niemals als Root-Benutzer aus. Wenn ein Angreifer den Redis-Prozess kompromittiert, gewährt ihm die Ausführung als Root die vollständige Kontrolle über das gesamte Betriebssystem.

Erstellen Sie einen dedizierten, nicht privilegierten Systembenutzer wie redis und konfigurieren Sie dann Ihren Dienstmanager, um den Redis-Prozess als diesen Benutzer auszuführen. Mit systemd wird dies normalerweise in der Unit-Datei mit Direktiven wie User=redis und Group=redis oder durch den paketierten Dienst, den Ihre Distribution bereitstellt, gehandhabt.

Sichern von Konfigurationsdateien und Persistenz

Die Datei redis.conf enthält sensible Informationen wie das requirepass-Passwort und Netzwerkeinstellungen. Stellen Sie sicher, dass diese Datei zusammen mit Persistenzdateien (RDB-Snapshots und AOF-Protokolle) durch restriktive Dateiberechtigungen geschützt ist, um unbefugtes Lesen oder Ändern durch andere Systembenutzer zu verhindern.

# Beispiel empfohlener Berechtigungen
# Nur der 'redis'-Benutzer und root sollten lesen/schreiben können
chown redis:redis /etc/redis/redis.conf
chmod 600 /etc/redis/redis.conf

Implementierung von SSL/TLS-Verschlüsselung

Für Umgebungen, in denen Redis-Datenverkehr ein nicht vertrauenswürdiges Netzwerksegment durchquert (auch intern), implementieren Sie SSL/TLS-Verschlüsselung. Während Redis historisch keine native TLS-Unterstützung hatte, unterstützen moderne Versionen (beginnend mit Redis 6) diese vollständig. Die Konfiguration von TLS erfordert die Generierung von Zertifikaten und das Setzen relevanter Direktiven in redis.conf:

# TLS-Listener aktivieren
tls-port 6379
port 0
tls-auth-clients yes
tls-cert-file /etc/redis/tls/redis.crt
tls-key-file /etc/redis/tls/redis.key
tls-ca-cert-file /etc/redis/tls/ca.crt

port 0 deaktiviert den Klartext-Listener. Behalten Sie einen Klartext-Port nur bei, wenn sich jeder Client, der ihn verwendet, auf einem vertrauenswürdigen lokalen Pfad befindet und Sie einen klaren Grund dafür haben.

Zusammenfassung der wesentlichen Sicherheitsschritte

Die Sicherung einer Redis-Installation ist eine mehrschichtige Aufgabe. Beginnen Sie mit der Exposition, dann mit der Authentifizierung und dann mit den betrieblichen Kontrollen:

  1. Netzwerkzugriff einschränken: Verwenden Sie bind 127.0.0.1 oder bestimmte private IPs.
  2. Authentifizierung erzwingen: Verwenden Sie requirepass (einfach) oder ACLs (fortgeschritten).
  3. Befehle härten: Deaktivieren oder benennen Sie gefährliche administrative Befehle um (FLUSHALL, CONFIG).
  4. Firewalls verwenden: Erlauben Sie nur Datenverkehr auf Port 6379 von vertrauenswürdigen Anwendungsservern.
  5. Minimale Berechtigungen: Führen Sie den Redis-Prozess als nicht privilegierten, dedizierten Benutzer aus.
  6. Datenverkehr verschlüsseln: Aktivieren Sie SSL/TLS für Netzwerkverbindungen, wo angemessen.