Redis è un potente archivio chiave-valore in-memory che può essere utilizzato come server di database, cache e message broker. È ampiamente noto per le sue prestazioni veloci, la flessibilità e il supporto per un'ampia varietà di lingue. È un software libero e open-source scritto nel linguaggio di programmazione C. In questa guida, vedremo come installare e proteggere Redis su Ubuntu 18.04.
Prerequisiti
Per seguire questa guida, dovrai preparare un paio di cose in anticipo. È necessario disporre di un server Ubuntu 18.04, che puoi installare facilmente seguendo il nostro tutorial. Inoltre, è necessario disporre di un utente non root con privilegi sudo e di un firewall di base configurato. Puoi configurarli seguendo le nostre guide su configurazione del file sudoers di Linux e configurazione di un UFW su server cloud Ubuntu e Debian.
Ora iniziamo!
Installazione di Redis
Redis è direttamente disponibile dal repository ufficiale Ubuntu. Questo è il modo più semplice per installarlo e configurarlo. Consigliamo di seguire questa strada a meno che non ci siano motivi specifici per non farlo. Poiché il codice sorgente di Redis è disponibile gratuitamente, è anche possibile compilare Redis dal sorgente. Tuttavia, non lo consigliamo perché è più complicato da gestire e aggiornare.
Installare Redis dal repository di Ubuntu
Per prima cosa, aggiorna la cache locale dei pacchetti APT:
|
1 |
sudo apt update |
Successivamente, installa Redis con il seguente comando:
|
1 |
sudo apt install redis-server |
Installare Redis da sorgente
Ubuntu non include di default gli strumenti di compilazione e le librerie necessarie. Il seguente comando installerà tutti gli strumenti necessari per compilare Redis:
|
1 |
sudo apt install git build-essential |
Ci sono due dipendenze aggiuntive per compilare Redis. Queste dipendenze sono necessarie per compilare Redis con funzionalità aggiuntive, ad esempio il supporto TLS, l'integrazione con systemd, ecc. Per compilare Redis con il supporto TLS, installa il pacchetto “libssl-dev”. Per compilare Redis con il supporto per systemd, installa il pacchetto “libsystemd-dev”:
|
1 |
sudo apt install libssl-dev libsystemd-dev |
Il codice sorgente di Redis è disponibile su GitHub. Dai un'occhiata alla pagina GitHub di Redis. Successivamente, scarica il codice sorgente:
|
1 |
git clone https://github.com/redis/redis.git |
Cambia la directory attiva corrente con la directory del codice sorgente di Redis:
|
1 |
cd redis/ |
Dopodiché, esegui lo strumento make per avviare la compilazione. Compilerà Redis senza elementi aggiuntivi:
|
1 |
make -j$(nproc) |
Per abilitare il supporto TLS (assumendo che “libssl-dev” sia installato), usa invece il seguente comando:
|
1 |
make -j$(nproc) BUILD_TLS=yes |
Per abilitare il supporto per systemd (assumendo che “libsystemd-dev” sia installato), usa il seguente comando:
|
1 |
make -j$(nproc) USE_SYSTEMD=yes |
Successivamente, verifica se la compilazione è andata a buon fine. Nota che potrebbe essere necessario un pacchetto aggiuntivo “tcl-dev” e le relative dipendenze per eseguire il test:
|
1 |
make test |
Infine, installa Redis eseguendo il seguente comando:
|
1 |
sudo make install |
Se Redis è stato compilato utilizzando TLS, l'avvio del server dovrà essere eseguito nel seguente modo:
|
1 2 |
./utils/gen-test-certs.sh ./runtest --tls |
Configurazione di Redis
Una volta completata l'installazione, è il momento di configurare Redis. Apri il file di configurazione di Redis in un editor di testo e scorri verso il basso fino alla sezione “supervised”:
|
1 |
sudo vim /etc/redis/redis.conf |
Modifica il valore di “supervised” in “systemd”. Questo assicurerà che il servizio Redis sia gestito da systemd. Per rendere effettive le modifiche, riavvia il servizio Redis:
|
1 |
sudo systemctl restart redis.service |
Testare Redis
È sempre una buona idea verificare se Redis funziona correttamente prima di utilizzarlo ulteriormente. Ecco alcuni modi per testare il comportamento di Redis. Il primo passo consiste nel verificare se il servizio Redis è attivo e funzionante:
|
1 |
sudo systemctl status redis |
Qui, Redis è già in esecuzione. Per impostazione predefinita, il servizio Redis si avvierà all'avvio. Se il servizio Redis deve essere eseguito manualmente, disabilitalo:
|
1 |
sudo systemctl disable redis |
Il test successivo consiste nel verificare utilizzando la console di Redis. Avvia il client a riga di comando di Redis:
|
1 |
redis-cli |
Esegui il comando “ping”:
|
1 |
ping |
L'output conferma che la connessione al server è ancora attiva. Il test successivo consiste nel verificare se consente di impostare le chiavi. Crea una chiave “temp” con il valore “hello world”:
|
1 |
set temp “hello world” |
Recupera il valore utilizzando il comando “get”:
|
1 |
get temp |
Se finora tutto funziona correttamente, Redis dovrebbe restituire il valore della chiave senza alcun problema. Chiudi il client a riga di comando di Redis:
|
1 |
exit |
Il test finale consiste nel verificare se Redis è in grado di persistere i dati anche se viene arrestato o riavviato. Riavvia il servizio Redis:
|
1 |
sudo systemctl restart redis |
Se ricevi un errore durante l'esecuzione del comando precedente, usa il comando “systemctl enable redis-server”:
|
1 |
sudo systemctl enable redis-server |
Avvia il client a riga di comando di Redis e recupera il valore della chiave “temp” creata in precedenza:
|
1 2 |
redis-cli get temp |
Questo conclude i test di Redis. Il tuo server Redis è ora pronto per essere utilizzato per lo scopo desiderato.
Mettere in sicurezza Redis
A questo punto, Redis è completamente operativo. Tuttavia, alcune delle sue configurazioni predefinite non offrono la massima sicurezza. Se non aggiornate, qualsiasi malintenzionato può sfruttare l'opportunità per accedere al server e ai suoi dati. Questa sezione mostrerà come mitigare queste vulnerabilità. Sebbene questi passaggi siano facoltativi, si consiglia vivamente di seguirli per rafforzare la sicurezza del sistema.
Associazione a localhost
Per impostazione predefinita, Redis è accessibile solo da localhost. Tuttavia, se Redis è stato configurato su un server remoto, la configurazione deve essere aggiornata per consentire la connessione da qualsiasi luogo. Tuttavia, potrebbe non essere sicuro come l'associazione a localhost. Per associare nuovamente Redis a localhost, apri il file di configurazione di Redis in un editor di testo:
|
1 |
sudo vim /etc/redis/redis.conf |
Scorri verso il basso e trova la riga seguente. Assicurati che non sia commentata:
|
1 |
bind 127.0.0.1 ::1 |
Salva e chiudi il file. Quindi, riavvia il servizio Redis per assicurarti che la modifica sia immediatamente efficace:
|
1 |
sudo systemctl restart redis |
Verifica che la modifica sia andata a buon fine:
|
1 |
sudo netstat -lnp | grep redis |
Se ricevi un errore come ‘netstat: command not found’, usa il comando per installare net-tools “sudo apt-get install net-tools”. L'output verifica che “redis-server” è associato correttamente a localhost (127.0.0.1), riflettendo la modifica apportata di recente. Se è presente un altro indirizzo IP (ad esempio, 0.0.0.0), ricontrolla il file di configurazione e riavvia nuovamente il server Redis.
Configurazione della password di Redis
La configurazione di una password consente l'uso di una funzionalità di sicurezza integrata di Redis – il comando “AUTH”. Richiede ai client di autenticarsi per accedere al database. Per impostazione predefinita, Redis non ha alcuna password configurata. La password deve essere dichiarata nel file di configurazione di Redis. Apri il file di configurazione in un editor di testo:
|
1 |
sudo vim /etc/redis/redis.conf |
Quindi, scorri verso il basso fino alla riga seguente e decommentala:
|
1 |
requirepass foobared |
Dopo aver decommentato, “foobared” sarà la password predefinita. Modificala con una password a tua scelta. Quando si tratta di Redis, la robustezza della password è un fattore di grande importanza. Poiché Redis è un server ad alte prestazioni, è potenzialmente più facile da sfruttare tramite attacchi di forza bruta. Questo è il motivo per cui il file di configurazione contiene direttamente il seguente avviso. Ecco un rapido esempio di generazione di una password casuale molto robusta. Useremo il comando OpenSSL per generare una stringa casuale:
|
1 |
echo $(openssl rand 60 | openssl base64 -A) |
Dopo aver configurato una nuova password, riavvia il servizio Redis per rendere effettive le modifiche:
|
1 |
sudo systemctl restart redis.service |
È il momento di verificare se la password è stata applicata correttamente. Avvia la console a riga di comando di Redis:
|
1 |
redis-cli |
Quindi, prova a impostare una nuova chiave:
|
1 |
set user “cloudsigma” |
Redis rifiuterà la richiesta poiché non vi è alcuna autenticazione per l'azione. Per eseguire qualsiasi azione sul server, l'utente deve prima essere autorizzato. Autorizza l'utente utilizzando il seguente comando:
|
1 |
auth <password> |
Se la password è corretta, Redis confermerà l'azione. Ora, Redis consentirà l'accesso alle funzionalità del suo server:
|
1 2 |
set user “cloudsigma” get user |
Per ora, il nostro lavoro con la console Redis è terminato. Puoi chiudere la console:
|
1 |
exit |
Rinominare i comandi pericolosi
Redis consente di rinominare o disabilitare completamente alcuni comandi considerati pericolosi. Questa è un'altra importante funzionalità di sicurezza integrata di Redis. Perché i comandi sono considerati pericolosi? Se eseguiti da un utente non autorizzato, questi comandi possono riconfigurare, distruggere o cancellare i dati nel server. È pratica comune disabilitare/rinominare un gruppo di comandi Redis pericolosi. Nota che la minaccia alla sicurezza di un comando dipende dalla situazione. Ad esempio, alcuni dei seguenti comandi potrebbero essere necessari regolarmente. In questi casi, la disattivazione non è raccomandata. In una situazione del genere, rinominare il comando potrebbe rivelarsi più vantaggioso. Ecco un rapido elenco dei comandi considerati pericolosi. Questo è un buon punto di partenza per migliorare la sicurezza del server Redis:
- FLUSHDB
- FLUSHALL
- KEYS
- PEXPIRE
- DEL
- CONFIG
- SHUTDOWN
- BGREWRITEAOF
- BGSAVE
- SAVE
- SPOP
- SREM
- RENAME
- DEBUG
Per rinominare o disabilitare un comando, questo deve essere dichiarato nel file di configurazione di Redis. Apri il file di configurazione di Redis e aggiungi le seguenti righe. Qui, "rename-command" viene utilizzato per rinominare i comandi in una stringa vuota. Aggiungi tutte le voci necessarie:
|
1 |
sudo vim /etc/redis/redis.conf |
|
1 2 3 4 |
$ rename-command FLUSHDB "" $ rename-command FLUSHALL "" $ rename-command SHUTDOWN "" $ rename-command CONFIG "" |
Allo stesso modo, è anche possibile rinominare i comandi con un nome diverso. In determinate situazioni, ciò potrebbe offrire maggiore flessibilità:
|
1 2 3 4 |
$ rename-command FLUSHDB "command_1" $ rename-command FLUSHALL "command_2" $ rename-command SHUTDOWN "command_3" $ rename-command CONFIG "command_4" |
Salva il file ed esci dall'editor. Per rendere effettive le modifiche, riavvia il servizio Redis:
|
1 |
sudo systemctl restart redis.service |
Verifica le modifiche. Successivamente, avvia la console Redis e autentica l'accesso:
|
1 2 |
redis-cli auth <password> |
Ipotizziamo che il comando "CONFIG" sia stato disabilitato o rinominato. Prova a utilizzare il seguente comando "CONFIG". Fallirà:
|
1 |
config get requirepass |
Se il comando è stato disabilitato, non sarà possibile accedervi finché non verrà riabilitato. Tuttavia, se è stato rinominato, utilizza il nuovo alias:
|
1 |
command_4 get requirepass |
Conclusione
Questo tutorial mostra come installare, proteggere, configurare e convalidare un'installazione di Redis. Mostra anche come utilizzare le funzionalità di sicurezza integrate di Redis per renderlo meno vulnerabile agli attacchi. Tuttavia, se qualcuno ha già effettuato l'accesso al server, è piuttosto facile aggirare le funzionalità di sicurezza specifiche di Redis. Ecco perché avere un firewall per proteggere l'accesso al server Redis è fondamentale.
Buon divertimento!






Commenti
Ancora nessun commento. Scrivi il primo.