hur man installerar och säkrar Memcached på Ubuntu 20.04

en tidigare version av denna handledning skrevs av Kathleen Juell.

Inledning

Memory object caching system som Memcached kan optimera backend databasprestanda genom att tillfälligt lagra information i minnet, behålla ofta eller nyligen begärda poster. På detta sätt minskar de antalet direkta förfrågningar till dina databaser.

i den här guiden lär du dig hur du installerar och konfigurerar en Memcached-server. Du lär dig också hur du lägger till autentisering för att säkra Memcached med SASL (Simple Authentication and Security Layer). Slutligen lär du dig att binda Memcached till ett lokalt eller privat nätverksgränssnitt för att säkerställa att det bara är tillgängligt på betrodda nätverk, av autentiserade användare.

förutsättningar

för att följa denna handledning behöver du:

  • en Ubuntu 20.04-server med en sudo-icke-root-användare och en brandvägg aktiverad. För att ställa in detta kan du följa vår första serverinställning med Ubuntu 20.04-handledning.

med dessa förutsättningar på plats är du redo att installera och säkra din Memcached-server.

alternativt, om du vill experimentera med att installera och konfigurera Memcached i din webbläsare med en interaktiv terminal, klicka på Starta en interaktiv Terminal! knappen nedan för att komma igång.

starta en interaktiv Terminal!

Steg 1 — Installera Memcached

om du inte redan har Memcached installerat på din server kan du installera den från de officiella Ubuntu-repositorierna. Kontrollera först att ditt lokala paketindex uppdateras med följande kommando:

  • sudo apt update

installera sedan det officiella paketet enligt följande:

  • sudo apt install memcached

du kan också installera libmemcached-tools, som är ett paket som innehåller olika verktyg som du kan använda för att undersöka, testa och hantera din Memcached-server. Lägg till paketet på din server med följande kommando:

  • sudo apt install libmemcached-tools

Memcached ska nu installeras som en tjänst på din server, tillsammans med verktyg som gör att du kan testa dess anslutning.

för att starta Memcached, kör följande systemctl kommando:

  • sudo systemctl start memcached

nu kan du gå vidare för att säkra dess konfigurationsinställningar.

steg 2 — Konfigurera Memcached-nätverksinställningar (tillval)

om din Memcached-server bara behöver stödja lokala IPv4-anslutningar med TCP kan du hoppa över det här avsnittet och fortsätta till steg 3 i den här handledningen. Annars, om du vill konfigurera Memcached för att använda UDP-uttag, Unix-Domänuttag eller lägga till stöd för IPv6-anslutningar, fortsätt sedan med relevanta steg i det här avsnittet i handledningen.

kontrollera först att din Memcached-instans lyssnar på det lokala IPv4 loopback-gränssnittet 127.0.0.1. Den nuvarande versionen av Memcached som levereras med Ubuntu och Debian har sin -l konfigurationsparameter inställd på det lokala gränssnittet, vilket innebär att den är konfigurerad för att endast acceptera anslutningar från servern där Memcached körs.

kontrollera att Memcached för närvarande är bunden till det lokala IPv4 127.0.0.1 – gränssnittet och lyssna bara för TCP-anslutningar med kommandot ss :

  • sudo ss -plunt

de olika flaggorna kommer att ändra utmatningen ss på följande sätt:

  • -p lägger till namnet på processen som använder ett uttag
  • -l begränsar utgången till endast lyssningsuttag, i motsats till att även inkludera anslutna uttag till andra system
  • -u inkluderar UDP-baserade uttag i utgången
  • -n visar numeriska värden i utgången istället för läsbara namn och värden
  • -t inkluderar TCP-baserade uttag i utgången utgången

du bör få utdata som följande:

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)). . .

denna utgång bekräftar att memcached är bunden till IPv4 loopback 127.0.0.1 – adressen med endast TCP-protokollet.

nu när du har bekräftat att Memcached är konfigurerat för att stödja IPv4 endast med TCP-anslutningar, kan du redigera /etc/memcached.conf för att lägga till stöd för UDP -, Unix-Domänuttag eller IPv6-anslutningar.

Konfigurera IPv6

för att aktivera IPv6-anslutningar till Memcached, öppna filen /etc/memcached.conf med nano eller din föredragna redigerare:

  • sudo nano /etc/memcached.conf

hitta först följande rad i filen:

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

den här raden är där Memcached är konfigurerad för att lyssna på det lokala IPv4-gränssnittet. För att lägga till IPv6-stöd, Lägg till en rad som innehåller IPv6 local loopback-adressen (::1) Så här:

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

spara och stäng filen genom att trycka på CTRL+O sedan ENTER för att spara, sedan CTRL+Xför att avsluta nano. Starta sedan om Memcached med kommandot systemctl :

  • sudo systemctl restart memcached

nu kan du verifiera att Memcached också lyssnar på IPv6-anslutningar genom att upprepa kommandot ss från föregående avsnitt:

  • sudo ss -plunt

du bör få utdata som följande:

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))

de markerade delarna av utgången indikerar att Memcached nu lyssnar på TCP-anslutningar på det lokala IPv6-gränssnittet.

Observera att om du vill inaktivera IPv4-stöd och bara lyssna på IPv6-anslutningar kan du ta bort raden -l 127.0.0.1 från /etc/memcached.conf och starta om tjänsten med kommandot systemctl.

konfigurera UDP

om du vill använda Memcached med UDP-uttag kan du aktivera UDP-stöd genom att redigera konfigurationsfilen /etc/memcached.conf.

öppna /etc/memcached.conf med nano eller din föredragna redigerare och lägg sedan till följande rad i slutet av filen:

/etc/memcached.conf
. . .-U 11211

om du inte behöver TCP-stöd, hitta raden -p 11211 och ändra den till -p 0 för att inaktivera TCP-anslutningar.

när du är klar med att redigera filen, spara och stäng den genom att ange CTRL+O för att spara och sedan CTRL+X för att avsluta.

starta sedan om din Memcached-tjänst med kommandot systemctl för att tillämpa dina ändringar:

  • sudo systemctl restart memcached

kontrollera att Memcached lyssnar efter UDP-anslutningar med kommandot ss -plunt igen:

  • sudo ss -plunt

om du inaktiverade TCP-stöd och har IPv6-anslutningar aktiverade, bör du få utdata som följande:

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)). . .

Observera att din utgång kan vara annorlunda om du bara har IPv4-anslutningar aktiverade och om du har lämnat TCP-anslutningar aktiverade.

konfigurera Unix-Domänuttag

om du vill använda Memcached med Unix-Domänuttag kan du aktivera detta stöd genom att redigera konfigurationsfilen /etc/memcached.conf. Observera att om du konfigurerar Memcached för att använda ett Unix-Domänuttag kommer Memcached att inaktivera TCP-och UDP-stöd, så se till att dina program inte behöver ansluta med dessa protokoll innan du aktiverar socket-stöd.

öppna /etc/memcached.conf med nano eller din föredragna redigerare och lägg sedan till följande rader i slutet av filen:

/etc/memcached.conf
. . .-s /var/run/memcached/memcached.sock-a 660

flaggan -a bestämmer behörigheterna för sockets fil. Se till att användaren som behöver ansluta till Memcached är en del av gruppen memcache på din server, annars kommer den att få ett meddelande om tillstånd nekat när du försöker komma åt uttaget.

starta sedan om din Memcached-tjänst med kommandot systemctl för att tillämpa dina ändringar:

  • sudo systemctl restart memcached

kontrollera att Memcached lyssnar på UNIX Domain Socket-anslutningar med kommandot ss -lnx :

  • sudo ss -lnx | grep memcached

flaggan -x begränsar produktionen av ss för att visa socket-filer. Du bör få utdata som följande:

Output
u_str LISTEN 0 1024 /var/run/memcached/memcached.sock 20234658 * 0

nu när du har konfigurerat Memcacheds nätverksinställningar kan du gå vidare till nästa steg i denna handledning, som lägger till SASL för autentisering till Memcached.

steg 3 — Lägga till auktoriserade användare

för att lägga till autentiserade användare i din Memcached-tjänst kan du använda SASL (Simple Authentication and Security Layer), som är ett ramverk som kopplar autentiseringsprocedurer från applikationsprotokoll. Först lägger du till stöd för SASL till din server, och sedan konfigurerar du en användare med autentiseringsuppgifter. Med allt på plats kan du sedan aktivera SASL i Memcacheds konfigurationsfil och bekräfta att allt fungerar korrekt.

lägga till en autentiserad användare

för att komma igång med att lägga till SASL-stöd måste du installera paketet sasl2-bin, som innehåller administrativa program för SASL-användardatabasen. Med det här verktyget kan du skapa en autentiserad användare eller användare. Kör följande kommando för att installera det:

  • sudo apt install sasl2-bin

skapa sedan katalogen och filen som Memcached kommer att kontrollera för sina SASL-konfigurationsinställningar med kommandot mkdir :

  • sudo mkdir -p /etc/sasl2

skapa nu SASL-konfigurationsfilen med nano eller din föredragna redigerare:

  • sudo nano /etc/sasl2/memcached.conf

Lägg till följande rader:

/ etc/sasl2 / memcached.conf
log_level: 5mech_list: plainsasldb_path: /etc/sasl2/memcached-sasldb2

förutom att ange loggningsnivån är mech_list inställd på plain, vilket berättar för Memcached att den ska använda sin egen lösenordsfil och verifiera ett lösenord för klartext. Den sista raden som du lade till anger sökvägen till användardatabasfilen som du kommer att skapa nästa. Spara och stäng filen när du är klar.

nu skapar du en SASL-databas med användaruppgifter. Du använder kommandot saslpasswd2 med flaggan -c för att skapa en ny användarpost i SASL-databasen. Användaren kommer att vara sammy här, men du kan ersätta det här namnet med din egen användare. Flaggan -f anger sökvägen till databasen, som kommer att vara den sökväg som du anger /etc/sasl2/memcached.conf:

  • sudo saslpasswd2 -a memcached -c -f /etc/sasl2/memcached-sasldb2 sammy

slutligen, ge memcache-användaren och gruppägandet över SASL-databasen med följande chown – kommando:

  • sudo chown memcache:memcache /etc/sasl2/memcached-sasldb2

du har nu en SASL-konfiguration på plats som Memcached kan använda för autentisering. I nästa avsnitt bekräftar du att Memcached körs med standardinställningarna först och konfigurerar sedan om det och verifierar att det fungerar med SASL-autentisering.

konfigurera SASL-stöd

vi kan först testa anslutningen för vår Memcached-instans med kommandot memcstat. Denna kontroll hjälper oss att fastställa att Memcached körs och konfigureras korrekt innan SASL och användarautentisering är aktiverade. När vi har gjort ändringar i våra konfigurationsfiler kör vi kommandot igen för att söka efter olika utdata.

för att kontrollera att Memcached är igång med kommandot memcstat, skriv följande:

  • memcstat --servers="127.0.0.1"

om du använder IPv6, ersätt ::1 i stället för IPv4 127.0.0.1 – adressen. Om du använder ett Unix-Domänuttag, använd sökvägen till uttaget istället för IP-adressen, till exempel --servers=/var/run/memcached/memached.sock.

när du kör kommandot memcstat och ansluter till Memcached framgångsrikt bör du få utdata som följande:

Output
Server: 127.0.0.1 (11211) pid: 2299875 uptime: 2020 time: 1632404590 version: 1.5.22 . . .

om du använder Memcached med UDP-stöd kan kommandot memcstat inte ansluta till UDP-porten. Du kan använda följande netcat – kommando för att verifiera anslutning:

  • nc -u 127.0.0.1 11211 -vz

om Memcached svarar bör du få utdata som följande:

Output
Connection to 127.0.0.1 11211 port succeeded!

om du använder Memcached med IPv6 och UDP, ska kommandot vara följande:

  • nc -6 -u ::1 11211 -vz

nu kan du gå vidare till att aktivera SASL. För att göra det, lägg till parametern -S till /etc/memcached.conf. Öppna filen med nano eller din föredragna redigerare igen:

  • sudo nano /etc/memcached.conf

längst ner i filen lägger du till följande:

/etc/memcached.conf
. . .-S

Nästa, hitta och Avkommentera alternativet -vv, som kommer att ge detaljerad utmatning till /var/log/memcached. Den okommenterade raden ska se ut så här:

/etc/memcached.conf
. . .-vv

spara och stäng filen.

Starta nu om Memcached-tjänsten med följande systemctl – kommando:

  • sudo systemctl restart memcached

kontrollera sedan journalctl – loggarna för Memcached för att vara säker på att SASL-stöd är aktiverat:

  • sudo journalctl -u memcached |grep SASL

du bör få en utmatningsrad som följande, vilket indikerar att SASL-stöd har initierats:

Output
Sep 23 17:00:55 memcached systemd-memcached-wrapper: Initialized SASL.

nu kan du kontrollera anslutningen till Memcached igen. Med SASL-stöd på plats och initialiserat bör följande memcstat – kommando misslyckas utan giltiga autentiseringsuppgifter:

  • memcstat --servers="127.0.0.1"

kommandot ska inte producera utdata. Skriv följande skalkommando för att kontrollera dess status:

  • echo $?

$? returnerar alltid exit-koden för det sista kommandot som avslutades. Vanligtvis indikerar allt förutom 0 processfel. I det här fallet bör du få en utgångsstatus på 1, vilket indikerar att kommandot memcstat misslyckades.

kör memcstat igen, den här gången med ett användarnamn och lösenord kommer att bekräfta om autentiseringsprocessen fungerade eller inte. Kör följande kommando med dina referenser ersatta i stället för sammy och your_password` värden om du använde olika referenser:

  • memcstat --servers="127.0.0.1" --username=sammy --password=your_password

du bör få utdata som följande:

Output
Server: 127.0.0.1 (11211) pid: 3831 uptime: 9 time: 1520028517 version: 1.4.25 . . .

din Memcached-tjänst är nu konfigurerad och körs med SASL-stöd och användarautentisering.

steg 4 — tillåter åtkomst via det privata nätverket (valfritt)

som standard är Memcached endast konfigurerat för att lyssna på det lokala loopback-gränssnittet (127.0.0.1), vilket skyddar Memcached-gränssnittet från exponering för externa parter. Det kan dock finnas fall där du måste tillåta åtkomst från andra servrar. I det här fallet kan du justera dina konfigurationsinställningar för att binda Memcached till ett privat nätverksgränssnitt.

notera: Vi kommer att täcka hur du konfigurerar brandväggsinställningar med UFW i det här avsnittet, men det är också möjligt att använda DigitalOcean Cloud Firewalls för att skapa dessa inställningar. För mer information om hur du konfigurerar DigitalOcean Cloud Firewalls, se vår introduktion till DigitalOcean Cloud Firewalls. För att lära dig mer om hur du begränsar inkommande trafik till vissa maskiner, kolla in avsnittet i denna handledning om att tillämpa brandväggsregler med Taggar och servernamn och vår diskussion om brandväggsetiketter.

begränsa IP-åtkomst med brandväggar

innan du justerar dina konfigurationsinställningar är det bra att ställa in brandväggsregler för att begränsa de maskiner som kan ansluta till din Memcached-server. Först måste du spela in den privata IP-adressen för alla maskiner som du vill använda för att ansluta till Memcached. När du har den privata IP-adressen (eller adresserna) lägger du till en explicit brandväggsregel för att låta maskinen komma åt Memcached.

om du använder UFW-brandväggen kan du begränsa åtkomsten till din Memcached-instans genom att skriva följande på din Memcached-server:

  • sudo ufw allow from client_system_private_IP/32 to any port 11211

om mer än ett system har åtkomst till Memcached via det privata nätverket, var noga med att lägga till ytterligare ufw – regler för varje maskin med ovanstående regel som mall.

du kan läsa mer om UFW-brandväggar genom att läsa vår UFW essentials-guide.

med dessa ändringar på plats kan du justera Memcached-tjänsten för att binda till serverns privata nätverksgränssnitt.

bindning Memcached till det privata nätverksgränssnittet

nu när din brandvägg är på plats kan du justera Memcached-konfigurationen för att binda till serverns privata nätverksgränssnitt istället för 127.0.0.1.

hitta först det privata nätverksgränssnittet för din Memcached-server med följande ip kommando

  • ip -brief address show

beroende på serverns nätverkskonfiguration kan utmatningen skilja sig från följande exempel:

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

i det här exemplet identifieras nätverksgränssnitten med namnen eth0 och eth1. De markerade IPv4-adresserna på raden eth0 är de offentliga IP-adresserna för servern.

den markerade 10.136.32.212 – adressen på raden eth1 är den privata IPv4-adressen för servern och fe80::2cee:92ff:fe21:8bc4 – adressen är den privata IPv6-adressen. Dina IP-adresser kommer att vara olika men kommer alltid att falla inom följande intervall baserat på RFC 1918-specifikationen):

  • 10.0.0.0 till 10.255.255.255(10/8 prefix)
  • 172.16.0.0 till 172.31.255.255 (172.16 / 12 prefix)
  • 192.168.0.0 till 192.168.255.255(192.168/16 prefix)

när du har hittat serverns privata IP-adress eller adresser öppnar du filen /etc/memcached.conf igen med nano eller din föredragna redigerare:

  • sudo nano /etc/memcached.conf

hitta raden -l 127.0.0.1 som du markerade eller ändrade tidigare och ändra adressen så att den matchar serverns privata nätverksgränssnitt:

/etc/memcached.conf
. . .-l memcached_servers_private_IP. . .

om du vill ha Memcached lyssna på flera adresser, Lägg till en annan liknande rad för varje adress, antingen IPv4 eller IPv6 med formatet -l memcached_servers_private_IP.

spara och stäng filen när du är klar.

starta sedan om Memcached-tjänsten:

  • sudo systemctl restart memcached

kontrollera dina nya inställningar med ss för att bekräfta ändringen:

  • 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)). . .

testa anslutningen från din externa klient för att säkerställa att du fortfarande kan nå tjänsten. Det är bra att också kontrollera åtkomst från en icke-auktoriserad klient (försök att ansluta utan användare och lösenord) för att säkerställa att din SASL-autentisering fungerar som förväntat. Det är också bra att försöka ansluta till Memcached från en annan server som inte är tillåten att ansluta för att verifiera att brandväggsreglerna du skapade är effektiva.

slutsats

i denna handledning undersökte du hur du konfigurerar Memcached med IPv4 -, IPv6 -, TCP -, UDP-och Unix-Domänuttag. Du lärde dig också hur du säkrar din Memcached-server genom att aktivera SASL-autentisering. Slutligen lärde du dig hur du binder Memcached till ditt lokala eller privata nätverksgränssnitt och hur du konfigurerar brandväggsregler för att begränsa åtkomsten till Memcached.

för att lära dig mer om Memcached, kolla in projektdokumentationen.

Write a Comment

Din e-postadress kommer inte publiceras.