Come installare e proteggere Memcached su Ubuntu 20.04

Una versione precedente di questo tutorial è stato scritto da Kathleen Juell.

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.

Avvia un terminale interattivo!

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:

Output
Netid 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:

/etc/memcached.conf
. . .-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:

/etc/memcached.conf
. . .-l 127.0.0.1-l ::1

Salvare e chiudere il file premendo CTRL+O quindi ENTER per salvare, quindi CTRL+Xper 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:

Output
Netid 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:

/etc/memcached.conf
. . .-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:

/etc/memcached.conf
. . .-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:

Output
u_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:

/etc/sasl2 / memcached.conf
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:

Output
Server: 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:

Output
Connection 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:

/etc/memcached.conf
. . .-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:

/etc/memcached.conf
. . .-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:

Output
Sep 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:

Output
Server: 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:

Output
lo 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 a 10.255.255.255 (prefisso 10/8)
  • 172.16.0.0 a 172.31.255.255 (prefisso 172.16/12)
  • 192.168.0.0 a 192.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:

/etc/memcached.conf
. . .-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
Output
Netid 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.

Write a Comment

Il tuo indirizzo email non sarà pubblicato.