So installieren und sichern Sie Redis unter Ubuntu 18.04

Eine frühere Version dieses Tutorials wurde vonJustin Ellingwood geschrieben

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 Sie Redis auf einem Ubuntu 18.04-Server installieren, konfigurieren und sichern.

Voraussetzungen

Um dieses Handbuch zu vervollständigen, benötigen Sie Zugriff auf einen Ubuntu 18.04-Server, auf dem ein Benutzer ohne Rootberechtigung mitsudo-Berechtigungen und einer grundlegenden Firewall konfiguriert ist. Sie können dies einrichten, indem Sie unserenInitial Server Setup guide folgen.

Wenn Sie bereit sind zu beginnen, melden Sie sich bei Ihrem Ubuntu 18.04-Server alssudo-Benutzer an und fahren Sie unten fort.

[[Schritt-1 - Installieren und Konfigurieren von Redis]] == Schritt 1 - Installieren und Konfigurieren von Redis

Um die neueste Version von Redis zu erhalten, verwenden wirapt, um sie aus den offiziellen Ubuntu-Repositorys zu installieren.

Aktualisieren Sie den Paketcache Ihres lokalenaptund 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 Direktivesupervised. 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 Direktivesupervised ist standardmäßig aufno eingestellt. Da Sie Ubuntu ausführen, das das systemd init-System verwendet, ändern Sie dies insystemd:

/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 systemd

. . .

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. Starten Sie dann den Redis-Dienst neu, um die Änderungen wiederzugeben, die Sie an der Konfigurationsdatei vorgenommen haben:

sudo systemctl restart redis.service

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 - Test-Redis]] == Schritt 2 - Redis testen

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; enabled; vendor preset: enabled)
   Active: active (running) since Wed 2018-06-27 18:48:52 UTC; 12s ago
     Docs: http://redis.io/documentation,
           man:redis-server(1)
  Process: 2421 ExecStop=/bin/kill -s TERM $MAINPID (code=exited, status=0/SUCCESS)
  Process: 2424 ExecStart=/usr/bin/redis-server /etc/redis/redis.conf (code=exited, status=0/SUCCESS)
 Main PID: 2445 (redis-server)
    Tasks: 4 (limit: 4704)
   CGroup: /system.slice/redis-server.service
           └─2445 /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.

[.Hinweis]##

Note: Diese Einstellung ist für viele häufige Anwendungsfälle von Redis wünschenswert. Wenn Sie Redis jedoch lieber bei jedem Start Ihres Servers manuell starten möchten, können Sie dies mit dem folgenden Befehl konfigurieren:

sudo systemctl disable redis

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 Befehlping:

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 Minderung dieser Sicherheitsanfälligkeiten, wie inofficial Redis websiteangegeben. Obwohl diese Schritte optional sind und Redis weiterhin funktioniert, wenn Sie sie nicht befolgen, wirdstronglyempfohlen, sie auszuführen, um die Sicherheit Ihres Systems zu erhöhen.

[[Schritt 3 - Bindung an den lokalen Host]] == Schritt 3 - Bindung an den lokalen Host

Standardmäßig ist Redis nur überlocalhost zugänglich. 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 anlocalhost.

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

sudo nano /etc/redis/redis.conf

Suchen Sie diese Zeile und stellen Sie sicher, dass sie nicht kommentiert ist (entfernen Sie die#, falls vorhanden):

/etc/redis/redis.conf

bind 127.0.0.1 ::1

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

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

sudo systemctl restart redis

Führen Sie den folgenden Befehlnetstataus, um zu überprüfen, ob diese Änderung wirksam wurde:

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

Diese Ausgabe zeigt, dass das Programmredis-server anlocalhost (127.0.0.1) gebunden ist, was die Änderung widerspiegelt, die Sie gerade an der Konfigurationsdatei vorgenommen haben. Wenn in dieser Spalte eine andere IP-Adresse angezeigt wird (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 nurlocalhost abhört, ist es für böswillige Akteure schwieriger, Anforderungen 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 von Redis verlangen, dass Benutzer sich mit einem Kennwort authentifizieren, bevor sie Änderungen über den Redis-Client (redis-cli) vornehmen.

[[Schritt-4 - Konfigurieren eines Redis-Passworts]] == Schritt 4 - Konfigurieren eines Redis-Passworts

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

sudo nano /etc/redis/redis.conf

Scrollen Sie zum AbschnittSECURITY und suchen Sie nach einer kommentierten Anweisung, die lautet:

/etc/redis/redis.conf

# requirepass foobared

Kommentieren Sie es aus, indem Sie# entfernen undfoobared in ein sicheres Kennwort ändern.

[.Hinweis]##

Note: Über der Anweisungrequirepass in der Dateiredis.conf befindet sich eine kommentierte Warnung:

# Warning: since Redis is pretty fast an outside user can try up to
# 150k passwords per second against a good box. This means that you should
# use a very strong password otherwise it will be very easy to break.
#

Daher ist es wichtig, dass Sie einen sehr starken und sehr langen Wert als Kennwort angeben. Anstatt selbst ein Passwort zu erstellen, können Sie den Befehlopenssl verwenden, um ein zufälliges zu generieren, wie im folgenden Beispiel. Durch Weiterleiten der Ausgabe des ersten Befehls an den zweiten Befehlopenssl, wie hier gezeigt, werden alle Zeilenumbrüche entfernt, die durch den ersten Befehl erzeugt wurden:

openssl rand 60 | openssl base64 -A

Ihre Ausgabe sollte ungefähr so ​​aussehen:

OutputRBOJ9cCNoGCKhlEBwQLHri1g+atWgn4Xn4HwNUbtzoVxAYxkiYBi7aufl4MILv1nxBqR4L6NNzI0X6cE

Nach dem Kopieren und Einfügen der Ausgabe dieses Befehls als neuen Wert fürrequirepass sollte Folgendes lauten:

/etc/redis/redis.confrequirepass RBOJ9cCNoGCKhlEBwQLHri1g+atWgn4Xn4HwNUbtzoVxAYxkiYBi7aufl4MILv1nxBqR4L6NNzI0X6cE

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 your_redis_password

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 ab.

get key1
Output"10"

Nachdem Sie bestätigt haben, dass Sie nach der Authentifizierung Befehle im Redis-Client ausführen können, können Sieredis-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 - Umbenennen von gefährlichen Befehlen]] == Schritt 5 - Umbenennen gefährlicher Befehle

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 AbschnittSECURITYder Datei/etc/redis/redis.confkonfiguriert.

Einige der Befehle, die als gefährlich eingestuft werden, umfassen:FLUSHDB,FLUSHALL,KEYS,PEXPIRE,DEL,CONFIG,SHUTDOWN,BGREWRITEAOF,BGSAVE,SAVE,SPOP,SREM,RENAME undDEBUG. 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

[.warning] #Warning: Die folgenden Schritte zum Deaktivieren und Umbenennen von Befehlen sind Beispiele. Sie sollten nur die für Sie sinnvollen Befehle deaktivieren oder umbenennen. Sie können die vollständige Liste der Befehle selbst überprüfen und feststellen, wie sie beiredis.io/commands.
# missbraucht werden können.

Um einen Befehl zu deaktivieren, benennen Sie ihn einfach in eine leere Zeichenfolge um (gekennzeichnet durch ein Paar 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:
#
rename-command FLUSHDB ""
rename-command FLUSHALL ""
rename-command DEBUG ""
. . .

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 ""
rename-command SHUTDOWN SHUTDOWN_MENOT
rename-command CONFIG ASC12_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.service

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

redis-cli

Dann authentifizieren Sie:

auth your_redis_password
OutputOK

Nehmen wir an, Sie haben den BefehlCONFIG wie im vorherigen Beispiel inASC12_CONFIG umbenannt. Versuchen Sie zunächst, den ursprünglichen BefehlCONFIG 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) "your_redis_password"

Schließlich können Sieredis-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.

[.Warnung]##

In Bezug auf die Praxis des Umbenennens von Befehlen befindet sich am Ende des AbschnittsSECURITYin/etc/redis/redis.conf ein Warnhinweis mit der Aufschrift:

Please note that changing the name of commands that are logged into the AOF file or transmitted to slaves may cause problems.

Hinweis: Das Redis-Projekt verwendet die Begriffe "Master" und "Slave", während DigitalOcean im Allgemeinen die Alternativen "primär" und "sekundär" bevorzugt. Um Verwirrung zu vermeiden, haben wir uns dafür entschieden, die in der Redis-Dokumentation verwendeten Begriffe zu verwenden.

Das heißt, wenn sich der umbenannte Befehl nicht in der AOF-Datei befindet oder die AOF-Datei nicht an Slaves übertragen wurde, sollte es kein Problem geben.

Denken Sie also daran, wenn Sie versuchen, Befehle umzubenennen. Die beste Zeit zum Umbenennen eines Befehls ist, wenn Sie keine AOF-Persistenz verwenden oder direkt nach der Installation, d. H. Bevor Ihre Redis-using-Anwendung bereitgestellt wurde.

Wenn Sie AOF verwenden und mit einer Master-Slave-Installation arbeiten, sollten Siethis answer from the project’s GitHub issue page berücksichtigen. Das Folgende ist eine Antwort auf die Frage des Autors:

Die Befehle werden in der AOF protokolliert und auf dieselbe Weise wie beim Senden an den Slave repliziert. Wenn Sie also versuchen, die AOF auf einer Instanz abzuspielen, die nicht dieselbe Umbenennung aufweist, können Inkonsistenzen auftreten, da der Befehl nicht ausgeführt werden kann ( Gleiches gilt für Sklaven.

Der beste Weg, um das Umbenennen in solchen Fällen zu handhaben, besteht darin, sicherzustellen, dass umbenannte Befehle auf alle Instanzen in Master-Slave-Installationen angewendet werden.

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, als Sie das Tutorial vonInitial Server Setupbefolgt haben), da dies für böswillige Akteure äußerst schwierig ist, diesen Zaun zu überspringen.