- Learn
- Redis: la guida
- Sicurezza
Sicurezza
Per un DBMS come Redis, che trova nella rete il suo habitat naturale, gli aspetti legati alla sicurezza sono fondamentali. Quando creeremo servizi web che lo usano come meccanismo di memorizzazione (persistente o meno) dobbiamo fare in modo che non vi siano vie dirette di accesso ai database ma che ogni forma di comunicazione passi dalle API appositamente predisposte. In questa lezione, fissiamo alcuni concetti della configurazione che permettono di mettere in sicurezza il DBMS.
Indirizzi IP e porte TCP
Una delle prime decisioni che devono essere prese per una corretta gestione del proprio server Redis riguarda gli indirizzi IP e la porta TCP su cui dovrà rendersi disponibile alla connessione. Nel file di configurazione esistono appositamente due opzioni:
bind
, che determina su quali indirizzi IP il server rimarrà in ascolto. Da lì potrà essere contattato dalle macchine che avranno accesso alle relative reti. L’impostazione di default permette l’accesso solo dalla macchina locale:
Ciò può essere cambiato abbinando un indirizzo diverso o più indirizzi. Ad esempio, con la seguente impostazione:bind 127.0.0.1
esponiamo il server con indirizzo 192.168.56.3 oltrechè ai servizi locali.bind 127.0.0.1 192.168.56.3
port
, che introduce il numero di porta TCP, fissata di default a 6379
Specificare tali parametri è fondamentale perchè fornisce una grossa scrematura all’ingresso e permette di decidere a chi mettere a disposizione il server. Oltre a ciò, come presumibile, potranno essere associate all’installazione di Redis opportune regole del firewall.
Si ricorda inoltre che indirizzo IP e porta TCP possono essere passati anche all’avvio del servizio senza modificare il file di configurazione mediante opzioni, come specificato in una delle prime lezioni di questa guida.
Protected mode
A partire dalla versione 3.2, Redis ha visto l’introduzione, per motivi di sicurezza, di una nuova modalità di lavoro: il protected mode. Questo si applica in automatico ad un server Redis nel caso in cui non sia stata nè impostata l’opzione di bind (niente bind significa connessione aperta su ogni indirizzo IP della macchina) e non sia stata impostata alcuna password di autenticazione (lo tratteremo più avanti in questa stessa lezione) ed inoltre sia impostata a “yes” l’opzione del file di configurazione protected-mode.
Pertanto, qualora a fronte di un’operazione da remoto ricevessimo un messaggio di errore contraddistinto dall’incipit DENIED Redis is running in protected mode because…, dovremo risolvere il problema impostando uno o più indirizzi di bind o una password di accesso (o meglio ancora entrambi). Il problema potrebbe essere aggirato impostando a “no” l’opzione protected-mode, ma è un rimedio che va evitato in quanto tale modalità di sicurezza è stata introdotta appositamente al fine di contrastare il proliferare di installazioni Redis non sicure.
Connessione a Redis e test del server
Per poter verificare le proprie configurazioni di sicurezza è importante sapersi connettere ad una installazione remota di Redis e verificarne la disponibilità. Tali strumenti risulteranno utili soprattutto quando si tratterà di eseguire installazioni in cluster o impostare replica di dati su più server Redis.
Con il comando redis-cli ci si può connettere ad un altro server Redis fornendone indirizzo IP e porta TCP di connessione (se quest’ultima è la 6379 può essere omessa in quanto valore di default). Il seguente comando esegue la connessione all’indirizzo IP 192.68.56.3:
$ redis-cli -h 192.168.56.3
mentre in questo secondo caso specifichiamo una porta TCP:
$ redis-cli -h 192.168.56.3 -p 5588
Nel caso in cui si ottenga un messaggio del tipo Could not connect to Redis at 192.168.56.3:5588: Connection refused”, significa che la connessione non è stata permessa, probabilmente per le impostazioni di configurazione che abbiamo assegnato noi. In caso contrario (quello di connessione autorizzata) si otterrà come risposta direttamente l’accesso alla shell di Redis. A scopo di test, risulta molto utile il comando PING che interroga il server di destinazione ed in caso di collegamento ben riuscito replica con la stringa “PONG” a meno che non passiamo una nostra stringa personalizzata che verrà restituita come risposta. Nelle seguenti righe vediamo il comando utilizzato nei confronti del server locale:
> PING
PONG
> PING "messaggio di prova"
"messaggio di prova"
Per una verifica da remoto di un altro server, possiamo passare sempre da redis-cli. Per ottenere il medesimo
risultato in maniera più rapida, il PING
(come ogni altro comando Redis) può essere inoltrato anche direttamente
via redis-cli senza aprire la console di Redis:
$ redis-cli -h 192.168.56.3 -p 5588 PING
PONG
Autenticazione
Una prassi fondamentale per la sicurezza di Redis è l’impostazione di una parola chiave di accesso. La si può immettere nella configurazione mediante l’opzione requirepass:
requirepass parolachiave
mentre la macchina client che farà accesso potrà usare il comando AUTH:
$ redis-cli -h 192.168.56.3
> SET nome Luca
(error) NOAUTH Authentication required.
> AUTH parolachiave
OK
> SET nome Luca
OK
In queste righe, abbiamo provato a fare accesso ad un server protetto da password. Il tentativo è stato respinto
ma dopo l’utilizzo della direttiva AUTH
siamo stati autorizzati e, come si vede, siamo riusciti anche a memorizzare una stringa,
a conferma della piena operatività conseguita.
Se vuoi aggiornamenti su Database, NoSQL, Sicurezza inserisci la tua email nel box qui sotto:
Compilando il presente form acconsento a ricevere le informazioni relative ai servizi di cui alla presente pagina ai sensi dell'informativa sulla privacy.
La tua iscrizione è andata a buon fine. Se vuoi ricevere informazioni personalizzate compila anche i seguenti campi opzionali:
Compilando il presente form acconsento a ricevere le informazioni relative ai servizi di cui alla presente pagina ai sensi dell'informativa sulla privacy.
I Video di HTML.it
Design Pattern in PHP: Facade
Il Design Pattern Facade, che letteralmente significa “Facciata”, consente ai programmatori di creare ed accedere ad un unico oggetto per […]