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