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