Redis to wydajny magazyn klucz-wartość w pamięci, który może być używany jako serwer bazy danych, pamięć podręczna i broker komunikatów. Jest powszechnie znany ze swojej wysokiej wydajności, elastyczności i obsługi wielu różnych języków. Jest to darmowe oprogramowanie o otwartym kodzie źródłowym napisane w języku programowania C. W tym poradniku dowiesz się, jak zainstalować i zabezpieczyć Redis na Ubuntu 18.04.
Wymagania wstępne
Aby móc postępować zgodnie z tym poradnikiem, musisz wcześniej przygotować kilka rzeczy. Musisz posiadać serwer Ubuntu 18.04, który możesz łatwo zainstalować, postępując zgodnie z naszym samouczkiem. Ponadto musisz mieć użytkownika innego niż root z uprawnieniami sudo oraz skonfigurowaną podstawową zaporę sieciową (firewall). Możesz to skonfigurować, postępując zgodnie z naszymi przewodnikami dotyczącymi konfiguracji pliku sudoers w systemie Linux oraz konfiguracji UFW na serwerze chmurowym Ubuntu i Debian.
Zaczynajmy!
Instalacja Redis
Redis jest bezpośrednio dostępny w oficjalnym repozytorium Ubuntu. Jest to najprostszy sposób na jego instalację i konfigurację. Zalecamy skorzystanie z tej metody, chyba że istnieją konkretne powody, aby tego nie robić. Ponieważ kod źródłowy Redis jest dostępny bezpłatnie, możliwe jest również skompilowanie go ze źródeł. Nie zalecamy jednak tego rozwiązania, ponieważ jest ono trudniejsze w zarządzaniu i aktualizacji.
Instalacja Redis z repozytorium Ubuntu
Najpierw zaktualizuj lokalną pamięć podręczną pakietów APT:
|
1 |
sudo apt update |
Następnie zainstaluj Redis za pomocą następującego polecenia:
|
1 |
sudo apt install redis-server |
Instalacja Redis ze źródeł
Ubuntu domyślnie nie zawiera narzędzi do kompilacji ani niezbędnych bibliotek. Poniższe polecenie zainstaluje wszystkie narzędzia niezbędne do skompilowania Redis:
|
1 |
sudo apt install git build-essential |
Do skompilowania Redis wymagane są dwie dodatkowe zależności. Są one niezbędne do skompilowania Redis z dodatkowymi funkcjami, na przykład obsługą TLS, integracją z systemd itp. Aby skompilować Redis z obsługą TLS, zainstaluj pakiet „libssl-dev”. Aby skompilować Redis z obsługą systemd, zainstaluj pakiet „libsystemd-dev”:
|
1 |
sudo apt install libssl-dev libsystemd-dev |
Kod źródłowy Redis jest dostępny w serwisie GitHub. Zobacz stronę Redis na GitHubie. Następnie pobierz kod źródłowy:
|
1 |
git clone https://github.com/redis/redis.git |
Zmień bieżący katalog roboczy na katalog z kodem źródłowym Redis:
|
1 |
cd redis/ |
Następnie uruchom narzędzie make, aby rozpocząć kompilację. Skompiluje ono Redis bez żadnych dodatkowych elementów:
|
1 |
make -j$(nproc) |
Aby włączyć obsługę TLS (zakładając, że pakiet „libssl-dev” jest zainstalowany), użyj zamiast tego następującego polecenia:
|
1 |
make -j$(nproc) BUILD_TLS=yes |
Aby włączyć obsługę systemd (zakładając, że pakiet „libsystemd-dev” jest zainstalowany), użyj następującego polecenia:
|
1 |
make -j$(nproc) USE_SYSTEMD=yes |
Następnie przetestuj, czy kompilacja zakończyła się pomyślnie. Pamiętaj, że uruchomienie testu może wymagać dodatkowego pakietu „tcl-dev” i powiązanych z nim zależności:
|
1 |
make test |
Na koniec zainstaluj Redis, uruchamiając następujące polecenie:
|
1 |
sudo make install |
Jeśli Redis został skompilowany z obsługą TLS, uruchomienie serwera będzie musiało odbyć się w następujący sposób:
|
1 2 |
./utils/gen-test-certs.sh ./runtest --tls |
Konfiguracja Redis
Po zakończeniu instalacji nadszedł czas na konfigurację Redis. Otwórz plik konfiguracyjny Redis w edytorze tekstu i przewiń w dół do sekcji „supervised”:
|
1 |
sudo vim /etc/redis/redis.conf |
Zmień wartość „supervised” na „systemd”. Zapewni to, że usługa Redis będzie zarządzana przez systemd. Aby zmiany weszły w życie, zrestartuj usługę Redis:
|
1 |
sudo systemctl restart redis.service |
Testowanie Redis
Zawsze warto przetestować, czy Redis działa poprawnie, zanim zacznie się go używać na szerszą skalę. Oto kilka sposobów na przetestowanie działania Redis. Pierwszym krokiem jest sprawdzenie, czy usługa Redis jest uruchomiona i działa:
|
1 |
sudo systemctl status redis |
W tym miejscu Redis już działa. Domyślnie usługa Redis uruchamia się przy starcie systemu. Jeśli usługa Redis ma być uruchamiana ręcznie, należy ją wyłączyć:
|
1 |
sudo systemctl disable redis |
Kolejnym testem jest sprawdzenie działania za pomocą konsoli Redis. Uruchom klienta wiersza poleceń Redis:
|
1 |
redis-cli |
Uruchom polecenie „ping”:
|
1 |
ping |
Wynik potwierdza, że połączenie z serwerem jest nadal aktywne. Kolejnym testem jest sprawdzenie, czy pozwala on na ustawianie kluczy. Utwórz klucz „temp” o wartości „hello world”:
|
1 |
set temp “hello world” |
Pobierz wartość za pomocą polecenia „get”:
|
1 |
get temp |
Jeśli do tej pory wszystko działa poprawnie, Redis powinien bez problemu zwrócić wartość klucza. Zamknij klienta wiersza poleceń Redis:
|
1 |
exit |
Ostatnim testem jest sprawdzenie, czy Redis potrafi zachować dane nawet po zatrzymaniu lub ponownym uruchomieniu. Uruchom ponownie usługę Redis:
|
1 |
sudo systemctl restart redis |
Jeśli podczas uruchamiania powyższego polecenia wystąpi błąd, użyj polecenia “systemctl enable redis-server”:
|
1 |
sudo systemctl enable redis-server |
Uruchom klienta wiersza poleceń Redis i pobierz wartość utworzonego wcześniej klucza „temp”:
|
1 2 |
redis-cli get temp |
To kończy testowanie bazy Redis. Twój serwer Redis jest teraz gotowy do użycia w pożądanym celu.
Zabezpieczanie Redis
W tym momencie Redis jest w pełni operacyjny. Jednak niektóre z jego domyślnych konfiguracji nie zapewniają najlepszego bezpieczeństwa. Jeśli nie zostaną zaktualizowane, każdy złośliwy podmiot może to wykorzystać, aby uzyskać dostęp do serwera i jego danych. Ta sekcja pokaże, jak ograniczyć te zagrożenia. Chociaż te kroki są opcjonalne, zdecydowanie zaleca się ich wykonanie w celu zwiększenia bezpieczeństwa systemu.
Wiązanie z localhost
Domyślnie Redis jest dostępny tylko z poziomu localhost. Jeśli jednak Redis został skonfigurowany na zdalnym serwerze, konfiguracja musi zostać zaktualizowana, aby umożliwić połączenie z dowolnego miejsca. Może to jednak nie być tak bezpieczne, jak powiązanie z localhost. Aby ponownie powiązać Redis z localhost, otwórz plik konfiguracyjny Redis w edytorze tekstu:
|
1 |
sudo vim /etc/redis/redis.conf |
Przewiń w dół i znajdź poniższą linię. Upewnij się, że nie jest zakomentowana:
|
1 |
bind 127.0.0.1 ::1 |
Zapisz i zamknij plik. Następnie uruchom ponownie usługę Redis, aby upewnić się, że zmiana wejdzie w życie natychmiast:
|
1 |
sudo systemctl restart redis |
Zweryfikuj, czy zmiana zakończyła się sukcesem:
|
1 |
sudo netstat -lnp | grep redis |
Jeśli otrzymasz błąd ‘netstat: command not found’, użyj polecenia do zainstalowania net-tools “sudo apt-get install net-tools”. Wynik potwierdza, że „redis-server” został pomyślnie powiązany z localhost (127.0.0.1), co odzwierciedla ostatnio wprowadzoną zmianę. Jeśli widoczny jest inny adres IP (na przykład 0.0.0.0), sprawdź ponownie plik konfiguracyjny i ponownie uruchom serwer Redis.
Konfigurowanie hasła Redis
Skonfigurowanie hasła umożliwia korzystanie z wbudowanej funkcji bezpieczeństwa Redis – polecenia „AUTH”. Wymaga ono od klientów uwierzytelnienia w celu uzyskania dostępu do bazy danych. Domyślnie Redis nie ma skonfigurowanego hasła. Hasło musi zostać zadeklarowane w pliku konfiguracyjnym Redis. Otwórz plik konfiguracyjny w edytorze tekstu:
|
1 |
sudo vim /etc/redis/redis.conf |
Następnie przewiń w dół do poniższej linii i usuń znak komentarza:
|
1 |
requirepass foobared |
Po odkomentowaniu domyślnym hasłem będzie „foobared”. Zmień je na wybrane przez siebie hasło. W przypadku Redis siła hasła jest bardzo istotnym czynnikiem. Ponieważ Redis jest serwerem o wysokiej wydajności, potencjalnie łatwiej go zaatakować metodą brute-force. Z tego powodu plik konfiguracyjny zawiera bezpośrednio następujące ostrzeżenie. Oto szybki przykład generowania bardzo silnego losowego hasła. Użyjemy polecenia OpenSSL do wygenerowania losowego ciągu znaków:
|
1 |
echo $(openssl rand 60 | openssl base64 -A) |
Po skonfigurowaniu nowego hasła zrestartuj usługę Redis, aby zmiany weszły w życie:
|
1 |
sudo systemctl restart redis.service |
Czas sprawdzić, czy hasło zostało pomyślnie zastosowane. Uruchom konsolę wiersza poleceń Redis:
|
1 |
redis-cli |
Następnie spróbuj ustawić nowy klucz:
|
1 |
set user “cloudsigma” |
Redis odrzuci żądanie, ponieważ brak jest uwierzytelnienia dla tej akcji. Aby wykonać jakąkolwiek akcję na serwerze, użytkownik musi najpierw zostać autoryzowany. Autoryzuj użytkownika za pomocą następującego polecenia:
|
1 |
auth <hasło> |
Jeśli hasło było poprawne, Redis potwierdzi akcję. Teraz Redis zezwoli na dostęp do funkcji swojego serwera:
|
1 2 |
set user “cloudsigma” get user |
Na razie nasza praca z konsolą Redis jest zakończona. Możesz zamknąć konsolę:
|
1 |
exit |
Zmiana nazw niebezpiecznych poleceń
Redis umożliwia zmianę nazwy lub całkowite wyłączenie niektórych poleceń, które są uważane za niebezpieczne. To kolejna ważna wbudowana funkcja bezpieczeństwa systemu Redis. Dlaczego polecenia są uznawane za niebezpieczne? Jeśli zostaną uruchomione przez nieuprawnionego użytkownika, mogą one zmienić konfigurację, zniszczyć lub usunąć dane na serwerze. Powszechną praktyką jest wyłączanie/zmiana nazw wielu niebezpiecznych poleceń Redis. Należy pamiętać, że zagrożenie bezpieczeństwa ze strony polecenia zależy od sytuacji. Na przykład niektóre z poniższych poleceń mogą być potrzebne na co dzień. W takich przypadkach ich wyłączenie nie jest zalecane. W takiej sytuacji korzystniejsza może okazać się zmiana nazwy polecenia. Oto krótka lista poleceń, które są uznawane za niebezpieczne. Jest to dobry punkt wyjścia do zwiększenia bezpieczeństwa serwera Redis:
- FLUSHDB
- FLUSHALL
- KEYS
- PEXPIRE
- DEL
- CONFIG
- SHUTDOWN
- BGREWRITEAOF
- BGSAVE
- SAVE
- SPOP
- SREM
- RENAME
- DEBUG
Aby zmienić nazwę lub wyłączyć polecenie, należy je zadeklarować w pliku konfiguracyjnym Redis. Otwórz plik konfiguracyjny Redis i dodaj następujące linie. Tutaj „rename-command” służy do zmiany nazwy poleceń na pusty ciąg znaków. Dodaj tyle wpisów, ile to konieczne:
|
1 |
sudo vim /etc/redis/redis.conf |
|
1 2 3 4 |
$ rename-command FLUSHDB "" $ rename-command FLUSHALL "" $ rename-command SHUTDOWN "" $ rename-command CONFIG "" |
Podobnie możliwe jest również zmiana nazwy poleceń na inną. W niektórych sytuacjach może to zapewnić większą elastyczność:
|
1 2 3 4 |
$ rename-command FLUSHDB "command_1" $ rename-command FLUSHALL "command_2" $ rename-command SHUTDOWN "command_3" $ rename-command CONFIG "command_4" |
Zapisz plik i wyjdź z edytora. Aby zmiany weszły w życie, zrestartuj usługę Redis:
|
1 |
sudo systemctl restart redis.service |
Zweryfikuj zmiany. Następnie uruchom konsolę Redis i uwierzytelnij dostęp:
|
1 2 |
redis-cli auth <hasło> |
Załóżmy, że polecenie „CONFIG” zostało wyłączone lub zmieniono jego nazwę. Spróbuj użyć następującego polecenia „CONFIG”. Zakończy się ono niepowodzeniem:
|
1 |
config get requirepass |
Jeśli polecenie zostało wyłączone, nie będzie można uzyskać do niego dostępu, dopóki nie zostanie ponownie włączone. Jeśli jednak zmieniono jego nazwę, użyj nowego aliasu:
|
1 |
command_4 get requirepass |
Podsumowanie
Ten samouczek pokazuje, jak zainstalować, zabezpieczyć, skonfigurować i zweryfikować instalację Redis. Pokazuje również, jak korzystać z wbudowanych funkcji bezpieczeństwa Redis, aby uczynić go mniej podatnym na ataki. Jeśli jednak ktoś jest już zalogowany na serwerze, dość łatwo jest obejść funkcje bezpieczeństwa specyficzne dla Redis. Dlatego posiadanie zapory sieciowej (firewalla) chroniącej dostęp do serwera Redis ma kluczowe znaczenie.
Miłej pracy!






Komentarze
Brak komentarzy. Bądź pierwszy.