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.
Par défaut
Section intitulée « Par défaut »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.
Comptes ACL
Section intitulée « Comptes ACL »Depuis Redis 6, les comptes (ACL) permettent des droits précis :
redis-cliACL SETUSER app on >MotDePasseFort ~app:* &* +@read +@write -@dangerousACL LISTACL WHOAMIACL DELUSER appACL 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.
Mot de passe du compte par défaut
Section intitulée « Mot de passe du compte par défaut »Dans /etc/redis/redis.conf :
requirepass MotDePasseLongEtAleatoireGénérer un mot de passe aléatoire : openssl rand -base64 32. Redémarrer, puis se connecter :
export REDISCLI_AUTH='MotDePasseLongEtAleatoire'redis-cli pingNe pas écrire le mot de passe dans l’historique du shell (-a) ni dans un dépôt de code.
Accès distant
Section intitulée « Accès distant »Pour qu’un autre serveur accède à Redis, dans l’ordre :
- Définir un mot de passe ou un compte ACL.
- Faire écouter Redis sur l’interface privée (
bind 127.0.0.1 10.0.0.5, adresse privée du serveur). - Filtrer par pare-feu, depuis l’adresse du client uniquement :
sudo ufw allow from 10.0.0.12 to any port 6379 proto tcp comment 'Redis : serveur applicatif'- Garder
protected-mode yes.
Connexion chiffrée
Section intitulée « Connexion chiffrée »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) :
ssh -N -L 6380:127.0.0.1:6379 utilisateur@serveur.exemple.comredis-cli -p 6380 --askpassCommandes sensibles
Section intitulée « Commandes sensibles »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é).
Contrôler l’exposition
Section intitulée « Contrôler l’exposition »sudo ss -tlnp | grep 6379 # sur quelles adresses Redis écouteredis-cli ACL LISTDepuis une autre machine : nc -vz -w 3 serveur.exemple.com 6379 doit échouer (voir UFW : prise en main).
Dépannage
Section intitulée « Dépannage »| 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.
Pour aller plus loin
Section intitulée « Pour aller plus loin »- Sécurité de Redis
- Suite : Dépannage