hoe Memcached installeren en beveiligen op Ubuntu 20.04

een vorige versie van deze tutorial is geschreven door Kathleen Juell.

Inleiding

Geheugenobject caching-systemen zoals Memcached kunnen de prestaties van de backend-database optimaliseren door informatie Tijdelijk in het geheugen op te slaan, vaak of recent opgevraagde records te bewaren. Op deze manier verminderen ze het aantal directe aanvragen naar uw databases.

in deze handleiding leert u hoe u een Memcached server installeert en configureert. Je leert ook hoe je authenticatie toevoegt aan secure Memcached met behulp van Simple Authentication and Security Layer (SASL). Tot slot leer je hoe je Memcached bindt aan een lokale of private netwerk interface om ervoor te zorgen dat het alleen toegankelijk is op vertrouwde netwerken, door geverifieerde gebruikers.

vereisten

om deze tutorial te volgen, heb je nodig:

  • een Ubuntu 20.04 server met een sudo niet-root gebruiker en een firewall ingeschakeld. Om dit in te stellen, kunt u onze eerste Server Setup volgen met Ubuntu 20.04 tutorial.

met deze vereisten bent u klaar om uw Memcached server te installeren en te beveiligen.

Als u wilt experimenteren met het installeren en configureren van Memcached in uw browser met behulp van een interactieve terminal, klik dan op de Start een interactieve Terminal! knop hieronder om te beginnen.

Start een interactieve Terminal!

Stap 1 — Memcached installeren

als Memcached nog niet op uw server is geïnstalleerd, kunt u het installeren vanuit de officiële Ubuntu-repositories. Zorg er eerst voor dat je lokale pakketindex wordt bijgewerkt met het volgende commando:

  • sudo apt update

installeer vervolgens het officiële pakket als volgt:

  • sudo apt install memcached

u kunt ook libmemcached-tools installeren, dit is een pakket dat verschillende hulpmiddelen bevat die u kunt gebruiken om uw Memcached-server te onderzoeken, te testen en te beheren. Voeg het pakket toe aan uw server met het volgende commando:

  • sudo apt install libmemcached-tools

Memcached moet nu worden geïnstalleerd als een service op uw server, samen met tools die u zal toestaan om de connectiviteit te testen.

voer het volgende systemctl commando uit om Memcached te starten:

  • sudo systemctl start memcached

nu kunt u doorgaan met het beveiligen van de configuratie-instellingen.

Stap 2 – configuratie van Memcached netwerkinstellingen (optioneel)

als uw Memcached server alleen lokale IPv4-verbindingen moet ondersteunen met TCP, dan kunt u deze sectie overslaan en doorgaan met stap 3 in deze tutorial. Als u anders Memcached wilt configureren om UDP-sockets, Unix-Domeinsockets te gebruiken of ondersteuning voor IPv6-verbindingen toe te voegen, gaat u verder met de relevante stappen in dit gedeelte van de tutorial.

controleer eerst of uw Memcached instantie luistert op de lokale IPv4 loopback interface 127.0.0.1. De huidige versie van Memcached die wordt geleverd met Ubuntu en Debian heeft zijn -l configuratieparameter ingesteld op de lokale interface, wat betekent dat het is geconfigureerd om alleen verbindingen te accepteren van de server waarop Memcached draait.

Controleer of Memcached momenteel is gebonden aan de lokale IPv4 127.0.0.1 – interface en luister alleen naar TCP-verbindingen met het ss – Commando:

  • sudo ss -plunt

de verschillende vlaggen veranderen de uitvoer van ss op de volgende manieren::

  • -p voegt de naam van het proces dat met behulp van een socket
  • -l beperkt de uitgang te luisteren sockets alleen, in tegenstelling tot ook aangesloten contactdozen met andere systemen
  • -u bevat UDP-gebaseerde aansluitingen in de output
  • -n geeft numerieke waarden in de output in plaats van door mensen leesbare namen en waarden van
  • -t bevat TCP gebaseerde aansluitingen in de output

U ontvangt uitvoer als de volgende:

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

deze uitvoer bevestigt dat memcached gebonden is aan het IPv4 loopback 127.0.0.1 – adres met alleen het TCP-protocol.

nu U hebt bevestigd dat Memcached is geconfigureerd om alleen IPv4 met TCP-verbindingen te ondersteunen, kunt u /etc/memcached.conf bewerken om ondersteuning toe te voegen voor UDP -, Unix-Domeinsockets of IPv6-verbindingen.

IPv6

om IPv6-verbindingen met Memcached in te schakelen, opent u het /etc/memcached.conf – bestand met nano of de gewenste editor:

  • sudo nano /etc/memcached.conf

zoek eerst de volgende regel in het bestand:

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

deze regel is waar Memcached is geconfigureerd om te luisteren op de lokale IPv4-interface. Om IPv6 ondersteuning toe te voegen, voeg je een regel toe met het IPv6 lokale loopback adres (::1) als volgt:

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

sla het bestand op en sluit het door op CTRL+O te drukken dan ENTER om op te slaan, dan CTRL+X om nanoaf te sluiten. Herstart Memcached vervolgens met het systemctl Commando:

  • sudo systemctl restart memcached

nu kunt u controleren of Memcached ook luistert naar IPv6-verbindingen door het ss commando uit de vorige sectie te herhalen:

  • sudo ss -plunt

u moet de volgende uitvoer ontvangen:

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 gemarkeerde delen van de uitvoer geven aan dat Memcached nu luistert naar TCP-verbindingen op de lokale IPv6-interface.

merk op dat als u IPv4-ondersteuning wilt uitschakelen en alleen naar IPv6-verbindingen wilt luisteren, u de -l 127.0.0.1 – regel van /etc/memcached.conf kunt verwijderen en de service opnieuw kunt starten met het commando systemctl.

UDP instellen

Als u Memcached met UDP-sockets wilt gebruiken, kunt u UDP-ondersteuning inschakelen door het /etc/memcached.conf configuratiebestand te bewerken.

Open /etc/memcached.conf met nano of de gewenste editor, voeg dan de volgende regel toe aan het einde van het bestand:

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

als u geen TCP-ondersteuning nodig hebt, zoek dan de -p 11211 – regel en verander deze naar -p 0 om TCP-verbindingen uit te schakelen.

wanneer u klaar bent met het bewerken van het bestand, slaat u het op en sluit het door CTRL+O in te voeren om het bestand op te slaan en vervolgens CTRL+X om het bestand af te sluiten.

volgende, herstart uw Memcached service met het systemctl commando om uw wijzigingen toe te passen:

  • sudo systemctl restart memcached

Controleer of Memcached luistert naar UDP-verbindingen met het ss -plunt commando opnieuw:

  • sudo ss -plunt

Als u TCP-ondersteuning hebt uitgeschakeld en IPv6-verbindingen hebt ingeschakeld, moet u de volgende uitvoer ontvangen::

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

merk op dat je uitvoer anders kan zijn als je alleen IPv4-verbindingen hebt ingeschakeld, en als je TCP-verbindingen hebt ingeschakeld.

Unix-Domeinsockets configureren

Als u Memcached met Unix-Domeinsockets wilt gebruiken, kunt u deze ondersteuning inschakelen door het configuratiebestand /etc/memcached.conf te bewerken. Als u Memcached configureert om een Unix Domeinsocket te gebruiken, zal Memcached TCP-en UDP-ondersteuning uitschakelen, dus zorg ervoor dat uw toepassingen geen verbinding hoeven te maken met deze protocollen voordat u socket-ondersteuning inschakelt.

Open /etc/memcached.conf met nano of de gewenste editor, voeg dan de volgende regels toe aan het einde van het bestand:

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

de -a vlag bepaalt de rechten op het bestand van de socket. Zorg ervoor dat de gebruiker die verbinding moet maken met Memcached deel uitmaakt van de memcache – groep op uw server, anders krijgt hij een bericht met toegang tot de socket.

volgende, herstart uw Memcached service met het systemctl commando om uw wijzigingen toe te passen:

  • sudo systemctl restart memcached

Controleer of Memcached luistert naar Unix – Domeinsocket-verbindingen met het ss -lnx – Commando:

  • sudo ss -lnx | grep memcached

de vlag -x beperkt de uitvoer van ss tot het weergeven van socket-bestanden. U moet output als de volgende ontvangen:

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

Nu u de netwerkinstellingen van Memcached hebt geconfigureerd, kunt u doorgaan met de volgende stap in deze tutorial, namelijk het toevoegen van SASL voor authenticatie aan Memcached.

Stap 3-Het toevoegen van geautoriseerde gebruikers

om geverifieerde gebruikers toe te voegen aan uw Memcached-service, kunt u gebruik maken van simple Authentication and Security Layer (SASL), een raamwerk dat verificatieprocedures ontkoppelt van toepassingsprotocollen. Eerst voeg je ondersteuning voor SASL toe aan je server, en dan configureer je een gebruiker met verificatiegegevens. Met alles op zijn plaats, kunt u SASL in het configuratiebestand van Memcached inschakelen en bevestigen dat alles correct werkt.

een geverifieerde gebruiker toevoegen

om SASL-ondersteuning toe te voegen, moet u het sasl2-bin – pakket installeren, dat beheerprogramma ‘ s voor de SASL-gebruikersdatabase bevat. Met deze tool kunt u een geverifieerde gebruiker of gebruikers maken. Voer de volgende opdracht uit om het te installeren:

  • sudo apt install sasl2-bin

maak vervolgens de map en het bestand aan die Memcached zal controleren op de SASL configuratie instellingen met het mkdir Commando:

  • sudo mkdir -p /etc/sasl2

Maak nu het SASL-configuratiebestand met nano of de gewenste editor:

  • sudo nano /etc/sasl2/memcached.conf

de volgende regels toevoegen:

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

naast het opgeven van het logboekniveau, is mech_list ingesteld op plain, wat Memcached vertelt dat het zijn eigen wachtwoordbestand moet gebruiken en een wachtwoord in platte tekst moet verifiëren. De laatste regel die u hebt toegevoegd, geeft het pad aan naar het gebruikersdatabasebestand dat u vervolgens maakt. Sla het bestand op en sluit het als u klaar bent.

nu zult u een SASL-database aanmaken met gebruikersreferenties. U zult het saslpasswd2 commando met de -c vlag gebruiken om een nieuwe gebruiker ingang in de SASL database aan te maken. De gebruiker zal sammy hier zijn, maar je kunt deze naam vervangen door je eigen gebruiker. De vlag -f geeft het pad naar de database aan, dit is het pad dat u instelt/etc/sasl2/memcached.conf:

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

tot slot, geef de memcache gebruiker en groep eigendom over de SASL database met het volgende chown Commando:

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

je hebt nu een SASL configuratie die Memcached kan gebruiken voor authenticatie. In de volgende sectie zul je eerst bevestigen dat Memcached draait met zijn standaardinstellingen, en dan opnieuw configureren en verifiëren dat het werkt met SASL authenticatie.

SASL-ondersteuning configureren

we kunnen eerst de connectiviteit van onze Memcached-instantie testen met het memcstat – Commando. Deze controle zal ons helpen vast te stellen dat Memcached draait en correct geconfigureerd is voordat SASL en gebruikers authenticatie zijn ingeschakeld. Nadat we wijzigingen hebben aangebracht in onze configuratie bestanden zullen we het commando opnieuw uitvoeren om te controleren op verschillende uitvoer.

typ het volgende om te controleren of Memcached actief is met het commando memcstat :

  • memcstat --servers="127.0.0.1"

als u IPv6 gebruikt, vervang dan ::1 in plaats van het IPv4 127.0.0.1 – adres. Als u een Unix Domeinsocket gebruikt, gebruik dan het pad naar de socket in plaats van het IP-adres, bijvoorbeeld --servers=/var/run/memcached/memached.sock.

wanneer u de opdracht memcstat uitvoert en succesvol verbinding maakt met Memcached, moet u de volgende uitvoer ontvangen::

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

Opmerking: Als u Memcached gebruikt met UDP-ondersteuning, kan het commando memcstat geen verbinding maken met de UDP-poort. U kunt de volgende opdracht netcat gebruiken om de verbinding te verifiëren:

  • nc -u 127.0.0.1 11211 -vz

als Memcached reageert, moet u de volgende uitvoer ontvangen:

Output
Connection to 127.0.0.1 11211 port succeeded!

Als u Memcached gebruikt met IPv6 en UDP, moet het volgende commando worden uitgevoerd::

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

nu kun je SASL inschakelen. Voeg hiervoor de parameter -S toe aan /etc/memcached.conf. Open het bestand met nano of de gewenste editor opnieuw:

  • sudo nano /etc/memcached.conf

voeg onderaan het bestand het volgende toe:

/etc/memcached.conf
. . .-S

Zoek vervolgens de -vv optie, die uitgebreide uitvoer geeft naar /var/log/memcached. De regel zonder commentaar moet er als volgt uitzien:

/etc/memcached.conf
. . .-vv

het bestand opslaan en sluiten.

herstart nu de Memcached service met het volgende systemctl Commando:

  • sudo systemctl restart memcached

controleer vervolgens de journalctl logs voor Memcached om er zeker van te zijn dat SASL ondersteuning is ingeschakeld:

  • sudo journalctl -u memcached |grep SASL

je zou een regel met uitvoer moeten ontvangen zoals de volgende, wat aangeeft dat SASL ondersteuning is geïnitialiseerd:

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

nu kunt u de verbinding met Memcached opnieuw controleren. Met SASL-ondersteuning op zijn plaats en geïnitialiseerd, zou het volgende memcstat – commando moeten mislukken zonder geldige aanmeldingsreferenties:

  • memcstat --servers="127.0.0.1"

het commando mag geen uitvoer produceren. Typ de volgende shell-opdracht om de status ervan te controleren:

  • echo $?

$? zal altijd de exit code retourneren van het laatste commando dat is afgesloten. Gewoonlijk duidt alles behalve 0 op een procesfout. In dit geval moet u een exit status van 1 ontvangen, wat aangeeft dat het memcstat commando is mislukt.

memcstat opnieuw draaien, deze keer met een gebruikersnaam en wachtwoord zal bevestigen of het authenticatieproces al dan niet werkte. Voer het volgende commando uit met uw referenties vervangen in plaats van de waarden sammy en uw_password als u andere referenties hebt gebruikt:

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

u moet output als de volgende ontvangen:

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

je Memcached service is nu geconfigureerd en draait met SASL ondersteuning en gebruikers authenticatie.

Stap 4-Toegang toestaan Over het particuliere netwerk (optioneel)

standaard is Memcached alleen geconfigureerd om te luisteren op de lokale loopback (127.0.0.1) interface, die de Memcached interface beschermt tegen blootstelling aan derden. Er kunnen echter gevallen zijn waarin u toegang vanaf andere servers moet toestaan. In dit geval kun je je configuratie instellingen aanpassen om Memcached te binden aan een privé netwerk interface.

Noot: We zullen in deze sectie behandelen hoe u firewall-instellingen kunt configureren met UFW, maar het is ook mogelijk om DigitalOcean Cloud Firewalls te gebruiken om deze instellingen te maken. Zie onze inleiding tot DigitalOcean Cloud Firewalls voor meer informatie over het instellen van DigitalOcean Cloud Firewalls. Voor meer informatie over het beperken van inkomend verkeer naar bepaalde machines, ga je naar het gedeelte van deze tutorial over het toepassen van firewallregels met behulp van tags en servernamen en onze discussie over firewalltags.

IP-toegang beperken met Firewalls

voordat u uw configuratie-instellingen aanpast, is het een goed idee om firewallregels in te stellen om de machines die verbinding kunnen maken met uw Memcached server te beperken. Eerst moet je het privé IP-adres van elke machine die je wilt gebruiken om verbinding te maken met Memcached registreren. Zodra je het private IP adres (of adressen) hebt, voeg je een expliciete firewall regel toe om de machine toegang te geven tot Memcached.

Als u de UFW firewall gebruikt, kunt u de toegang tot uw memcached instantie beperken door het volgende te typen op uw Memcached server:

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

als meer dan één systeem toegang heeft tot Memcached via het particuliere netwerk, moet u extra ufw regels toevoegen voor elke machine met behulp van de bovenstaande regel als sjabloon.

u kunt meer informatie vinden over UFW firewalls door onze UFW essentials guide te lezen.

met deze wijzigingen kunt u de Memcached-service aanpassen om te binden aan de private netwerkinterface van uw server.

binding Memcached aan de Private netwerkinterface

nu uw firewall is geïnstalleerd, kunt u de configuratie van Memcached aanpassen om te binden aan de private netwerkinterface van uw server in plaats van 127.0.0.1.

zoek eerst de private netwerkinterface voor uw Memcached server met behulp van het volgende ip Commando

  • ip -brief address show

afhankelijk van de netwerkconfiguratie van uw server, kan de uitvoer afwijken van het volgende voorbeeld:

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 dit voorbeeld worden de netwerkinterfaces geïdentificeerd met hun eth0 en eth1 namen. De gemarkeerde IPv4-adressen op de eth0 – regel zijn de openbare IP-adressen van de server.

het gemarkeerde 10.136.32.212 – adres op de eth1 – regel is het privé-IPv4-adres voor de server en het fe80::2cee:92ff:fe21:8bc4 – adres is het IPv6-privé-adres. Uw IP-adressen zullen verschillend zijn, maar zullen altijd binnen de volgende bereiken vallen op basis van de RFC 1918-specificatie):

  • 10.0.0.0 tot 10.255.255.255 (voorvoegsel 10/8))
  • 172.16.0.0 tot 172.31.255.255 (voorvoegsel 172.16/12)
  • 192.168.0.0 tot 192.168.255.255 (192 .168/16 voorvoegsel)

Zodra u hebt gevonden uw server private IP-adres of de adressen, opent de /etc/memcached.conf bestand opnieuw met nano of uw favoriete editor:

  • sudo nano /etc/memcached.conf

Zoek de -l 127.0.0.1 lijn die u hebt gecontroleerd of gewijzigd eerder, en wijzig het adres van de server privé-netwerk interface:

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

als u wilt dat Memcached op meerdere adressen luistert, voeg dan een andere vergelijkbare regel toe voor elk adres, IPv4 of IPv6 in het -l memcached_servers_private_IP formaat.

sla het bestand op en sluit het als u klaar bent.

volgende, herstart de Memcached service:

  • sudo systemctl restart memcached

Controleer uw nieuwe instellingen met ss om de wijziging te bevestigen:

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

Test de connectiviteit van uw externe client om ervoor te zorgen dat u de service nog steeds kunt bereiken. Het is een goed idee om ook de toegang van een niet-geautoriseerde client te controleren (probeer verbinding te maken zonder een gebruiker en wachtwoord) om er zeker van te zijn dat je SASL authenticatie werkt zoals verwacht. Het is ook een goed idee om te proberen verbinding te maken met Memcached vanaf een andere server die geen verbinding mag maken om te controleren of de firewall regels die je hebt gemaakt effectief zijn.

conclusie

in deze tutorial hebt u onderzocht hoe u Memcached configureert met IPv4, IPv6, TCP, UDP en Unix Domeinsockets. Je hebt ook geleerd hoe je je Memcached server kunt beveiligen door SASL authenticatie in te schakelen. Tenslotte heb je geleerd hoe je Memcached bindt aan je lokale of private netwerkinterface en hoe je firewallregels configureert om toegang tot Memcached te beperken.

voor meer informatie over Memcached, bekijk de projectdocumentatie.

Write a Comment

Het e-mailadres wordt niet gepubliceerd.