Come Mettere in Sicurezza le Installazioni Redis: Suggerimenti Essenziali di Configurazione
Redis è un data store in-memory potente e ad alte prestazioni, frequentemente utilizzato per il caching, la gestione delle sessioni e il message brokering. A causa della sua velocità e semplicità, le configurazioni Redis predefinite sono spesso ottimizzate per ambienti di sviluppo, privilegiando la facilità d'uso rispetto alla sicurezza rigorosa.
Tuttavia, esporre un'istanza Redis non protetta a Internet o persino a una rete interna non segmentata può portare a violazioni catastrofiche dei dati, alla perdita di dati (tramite FLUSHALL) o persino all'esecuzione di codice remoto (tramite la manipolazione di file di persistenza). Proteggere la tua distribuzione Redis di produzione è non negoziabile. Questa guida illustra i passaggi di configurazione essenziali e attuabili per blindare efficacemente il tuo server Redis.
1. Configurazione di Rete: Limitare l'Esposizione
La misura di sicurezza più immediata ed efficace è controllare su quali interfacce di rete Redis è in ascolto. Per impostazione predefinita, Redis si lega spesso a tutte le interfacce disponibili (0.0.0.0), rendendolo potenzialmente accessibile da qualsiasi luogo.
Binding a Interfacce Specifiche (bind)
Devi configurare Redis affinché sia in ascolto solo sulle interfacce necessarie. Nella maggior parte degli ambienti di produzione, questo significa legarsi solo all'indirizzo di loopback o a uno specifico indirizzo IP privato utilizzato dai server delle applicazioni.
Accesso Interno o Locale Soltanto
Se il tuo server delle applicazioni risiede sullo stesso host di Redis, effettua il binding esclusivamente all'indirizzo di loopback.
# redis.conf configuration snippet
bind 127.0.0.1
Accesso Privato in Rete
Se i tuoi server delle applicazioni si trovano su un segmento di rete privato (ad esempio, una sottorete backend) e necessitano di accesso alla rete, effettua il binding a quello specifico indirizzo IP privato. Non effettuare mai il binding a IP pubblici rivolti a Internet senza regole firewall robuste.
# List the specific internal IP addresses that should access Redis
bind 192.168.1.100 10.0.0.5
Comprensione della Modalità Protetta (Protected Mode)
A partire da Redis 3.2, la Modalità Protetta (Protected Mode) è abilitata per impostazione predefinita. Questa modalità blocca le connessioni da qualsiasi client esterno se il server è in esecuzione senza una password (requirepass) ed è associato a un'interfaccia pubblica. Sebbene sia utile, fare affidamento esclusivamente sulla Modalità Protetta non è sufficiente; applica sempre sia le restrizioni di binding che l'autenticazione.
Se devi disabilitarla per una configurazione specifica, puoi utilizzare:
protected-mode no
⚠️ Avviso: Disabilita
protected-modesolo se hai configurato correttamentebinderequirepass. In caso contrario, la tua istanza Redis sarà completamente esposta.
2. Autenticazione e Controllo degli Accessi
Una volta che l'accesso alla rete è stato limitato, il livello successivo di difesa è l'autenticazione. I client dovrebbero essere in grado di interagire con Redis solo se forniscono una password valida o, preferibilmente, utilizzano il moderno sistema di Liste di Controllo Accessi (ACL).
Implementazione della Protezione con Password (requirepass)
Utilizza la direttiva requirepass nel tuo file redis.conf per imporre l'autenticazione del client. Questo funge da segreto condiviso globale per la sicurezza di base.
# Set a strong, unique password
requirepass T4h!S_Is_V3ry_S3cure_P@ss
Per connettersi utilizzando una password, i client devono usare il comando AUTH:
# Example using redis-cli
$ redis-cli
127.0.0.1:6379> AUTH T4h!S_Is_V3ry_S3cure_P@ss
OK
127.0.0.1:6379> PING
PONG
Sicurezza Avanzata: Liste di Controllo Accessi (ACL) di Redis
Per gli ambienti di produzione che eseguono Redis 6.0 e versioni successive, le ACL sono il metodo di autenticazione preferito. Le ACL consentono di definire più utenti con password specifiche e permessi granulari (ad esempio, l'Utente A può solo leggere, l'Utente B può scrivere in keyspace specifici).
La configurazione ACL in genere prevede la definizione degli utenti e delle loro regole in redis.conf o in un file ACL separato:
# Example ACL user definition (in redis.conf or aclfile)
user default on # default user is enabled
user app_reader on >app_read_P@ss ~cache:* +get +scan
user app_writer on >app_write_P@ss ~data:* +set +del
Ridenominazione o Disabilitazione di Comandi Pericolosi
Alcuni comandi amministrativi (come FLUSHALL, CONFIG, KEYS e SHUTDOWN) possono causare interruzioni operative o esporre dettagli di configurazione sensibili se usati in modo improprio. È una buona pratica rinominare questi comandi con nomi oscuri o disabilitarli interamente.
Per rinominare un comando, usa rename-command:
# Rename CONFIG command to prevent unauthorized changes
rename-command CONFIG HIDE_MY_CONFIG
# Disable FLUSHALL entirely
rename-command FLUSHALL ""
3. Migliori Pratiche di Sicurezza Operativa
Oltre alla configurazione interna di Redis, l'applicazione di robuste misure di sicurezza operativa esterna è fondamentale per una postura di sicurezza completa.
Imporre Regole Firewall Rigorose
Indipendentemente dall'impostazione della direttiva bind, imporre sempre il filtraggio di rete utilizzando gruppi di sicurezza cloud, iptables o soluzioni firewall simili. La porta predefinita di Redis (6379) dovrebbe essere aperta solo agli specifici indirizzi IP o intervalli IP dei tuoi server delle applicazioni fidati.
Esempio di Regola Firewall (Linux/iptables)
Consentire il traffico in entrata sulla porta 6379 solo da un IP noto del server delle applicazioni (192.168.1.50):
# Deny all incoming traffic on port 6379 by default
iptables -A INPUT -p tcp --dport 6379 -j DROP
# Allow specific application server
iptables -A INPUT -p tcp -s 192.168.1.50 --dport 6379 -j ACCEPT
Esecuzione con Privilegio Minimo (Least Privilege)
Non eseguire mai il processo server Redis come utente root. Se un attaccante compromette il processo Redis, eseguirlo come root gli garantisce il controllo completo sull'intero sistema operativo.
Crea un utente di sistema dedicato e non privilegiato (ad esempio, redis) e configura il sistema operativo e lo script di inizializzazione di Redis per eseguire il server sotto questo utente. La configurazione di Redis può imporre ciò utilizzando la direttiva user (sebbene sia in genere gestito dalle impostazioni di sistema):
# Ensure the Redis process runs under a restricted user (system-level configuration preferred)
user redis
Protezione dei File di Configurazione e della Persistenza
Il file redis.conf contiene informazioni sensibili come la password requirepass e le impostazioni di rete. Assicurati che questo file, insieme ai file di persistenza (snapshot RDB e log AOF), sia protetto da permessi di file restrittivi, impedendo la lettura o la modifica non autorizzata da parte di altri utenti di sistema.
# Example recommended permissions
# Only the 'redis' user and root should read/write
chown redis:redis /etc/redis/redis.conf
chmod 600 /etc/redis/redis.conf
Implementazione della Crittografia SSL/TLS
Per gli ambienti in cui il traffico Redis attraversa un segmento di rete non attendibile (anche internamente), implementa la crittografia SSL/TLS. Sebbene Redis in passato mancasse di supporto TLS nativo, le versioni moderne (a partire da Redis 6) lo supportano completamente. La configurazione di TLS richiede la generazione di certificati e l'impostazione delle direttive pertinenti in redis.conf:
# Enable TLS
tls-port 6379
tls-auth-clients yes
tls-cert-file /etc/redis/tls/redis.crt
tls-key-file /etc/redis/tls/redis.key
Riepilogo dei Passaggi Essenziali di Sicurezza
Proteggere un'installazione Redis richiede un approccio a strati. Applicando questi passaggi fondamentali, riduci significativamente la superficie di attacco e proteggi i tuoi preziosi dati in-memory:
- Limitare l'Accesso alla Rete: Utilizza
bind 127.0.0.1o IP privati specifici. - Imporre l'Autenticazione: Utilizza
requirepass(base) o ACL (avanzato). - Rinforzare i Comandi: Disabilita o rinomina i comandi amministrativi pericolosi (
FLUSHALL,CONFIG). - Utilizzare Firewall: Consenti il traffico sulla porta 6379 solo dai server delle applicazioni fidati.
- Privilegio Minimo: Esegui il processo Redis come utente dedicato e non root.
- Crittografare il Traffico: Abilita SSL/TLS per connessioni di rete dove appropriato.