Wie man Redis auf Rocky Linux 8 installiert und sichert

Einführung

Redis ist ein Open-Source, In-Memory-Key-Value-Datenspeicher, der sich besonders gut für das Zwischenspeichern eignet. Redis ist eine nicht-relationale Datenbank, die für ihre Flexibilität, Leistungsfähigkeit, Skalierbarkeit und breite Unterstützung von verschiedenen Programmiersprachen bekannt ist.

Redis wurde für die Verwendung durch vertrauenswürdige Clients in einer vertrauenswürdigen Umgebung entwickelt und verfügt über keine robusten Sicherheitsfunktionen. Redis verfügt jedoch über einige Sicherheitsfunktionen wie Passwortauthentifizierung und die Möglichkeit, einige Befehle umzubenennen oder zu deaktivieren. Dieses Tutorial bietet Anleitungen zur Installation von Redis und zur Konfiguration dieser Sicherheitsfunktionen. Es behandelt auch einige andere Einstellungen, die die Sicherheit einer eigenständigen Redis-Installation unter Rocky Linux 8 verbessern können.

Beachten Sie, dass dieser Leitfaden keine Situationen behandelt, in denen der Redis-Server und die Client-Anwendungen auf verschiedenen Hosts oder in verschiedenen Rechenzentren liegen. Installationen, bei denen der Redis-Datenverkehr ein unsicheres oder nicht vertrauenswürdiges Netzwerk durchqueren muss, erfordern einen anderen Satz von Konfigurationen, wie z.B. die Einrichtung eines SSL-Proxys oder eines VPNs zwischen den Redis-Maschinen.

Sie können auch den Managed Redis Service von DigitalOcean verwenden.

Voraussetzungen

Um dieses Tutorial abzuschließen, benötigen Sie einen Server mit Rocky Linux 8. Dieser Server sollte einen Nicht-Root-Benutzer mit Administratorrechten und eine Firewall konfiguriert mit firewalld haben. Um dies einzurichten, folgen Sie unserer Anleitung zur initialen Servereinrichtung für Rocky Linux 8.

Schritt 1 – Redis installieren und starten

Sie können Redis mit dem DNF-Paketmanager installieren. Mit DNF können Sie Redis, seine Abhängigkeiten und nano, einen benutzerfreundlichen Texteditor, installieren. Sie müssen nano nicht installieren, aber wir werden es in den Beispielen in diesem Handbuch verwenden:

  1. sudo dnf install redis nano

Mit diesem Befehl werden Sie aufgefordert zu bestätigen, dass Sie die ausgewählten Pakete installieren möchten. Drücken Sie y und dann ENTER, um dies zu tun:

Output
. . . Total download size: 1.5 M Installed size: 5.4 M Is this ok [y/N]: y

Danach gibt es eine wichtige Konfigurationsänderung in der Redis-Konfigurationsdatei, die während der Installation automatisch generiert wurde.

Öffnen Sie diese Datei mit Ihrem bevorzugten Texteditor. Hier verwenden wir nano:

  1. sudo nano /etc/redis.conf

Innerhalb der Datei finden Sie die supervised-Anweisung. Diese Anweisung ermöglicht es Ihnen, ein Init-System zu deklarieren, um Redis als Dienst zu verwalten und Ihnen mehr Kontrolle über seinen Betrieb zu geben. Die supervised-Anweisung ist standardmäßig auf no gesetzt. Da Sie Rocky Linux verwenden, das das systemd-Init-System verwendet, ändern Sie dies auf systemd:

/etc/redis.conf
. . .

# Wenn Sie Redis von upstart oder systemd ausführen, kann Redis mit Ihrem
# Überwachungsbaum interagieren. Optionen:
#   supervised no      - keine Überwachungsinteraktion
#   supervised upstart - signalisieren Sie upstart, indem Sie Redis in den SIGSTOP-Modus versetzen
#   supervised systemd - signalisieren Sie systemd, indem Sie READY=1 an $NOTIFY_SOCKET schreiben
#   supervised auto    - Erkennen der Methode von upstart oder systemd basierend auf
#                        UPSTART_JOB oder NOTIFY_SOCKET Umgebungsvariablen
# Hinweis: Diese Überwachungsmethoden signalisieren nur "Prozess ist bereit."
#       Sie aktivieren keine kontinuierlichen Lebenszeichen-Pings zurück an Ihren Überwacher.
supervised systemd

. . .

Das ist die einzige Änderung, die Sie an der Redis-Konfigurationsdatei vornehmen müssen, also speichern und schließen Sie sie, wenn Sie fertig sind. Wenn Sie nano verwendet haben, um die Datei zu bearbeiten, speichern und beenden Sie mit CTRL + X, dann wenn Sie dazu aufgefordert werden, Y und dann Enter.

Nachdem Sie die Datei bearbeitet haben, starten Sie den Redis-Dienst:

  1. sudo systemctl start redis.service

Wenn Sie möchten, dass Redis beim Booten startet, können Sie es mit dem Befehl enable aktivieren:

  1. sudo systemctl enable redis

Beachten Sie, dass dieser Befehl nicht den .service-Suffix nach dem Einheitsdateinamen enthält. Sie können diesen Suffix normalerweise von systemctl-Befehlen weglassen, da er automatisch aus den Dienstnamen analysiert werden kann.

Sie können den Status von Redis überprüfen, indem Sie Folgendes ausführen:

  1. sudo systemctl status redis
Output
● redis.service - Redis persistent key-value database Loaded: loaded (/usr/lib/systemd/system/redis.service; enabled; vendor preset: disabled) Drop-In: /etc/systemd/system/redis.service.d └─limit.conf Active: active (running) since Tue 2022-09-06 22:11:52 UTC; 40s ago Main PID: 14478 (redis-server) Tasks: 4 (limit: 11152) Memory: 6.6M CGroup: /system.slice/redis.service └─14478 /usr/bin/redis-server 127.0.0.1:6379

Nachdem Sie bestätigt haben, dass Redis tatsächlich läuft, können Sie seine Funktionalität mit diesem Befehl testen:

  1. redis-cli ping

Dies sollte PONG als Antwort drucken:

Output
PONG

Wenn dies der Fall ist, bedeutet dies, dass Redis jetzt auf Ihrem Server läuft und Sie damit beginnen können, es zu konfigurieren, um seine Sicherheit zu verbessern.

Schritt 2 — Konfigurieren von Redis und Absichern mit einer Firewall

Eine effektive Möglichkeit, Redis zu schützen, besteht darin, den Server, auf dem es läuft, abzusichern. Sie können dies erreichen, indem Sie sicherstellen, dass Redis nur an localhost oder an eine private IP-Adresse gebunden ist und dass der Server eine funktionierende Firewall hat.

Wenn Sie Redis jedoch gemäß einer anderen Anleitung eingerichtet haben, haben Sie möglicherweise die Konfigurationsdatei aktualisiert, um Verbindungen von überall zuzulassen. Dies ist nicht so sicher wie die Bindung an localhost oder eine private IP-Adresse.

Um dies zu beheben, öffnen Sie erneut die Redis-Konfigurationsdatei mit Ihrem bevorzugten Texteditor:

  1. sudo nano /etc/redis.conf

Suche die Zeile, die mit bind beginnt, und stelle sicher, dass sie nicht auskommentiert oder deaktiviert ist, indem du das #-Zeichen am Anfang der Zeile entfernst, falls erforderlich:

/etc/redis.conf
. . .
bind 127.0.0.1

Wenn du Redis an eine andere IP-Adresse binden musst (zum Beispiel, wenn du von einem separaten Host auf Redis zugreifen wirst), solltest du ernsthaft in Betracht ziehen, es an eine private IP-Adresse zu binden. Das Binden an eine öffentliche IP-Adresse erhöht die Exposition deiner Redis-Schnittstelle gegenüber externen Parteien:

/etc/redis.conf
. . .
bind your_private_ip

Nach Bestätigung, dass die bind-Anweisung nicht auskommentiert ist, kannst du die Datei speichern und schließen.

Wenn du dem Voraussetzungen des Initial Server Setup-Tutorials gefolgt bist und firewalld auf deinem Server installiert hast und nicht vorhast, dich von einem anderen Host mit Redis zu verbinden, musst du keine zusätzlichen Firewall-Regeln für Redis hinzufügen. Denn jeglicher eingehender Datenverkehr wird standardmäßig abgelehnt, es sei denn, er wird explizit durch die Firewall-Regeln zugelassen. Da eine standardmäßige eigenständige Installation des Redis-Servers nur auf der Loopback-Schnittstelle (127.0.0.1 oder localhost) hört, besteht keine Gefahr für eingehenden Datenverkehr auf seinem Standardport.

Wenn du jedoch planst, auf Redis von einem anderen Host zuzugreifen, musst du einige Änderungen an deiner firewalld-Konfiguration vornehmen, indem du den firewall-cmd-Befehl verwendest. Auch hier solltest du nur den Zugriff auf deinen Redis-Server von deinen Hosts erlauben, indem du deren private IP-Adressen verwendest, um die Anzahl der Hosts zu begrenzen, die deinem Dienst ausgesetzt sind.

Um zu beginnen, füge eine dedizierte Redis-Zone zur Richtlinie deiner firewalld hinzu:

  1. sudo firewall-cmd --permanent --new-zone=redis

Dann geben Sie an, welchen Port Sie geöffnet haben möchten. Redis verwendet standardmäßig Port 6379:

  1. sudo firewall-cmd --permanent --zone=redis --add-port=6379/tcp

Als nächstes geben Sie alle privaten IP-Adressen an, die durch die Firewall zugelassen werden sollen und auf Redis zugreifen können:

  1. sudo firewall-cmd --permanent --zone=redis --add-source=client_server_private_IP

Nach Ausführung dieser Befehle laden Sie die Firewall neu, um die neuen Regeln zu implementieren:

  1. sudo firewall-cmd --reload

Unter dieser Konfiguration wendet die Firewall, wenn sie ein Paket von der IP-Adresse Ihres Clients empfängt, die Regeln in der dedizierten Redis-Zone auf diese Verbindung an. Alle anderen Verbindungen werden von der Standardzone public verarbeitet. Die Dienste in der Standardzone gelten für jede Verbindung, nicht nur für diejenigen, die nicht explizit übereinstimmen. Daher müssen Sie keine anderen Dienste (z. B. SSH) zur Redis-Zone hinzufügen, da diese Regeln automatisch auf diese Verbindung angewendet werden.

Beachten Sie, dass jede Firewall-Tool funktioniert, ob Sie firewalld, ufw oder iptables verwenden. Wichtig ist, dass die Firewall aktiviert und ausgeführt ist, damit unbekannte Personen nicht auf Ihren Server zugreifen können. Im nächsten Schritt konfigurieren Sie Redis so, dass es nur mit einem starken Passwort zugänglich ist.

Schritt 3 — Konfigurieren eines Redis-Passworts

Die Konfiguration eines Redis-Passworts aktiviert eine seiner integrierten Sicherheitsfunktionen – den Befehl auth – der von Clients eine Authentifizierung erfordert, bevor der Zugriff auf die Datenbank ermöglicht wird. Ähnlich wie bei der bind-Einstellung wird das Passwort direkt in der Konfigurationsdatei von Redis, /etc/redis.conf, konfiguriert. Öffnen Sie diese Datei:

  1. sudo nano /etc/redis.conf

Blättern Sie zum Abschnitt SECURITY und suchen Sie nach einer auskommentierten Anweisung, die folgendermaßen lautet:

/etc/redis.conf
. . .
# requirepass foobared

Entkommentieren Sie sie, indem Sie das # entfernen, und ändern Sie foobared in ein sehr sicheres Passwort Ihrer Wahl.

Hinweis: Anstelle selbst ein Passwort zu erstellen, können Sie ein Tool wie apg oder pwgen verwenden, um eines zu generieren. Wenn Sie jedoch keine Anwendung installieren möchten, um ein Passwort zu generieren, können Sie den folgenden Befehl verwenden. Dieser Befehl gibt einen Zeichenfolgenwert aus und leitet ihn in den folgenden sha256sum-Befehl, der die SHA256-Prüfsumme der Zeichenfolge anzeigt.

Beachten Sie, dass das Eingeben dieses Befehls wie geschrieben jedes Mal dasselbe Passwort generieren wird. Um ein eindeutiges Passwort zu erstellen, ändern Sie die Zeichenfolge in Anführungszeichen zu einem anderen Wort oder Ausdruck:

  1. echo "digital-ocean" | sha256sum

Auch wenn das generierte Passwort nicht leicht merkbar ist, wird es sehr sicher und lang sein, was genau dem Typ Passwort entspricht, der für Redis erforderlich ist. Nachdem Sie die Ausgabe dieses Befehls kopiert und als neuen Wert für requirepass eingefügt haben, sollte es so aussehen:

/etc/redis.conf
. . .
requirepass password_copied_from_output

Alternativ können Sie, wenn Sie ein kürzeres Passwort bevorzugen, die Ausgabe einer anderen Prüfsumme verwenden. Ändern Sie auch hier das Wort in Anführungszeichen, um nicht dasselbe Passwort wie bei diesem Befehl zu generieren:

  1. echo "digital-ocean" | sha1sum

Nachdem Sie das Passwort festgelegt haben, speichern Sie die Datei und schließen Sie sie, dann starten Sie Redis neu:

  1. sudo systemctl restart redis

Um zu überprüfen, ob das Passwort funktioniert, öffnen Sie den Redis-Client:

  1. redis-cli

Hier ist eine Sequenz von Befehlen, die verwendet werden, um zu testen, ob das Redis-Passwort funktioniert. Der erste Befehl versucht, einen Schlüssel auf einen Wert zu setzen, bevor er authentifiziert ist:

  1. set key1 10

Das wird nicht funktionieren, da Sie noch nicht authentifiziert sind, daher gibt Redis einen Fehler zurück:

Output
(error) NOAUTH Authentication required.

Der folgende Befehl authentifiziert sich mit dem im Redis-Konfigurationsdatei angegebenen Passwort:

  1. auth your_redis_password

Redis wird bestätigen, dass Sie authentifiziert wurden:

Output
OK

Nachdem Sie das ausgeführt haben, sollte der vorherige Befehl erfolgreich sein:

  1. set key1 10
Output
OK

Der Befehl get key1 fragt Redis nach dem Wert des neuen Schlüssels ab:

  1. get key1
Output
"10"

Dieser letzte Befehl beendet redis-cli. Sie können auch exit verwenden:

  1. quit

Es sollte jetzt sehr schwierig sein, dass nicht autorisierte Benutzer auf Ihre Redis-Installation zugreifen können. Beachten Sie, dass Sie, wenn Sie bereits den Redis-Befehlszeilenclient verwenden und Redis neu starten, sich erneut authentifizieren müssen. Beachten Sie auch, dass ohne SSL oder ein VPN, dieses Passwort immer noch von externen Parteien abgefangen werden kann, wenn Sie remote auf Redis zugreifen:

Als nächstes wird dieser Leitfaden die Umbenennung von Redis-Befehlen behandeln, um Redis weiter vor bösartigen Akteuren zu schützen:

Schritt 4 — Umbenennen von gefährlichen Befehlen

Eine weitere Sicherheitsfunktion, die in Redis integriert ist, ermöglicht es Ihnen, bestimmte Befehle umzubenennen oder vollständig zu deaktivieren, die als gefährlich angesehen werden. Wenn sie von nicht autorisierten Benutzern ausgeführt werden, können diese Befehle verwendet werden, um Ihre Daten umzukonfigurieren, zu zerstören oder anderweitig zu löschen. Einige der Befehle, die als gefährlich angesehen werden, sind:

  • FLUSHDB
  • FLUSHALL
  • KEYS
  • PEXPIRE
  • DEL
  • CONFIG
  • SHUTDOWN
  • BGREWRITEAOF
  • BGSAVE
  • SAVE
  • SPOP
  • SREM
  • RENAME
  • DEBUG

Das ist keine umfassende Liste, aber das Umbenennen oder Deaktivieren aller Befehle in dieser Liste kann die Sicherheit Ihres Datenspeichers verbessern. Ob Sie einen bestimmten Befehl deaktivieren oder umbenennen sollten, hängt von Ihren spezifischen Anforderungen ab. Wenn Sie wissen, dass Sie einen Befehl, der missbraucht werden kann, nie verwenden werden, können Sie ihn deaktivieren. Andernfalls sollten Sie ihn umbenennen.

Wie das Authentifizierungspasswort wird auch das Umbenennen oder Deaktivieren von Befehlen im Abschnitt SECURITY der Datei /etc/redis.conf konfiguriert. Um Redis-Befehle zu aktivieren oder zu deaktivieren, öffnen Sie die Konfigurationsdatei noch einmal zum Bearbeiten:

  1. sudo nano /etc/redis.conf

HINWEIS: Dies sind Beispiele. Sie sollten wählen, ob Sie die Befehle deaktivieren oder umbenennen möchten, die für Sie sinnvoll sind. Weitere Informationen zu Redis-Befehlen finden Sie unter redis.io/commands.

Um einen Befehl zu deaktivieren oder zu beenden, benennen Sie ihn um in einen leeren String, wie hier:

/etc/redis.conf
# Es ist auch möglich, einen Befehl vollständig zu beenden, indem Sie ihn in
# einen leeren String umbenennen:
#
rename-command FLUSHDB ""
rename-command FLUSHALL ""
rename-command DEBUG ""

Um einen Befehl umzubenennen, geben Sie ihm einen anderen Namen wie in den folgenden Beispielen. Umbenannte Befehle sollten für andere schwer zu erraten sein, aber für Sie leicht zu merken:

/etc/redis.conf
# Es ist auch möglich, einen Befehl vollständig zu beenden, indem Sie ihn in
# einen leeren String umbenennen:
#
rename-command FLUSHDB ""
rename-command FLUSHALL ""
rename-command DEBUG ""
rename-command SHUTDOWN SHUTDOWN_MENOT
rename-command CONFIG ASC12_CONFIG

Speichern Sie Ihre Änderungen und schließen Sie die Datei. Wenden Sie dann die Änderungen an, indem Sie Redis neu starten:

  1. sudo systemctl restart redis.service

Um Ihre neuen Befehle zu testen, geben Sie die Redis-Befehlszeile ein:

  1. redis-cli

Authentifizieren Sie sich mit dem Passwort, das Sie zuvor definiert haben:

  1. auth your_redis_password
Output
OK

Annehmen, dass Sie den CONFIG-Befehl in ASC12_CONFIG umbenannt haben, wird der Versuch, den config-Befehl zu verwenden, fehlschlagen:

  1. config get requirepass
Output
(error) ERR unknown command 'config'

Das Aufrufen des umbenannten Befehls wird hingegen erfolgreich sein. Beachten Sie, dass Redis-Befehle nicht auf Groß- und Kleinschreibung achten:

  1. asc12_config get requirepass
Output
1) "requirepass" 2) "your_redis_password"

Zum Schluss können Sie sich von redis-cli abmelden:

  1. exit

Warnung: In Bezug auf die Umbenennung von Befehlen gibt es eine Warnung am Ende des Abschnitts SECURITY in der Datei /etc/redis.conf, die lautet:

/etc/redis.conf
. . .

# Bitte beachten Sie, dass das Ändern des Namens von Befehlen, die in die AOF-Datei protokolliert oder an Repliken übertragen werden, Probleme verursachen kann.
# Dies bedeutet, dass es kein Problem geben sollte, wenn der umbenannte Befehl nicht in der AOF-Datei ist oder wenn er es ist, aber die AOF-Datei noch nicht an Repliken übertragen wurde. Denken Sie daran, dies zu beachten, wenn Sie Befehle umbenennen. Die beste Zeit, um einen Befehl umzubenennen, ist, wenn Sie die AOF-Persistenz nicht verwenden oder direkt nach der Installation (das heißt, bevor Ihre Redis-anwendende Anwendung bereitgestellt wurde).

. . .

Schritt 5 — Festlegen von Besitz und Dateiberechtigungen für das Datenverzeichnis

In diesem Schritt werden einige Änderungen an Besitz und Berechtigungen durchgeführt, die Sie möglicherweise vornehmen müssen, um das Sicherheitsprofil Ihrer Redis-Installation zu verbessern. Dies umfasst die Sicherstellung, dass nur der Benutzer, der auf Redis zugreifen muss, die Berechtigung zum Lesen seiner Daten hat. Dieser Benutzer ist standardmäßig der redis-Benutzer.

Sie können dies überprüfen, indem Sie nach dem Redis-Datenverzeichnis in einer langen Liste seines übergeordneten Verzeichnisses suchen. Der folgende Befehl und seine Ausgabe zeigen dies:

  1. ls -l /var/lib | grep redis
Output
drwxr-x---. 2 redis redis 22 Sep 6 22:22 redis

Diese Ausgabe zeigt, dass das Redis-Datenverzeichnis dem Benutzer redis gehört und sekundären Zugriff der Gruppe redis gewährt wird. Diese Eigentumseinstellung ist sicher, ebenso wie die Berechtigungen des Ordners, die mit Hilfe der Oktalschreibweise auf 750 gesetzt sind.

Wenn Ihr Redis-Datenverzeichnis unsichere Berechtigungen hat, können Sie sicherstellen, dass nur der Redis-Benutzer und die Gruppe Zugriff auf den Ordner und dessen Inhalt haben, indem Sie den chmod-Befehl ausführen. Das folgende Beispiel ändert die Berechtigungseinstellung dieses Ordners auf 770:

  1. sudo chmod 770 /var/lib/redis

Die andere Berechtigung, die Sie möglicherweise ändern müssen, betrifft die Redis-Konfigurationsdatei. Standardmäßig hat sie eine Dateiberechtigung von 640 und gehört dem Benutzer root, mit sekundärem Besitz durch die Gruppe root:

  1. ls -l /etc/redis.conf
Output
-rw-r-----. 1 redis root 62192 Sep 6 22:20 /etc/redis.conf

Diese Berechtigung (640) bedeutet, dass die Redis-Konfigurationsdatei nur vom Benutzer redis und der Gruppe root lesbar ist. Da die Konfigurationsdatei das unverschlüsselte Passwort enthält, das Sie in Schritt 4 konfiguriert haben, sollte redis.conf dem Benutzer redis gehören und sekundär von der Gruppe redis besessen sein. Um dies einzustellen, führen Sie den folgenden Befehl aus:

  1. sudo chown redis:redis /etc/redis.conf

Ändern Sie dann die Berechtigungen so, dass nur der Besitzer der Datei sie lesen und schreiben kann:

  1. sudo chmod 600 /etc/redis.conf

Sie können die neuen Besitz- und Berechtigungseinstellungen überprüfen, indem Sie die vorherigen ls-Befehle erneut ausführen:

  1. ls -l /var/lib | grep redis
Output
total 40 drwxrwx---. 2 redis redis 22 Sep 6 22:22 redis
  1. ls -l /etc/redis.conf
Output
total 40 -rw-------. 1 redis redis 62192 Sep 6 22:20 /etc/redis.conf

Zum Abschluss starten Sie Redis neu, um diese Änderungen zu übernehmen:

  1. sudo systemctl restart redis

Damit ist Ihre Redis-Installation abgesichert.

Schlussfolgerung

Beachten Sie, dass, sobald sich jemand auf Ihrem Server angemeldet hat, es möglich ist, die Redis-spezifischen Sicherheitsfunktionen zu umgehen, die Sie implementiert haben. Deshalb ist die wichtigste in diesem Tutorial behandelte Sicherheitsfunktion die Firewall, da sie verhindert, dass unbekannte Benutzer sich überhaupt auf Ihren Server anmelden.

Wenn Sie versuchen, die Kommunikation mit Redis über ein nicht vertrauenswürdiges Netzwerk zu sichern, müssen Sie einen SSL-Proxy verwenden, wie von den Redis-Entwicklern im offiziellen Redis-Sicherheitsleitfaden empfohlen.

Source:
https://www.digitalocean.com/community/tutorials/how-to-install-and-secure-redis-on-rocky-linux-8