Aller au contenu

Redis : sécurité et accès distant

Redis n’a pas été conçu pour être exposé directement à Internet. Une instance ouverte sans authentification permet à n’importe qui de lire, d’effacer les données, voire d’exécuter du code via la configuration.

Sur Ubuntu : écoute sur 127.0.0.1 et ::1, protected-mode yes, aucun mot de passe. Tant que Redis n’écoute que sur l’interface locale, seules les applications de la machine y accèdent.

Depuis Redis 6, les comptes (ACL) permettent des droits précis :

Fenêtre de terminal
redis-cli
ACL SETUSER app on >MotDePasseFort ~app:* &* +@read +@write -@dangerous
ACL LIST
ACL WHOAMI
ACL DELUSER app
ACL SAVE
Élément Sens
on Compte actif
>MotDePasseFort Mot de passe
~app:* Clés autorisées (préfixe app:)
&* Canaux Pub/Sub autorisés
+@read +@write Catégories de commandes autorisées
-@dangerous Interdit les commandes d’administration (FLUSHALL, CONFIG, KEYS…)

Un compte applicatif ne doit pas pouvoir administrer le serveur.

Dans /etc/redis/redis.conf :

requirepass MotDePasseLongEtAleatoire

Générer un mot de passe aléatoire : openssl rand -base64 32. Redémarrer, puis se connecter :

Fenêtre de terminal
export REDISCLI_AUTH='MotDePasseLongEtAleatoire'
redis-cli ping

Ne pas écrire le mot de passe dans l’historique du shell (-a) ni dans un dépôt de code.

Pour qu’un autre serveur accède à Redis, dans l’ordre :

  1. Définir un mot de passe ou un compte ACL.
  2. Faire écouter Redis sur l’interface privée (bind 127.0.0.1 10.0.0.5, adresse privée du serveur).
  3. Filtrer par pare-feu, depuis l’adresse du client uniquement :
Fenêtre de terminal
sudo ufw allow from 10.0.0.12 to any port 6379 proto tcp comment 'Redis : serveur applicatif'
  1. Garder protected-mode yes.

Redis gère TLS, mais l’activer demande des certificats et un port dédié (tls-port, tls-cert-file, tls-key-file, tls-ca-cert-file). Sur un réseau non maîtrisé, préférer un tunnel SSH (SSH : tunnels) :

Fenêtre de terminal
ssh -N -L 6380:127.0.0.1:6379 utilisateur@serveur.exemple.com
redis-cli -p 6380 --askpass
rename-command FLUSHALL ""
rename-command CONFIG ""

Avec les ACL, privilégier -@dangerous pour les comptes applicatifs plutôt que rename-command (qui n’est plus recommandé).

Fenêtre de terminal
sudo ss -tlnp | grep 6379 # sur quelles adresses Redis écoute
redis-cli ACL LIST

Depuis une autre machine : nc -vz -w 3 serveur.exemple.com 6379 doit échouer (voir UFW : prise en main).

Symptôme Piste
DENIED Redis is running in protected mode Connexion distante sans mot de passe et sans bind explicite : définir un mot de passe et le bind
NOAUTH Authentication required Fournir le mot de passe (--askpass, REDISCLI_AUTH)
Connection refused à distance bind limité à 127.0.0.1, ou pare-feu
Application qui ne se connecte plus après requirepass Mettre à jour son mot de passe de connexion

Ubuntu 24.04 et 26.04 : différences à connaître

Section intitulée « Ubuntu 24.04 et 26.04 : différences à connaître »

Les ACL et les réglages de cette page sont identiques avec Redis 7.0 et 8.0.