Comment installer et sécuriser Redis sur Debian 10

introduction

Redis est un magasin clé-valeur en mémoire, reconnu pour sa flexibilité, ses performances et sa prise en charge linguistique étendue. Ce tutoriel explique comment installer, configurer et sécuriser Redis sur un serveur Debian 10.

Conditions préalables

Pour compléter ce guide, vous devez avoir accès à un serveur Debian 10 avec un utilisateur non-root doté des privilèges + sudo + et un pare-feu de base configuré. Vous pouvez le configurer en suivant notre Initial Initial Server Guide de configuration.

Lorsque vous êtes prêt à commencer, connectez-vous à votre serveur en tant qu’utilisateur compatible sudo et continuez ci-dessous.

Étape 1 - Installation et configuration de Redis

Pour obtenir la dernière version de Redis, nous allons utiliser + apt + pour l’installer à partir des dépôts officiels de Debian.

Mettez à jour votre cache de paquet local + apt + et installez Redis en tapant:

sudo apt update
sudo apt install redis-server

Cela téléchargera et installera Redis et ses dépendances. Ensuite, il y a un changement de configuration important à apporter dans le fichier de configuration Redis, qui a été généré automatiquement lors de l’installation.

Ouvrez ce fichier avec votre éditeur de texte préféré:

sudo nano /etc/redis/redis.conf

Dans le fichier, recherchez la directive + supervised +. Cette directive vous permet de déclarer un système init pour gérer Redis en tant que service, ce qui vous permet de mieux contrôler son fonctionnement. La directive + supervised + est définie par défaut sur + no + . Puisque vous utilisez Debian, qui utilise le système systemd init, remplacez-le par `+ 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

. . .

C’est la seule modification que vous devez apporter au fichier de configuration Redis à ce stade. Enregistrez-le et fermez-le lorsque vous avez terminé. Rechargez ensuite le fichier de service Redis pour refléter les modifications apportées au fichier de configuration:

sudo systemctl restart redis

Avec cela, vous avez installé et configuré Redis et il fonctionne sur votre ordinateur. Avant de commencer à l’utiliser, il est toutefois prudent de vérifier au préalable que Redis fonctionne correctement.

Étape 2 - Tester Redis

Comme pour tout logiciel nouvellement installé, il est judicieux de s’assurer que Redis fonctionne comme prévu avant d’apporter de nouvelles modifications à sa configuration. Nous allons examiner quelques moyens pour vérifier que Redis fonctionne correctement à cette étape.

Commencez par vérifier que le service Redis est en cours d’exécution:

sudo systemctl status redis

Si elle est exécutée sans erreur, cette commande produira une sortie similaire à celle-ci:

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

Ici, vous pouvez voir que Redis est en cours d’exécution et est déjà activé, ce qui signifie qu’il est configuré pour démarrer à chaque démarrage du serveur.

Pour vérifier que Redis fonctionne correctement, connectez-vous au serveur à l’aide du client de ligne de commande:

redis-cli

Dans l’invite suivante, testez la connectivité à l’aide de la commande + ping +:

ping
OutputPONG

Cette sortie confirme que la connexion au serveur est toujours active. Ensuite, vérifiez que vous pouvez définir les clés en exécutant:

set test "It's working!"
OutputOK

Récupérez la valeur en tapant:

get test

En supposant que tout fonctionne, vous pourrez récupérer la valeur que vous avez stockée:

Output"It's working!"

Après avoir confirmé que vous pouvez récupérer la valeur, quittez l’invite Redis pour revenir au shell:

exit

Enfin, nous vérifierons si Redis est capable de conserver des données même après leur arrêt ou leur redémarrage. Pour ce faire, redémarrez d’abord l’instance Redis:

sudo systemctl restart redis

Ensuite, connectez-vous à nouveau au client de ligne de commande et confirmez que votre valeur de test est toujours disponible:

redis-cli
get test

La valeur de votre clé doit toujours être accessible:

Output"It's working!"

Sortez dans la coquille à nouveau lorsque vous avez terminé:

exit

Avec cela, votre installation Redis est entièrement opérationnelle et prête à être utilisée. Cependant, certains de ses paramètres de configuration par défaut ne sont pas sécurisés et offrent aux acteurs malveillants la possibilité d’attaquer et d’accéder à votre serveur et à ses données. Les étapes restantes de ce didacticiel couvrent les méthodes permettant d’atténuer ces vulnérabilités, comme indiqué sur le site Web script Redis officiel. Bien que ces étapes soient facultatives et que Redis fonctionne toujours si vous choisissez de ne pas les suivre, il est vivement recommandé de les suivre afin de renforcer la sécurité de votre système.

Étape 3 - Liaison à localhost

Par défaut, Redis n’est accessible qu’à partir de * localhost *. Toutefois, si vous avez installé et configuré Redis en suivant un didacticiel différent de celui-ci, vous avez peut-être mis à jour le fichier de configuration pour autoriser les connexions à partir de n’importe où. Ce n’est pas aussi sûr que contraignant pour * localhost *.

Pour corriger cela, ouvrez le fichier de configuration Redis pour le modifier:

sudo nano /etc/redis/redis.conf

Localisez cette ligne et assurez-vous qu’elle n’est pas commentée (supprimez le + # + s’il existe):

/etc/redis/redis.conf

bind 127.0.0.1

Enregistrez et fermez le fichier lorsque vous avez terminé (appuyez sur les touches + CTRL + X +, + Y +, puis + ENTER +).

Ensuite, redémarrez le service pour vous assurer que systemd lit vos modifications:

sudo systemctl restart redis

Pour vérifier que cette modification est entrée en vigueur, exécutez la commande + netstat + suivante:

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

Cette sortie montre que le programme + redis-server + est lié à * localhost * (+ 127.0.0.1 +), reflétant le changement que vous venez d’apporter au fichier de configuration. Si vous voyez une autre adresse IP dans cette colonne (+ 0.0.0.0 +, par exemple), vous devez alors vérifier que vous avez bien commenté la bonne ligne et redémarrer à nouveau le service Redis.

Maintenant que votre installation Redis n’écoute que sur * localhost *, il sera plus difficile pour les acteurs malveillants de faire des requêtes ou d’accéder à votre serveur. Cependant, Redis n’est pas actuellement configuré pour demander aux utilisateurs de s’authentifier avant de modifier sa configuration ou les données qu’il contient. Pour remédier à cela, Redis vous permet de demander aux utilisateurs de s’authentifier avec un mot de passe avant de procéder à des modifications via le client Redis (+ redis-cli +).

Étape 4 - Configuration d’un mot de passe Redis

La configuration d’un mot de passe Redis active l’une de ses deux fonctions de sécurité intégrées - la commande + auth +, qui nécessite une authentification des clients pour accéder à la base de données. Le mot de passe est configuré directement dans le fichier de configuration de Redis, + / etc / redis / redis.conf +, ouvrez-le à nouveau avec votre éditeur préféré:

sudo nano /etc/redis/redis.conf

Faites défiler jusqu’à la section + SECURITY + et cherchez une directive commentée qui se lit comme suit:

/etc/redis/redis.conf

# requirepass foobared

Décommentez-le en supprimant le + # +, et remplacez + foobared + par un mot de passe sécurisé.

Après avoir défini le mot de passe, enregistrez et fermez le fichier, puis redémarrez Redis:

sudo systemctl restart redis.service

Pour vérifier que le mot de passe fonctionne, accédez à la ligne de commande Redis:

redis-cli

Ce qui suit montre une séquence de commandes permettant de vérifier si le mot de passe Redis fonctionne. La première commande tente de définir une clé sur une valeur avant l’authentification:

set key1 10

Cela ne fonctionnera pas car vous ne vous êtes pas authentifié, donc Redis renvoie une erreur:

Output(error) NOAUTH Authentication required.

La commande suivante s’authentifie avec le mot de passe spécifié dans le fichier de configuration Redis:

auth

Redis reconnaît:

OutputOK

Après cela, exécuter à nouveau la commande précédente réussira:

set key1 10
OutputOK

+ get key1 + demande à Redis la valeur de la nouvelle clé.

get key1
Output"10"

Après avoir confirmé que vous êtes en mesure d’exécuter des commandes dans le client Redis après l’authentification, vous pouvez quitter le menu + redis-cli +:

quit

Nous verrons ensuite comment renommer les commandes Redis qui, si elles étaient entrées par erreur ou par un acteur malveillant, pourraient causer de graves dommages à votre ordinateur.

Étape 5 - Renommer les commandes dangereuses

L’autre fonctionnalité de sécurité intégrée à Redis consiste à renommer ou à désactiver complètement certaines commandes considérées comme dangereuses.

Lorsqu’elles sont exécutées par des utilisateurs non autorisés, ces commandes peuvent être utilisées pour reconfigurer, détruire ou effacer vos données. Comme le mot de passe d’authentification, le renommage ou la désactivation des commandes est configuré dans la même section + SECURITY + du fichier + / etc / redis / redis.conf +.

Certaines des commandes considérées comme dangereuses incluent: * FLUSHDB *, * FLUSHALL *, * KEYS *, * PEXPIRE *, * DEL *, * CONFIG *, * SHUTDOWN *, * BGREWRITEAOF *, * BGSAVE *, * SAVE *, * SPOP *, * SREM *, * RENAME * et * DEBUG *. Cette liste n’est pas exhaustive, mais renommer ou désactiver toutes les commandes de cette liste est un bon point de départ pour améliorer la sécurité de votre serveur Redis.

Que vous deviez désactiver ou renommer une commande dépend de vos besoins spécifiques ou de ceux de votre site. Si vous savez que vous n’utiliserez jamais une commande susceptible d’être utilisée de manière abusive, vous pouvez la désactiver. Sinon, il pourrait être dans votre intérêt de le renommer.

Pour activer ou désactiver les commandes Redis, rouvrez le fichier de configuration:

sudo nano  /etc/redis/redis.conf

Pour désactiver une commande, renommez-la simplement en une chaîne vide (indiquée par une paire de guillemets ne contenant pas de caractères), comme indiqué ci-dessous:

/etc/redis/redis.conf

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



. . .

Pour renommer une commande, attribuez-lui un autre nom, comme indiqué dans les exemples ci-dessous. Les commandes renommées devraient être difficiles à deviner, mais faciles à retenir:

/etc/redis/redis.conf

. . .
# rename-command CONFIG ""


. . .

Enregistrez vos modifications et fermez le fichier.

Après avoir renommé une commande, appliquez la modification en redémarrant Redis:

sudo systemctl restart redis

Pour tester la nouvelle commande, entrez la ligne de commande Redis:

redis-cli

Ensuite, authentifiez-vous:

auth
OutputOK

Supposons que vous ayez renommé la commande + CONFIG + en + ASC12_CONFIG +, comme dans l’exemple précédent. Commencez par utiliser la commande originale + CONFIG +. Il devrait échouer car vous l’avez renommé:

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

L’appel de la commande renommée, cependant, réussira. Ce n’est pas sensible à la casse:

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

Enfin, vous pouvez sortir de + redis-cli:

exit

Notez que si vous utilisez déjà la ligne de commande Redis puis redémarrez Redis, vous devrez vous authentifier à nouveau. Sinon, vous obtiendrez cette erreur si vous tapez une commande:

OutputNOAUTH Authentication required.

Conclusion

Dans ce didacticiel, vous avez installé et configuré Redis, validé le bon fonctionnement de votre installation Redis et utilisé ses fonctionnalités de sécurité intégrées pour le rendre moins vulnérable aux attaques d’acteurs malveillants.

N’oubliez pas qu’une fois que quelqu’un est connecté à votre serveur, il est très facile de contourner les fonctionnalités de sécurité spécifiques à Redis que nous avons mises en place. Par conséquent, la fonctionnalité de sécurité la plus importante sur votre serveur Redis est votre pare-feu (que vous avez configuré si vous avez suivi les conditions préalables requises: https://www.digitalocean.com/community/tutorials/initial-server-setup-with-debian-10#step -4-% E2% 80% 94 tutoriel), car il est extrêmement difficile pour des acteurs malveillants de sauter cette clôture.