Redis (Icon)

Für ein neues Projekt werfe ich gerade einen Blick auf die In-Memory-Datenbank Redis. Die in diesem Beitrag beschriebene Demo-Installation läuft auf einem minimalen Debian 9 Laborsystem und nutzt Redis 3.2 aus dem Standard-Repo.

Installation und Basiskonfiguration

Das Redis Server Package hat kaum Abhängigkeiten, daher ist die Installation aus dem Debian Repo sehr einfach:

apt install redis-server redis-tools libjemalloc1

Damit Redis als Daemon mit systemd zusammenspiel muss in der Konfigurationsdatei /etc/redis/redis.conf die Direktive „supervised“ angepasst werden:

supervised systemd

Anschließend den Redis-Server (neu) starten:

systemctl restart redis

Redis-Installation testen

Um die Basisfunktion von Redis zu testen nutze ich sowohl die Redis CLI als auch das Python-Modul. Letzteres muss erst installiert werden mit:

apt install python-redis

Zum Testen erstellen wir mit der Redis CLI den Schlüssel (Key) „hello“ mit dem Wert (value) „world“…

$ redis-cli
127.0.0.1:6379> set hello "world"
OK
127.0.0.1:6379> exit

… und lesen diesen anschließend via Python wieder aus:

Python 2.7.13 (default, Sep 26 2018, 18:42:22)
[GCC 6.3.0 20170516] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import redis
>>> conn = redis.Redis()
>>> conn.get('hello')
'world'

Redis Security

Redis ist als interne Datenbank konzipiert und bietet daher nur eine handvoll „Basisfeatures“, um die Installation abzusichern. Wenn Redis-Traffic öffentliche Netze durchqueren muss ist ein SSL-Proxy quasi Pflicht.

Nähere Infos zur Security: https://redis.io/topics/security und http://antirez.com/news/96

AUTH Passwort setzen

Damit nicht jeder Client, der den Redis-Dienst erreichen kann Daten lesen/schreiben kann ist das Setzen der requirepass Direktive in der Konfigurationsdatei /etc/redis/redis.conf auf jeden Fall „Best Practice“:

# 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.
requirepass cf9b752e021dda9da9f0b4f009ddd7a5fbb337072e23d6bd8a228a42dbbdbf99

Die Warnung in der Konfigurationsdatei sollte man durchaus ernst nehmen, da Redis auch keinen Schutz vor BruteForce-Attacken mitbringt.

Gefährliche Kommandos deaktivieren

Die zweite wesentliche Security-Funktion ist das Umbenennen bzw. Deaktivieren „gefährlicher“ Kommandos. Ein Beispiel dafür wäre das CONFIG-Kommando, das niemals von einem normalen Redis-Client ausgeführt werden sollte. Andere Kommandos wären zB. FLUSHDB, FLUSHALL und SHUTDOWN.

Mit der Direktive „rename-command“ in /etc/redis/redis.conf können die Kommandos umbenannt (Security by Obscurity!) oder deaktiviert werden:

# It is also possible to completely kill a command by renaming it into
# an empty string:
rename-command CONFIG ""
rename-command FLUSHDB ""
rename-command FLUSHALL ""
rename-command DEBUG ""
rename-command SHUTDOWN SHUTDOWN_fa1edda8d5

Quellen