Wie man eine sichere Redis-Installation unter Linux durchführt

Redis ist für viele Dinge nützlich, darunter auch Caching. Sie können Redis auch als primären Datenspeicher oder sogar als Ersatz für eine Datenbank verwenden. Aber wie führt man eine sichere Redis-Installation durch? Die Installation von Redis kann mühsam sein, und wenn Sie nicht vorsichtig sind, könnten Sie viele Fehler erhalten. Glücklicherweise ist dieses Tutorial genau das Richtige für Sie.

In diesem Tutorial erfahren Sie, wie Sie Redis sicher auf Ihrem Linux-System installieren können, zusammen mit einigen Tipps, um gängige Fehler zu vermeiden.

Lesen Sie weiter und ersparen Sie sich die Kopfschmerzen beim Beheben von Redis-Installationsfehlern!

Voraussetzungen

In diesem Tutorial wird eine praktische Demonstration durchgeführt. Wenn Sie mitmachen möchten, stellen Sie sicher, dass Sie Folgendes haben:

  • Eine Ubuntu 20.04 LTS-Maschine – Dieses Tutorial verwendet Ubuntu 20.04 LTS, aber die Anweisungen sind für die meisten Linux-Distributionen ähnlich.
  • Root-Berechtigungen oder ein nicht-root-Benutzer mit sudo-Berechtigungen

Redis Installation mit dem APT-Paketmanager

Es gibt einige Möglichkeiten, Redis auf Ubuntu zu installieren, aber für dieses Tutorial verwenden Sie den APT-Paketmanager, um Redis zu installieren.

Redis ist in C geschrieben, daher müssten Sie Redis aus seinem Quellcode manuell kompilieren. Mehrere Abhängigkeiten müssten installiert werden, und der Build-Prozess ist nicht gerade narrensicher.

Das Kompilieren von Redis aus dem Quellcode wird nicht empfohlen, aber der Vorteil ist, dass Sie Ihre Installation anpassen können, wenn Sie möchten. Sie laden den Quellcode herunter und konfigurieren ihn dann manuell.

Öffnen Sie Ihr Terminal und führen Sie den folgenden Befehl apt update aus, um sicherzustellen, dass Sie die neuesten Paketlisten haben.

sudo apt update -y
Updating the Linux system

Führen Sie nun den folgenden Befehl apt install aus, um Redis auf Ihrem Gerät zu installieren.

Der folgende Befehl verwendet den apt-Paketmanager, um das Paket redis-server aus den Ubuntu-Repositorys auf Ihr Gerät herunterzuladen und zu installieren. Die Flagge -y teilt apt mit, während des Installationsprozesses automatisch aufgefordert zu akzeptieren.

sudo apt install redis-server -y
Installing Redis on your machine

Konfigurieren der Redis.conf-Datei, um Redis als Dienst auszuführen

Du hast gerade Redis installiert, aber es ist noch nicht einsatzbereit. Bevor du Redis verwenden kannst, musst du zuerst die Datei redis.conf konfigurieren.

Die Konfigurationsdatei redis.conf ist im Redis-Paket enthalten, das du installiert hast, und wird standardmäßig im Verzeichnis /etc/redis/ gespeichert. Diese Datei enthält alle Konfigurationsoptionen für Redis.

Die .conf-Dateierweiterung ist logisch, da sie einem konventionellen Muster folgt. Viele andere Programme verwenden denselben Stil. Der Apache Webserver verwendet beispielsweise die .conf-Dateierweiterung für seine Hauptkonfigurationsdatei.

1. Führe den folgenden systemctl-Befehl aus, um den redis-server-Dienst zu stoppen. Das Stoppen des Redis-Dienstes beim ersten Starten mit Redis wird empfohlen.

sudo systemctl stop redis.service

2. Öffne anschließend die Datei /etc/redis/redis.conf in deinem bevorzugten Texteditor.

Finde die Anweisung supervised und setze sie auf systemd, wie unten gezeigt, und speichere die Änderungen. Dadurch wird dem Betriebssystem mitgeteilt, Redis als Dienst auszuführen.

Setting up the systemd directive

3. Führen Sie nun den Befehl systemctl restart unten aus, um den Redis-Dienst (redis.service) neu zu starten, da der Redis-Dienst die Änderungen noch nicht kennt.

sudo systemctl restart redis.service

4. Führen Sie abschließend den Befehl systemctl status unten aus, um zu sehen, ob Redis läuft.

sudo systemctl status redis.service

Wie Sie unten sehen können, zeigt die Ausgabe, dass der Redis-Dienst läuft.

Checking if Redis Service is Running

Testen, ob der Redis-Server ordnungsgemäß funktioniert

Sie haben konfiguriert und überprüft, dass der Redis-Dienst aktiv läuft, aber das bedeutet nicht, dass der Redis-Server funktioniert. Wie testet man, ob der Redis-Server ordnungsgemäß funktioniert? Verbinden Sie sich mit dem Redis-Server und senden Sie Befehle, um zu sehen, ob der Server antwortet.

1. Führen Sie den Befehl redis-cli unten aus, um eine Verbindung zum Redis-Server herzustellen. redis-cli ist die Befehlszeilenschnittstelle für Redis, mit der Sie Befehle an den Server senden und seinen Zustand überprüfen können.

redis-cli

Hier können Sie feststellen, dass Sie sich im Redis-Server-Prompt befinden (127.0.0.1:6379>). Der Befehl redis-cli versucht standardmäßig, eine Verbindung zu einem Redis-Server unter 127.0.0.1:6379 herzustellen.

Connecting to the Redis Server

2. Führen Sie anschließend den Befehl ping unten aus, um zu überprüfen, ob der Redis-Server erreichbar ist.

ping

Wie Sie sehen können, hat der Server PONG zurückgegeben, was darauf hinweist, dass der Redis-Server erreichbar ist und jetzt erfolgreich mit dem Dienst kommunizieren kann.

Pinging the Redis server

Vielleicht sind Sie noch skeptisch; führen Sie den untenstehenden Befehl set aus. Der Befehl set ist ein Redis-Befehl, der ein Schlüssel-Wert-Paar in einer Datenbank setzt.

set test "This is a test"

Wie Sie sehen können, gibt der set-Befehl „OK“ zurück, was darauf hinweist, dass der Redis-Dienst korrekt funktioniert.

Testing the Redis server

3. Führen Sie den Befehl exit unten aus, um die Verbindung zum redis-cli zu beenden. Dadurch wird die Verbindung zum Redis-Server geschlossen.

exit

Binden Sie den Redis-Server an Localhost

Sie haben gerade getestet, dass der Redis-Server ordnungsgemäß funktioniert, aber er könnte auch von anderen Geräten in Ihrem Netzwerk aus zugänglich sein. Dieses Verhalten ist unerwünscht, und Sie möchten normalerweise Ihren Redis-Server vor Fremden schützen.

Durch das Binden des Redis-Servers an localhost wird festgelegt, dass nur die Maschine, auf der Sie Redis installiert haben, auf den Redis-Server zugreifen kann.

1. Öffnen Sie die Datei /etc/redis/redis.conf in Ihrem Texteditor.

2. Suchen Sie die Zeile, die bind 127.0.0.1 ::1 angibt, und entfernen Sie das Nummernzeichen (#) am Anfang der Zeile, um die Zeile zu aktivieren.

Uncommenting the bind 127.0.0.1 ::1 line

3. Führen Sie nun den Befehl unten aus, um den redis-server-Dienst neu zu starten.

sudo systemctl restart redis-server

4. Führen Sie abschließend den folgenden Befehl aus, um zu überprüfen, ob Ihr Redis-Server an localhost gebunden ist. Der Befehl netstat -lnp listet alle aktiven Netzwerkverbindungen auf, und der Teil grep redis filtert die Ausgabe nach Zeilen, die „redis“ enthalten.

-lnp steht für Local Name Protocol, ein Netzwerkprotokoll, das von UNIX-ähnlichen Systemen verwendet wird, um Hostnamen in IP-Adressen aufzulösen.

sudo netstat -lnp | grep redis

Wie Sie unten sehen können, hört der Redis-Server jetzt nur noch auf die lokale Schnittstelle (127.0.0.1:6379). In der Konfigurationsdatei ist ebenfalls zu sehen, dass nur die lokale Schnittstelle unter Ihren aktiven Internetverbindungen (tcp) aufgeführt ist.

Jetzt können keine anderen Geräte in Ihrem Netzwerk eine Verbindung zu Ihrem Redis-Server herstellen.

Listing all active network connections

Sichern der Redis-Serververbindung mit einem Passwort

Zu diesem Zeitpunkt ist Redis nicht so eingestellt, dass Benutzer sich mit einem Passwort authentifizieren müssen. Jeder, der die IP-Adresse oder den Hostnamen Ihres Redis-Servers kennt, könnte sich damit verbinden und dessen Daten ändern.

Wie schützen Sie Ihren Redis-Server? Legen Sie ein Passwort fest, um Benutzer zur Authentifizierung bei der Verbindung mit Ihrem Redis-Server zu zwingen.

1. Öffnen Sie die Konfigurationsdatei redis.conf erneut in Ihrem Text- oder Code-Editor.

2. Setzen Sie dann ein starkes Passwort mit folgendem Befehl:

  • Suchen Sie nach requirepass foobared im Abschnitt SECURITY
  • Löschen Sie das Nummernzeichen (#) am Anfang der Zeile
  • Ersetzen Sie foobared durch ein starkes Passwort Ihrer Wahl und speichern Sie die Änderungen
Providing a secure password

3. Führen Sie die folgenden Befehle aus, um den Redis-Server neu zu starten und eine Verbindung herzustellen.

sudo systemctl restart redis-server
redis-cli

4. Führen Sie jetzt den Befehl ping aus, um zu prüfen, ob Sie eine Antwort vom Server erhalten.

ping

Unten sehen Sie eine Fehlermeldung, die besagt NOAUTH Authentifizierung erforderlich. Diese Meldung deutet darauf hin, dass Sie ein Authentifizierungspasswort benötigen, um auf Ihren Redis-Server remote zuzugreifen.

Testing connection with the server

5. Führen Sie den folgenden auth-Befehl mit Ihrem Passwort aus, um Ihre Verbindung zu Ihrem Redis-Server zu authentifizieren.

auth Qae9p_fY:YjdtJ7k

Sie erhalten eine OK-Antwort, wenn die Authentifizierung erfolgreich ist, wie unten gezeigt.

Authenticating Redis Server Connection

6. Führen Sie abschließend den ping-Befehl erneut aus, um zu testen, ob Sie Ihre Verbindung zu Ihrem Redis-Server authentifiziert haben.

ping

Sie erhalten nun die PONG-Antwort, wie unten gezeigt, nachdem Sie Ihre Verbindung authentifiziert haben. Zu diesem Zeitpunkt haben Sie Ihren Redis-Server erfolgreich mit einem Passwort geschützt.

Pinging the Redis server

Deaktivierung gefährlicher Befehle zum Schutz Ihres Redis-Servers

Das Festlegen eines Passworts zur Authentifizierung der Verbindung zu Ihrem Redis-Server bedeutet nicht, dass es zu 100 % geschützt ist. Redis enthält standardmäßig mehrere gefährliche Befehle, die es Benutzern ermöglichen, die Daten in Ihrer Datenbank zu ändern.

Wenn diese Befehle von nicht autorisierten Benutzern ausgeführt werden, können Eindringlinge Daten in Ihrer Redis-Datenbank lesen, ändern, zerstören und sogar vollständig löschen.

Hier ist keine umfassende Liste, da Ihr Redis-Server möglicherweise zusätzliche gefährliche Befehle hat, aber in den meisten Fällen handelt es sich um gefährliche Befehle:

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

Um Ihren Redis-Server weiter zu sichern, benennen Sie diese gefährlichen Befehle in der Datei redis.conf um:

1. Öffnen Sie die Datei redis.conf in Ihrem Texteditor und suchen Sie nach dem Abschnitt Command renaming.

Benennen Sie Befehle gemäß der untenstehenden Syntax in einen leeren String um, um sie zu deaktivieren. Ersetzen Sie the-command durch den tatsächlichen Befehl, den Sie deaktivieren möchten.

rename-command the-command ""

Zum Beispiel deaktivieren Sie den Befehl CONFIG, indem Sie CONFIG in einen leeren String umbenennen, wie unten gezeigt, und speichern Sie dann die Änderungen. Die doppelten Anführungszeichen (“”) geben einen leeren String an, der die Deaktivierung eines Befehls kennzeichnet.

Renaming the CONFIG command

2. Beenden Sie den Texteditor und führen Sie den folgenden Befehl aus, um den Redis-Server neu zu starten.

sudo systemctl restart redis-server

3. Führen Sie jetzt die folgenden Befehle aus, um eine Verbindung zu Ihrem Redis-Server herzustellen.

redis-cli
auth Qae9p_fY:YjdtJ7k

4. Führen Sie abschließend den Befehl config get aus, um zu überprüfen, ob der Befehl CONFIG deaktiviert ist.

config get requirepass

Sie erhalten eine ERR unknown command config-Antwort, wie unten gezeigt, was darauf hinweist, dass der Befehl CONFIG deaktiviert ist.

Checking the CONFIG command

Wenn der Befehl config get requirepass ausgeführt wird, fordert er Ihren Redis-Server auf, das Passwort anzufordern, um die Verbindung zu Ihrem Redis-Server zu authentifizieren.

Sie haben nun erfolgreich einen gefährlichen Redis-Befehl umbenannt, um Ihren Redis-Server zu schützen. Deaktivieren Sie jetzt weitere gefährliche Befehle in der Datei redis.conf.

Blockieren von Verbindungsanfragen an den Redis-Server mit einer Firewall

Eine weitere Möglichkeit, Ihren Redis-Server zu sichern, besteht darin, eine Firewall einzurichten. Das Einrichten einer Firewall erfordert, dass Sie nur den erforderlichen Port für jeden der auf Ihrem Server ausgeführten Dienste zulassen.

Zum Beispiel, wenn Sie Redis auf Ihrem Server auf Port 6379 ausführen, müssen Sie nur diesen Port öffnen. Wenn Sie den Zugriff von einer bestimmten IP-Adresse oder einem Adressbereich erlauben möchten, können Sie diese Adressen zu den Firewall-Regeln hinzufügen.

Um eine Firewall einzurichten, installieren Sie zuerst ein Firewall-Konfigurationstool. Dieses Beispiel verwendet UFW, ein häufig verwendetes Firewall-Konfigurationstool unter Linux. Sie können jedoch auch ein anderes Tool wie iptables verwenden, um eine Firewall einzurichten.

1. Führen Sie den folgenden Befehl aus, um UFW auf Ihrem Gerät zu installieren.

sudo apt install ufw -y

2. Führen Sie als Nächstes den unten stehenden Befehl aus, um UFW zu aktivieren.

sudo ufw enable

Geben Sie ‚Y‘ ein, wenn Sie die unten angezeigte Aufforderung erhalten, um den Befehl fortzusetzen.

Enabling UFW

3. Führen Sie den Befehl ufw unten aus, um eine Regel hinzuzufügen, die den Verkehr auf Port 6379 für Ihren Redis-Server erlaubt. Ersetzen Sie die IP-Adresse 11.22.33.44 durch die IP-Adressen Ihrer beabsichtigten Benutzer.

sudo ufw allow from 11.22.33.44 to any port 6379
Adding a firewall rule to allow traffic on port 6379

4. Führen Sie schließlich den Befehl unten aus, um zu überprüfen, ob Sie die Firewall-Regel erfolgreich hinzugefügt haben. Der Befehl überprüft den Status Ihrer Firewall.

sudo ufw status

Sie können im folgenden Output sehen, dass die Firewall aktiv ist und die Regel, den Verkehr auf Port 6379 für Redis von der IP-Adresse 11.22.33.44 zuzulassen.

Checking the UFW rules

Nun können Benutzer mit der IP-Adresse 11.22.33.44 über den Port 6379 eine Verbindung zu Redis herstellen und müssen sich mit einem Passwort authentifizieren. Sie können auf ähnliche Weise zusätzliche Ports für andere Dienste hinzufügen.

Schlussfolgerung

In diesem Tutorial haben Sie gelernt, wie Sie Ihren Redis-Server installieren und sichern können, indem Sie gefährliche Befehle in leere Zeichenketten umbenennen und eine Firewall einrichten.

Mit diesem neu gewonnenen Wissen können Sie die vollen Vorteile von Redis genießen, ohne sich Sorgen machen zu müssen, dass Sie Ihren Server unnötigen Risiken aussetzen.

Möchten Sie mehr erfahren? Warum beginnen Sie nicht mit der Sicherung eines Redis-Servers in Kubernetes?

Source:
https://adamtheautomator.com/redis-install/