So installieren und sichern Sie Redis unter Debian 9

Einführung

Redis ist ein speicherinterner Schlüsselwertspeicher, der für seine Flexibilität, Leistung und umfassende Sprachunterstützung bekannt ist. Dieses Tutorial zeigt, wie man Redis auf einem Debian 9-Server installiert, konfiguriert und sichert.

Voraussetzungen

Um dieses Handbuch zu vervollständigen, benötigen Sie Zugriff auf einen Debian 9-Server, der einen Nicht-Root-Benutzer mit "+ sudo +" - Berechtigungen und einer konfigurierten Basis-Firewall hat. Sie können dies einrichten, indem Sie unserem Initial Server Setup guide folgen.

Wenn Sie bereit sind, melden Sie sich als sudo-fähiger Benutzer bei Ihrem Server an und fahren Sie unten fort.

Schritt 1 - Installation und Konfiguration von Redis

Um die neueste Version von Redis zu erhalten, werden wir "+ apt +" verwenden, um sie aus den offiziellen Debian-Repositories zu installieren.

Aktualisieren Sie Ihren lokalen "+ apt +" - Paketcache und installieren Sie Redis, indem Sie Folgendes eingeben:

sudo apt update
sudo apt install redis-server

Dadurch werden Redis und seine Abhängigkeiten heruntergeladen und installiert. Im Anschluss daran muss in der Redis-Konfigurationsdatei eine wichtige Konfigurationsänderung vorgenommen werden, die während der Installation automatisch generiert wurde.

Öffnen Sie diese Datei mit Ihrem bevorzugten Texteditor:

sudo nano /etc/redis/redis.conf

Suchen Sie in der Datei die Anweisung + supervised +. Mit dieser Anweisung können Sie ein Init-System deklarieren, um Redis als Dienst zu verwalten, und so mehr Kontrolle über dessen Betrieb erhalten. Die Direktive "+ überwacht " ist standardmäßig auf " nein " gesetzt. Da Sie Debian ausführen, das das System systemd init verwendet, ändern Sie dies in ` systemd +`:

/etc/redis/redis.conf

. . .

# If you run Redis from upstart or systemd, Redis can interact with your
# supervision tree. Options:
#   supervised no      - no supervision interaction
#   supervised upstart - signal upstart by putting Redis into SIGSTOP mode
#   supervised systemd - signal systemd by writing READY=1 to $NOTIFY_SOCKET
#   supervised auto    - detect upstart or systemd method based on
#                        UPSTART_JOB or NOTIFY_SOCKET environment variables
# Note: these supervision methods only signal "process is ready."
#       They do not enable continuous liveness pings back to your supervisor.
supervised

. . .

Dies ist die einzige Änderung, die Sie an dieser Stelle an der Redis-Konfigurationsdatei vornehmen müssen. Speichern und schließen Sie sie, wenn Sie fertig sind. Laden Sie dann die Redis-Servicedatei neu, um die Änderungen wiederzugeben, die Sie an der Konfigurationsdatei vorgenommen haben:

sudo systemctl restart redis

Damit haben Sie Redis installiert und konfiguriert und es wird auf Ihrem Computer ausgeführt. Bevor Sie es jedoch verwenden, sollten Sie zunächst prüfen, ob Redis ordnungsgemäß funktioniert.

Schritt 2 - Testen von Redis

Wie bei jeder neu installierten Software sollten Sie sicherstellen, dass Redis wie erwartet funktioniert, bevor Sie weitere Änderungen an der Konfiguration vornehmen. Wir werden in diesem Schritt eine Handvoll Möglichkeiten durchgehen, um zu überprüfen, ob Redis richtig funktioniert.

Überprüfen Sie zunächst, ob der Redis-Dienst ausgeführt wird:

sudo systemctl status redis

Wenn es fehlerfrei ausgeführt wird, erzeugt dieser Befehl eine Ausgabe ähnlich der folgenden:

Output● redis-server.service - Advanced key-value store
  Loaded: loaded (/lib/systemd/system/redis-server.service; ; vendor preset: enabled)
  Active:  since Wed 2018-09-05 20:19:44 UTC; 41s ago
    Docs: http://redis.io/documentation,
          man:redis-server(1)
 Process: 10829 ExecStopPost=/bin/run-parts --verbose /etc/redis/redis-server.post-down.d (code=exited, status=0/SUCCESS)
 Process: 10825 ExecStop=/bin/kill -s TERM $MAINPID (code=exited, status=0/SUCCESS)
 Process: 10823 ExecStop=/bin/run-parts --verbose /etc/redis/redis-server.pre-down.d (code=exited, status=0/SUCCESS)
 Process: 10842 ExecStartPost=/bin/run-parts --verbose /etc/redis/redis-server.post-up.d (code=exited, status=0/SUCCESS)
 Process: 10838 ExecStart=/usr/bin/redis-server /etc/redis/redis.conf (code=exited, status=0/SUCCESS)
 Process: 10834 ExecStartPre=/bin/run-parts --verbose /etc/redis/redis-server.pre-up.d (code=exited, status=0/SUCCESS)
Main PID: 10841 (redis-server)
   Tasks: 3 (limit: 4915)
  CGroup: /system.slice/redis-server.service
          └─10841 /usr/bin/redis-server 127.0.0.1:6379
. . .

Hier können Sie sehen, dass Redis ausgeführt wird und bereits aktiviert ist. Dies bedeutet, dass es so eingestellt ist, dass es bei jedem Start des Servers gestartet wird.

Stellen Sie mithilfe des Befehlszeilenclients eine Verbindung zum Server her, um zu testen, ob Redis ordnungsgemäß funktioniert:

redis-cli

Testen Sie in der folgenden Eingabeaufforderung die Konnektivität mit dem Befehl + ping +:

ping
OutputPONG

Diese Ausgabe bestätigt, dass die Serververbindung noch besteht. Überprüfen Sie als Nächstes, ob Sie Schlüssel festlegen können, indem Sie Folgendes ausführen:

set test "It's working!"
OutputOK

Rufen Sie den Wert ab, indem Sie Folgendes eingeben:

get test

Wenn alles funktioniert, können Sie den gespeicherten Wert abrufen:

Output"It's working!"

Nachdem Sie bestätigt haben, dass Sie den Wert abrufen können, beenden Sie die Eingabeaufforderung Redis, um zur Shell zurückzukehren:

exit

Als letzten Test prüfen wir, ob Redis Daten auch dann beibehalten kann, wenn sie gestoppt oder neu gestartet wurden. Starten Sie dazu zuerst die Redis-Instanz neu:

sudo systemctl restart redis

Stellen Sie dann erneut eine Verbindung mit dem Befehlszeilenclient her und vergewissern Sie sich, dass Ihr Testwert noch verfügbar ist:

redis-cli
get test

Der Wert Ihres Schlüssels sollte weiterhin verfügbar sein:

Output"It's working!"

Verlasse die Shell wieder, wenn du fertig bist:

exit

Damit ist Ihre Redis-Installation voll funktionsfähig und einsatzbereit. Einige der Standardkonfigurationseinstellungen sind jedoch unsicher und bieten böswilligen Akteuren die Möglichkeit, Ihren Server und seine Daten anzugreifen und auf diese zuzugreifen. Die verbleibenden Schritte in diesem Lernprogramm behandeln Methoden zur Behebung dieser Sicherheitsanfälligkeiten, wie auf der official Redis-Website beschrieben. Obwohl diese Schritte optional sind und Redis weiterhin funktioniert, wenn Sie sie nicht befolgen, wird dringend empfohlen, sie auszuführen, um die Sicherheit Ihres Systems zu verbessern.

Schritt 3 - Bindung an localhost

Standardmäßig kann auf Redis nur von * localhost * aus zugegriffen werden. Wenn Sie Redis jedoch mithilfe eines anderen Lernprogramms als dieses installiert und konfiguriert haben, haben Sie möglicherweise die Konfigurationsdatei aktualisiert, um Verbindungen von überall zuzulassen. Dies ist nicht so sicher wie die Bindung an * localhost *.

Um dies zu korrigieren, öffnen Sie die Redis-Konfigurationsdatei zum Bearbeiten:

sudo nano /etc/redis/redis.conf

Suchen Sie diese Zeile und vergewissern Sie sich, dass sie nicht kommentiert ist (entfernen Sie das + # +, falls vorhanden):

/etc/redis/redis.conf

bind 127.0.0.1

Speichern und schließen Sie die Datei, wenn Sie fertig sind (drücken Sie + STRG + X +, + Y +, dann + ENTER +).

Starten Sie dann den Dienst neu, um sicherzustellen, dass systemd Ihre Änderungen liest:

sudo systemctl restart redis

Um zu überprüfen, ob diese Änderung wirksam wurde, führen Sie den folgenden Befehl + netstat + aus:

sudo netstat -lnp | grep redis
Outputtcp        0      0 127.0.0.1:6379          0.0.0.0:*               LISTEN      10959/redis-server

Diese Ausgabe zeigt, dass das Programm + redis-server + an * localhost * (+ 127.0.0.1 +) gebunden ist, was die Änderung widerspiegelt, die Sie gerade an der Konfigurationsdatei vorgenommen haben. Wenn Sie in dieser Spalte eine andere IP-Adresse sehen (z. B. "+ 0.0.0.0 +"), sollten Sie überprüfen, ob Sie die richtige Zeile auskommentiert haben, und den Redis-Dienst erneut starten.

Da Ihre Redis-Installation nur * localhost * abhört, wird es für böswillige Akteure schwieriger, Anfragen zu stellen oder Zugriff auf Ihren Server zu erhalten. Derzeit verlangt Redis jedoch nicht, dass Benutzer sich authentifizieren, bevor sie Änderungen an der Konfiguration oder den darin enthaltenen Daten vornehmen. Um dies zu beheben, können Sie in Redis verlangen, dass Benutzer sich mit einem Kennwort authentifizieren, bevor Sie Änderungen über den Redis-Client vornehmen (+ redis-cli +).

Schritt 4 - Konfigurieren eines Redis-Passworts

Durch das Konfigurieren eines Redis-Kennworts wird eine der beiden integrierten Sicherheitsfunktionen aktiviert - der Befehl "+ auth ", bei dem Clients sich authentifizieren müssen, um auf die Datenbank zugreifen zu können. Das Passwort wird direkt in der Redis-Konfigurationsdatei " /etc/redis/redis.conf" konfiguriert. Öffnen Sie diese Datei also erneut mit Ihrem bevorzugten Editor:

sudo nano /etc/redis/redis.conf

Scrollen Sie zum Abschnitt "+ SECURITY +" und suchen Sie nach einer kommentierten Direktive, die lautet:

/etc/redis/redis.conf

# requirepass foobared

Entfernen Sie das Kommentarzeichen, indem Sie "+ # " entfernen und " foobared +" in ein sicheres Kennwort ändern.

Speichern und schließen Sie nach dem Festlegen des Kennworts die Datei und starten Sie Redis neu:

sudo systemctl restart redis.service

Um zu testen, ob das Passwort funktioniert, greifen Sie auf die Redis-Befehlszeile zu:

redis-cli

Im Folgenden wird eine Befehlsfolge gezeigt, mit der getestet wird, ob das Redis-Kennwort funktioniert. Der erste Befehl versucht, vor der Authentifizierung einen Schlüssel auf einen Wert zu setzen:

set key1 10

Dies funktioniert nicht, da Sie sich nicht authentifiziert haben. Daher gibt Redis einen Fehler zurück:

Output(error) NOAUTH Authentication required.

Der nächste Befehl authentifiziert sich mit dem in der Redis-Konfigurationsdatei angegebenen Passwort:

auth

Redis erkennt an:

OutputOK

Danach kann der vorherige Befehl erneut ausgeführt werden:

set key1 10
OutputOK

+ get key1 + fragt Redis nach dem Wert des neuen Schlüssels.

get key1
Output"10"

Nachdem Sie bestätigt haben, dass Sie nach der Authentifizierung Befehle im Redis-Client ausführen können, können Sie + redis-cli + beenden:

quit

Als nächstes betrachten wir das Umbenennen von Redis-Befehlen, die, wenn sie versehentlich oder von einem böswilligen Akteur eingegeben werden, ernsthafte Schäden an Ihrem Computer verursachen können.

Schritt 5 - Gefährliche Befehle umbenennen

Die andere in Redis integrierte Sicherheitsfunktion umfasst das Umbenennen oder vollständige Deaktivieren bestimmter Befehle, die als gefährlich eingestuft werden.

Wenn diese Befehle von nicht autorisierten Benutzern ausgeführt werden, können sie zum Neukonfigurieren, Zerstören oder sonstigen Löschen Ihrer Daten verwendet werden. Wie das Authentifizierungskennwort wird das Umbenennen oder Deaktivieren von Befehlen im selben Abschnitt "+ SECURITY " der Datei " /etc/redis/redis.conf +" konfiguriert.

Zu den als gefährlich eingestuften Befehlen gehören: * FLUSHDB *, * FLUSHALL *, * KEYS *, * PEXPIRE *, * DEL *, * CONFIG *, * SHUTDOWN *, * BGREWRITEAOF *, * BGSAVE *, * SAVE *, * SPOP *, * SREM *, * RENAME * und * DEBUG *. Dies ist keine umfassende Liste, aber das Umbenennen oder Deaktivieren aller Befehle in dieser Liste ist ein guter Ausgangspunkt für die Verbesserung der Sicherheit Ihres Redis-Servers.

Ob Sie einen Befehl deaktivieren oder umbenennen sollten, hängt von Ihren spezifischen Anforderungen oder denen Ihrer Site ab. Wenn Sie wissen, dass Sie niemals einen Befehl verwenden werden, der missbraucht werden könnte, können Sie ihn deaktivieren. Andernfalls liegt es möglicherweise in Ihrem Interesse, sie umzubenennen.

Öffnen Sie die Konfigurationsdatei erneut, um die Redis-Befehle zu aktivieren oder zu deaktivieren:

sudo nano  /etc/redis/redis.conf

Um einen Befehl zu deaktivieren, benennen Sie ihn einfach in eine leere Zeichenfolge um (angezeigt durch zwei Anführungszeichen ohne Zeichen dazwischen), wie unten gezeigt:

/etc/redis/redis.conf

. . .
# It is also possible to completely kill a command by renaming it into
# an empty string:
#



. . .

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

/etc/redis/redis.conf

. . .
# rename-command CONFIG ""


. . .

Speichern Sie Ihre Änderungen und schließen Sie die Datei.

Übernehmen Sie nach dem Umbenennen eines Befehls die Änderung, indem Sie Redis neu starten:

sudo systemctl restart redis

Geben Sie die Redis-Befehlszeile ein, um den neuen Befehl zu testen:

redis-cli

Dann authentifizieren Sie:

auth
OutputOK

Angenommen, Sie haben den Befehl "+ CONFIG " wie im vorherigen Beispiel in " ASC12_CONFIG " umbenannt. Versuchen Sie zunächst, den ursprünglichen Befehl " CONFIG +" zu verwenden. Es sollte fehlschlagen, da Sie es umbenannt haben:

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

Das Aufrufen des umbenannten Befehls ist jedoch erfolgreich. Es wird nicht zwischen Groß- und Kleinschreibung unterschieden:

asc12_config get requirepass
Output1) "requirepass"
2) ""

Schließlich können Sie + redis-cli verlassen:

exit

Beachten Sie, dass Sie sich erneut authentifizieren müssen, wenn Sie bereits die Redis-Befehlszeile verwenden und anschließend Redis neu starten. Andernfalls wird dieser Fehler angezeigt, wenn Sie einen Befehl eingeben:

OutputNOAUTH Authentication required.

Fazit

In diesem Lernprogramm haben Sie Redis installiert und konfiguriert, überprüft, ob Ihre Redis-Installation ordnungsgemäß funktioniert, und die integrierten Sicherheitsfunktionen verwendet, um sie weniger anfällig für Angriffe böswilliger Akteure zu machen.

Denken Sie daran, dass es sehr einfach ist, die von uns eingerichteten Redis-spezifischen Sicherheitsfunktionen zu umgehen, sobald sich jemand bei Ihrem Server angemeldet hat. Daher ist die wichtigste Sicherheitsfunktion auf Ihrem Redis-Server Ihre Firewall (die Sie konfiguriert haben, wenn Sie die Voraussetzung https://www.digitalocean.com/community/tutorials/initial-server-setup-with-debian-9#step befolgt haben) -vier-% E2% 80% 94-Einrichten-einer-grundlegenden-Firewall (Tutorial [Erstes Server-Setup]), da dies es böswilligen Akteuren extrem schwer macht, über diesen Zaun zu springen.