Jak zainstalować i zabezpieczyć Memcached na Ubuntu 20.04

poprzednia wersja tego samouczka została napisana przez Kathleen Juell.

wprowadzenie

systemy buforowania obiektów pamięci, takie jak Memcached, mogą zoptymalizować wydajność bazy danych zaplecza, tymczasowo przechowując informacje w pamięci, zachowując często lub ostatnio żądane rekordy. W ten sposób zmniejszają liczbę bezpośrednich żądań do Twoich baz danych.

w tym przewodniku dowiesz się, jak zainstalować i skonfigurować serwer Memcached. Dowiesz się również, jak dodać uwierzytelnianie w celu zabezpieczenia Memcached za pomocą Simple Authentication and Security Layer (SASL). Na koniec dowiesz się, jak powiązać Memcached z lokalnym lub prywatnym interfejsem sieciowym, aby upewnić się, że jest on dostępny tylko w zaufanych sieciach, przez uwierzytelnionych użytkowników.

aby skorzystać z tego samouczka, musisz:

  • jeden serwer Ubuntu 20.04 z użytkownikiem sudo non-root i zaporą ogniową. Aby to skonfigurować, możesz śledzić naszą wstępną konfigurację serwera z samouczkiem Ubuntu 20.04.

dzięki tym warunkom wstępnym będziesz gotowy do instalacji i zabezpieczenia serwera Memcached.

alternatywnie, jeśli chcesz poeksperymentować z instalacją i konfiguracją Memcached w przeglądarce za pomocą interaktywnego terminala, kliknij Uruchom interaktywny Terminal! przycisk poniżej, aby rozpocząć.

Uruchom interaktywny Terminal!

Krok 1-Instalacja Memcached

jeśli nie masz jeszcze zainstalowanego Memcached na swoim serwerze, możesz go zainstalować z oficjalnych repozytoriów Ubuntu. Najpierw upewnij się, że lokalny indeks pakietów jest aktualizowany za pomocą następującego polecenia:

  • sudo apt update

następnie zainstaluj oficjalny pakiet w następujący sposób:

  • sudo apt install memcached

można również zainstalować libmemcached-tools, który jest pakietem zawierającym różne narzędzia, których można użyć do badania, testowania i zarządzania serwerem Memcached. Dodaj pakiet do swojego serwera za pomocą następującego polecenia:

  • sudo apt install libmemcached-tools

Memcached powinien być teraz zainstalowany jako usługa na serwerze, wraz z narzędziami, które pozwolą Ci przetestować jego łączność.

aby uruchomić Memcached, uruchom następujące polecenie systemctl :

  • sudo systemctl start memcached

teraz możesz przejść do zabezpieczenia ustawień konfiguracyjnych.

Krok 2-Konfigurowanie ustawień sieci Memcached (Opcjonalnie)

Jeśli Twój serwer Memcached musi obsługiwać tylko lokalne połączenia IPv4 przy użyciu TCP, możesz pominąć tę sekcję i przejść do kroku 3 w tym samouczku. W przeciwnym razie, jeśli chcesz skonfigurować Memcached do używania gniazd UDP, gniazd domeny Unix lub dodać obsługę połączeń IPv6, wykonaj odpowiednie kroki w tej sekcji samouczka.

najpierw upewnij się, że Twoja instancja Memcached nasłuchuje na lokalnym interfejsie pętli IPv4 127.0.0.1. Aktualna wersja Memcached dostarczana z Ubuntu i Debianem ma parametr konfiguracyjny -l ustawiony na lokalny interfejs, co oznacza, że jest skonfigurowany tak, aby akceptował tylko połączenia z serwera, na którym działa Memcached.

sprawdź, czy Memcached jest obecnie związany z lokalnym interfejsem IPv4 127.0.0.1 i nasłuchuje tylko połączeń TCP za pomocą polecenia ss :

  • sudo ss -plunt

różne flagi zmienią wyjście ss w następujący sposób:

  • -p dodaje nazwę procesu używającego gniazda
  • -l ogranicza wyjście tylko do nasłuchujących gniazd, w przeciwieństwie do podłączonych gniazd do innych systemów
  • -u zawiera gniazda oparte na UDP na wyjściu
  • -n wyświetla wartości liczbowe na wyjściu zamiast czytelnych dla człowieka nazw i wartości
  • -t zawiera gniazda oparte na TCP na wyjściu

powinieneś otrzymać wyjście w następujący sposób:

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

to wyjście potwierdza, że memcached jest związane z adresem pętli IPv4 127.0.0.1 używając tylko protokołu TCP.

po potwierdzeniu, że Memcached jest skonfigurowany do obsługi protokołu IPv4 tylko z połączeniami TCP, możesz edytować /etc/memcached.conf, aby dodać obsługę UDP, gniazd domeny Unix lub połączeń IPv6.

Konfigurowanie IPv6

aby włączyć połączenia IPv6 z Memcached, otwórz plik /etc/memcached.conf za pomocą nano lub preferowanego edytora:

  • sudo nano /etc/memcached.conf

najpierw znajdź następującą linię w pliku:

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

ta linia jest gdzie Memcached jest skonfigurowany do nasłuchiwania na lokalnym interfejsie IPv4. Aby dodać obsługę IPv6, dodaj linię zawierającą lokalny adres pętli zwrotnej IPv6 (::1) w następujący sposób:

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

Zapisz i zamknij plik, naciskając CTRL+O, następnie ENTER, aby zapisać, a następnie CTRL+X, aby zakończyć nano. Następnie uruchom ponownie Memcached za pomocą polecenia systemctl :

  • sudo systemctl restart memcached

teraz możesz sprawdzić, czy Memcached nasłuchuje połączeń IPv6, powtarzając polecenie ss z poprzedniej sekcji:

  • sudo ss -plunt

powinieneś otrzymać wyjście w następujący sposób:

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

podświetlone fragmenty wyjścia wskazują, że Memcached nasłuchuje połączeń TCP w lokalnym interfejsie IPv6.

zauważ, że jeśli chcesz wyłączyć obsługę IPv4 i słuchać tylko połączeń IPv6, możesz usunąć linię -l 127.0.0.1 z /etc/memcached.conf i ponownie uruchomić usługę za pomocą polecenia systemctl.

Konfigurowanie UDP

jeśli chcesz używać Memcached z gniazdami UDP, możesz włączyć obsługę UDP, edytując plik konfiguracyjny /etc/memcached.conf.

Otwórz /etc/memcached.conf za pomocą nano lub preferowanego edytora, a następnie dodaj następującą linię na końcu pliku:

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

jeśli nie potrzebujesz obsługi TCP, znajdź linię -p 11211 i zmień ją na -p 0, aby wyłączyć połączenia TCP.

po zakończeniu edycji pliku Zapisz i zamknij go, wpisując CTRL+O, aby zapisać, a następnie CTRL+X, aby zakończyć.

następnie uruchom ponownie usługę Memcached za pomocą polecenia systemctl, aby zastosować zmiany:

  • sudo systemctl restart memcached

sprawdź, czy Memcached nasłuchuje połączeń UDP ponownie używając polecenia ss -plunt :

  • sudo ss -plunt

jeśli wyłączyłeś obsługę TCP i masz włączone połączenia IPv6, powinieneś otrzymać wyjście w następujący sposób:

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

zauważ, że Twoje wyjście może być inne, jeśli masz włączone tylko połączenia IPv4 i jeśli masz włączone połączenia TCP.

Konfigurowanie gniazd domeny Unix

jeśli chcesz używać Memcached z gniazdami domeny Unix, możesz włączyć tę obsługę, edytując plik konfiguracyjny /etc/memcached.conf. Zauważ, że jeśli skonfigurujesz Memcached do używania gniazda domeny Unix, Memcached wyłączy obsługę protokołu TCP i UDP, więc upewnij się, że Twoje aplikacje nie muszą łączyć się przy użyciu tych protokołów przed włączeniem obsługi gniazda.

Otwórz /etc/memcached.conf używając nano lub preferowanego edytora, a następnie dodaj następujące linie na końcu pliku:

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

flaga -a określa uprawnienia do pliku gniazda. Upewnij się, że użytkownik, który musi połączyć się z Memcached, jest częścią grupy memcache na twoim serwerze, w przeciwnym razie otrzyma komunikat o odmowie uprawnień podczas próby uzyskania dostępu do gniazda.

następnie uruchom ponownie usługę Memcached za pomocą polecenia systemctl, aby zastosować zmiany:

  • sudo systemctl restart memcached

sprawdź, czy Memcached nasłuchuje połączeń gniazd domeny Unix za pomocą polecenia ss -lnx :

  • sudo ss -lnx | grep memcached

znacznik -x ogranicza wyjście ssdo wyświetlania plików gniazd. Powinieneś otrzymać wyjście w następujący sposób:

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

teraz, gdy skonfigurowałeś Ustawienia sieciowe Memcached, możesz przejść do następnego kroku w tym samouczku, który polega na dodaniu SASL do uwierzytelniania do Memcached.

Krok 3 — Dodawanie autoryzowanych użytkowników

aby dodać uwierzytelnionych użytkowników do usługi Memcached, możesz użyć Simple Authentication and Security Layer (SASL), która jest frameworkiem, który oddziela procedury uwierzytelniania od protokołów aplikacji. Najpierw dodasz obsługę SASL do swojego serwera, a następnie skonfigurujesz użytkownika z poświadczeniami uwierzytelniania. Mając wszystko na miejscu, możesz włączyć SASL w pliku konfiguracyjnym Memcached i potwierdzić, że wszystko działa poprawnie.

dodawanie uwierzytelnionego użytkownika

aby rozpocząć dodawanie obsługi SASL, musisz zainstalować pakiet sasl2-bin, który zawiera programy administracyjne dla bazy danych użytkowników SASL. To narzędzie pozwoli Ci utworzyć uwierzytelnionego użytkownika lub użytkowników. Uruchom następujące polecenie, aby go zainstalować:

  • sudo apt install sasl2-bin

następnie utwórz katalog i plik, który Memcached sprawdzi pod kątem ustawień konfiguracyjnych SASL za pomocą polecenia mkdir :

  • sudo mkdir -p /etc/sasl2

teraz Utwórz plik konfiguracyjny SASL za pomocą nano lub preferowanego edytora:

  • sudo nano /etc/sasl2/memcached.conf

dodaj następujące linie:

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

oprócz określenia poziomu logowania, mech_list jest ustawione na plain, co mówi Memcachedowi, że powinien użyć własnego pliku hasła i zweryfikować hasło tekstowe. Ostatnia dodana linia określa ścieżkę do pliku bazy danych użytkownika, który utworzysz w następnej kolejności. Zapisz i zamknij plik po zakończeniu.

teraz utworzysz bazę danych SASL z poświadczeniami użytkownika. Użyjesz polecenia saslpasswd2 z flagą -c, aby utworzyć nowy wpis użytkownika w bazie danych SASL. Użytkownik będzie tutaj sammy, ale możesz zastąpić tę nazwę swoim własnym użytkownikiem. Znacznik -f określa ścieżkę do bazy danych, która będzie ścieżką ustawioną w /etc/sasl2/memcached.conf:

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

na koniec nadaj użytkownikowi memcache i grupie własność nad bazą danych SASL za pomocą następującego polecenia chown :

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

masz teraz konfigurację SASL, której Memcached może używać do uwierzytelniania. W następnej sekcji najpierw potwierdzisz, że Memcached działa z ustawieniami domyślnymi, a następnie przekonfigurujesz go ponownie i sprawdzisz, że działa z uwierzytelnianiem SASL.

Konfigurowanie obsługi SASL

możemy najpierw przetestować łączność naszej instancji Memcached za pomocą polecenia memcstat. To sprawdzenie pomoże nam ustalić, że Memcached działa i jest poprawnie skonfigurowany przed włączeniem SASL i uwierzytelniania użytkownika. Po wprowadzeniu zmian w plikach konfiguracyjnych ponownie uruchomimy polecenie, aby sprawdzić, czy nie ma innego wyjścia.

aby sprawdzić, czy Memcached działa i działa za pomocą polecenia memcstat, wpisz następujące polecenie:

  • memcstat --servers="127.0.0.1"

jeśli używasz adresu IPv6, zastąp adres ::1 zamiast adresu IPv4 127.0.0.1. Jeśli używasz gniazda domeny Unix, użyj ścieżki do gniazda zamiast adresu IP, na przykład --servers=/var/run/memcached/memached.sock.

po uruchomieniu polecenia memcstat i pomyślnym połączeniu się z Memcached, powinieneś otrzymać wyjście w następujący sposób:

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

Uwaga: Jeśli używasz Memcached z obsługą UDP, polecenie memcstat nie będzie w stanie połączyć się z portem UDP. Możesz użyć następującego polecenia netcat, aby zweryfikować łączność:

  • nc -u 127.0.0.1 11211 -vz

jeśli Memcached odpowiada, powinieneś otrzymać wyjście w następujący sposób:

Output
Connection to 127.0.0.1 11211 port succeeded!

jeśli używasz Memcached z IPv6 i UDP, polecenie powinno być następujące:

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

teraz możesz przejść do włączenia SASL. Aby to zrobić, dodaj parametr -S do /etc/memcached.conf. Otwórz plik za pomocą nano lub ponownie preferowanego edytora:

  • sudo nano /etc/memcached.conf

na dole pliku dodaj:

/etc / memcached.conf
. . .-S

następnie znajdź i odkomentuj opcję -vv, która zapewni szczegółowe wyjście do /var/log/memcached. Niezakomentowana linia powinna wyglądać tak:

/etc / memcached.conf
. . .-vv

Zapisz i zamknij plik.

Teraz uruchom ponownie usługę Memcached za pomocą następującego polecenia systemctl :

  • sudo systemctl restart memcached

następnie sprawdź logi journalctl dla Memcached, aby upewnić się, że obsługa SASL jest włączona:

  • sudo journalctl -u memcached |grep SASL

powinieneś otrzymać linię wyjścia, taką jak poniżej, wskazującą, że obsługa SASL została zainicjowana:

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

teraz możesz ponownie sprawdzić łączność z Memcached. Po zainstalowaniu i zainicjowaniu obsługi SASL następujące polecenie memcstat powinno nie działać bez poprawnych poświadczeń uwierzytelniania:

  • memcstat --servers="127.0.0.1"

polecenie nie powinno generować wyniku. Wpisz następujące polecenie powłoki, aby sprawdzić jego status:

  • echo $?

$? zawsze zwróci kod zakończenia ostatniego polecenia, które zostało zakończone. Zazwyczaj wszystko poza 0 wskazuje na awarię procesu. W takim przypadku powinieneś otrzymać status zakończenia 1, co oznacza, że polecenie memcstat nie powiodło się.

ponowne uruchomienie memcstat, tym razem z nazwą użytkownika i hasłem potwierdzi, czy proces uwierzytelniania zadziałał. Uruchom następujące polecenie z podstawionymi poświadczeniami zamiast wartości sammy i your_password` jeśli użyłeś innych poświadczeń:

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

powinieneś otrzymać wyjście w następujący sposób:

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

Twoja usługa Memcached jest teraz skonfigurowana i działa z obsługą SASL i uwierzytelnianiem użytkownika.

Krok 4 — umożliwienie dostępu przez sieć prywatną (Opcjonalnie)

domyślnie Memcached jest skonfigurowany tylko do nasłuchiwania na lokalnym interfejsie loopback (127.0.0.1), który chroni interfejs Memcached przed ekspozycją na osoby zewnętrzne. Mogą jednak wystąpić sytuacje, w których będziesz musiał zezwolić na dostęp z innych serwerów. W takim przypadku możesz dostosować ustawienia konfiguracji, aby powiązać Memcached z prywatnym interfejsem sieciowym.

Uwaga: W tej sekcji omówimy, jak skonfigurować ustawienia zapory sieciowej za pomocą UFW, ale możliwe jest również użycie zapór sieciowych DigitalOcean Cloud do utworzenia tych ustawień. Aby uzyskać więcej informacji na temat konfigurowania Zapór w chmurze DigitalOcean, zobacz nasze wprowadzenie do Zapór w chmurze DigitalOcean. Aby dowiedzieć się więcej o tym, jak ograniczyć ruch przychodzący do poszczególnych maszyn, zajrzyj do sekcji tego samouczka na temat stosowania reguł zapory przy użyciu tagów i nazw serwerów oraz omówienia tagów zapory.

Ograniczanie dostępu IP za pomocą zapór sieciowych

zanim dostosujesz ustawienia konfiguracji, dobrym pomysłem jest skonfigurowanie reguł zapory sieciowej w celu ograniczenia maszyn, które mogą łączyć się z Twoim serwerem Memcached. Najpierw musisz nagrać prywatny adres IP dowolnego komputera, którego chcesz użyć do połączenia z Memcached. Po uzyskaniu prywatnego adresu IP (lub adresów), dodasz wyraźną regułę zapory, aby umożliwić maszynie dostęp do Memcached.

jeśli używasz zapory sieciowej UFW, możesz ograniczyć dostęp do wystąpienia Memcached, wpisując następujące informacje na swoim serwerze Memcached:

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

jeśli więcej niż jeden system uzyskuje dostęp do Memcached za pośrednictwem sieci prywatnej, należy dodać dodatkowe reguły ufw dla każdej maszyny używającej powyższej reguły jako szablonu.

możesz dowiedzieć się więcej o zaporach UFW, czytając nasz przewodnik ufw essentials.

po wprowadzeniu tych zmian można dostosować usługę Memcached do prywatnego interfejsu sieciowego serwera.

Wiązanie Memcached z prywatnym interfejsem sieciowym

teraz, gdy zapora jest już na miejscu, możesz dostosować konfigurację Memcached, aby powiązać ją z prywatnym interfejsem sieciowym serwera zamiast 127.0.0.1.

najpierw znajdź interfejs sieci prywatnej dla serwera Memcached, używając następującego polecenia ip

  • ip -brief address show

w zależności od konfiguracji sieci serwera, Dane wyjściowe mogą być inne niż w poniższym przykładzie:

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

w tym przykładzie interfejsy sieciowe są identyfikowane za pomocą nazw eth0 i eth1. Podświetlone adresy IPv4 w linii eth0 są publicznymi adresami IP serwera.

podświetlony adres 10.136.32.212 w linii eth1 jest prywatnym adresem IPv4 serwera, a adres fe80::2cee:92ff:fe21:8bc4 jest prywatnym adresem IPv6. Twoje adresy IP będą różne, ale zawsze mieszczą się w następujących zakresach w zależności od specyfikacji RFC 1918):

  • 10.0.0.0 do 10.255.255.255(prefiks 10/8)
  • 172.16.0.0 do 172.31.255.255 (prefiks 172.16/12)
  • 192.168.0.0 do 192.168.255.255 (192.Prefiks 168/16)

po znalezieniu prywatnego adresu IP lub adresów serwera otwórz plik /etc/memcached.conf ponownie za pomocą nano lub preferowanego edytora:

  • sudo nano /etc/memcached.conf

znajdź linię -l 127.0.0.1, którą sprawdziłeś lub zmodyfikowałeś wcześniej, i zmień adres, aby pasował do prywatnego interfejsu sieciowego serwera:

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

jeśli chcesz mieć Memcached słuchać na wielu adresach, dodaj inną podobną linię dla każdego adresu, albo IPv4 lub IPv6 przy użyciu formatu -l memcached_servers_private_IP.

Zapisz i zamknij plik po zakończeniu.

następnie uruchom ponownie usługę Memcached:

  • sudo systemctl restart memcached

Sprawdź nowe ustawienia za pomocą ss, aby potwierdzić zmianę:

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

Przetestuj łączność z zewnętrznym klientem, aby upewnić się, że nadal możesz korzystać z usługi. Dobrym pomysłem jest również sprawdzenie dostępu od nieautoryzowanego klienta (spróbuj połączyć się bez użytkownika i hasła), aby upewnić się, że uwierzytelnianie SASL działa zgodnie z oczekiwaniami. Dobrym pomysłem jest również próba połączenia z Memcached z innego serwera, który nie może się łączyć, aby sprawdzić, czy utworzone reguły zapory są skuteczne.

wniosek

w tym samouczku zbadałeś, jak skonfigurować Memcached z gniazdami domenowymi IPv4, IPv6, TCP, UDP i Unix. Nauczyłeś się również, jak zabezpieczyć swój serwer Memcached, włączając uwierzytelnianie SASL. Wreszcie, nauczyłeś się, jak powiązać Memcached z lokalnym lub prywatnym interfejsem sieciowym i jak skonfigurować reguły zapory, aby ograniczyć dostęp do Memcached.

aby dowiedzieć się więcej o Memcached, sprawdź dokumentację projektu.

Write a Comment

Twój adres e-mail nie zostanie opublikowany.