Come Mettere in Sicurezza le Installazioni Redis: Suggerimenti Essenziali di Configurazione
Proteggi Redis con binding di rete, modalità protetta, ACL o password, accesso ai comandi più sicuro, regole firewall, privilegio minimo e TLS.
Come Proteggere le Installazioni Redis: Consigli Essenziali di Configurazione
Redis è veloce, semplice e spesso affidato dal codice applicativo per dati di sessione, code, contatori e record memorizzati nella cache. Questo rende importante la sicurezza di Redis: un'istanza esposta può permettere a un attaccante di leggere dati, eliminare chiavi con FLUSHALL o abusare dei comandi amministrativi.
Il tuo obiettivo è rendere Redis raggiungibile solo dai sistemi che ne hanno bisogno, richiedere autenticazione, ridurre l'accesso a comandi pericolosi e proteggere i file che contengono configurazione e dati persistenti.
1. Configurazione di Rete: Limitare l'Esposizione
La misura di sicurezza più immediata è controllare su quali interfacce di rete Redis ascolta. Molte installazioni Redis impacchettate si legano a localhost per impostazione predefinita, ma le immagini dei container, i file di configurazione personalizzati e le distribuzioni più vecchie possono differire. Controlla sempre il tuo redis.conf attivo invece di presumere che l'impostazione predefinita sia sicura.
Binding a Interfacce Specifiche (bind)
Devi configurare Redis per ascoltare solo sulle interfacce necessarie. Nella maggior parte degli ambienti di produzione, questo significa legarsi solo all'indirizzo di loopback o a un indirizzo IP privato specifico utilizzato dai server applicativi.
Solo Accesso Interno o Locale
Se il tuo server applicativo risiede sullo stesso host di Redis, legati esclusivamente all'indirizzo di loopback.
# Frammento di configurazione redis.conf
bind 127.0.0.1
Accesso Privato in Rete
Se i tuoi server applicativi sono su un segmento di rete privato e necessitano di accesso di rete, legati a quell'indirizzo IP privato specifico. Non legare Redis a un IP pubblico esposto a Internet. Se hai bisogno di accesso remoto, mettilo su una rete privata e limita il traffico con regole firewall o gruppi di sicurezza.
# Elenca gli indirizzi IP interni specifici che dovrebbero accedere a Redis
bind 192.168.1.100 10.0.0.5
Comprendere la Modalità Protetta
Dalla versione 3.2 di Redis, la modalità protetta è abilitata per impostazione predefinita nelle build standard di Redis. Aiuta a bloccare l'accesso esterno quando Redis non è configurato esplicitamente per client remoti. Trattala come una rete di sicurezza, non come il tuo controllo principale. Usa restrizioni di binding, autenticazione e regole firewall.
Se devi disabilitarla per una configurazione specifica, puoi usare:
protected-mode no
Avvertenza: Disabilita
protected-modesolo quando hai configurato correttamentebind, autenticazione e filtraggio di rete.
2. Autenticazione e Controllo degli Accessi
Una volta limitato l'accesso alla rete, il livello successivo di difesa è l'autenticazione. I client dovrebbero poter interagire con Redis solo se forniscono una password valida o, preferibilmente, utilizzano il moderno sistema di Liste di Controllo degli Accessi (ACL).
Implementare la Protezione tramite Password (requirepass)
Usa la direttiva requirepass nel tuo file redis.conf per imporre l'autenticazione del client. Funge da segreto condiviso globale per la sicurezza di base.
# Imposta una password forte e unica
requirepass T4h!S_Is_V3ry_S3cure_P@ss
Per connettersi utilizzando una password, i client devono usare il comando AUTH:
# Esempio usando 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 degli Accessi (ACL) di Redis
Per ambienti di produzione che eseguono Redis 6.0 e versioni successive, le ACL sono il metodo di autenticazione preferito. Le ACL ti permettono di definire più utenti con password specifiche e permessi granulari (ad esempio, l'Utente A può solo leggere, l'Utente B può scrivere in specifici keyspace).
La configurazione delle ACL comporta tipicamente la definizione di utenti e delle loro regole in redis.conf o in un file ACL separato:
# Esempio di definizioni utente ACL in redis.conf o in un file aclfile
user default off
user app_reader on >app_read_P@ss ~cache:* +get +scan
user app_writer on >app_write_P@ss ~data:* +set +del
Rinominare o Disabilitare Comandi Pericolosi
Alcuni comandi amministrativi (come FLUSHALL, CONFIG, KEYS e SHUTDOWN) possono causare interruzioni operative o esporre dettagli sensibili di configurazione se usati in modo improprio. È una buona pratica rinominare questi comandi con nomi oscuri o disabilitarli completamente.
Per rinominare un comando, usa rename-command:
# Rinomina il comando CONFIG per prevenire modifiche non autorizzate
rename-command CONFIG HIDE_MY_CONFIG
# Disabilita completamente FLUSHALL
rename-command FLUSHALL ""
3. Migliori Pratiche di Sicurezza Operativa
Oltre alla configurazione interna di Redis, applicare robuste misure di sicurezza operativa esterne è cruciale per una postura di sicurezza completa.
Applicare Regole Firewall Rigorose
Indipendentemente dall'impostazione della direttiva bind, applica 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 indirizzi IP specifici o agli intervalli IP dei tuoi server applicativi fidati.
Esempio di Regola Firewall (Linux/iptables)
Consenti il traffico in entrata sulla porta 6379 solo da un indirizzo IP di un server applicativo noto (192.168.1.50):
# Consenti server applicativo specifico
iptables -A INPUT -p tcp -s 192.168.1.50 --dport 6379 -j ACCEPT
# Nega altro traffico Redis in entrata
iptables -A INPUT -p tcp --dport 6379 -j DROP
Esecuzione con Privilegio Minimo
Non eseguire mai il processo del server Redis come utente root. Se un attaccante compromette il processo Redis, eseguirlo come root concede loro il controllo completo sull'intero sistema operativo.
Crea un utente di sistema dedicato e non privilegiato come redis, quindi configura il tuo gestore di servizi per eseguire il processo Redis come quell'utente. Con systemd, questo è normalmente gestito nel file unit con direttive come User=redis e Group=redis, o dal servizio impacchettato fornito dalla tua distribuzione.
Proteggere i File di Configurazione e la 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 del sistema.
# Esempio di permessi raccomandati
# Solo l'utente 'redis' e root dovrebbero poter leggere/scrivere
chown redis:redis /etc/redis/redis.conf
chmod 600 /etc/redis/redis.conf
Implementare la Crittografia SSL/TLS
Per ambienti in cui il traffico Redis attraversa un segmento di rete non fidato (anche internamente), implementa la crittografia SSL/TLS. Sebbene Redis storicamente mancasse di supporto TLS nativo, le versioni moderne (a partire da Redis 6) lo supportano completamente. Configurare TLS richiede la generazione di certificati e l'impostazione delle direttive pertinenti in redis.conf:
# Abilita listener TLS
tls-port 6379
port 0
tls-auth-clients yes
tls-cert-file /etc/redis/tls/redis.crt
tls-key-file /etc/redis/tls/redis.key
tls-ca-cert-file /etc/redis/tls/ca.crt
port 0 disabilita il listener in testo semplice. Mantieni una porta in testo semplice solo quando ogni client che la utilizza si trova su un percorso locale fidato e hai una chiara ragione.
Riepilogo dei Passaggi Essenziali di Sicurezza
Proteggere un'installazione Redis è un lavoro a strati. Inizia con l'esposizione, poi l'autenticazione, quindi i controlli operativi:
- Limita l'Accesso di Rete: Usa
bind 127.0.0.1o IP privati specifici. - Applica l'Autenticazione: Usa
requirepass(base) o ACL (avanzato). - Rafforza i Comandi: Disabilita o rinomina i comandi amministrativi pericolosi (
FLUSHALL,CONFIG). - Usa Firewall: Permetti il traffico solo sulla porta 6379 dai server applicativi fidati.
- Privilegio Minimo: Esegui il processo Redis come un utente dedicato non root.
- Crittografa il Traffico: Abilita SSL/TLS per le connessioni di rete dove appropriato.