
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
- Redis Quickstart
- Carlson J. L. (2013). Redis in Action. Manning Publications Co. (eBook)
- How to install and secure redis on Debian 9
- Ubuntuusers Wiki: Redis