Una versione precedente di questo tutorial è stato scritto da Kathleen Juell.
- Introduzione
- Prerequisiti
- Passo 1 — Installazione di Memcached
- Passo 2 — Configurazione delle impostazioni di rete Memcached (opzionale)
- Configurazione di IPv6
- Configurazione UDP
- Configurazione di socket di dominio Unix
- Passo 3 — Aggiunta di utenti autorizzati
- Aggiunta di un utente autenticato
- Configurazione del supporto SASL
- Passo 4 — Consentire l’accesso tramite la rete privata (opzionale)
- Limitare l’accesso IP con i firewall
- Associazione di Memcached all’interfaccia di rete privata
- Conclusione
Introduzione
I sistemi di memorizzazione nella cache degli oggetti di memoria come Memcached possono ottimizzare le prestazioni del database di back-end memorizzando temporaneamente le informazioni in memoria, conservando i record richiesti frequentemente o di recente. In questo modo, riducono il numero di richieste dirette ai database.
In questa guida, imparerai come installare e configurare un server Memcached. Imparerai anche come aggiungere l’autenticazione per proteggere Memcached utilizzando Simple Authentication and Security Layer (SASL). Infine, imparerai come associare Memcached a un’interfaccia di rete locale o privata per assicurarti che sia accessibile solo su reti attendibili, dagli utenti autenticati.
Prerequisiti
Per seguire questo tutorial, è necessario:
- Un server Ubuntu 20.04 con un utente non root sudo e un firewall abilitato. Per impostare questo, è possibile seguire la nostra configurazione iniziale del server con Ubuntu 20.04 tutorial.
Con questi prerequisiti in atto, sarai pronto per installare e proteggere il tuo server Memcached.
In alternativa, se si desidera sperimentare l’installazione e la configurazione di Memcached nel browser utilizzando un terminale interattivo, fare clic sul Avvia un terminale interattivo! pulsante qui sotto per iniziare.
Passo 1 — Installazione di Memcached
Se non si dispone già di Memcached installato sul server, è possibile installarlo dai repository ufficiali di Ubuntu. Innanzitutto, assicurarsi che il pacchetto locale indice viene aggiornato utilizzando il seguente comando:
- sudo apt update
quindi, installare il pacchetto ufficiale come segue:
- sudo apt install memcached
È inoltre possibile installare libmemcached-tools
, che è un pacchetto che contiene vari strumenti che è possibile utilizzare per esaminare, controllare e gestire il vostro server Memcached. Aggiungi il pacchetto al tuo server con il seguente comando:
- sudo apt install libmemcached-tools
Memcached dovrebbe ora essere installato come servizio sul tuo server, insieme a strumenti che ti permetteranno di testare la sua connettività.
Per avviare Memcached, eseguire il seguente comando systemctl
:
- sudo systemctl start memcached
Ora è possibile passare alla protezione delle impostazioni di configurazione.
Passo 2 — Configurazione delle impostazioni di rete Memcached (opzionale)
Se il server Memcached deve solo supportare le connessioni IPv4 locali utilizzando TCP, è possibile saltare questa sezione e continuare al passo 3 in questo tutorial. In caso contrario, se si desidera configurare Memcached per utilizzare socket UDP, socket di dominio Unix o aggiungere il supporto per le connessioni IPv6, procedere con i passaggi pertinenti in questa sezione del tutorial.
Innanzitutto, assicurarsi che l’istanza Memcached sia in ascolto sull’interfaccia di loopback IPv4 locale 127.0.0.1
. La versione corrente di Memcached fornita con Ubuntu e Debian ha il suo parametro di configurazione -l
impostato sull’interfaccia locale, il che significa che è configurato per accettare solo connessioni dal server in cui Memcached è in esecuzione.
Verificare che Memcached sia attualmente associato all’interfaccia IPv4 locale 127.0.0.1
e in ascolto solo per le connessioni TCP utilizzando il comando ss
:
- sudo ss -plunt
I vari flag modificheranno l’output ss
nei seguenti modi:
-
-p
aggiunge il nome del processo che utilizza un socket -
-l
limiti di output per i socket in ascolto solo, come contrasto anche tra socket connesso ad altri sistemi -
-u
include UDP sockets in uscita -
-n
visualizza i valori numerici in uscita invece leggibili i nomi e i valori -
-t
include basate su TCP sockets in uscita
Si dovrebbe ricevere un output simile al seguente:
OutputNetid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process . . .tcp LISTEN 0 1024 127.0.0.1:11211 0.0.0.0:* users:(("memcached",pid=8889,fd=26)). . .
Questo output conferma che memcached
è associato all’indirizzo di loopback IPv4 127.0.0.1
utilizzando solo il protocollo TCP.
Dopo aver confermato che Memcached è configurato per supportare IPv4 solo con connessioni TCP, è possibile modificare /etc/memcached.conf
per aggiungere il supporto per le connessioni UDP, Unix Domain Socket o IPv6.
Configurazione di IPv6
Per abilitare le connessioni IPv6 a Memcached, aprire il file /etc/memcached.conf
con nano
o l’editor preferito:
- sudo nano /etc/memcached.conf
Innanzitutto, trova la seguente riga nel file:
. . .-l 127.0.0.1
Questa linea è dove Memcached è configurato per l’ascolto sull’interfaccia IPv4 locale. Per aggiungere il supporto IPv6, aggiungere una riga contenente l’indirizzo di loopback locale IPv6 (::1) in questo modo:
. . .-l 127.0.0.1-l ::1
Salvare e chiudere il file premendo CTRL+O
quindi ENTER
per salvare, quindi CTRL+X
per uscire da nano
. Quindi riavviare Memcached utilizzando il comando systemctl
:
- sudo systemctl restart memcached
Ora puoi verificare che Memcached stia ascoltando anche le connessioni IPv6 ripetendo il comando ss
dalla sezione precedente:
- sudo ss -plunt
Si dovrebbe ricevere uscita come il seguente:
OutputNetid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process . . .tcp LISTEN 0 1024 127.0.0.1:11211 0.0.0.0:* users:(("memcached",pid=8889,fd=26)) . . .tcp LISTEN 0 1024 :11211 :* users:(("memcached",pid=8889,fd=27))
Le porzioni evidenziate dell’output indicano che Memcached è ora in ascolto per le connessioni TCP sull’interfaccia IPv6 locale.
Si noti che se si desidera disabilitare il supporto IPv4 e ascoltare solo le connessioni IPv6, è possibile rimuovere la riga -l 127.0.0.1
da /etc/memcached.conf
e riavviare il servizio utilizzando il comando systemctl
.
Configurazione UDP
Se si desidera utilizzare Memcached con socket UDP, è possibile abilitare il supporto UDP modificando il file di configurazione /etc/memcached.conf
.
Apri /etc/memcached.conf
usando nano
o il tuo editor preferito, quindi aggiungi la seguente riga alla fine del file:
. . .-U 11211
Se non è necessario il supporto TCP, trovare la riga -p 11211
e cambiarla in -p 0
per disabilitare le connessioni TCP.
Quando hai finito di modificare il file, salvalo e chiudilo inserendo CTRL+O
per salvare e poi CTRL+X
per uscire.
Quindi, riavviare il servizio Memcached con il comando systemctl
per applicare le modifiche:
- sudo systemctl restart memcached
Verificare che Memcached stia ascoltando le connessioni UDP utilizzando nuovamente il comando ss -plunt
:
- sudo ss -plunt
Se hai disabilitato il supporto TCP e hai abilitato le connessioni IPv6, dovresti ricevere l’output come segue:
Output Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process . . .udp UNCONN 0 0 127.0.0.1:11211 0.0.0.0:* users:(("memcached",pid=8889,fd=28))udp UNCONN 0 0 :11211 :* users:(("memcached",pid=8889,fd=29)). . .
Nota che il tuo output potrebbe essere diverso se hai solo connessioni IPv4 abilitate e se hai lasciato le connessioni TCP abilitate.
Configurazione di socket di dominio Unix
Se si desidera utilizzare Memcached con socket di dominio Unix, è possibile abilitare questo supporto modificando il file di configurazione /etc/memcached.conf
. Si noti che se si configura Memcached per utilizzare un socket di dominio Unix, Memcached disabiliterà il supporto TCP e UDP, quindi assicurarsi che le applicazioni non debbano connettersi utilizzando tali protocolli prima di abilitare il supporto socket.
Apri /etc/memcached.conf
usando nano
o il tuo editor preferito, quindi aggiungi le seguenti righe alla fine del file:
. . .-s /var/run/memcached/memcached.sock-a 660
Il flag -a
determina le autorizzazioni sul file del socket. Assicurati che l’utente che deve connettersi a Memcached faccia parte del gruppo memcache
sul tuo server, altrimenti riceverà un messaggio di autorizzazione negato quando tenterà di accedere al socket.
Quindi, riavviare il servizio Memcached con il comando systemctl
per applicare le modifiche:
- sudo systemctl restart memcached
Verificare che Memcached sia in ascolto per le connessioni Socket del dominio Unix utilizzando il comando ss -lnx
:
- sudo ss -lnx | grep memcached
Il flag -x
limita l’output di ss
per visualizzare i file socket. Dovresti ricevere output come il seguente:
Outputu_str LISTEN 0 1024 /var/run/memcached/memcached.sock 20234658 * 0
Dopo aver configurato le impostazioni di rete di Memcached, è possibile procedere al passaggio successivo in questo tutorial, ovvero l’aggiunta di SASL per l’autenticazione a Memcached.
Passo 3 — Aggiunta di utenti autorizzati
Per aggiungere utenti autenticati al servizio Memcached, è possibile utilizzare Simple Authentication and Security Layer (SASL), un framework che elimina le procedure di autenticazione dai protocolli applicativi. Per prima cosa aggiungerai il supporto per SASL al tuo server, quindi configurerai un utente con credenziali di autenticazione. Con tutto a posto, è quindi possibile abilitare SASL all’interno del file di configurazione di Memcached e confermare che tutto funzioni correttamente.
Aggiunta di un utente autenticato
Per iniziare ad aggiungere il supporto SASL, è necessario installare il pacchetto sasl2-bin
, che contiene programmi amministrativi per il database utente SASL. Questo strumento ti consentirà di creare uno o più utenti autenticati. Eseguire il seguente comando per installarlo:
- sudo apt install sasl2-bin
Quindi, creare la directory e il file che Memcached controllerà per le sue impostazioni di configurazione SASL utilizzando il comando mkdir
:
- sudo mkdir -p /etc/sasl2
Ora crea il file di configurazione SASL usando nano
o il tuo editor preferito:
- sudo nano /etc/sasl2/memcached.conf
Aggiungere le seguenti righe:
log_level: 5mech_list: plainsasldb_path: /etc/sasl2/memcached-sasldb2
Oltre a specificare il livello di registrazione, mech_list
è impostato su plain
, che indica a Memcached che dovrebbe utilizzare il proprio file di password e verificare una password in chiaro. L’ultima riga aggiunta specifica il percorso del file di database utente che verrà creato successivamente. Salvare e chiudere il file quando si è finito.
Ora si creerà un database SASL con credenziali utente. Verrà utilizzato il comando saslpasswd2
con il flag -c
per creare una nuova voce utente nel database SASL. L’utente sarà sammy qui, ma puoi sostituire questo nome con il tuo utente. Il flag -f
specifica il percorso del database, che sarà il percorso impostato in /etc/sasl2/memcached.conf
:
- sudo saslpasswd2 -a memcached -c -f /etc/sasl2/memcached-sasldb2 sammy
Infine, assegnare all’utente memcache e al gruppo la proprietà del database SASL con il seguente comando chown
:
- sudo chown memcache:memcache /etc/sasl2/memcached-sasldb2
Ora hai una configurazione SASL in atto che Memcached può utilizzare per l’autenticazione. Nella sezione successiva confermerai che Memcached è in esecuzione con le impostazioni predefinite, quindi riconfiguralo e verifica che funzioni con l’autenticazione SASL.
Configurazione del supporto SASL
Possiamo prima testare la connettività della nostra istanza Memcached con il comando memcstat
. Questo controllo ci aiuterà a stabilire che Memcached è in esecuzione e configurato correttamente prima che SASL e l’autenticazione utente siano abilitate. Dopo aver apportato modifiche ai nostri file di configurazione eseguiremo di nuovo il comando per verificare la presenza di output diversi.
Per verificare che Memcached sia attivo e funzionante utilizzando il comando memcstat
, digitare quanto segue:
- memcstat --servers="127.0.0.1"
Se si utilizza IPv6, sostituire ::1
al posto dell’indirizzo IPv4 127.0.0.1
. Se si utilizza un socket di dominio Unix, utilizzare il percorso del socket al posto dell’indirizzo IP, ad esempio --servers=/var/run/memcached/memached.sock
.
Quando si esegue il memcstat
comando e connettersi a Memcached con successo, si dovrebbe ricevere uscita come il seguente:
OutputServer: 127.0.0.1 (11211) pid: 2299875 uptime: 2020 time: 1632404590 version: 1.5.22 . . .
Nota: se si utilizza Memcached con supporto UDP, il comando memcstat
non sarà in grado di connettersi alla porta UDP. È possibile utilizzare il seguente comando netcat
per verificare la connettività:
- nc -u 127.0.0.1 11211 -vz
Se Memcached risponde, dovresti ricevere l’output come segue:
OutputConnection to 127.0.0.1 11211 port succeeded!
Se si utilizza Memcached con IPv6 e UDP, il comando dovrebbe essere il seguente:
- nc -6 -u ::1 11211 -vz
Ora puoi passare all’abilitazione di SASL. Per fare ciò, aggiungere il parametro -S
a /etc/memcached.conf
. Apri di nuovo il file con nano
o il tuo editor preferito:
- sudo nano /etc/memcached.conf
Nella parte inferiore del file, aggiungere quanto segue:
. . .-S
Quindi, trova e decommenta l’opzione -vv
, che fornirà un output dettagliato a /var/log/memcached
. La riga non commentata dovrebbe essere simile a questa:
. . .-vv
Salva e chiudi il file.
Ora riavvia il servizio Memcached utilizzando il seguente comando systemctl
:
- sudo systemctl restart memcached
Quindi, controllare i registri journalctl
per Memcached per essere sicuri che il supporto SASL sia abilitato:
- sudo journalctl -u memcached |grep SASL
Dovresti ricevere una riga di output come la seguente, che indica che il supporto SASL è stato inizializzato:
OutputSep 23 17:00:55 memcached systemd-memcached-wrapper: Initialized SASL.
Ora è possibile controllare di nuovo la connettività a Memcached. Con il supporto SASL attivo e inizializzato, il seguente comando memcstat
dovrebbe fallire senza credenziali di autenticazione valide:
- memcstat --servers="127.0.0.1"
Il comando non dovrebbe produrre output. Digitare il seguente comando shell per verificarne lo stato:
- echo $?
$?
restituirà sempre il codice di uscita dell’ultimo comando uscito. In genere, qualsiasi cosa oltre a 0
indica un errore di processo. In questo caso, dovresti ricevere uno stato di uscita di 1
, che indica che il comando memcstat
non è riuscito.
Eseguendo nuovamente memcstat
, questa volta con un nome utente e una password confermerà se il processo di autenticazione ha funzionato o meno. Esegui il seguente comando con le tue credenziali sostituite al posto dei valori sammy
e your_password ‘ se hai usato credenziali diverse:
- memcstat --servers="127.0.0.1" --username=sammy --password=your_password
Dovresti ricevere output come il seguente:
OutputServer: 127.0.0.1 (11211) pid: 3831 uptime: 9 time: 1520028517 version: 1.4.25 . . .
Il servizio Memcached è ora configurato e in esecuzione con supporto SASL e autenticazione utente.
Passo 4 — Consentire l’accesso tramite la rete privata (opzionale)
Per impostazione predefinita Memcached è configurato solo per l’ascolto sull’interfaccia di loopback locale (127.0.0.1
), che protegge l’interfaccia Memcached dall’esposizione a parti esterne. Tuttavia, potrebbero esserci casi in cui è necessario consentire l’accesso da altri server. In questo caso, è possibile regolare le impostazioni di configurazione per associare Memcached a un’interfaccia di rete privata.
Nota: Tratteremo come configurare le impostazioni del firewall utilizzando UFW in questa sezione, ma è anche possibile utilizzare i firewall Cloud DigitalOcean per creare queste impostazioni. Per ulteriori informazioni sulla configurazione dei firewall cloud DigitalOcean, consulta la nostra Introduzione ai firewall cloud DigitalOcean. Per ulteriori informazioni su come limitare il traffico in entrata a determinate macchine, consulta la sezione di questo tutorial sull’applicazione delle regole del firewall utilizzando tag e nomi di server e la nostra discussione sui tag del firewall.
Limitare l’accesso IP con i firewall
Prima di regolare le impostazioni di configurazione, è consigliabile impostare le regole del firewall per limitare le macchine che possono connettersi al server Memcached. Per prima cosa è necessario registrare l’indirizzo IP privato di qualsiasi macchina che si desidera utilizzare per connettersi a Memcached. Una volta che hai l’indirizzo IP privato (o gli indirizzi), aggiungerai una regola firewall esplicita per consentire alla macchina di accedere a Memcached.
Se si utilizza il firewall UFW, è possibile limitare l’accesso all’istanza Memcached digitando quanto segue sul server Memcached:
- sudo ufw allow from client_system_private_IP/32 to any port 11211
Se più di un sistema accede a Memcached tramite la rete privata, assicurarsi di aggiungere ulteriori regole ufw
per ogni macchina utilizzando la regola precedente come modello.
Puoi saperne di più sui firewall UFW leggendo la nostra guida ufw essentials.
Con queste modifiche in atto, è possibile regolare il servizio Memcached per associare all’interfaccia di rete privata del server.
Associazione di Memcached all’interfaccia di rete privata
Ora che il firewall è attivo, è possibile regolare la configurazione di Memcached per l’associazione all’interfaccia di rete privata del server anziché 127.0.0.1
.
Innanzitutto, trovare l’interfaccia di rete privata per il server Memcached utilizzando il seguente comando ip
- ip -brief address show
A seconda della configurazione di rete del server, l’output potrebbe essere diverso dal seguente esempio:
Outputlo UNKNOWN 127.0.0.1/8 ::1/128eth0 UP 203.0.113.1/20 10.10.0.5/16 2001:DB8::1/64 fe80::7ced:9ff:fe52:4695/64eth1 UP 10.136.32.212/16 fe80::2cee:92ff:fe21:8bc4/64
In questo esempio, le interfacce di rete sono identificate dai loro nomi eth0
e eth1
. Gli indirizzi IPv4 evidenziati sulla riga eth0
sono gli indirizzi IP pubblici per il server.
L’indirizzo 10.136.32.212
evidenziato sulla riga eth1
è l’indirizzo IPv4 privato per il server e l’indirizzo fe80::2cee:92ff:fe21:8bc4
è l’indirizzo IPv6 privato. I tuoi indirizzi IP saranno diversi ma rientreranno sempre nei seguenti intervalli in base alle specifiche RFC 1918):
-
10.0.0.0
a10.255.255.255
(prefisso 10/8) -
172.16.0.0
a172.31.255.255
(prefisso 172.16/12) -
192.168.0.0
a192.168.255.255
(192.prefisso 168/16)
Una volta trovato l’indirizzo IP privato o gli indirizzi del server, aprire nuovamente il file /etc/memcached.conf
utilizzando nano
o l’editor preferito:
- sudo nano /etc/memcached.conf
Trova la riga -l 127.0.0.1
selezionata o modificata in precedenza e modifica l’indirizzo in modo che corrisponda all’interfaccia di rete privata del tuo server:
. . .-l memcached_servers_private_IP. . .
Se si desidera che Memcached ascolti su più indirizzi, aggiungere un’altra riga simile per ogni indirizzo, IPv4 o IPv6 utilizzando il formato -l memcached_servers_private_IP
.
Salva e chiudi il file quando hai finito.
Quindi, riavviare il servizio Memcached:
- sudo systemctl restart memcached
Controllare le nuove impostazioni con ss
per confermare la modifica:
- sudo ss -plunt
OutputNetid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process. . .tcp LISTEN 0 1024 10.137.0.2:11211 0.0.0.0:* users:(("memcached",pid=8991,fd=27)). . .
Verifica la connettività dal tuo client esterno per assicurarti di poter ancora raggiungere il servizio. È consigliabile controllare anche l’accesso da un client non autorizzato (provare a connettersi senza un utente e una password) per assicurarsi che l’autenticazione SASL funzioni come previsto. È anche una buona idea provare a connettersi a Memcached da un server diverso a cui non è consentito connettersi per verificare che le regole del firewall create siano efficaci.
Conclusione
In questo tutorial hai esplorato come configurare Memcached con socket di dominio IPv4, IPv6, TCP, UDP e Unix. Hai anche imparato come proteggere il tuo server Memcached abilitando l’autenticazione SASL. Infine, hai imparato come associare Memcached all’interfaccia di rete locale o privata e come configurare le regole del firewall per limitare l’accesso a Memcached.
Per ulteriori informazioni su Memcached, consulta la documentazione del progetto.