Redis je výkonné úložiště klíč-hodnota v operační paměti, které lze použít jako databázový server, mezipaměť a zprostředkovatele zpráv. Je široce známé pro svůj rychlý výkon, flexibilitu a podporu široké škály jazyků. Jedná se o bezplatný a open-source software napsaný v programovacím jazyce C. V tomto návodu se dozvíte, jak nainstalovat a zabezpečit Redis na Ubuntu 18.04.
Požadavky
Abyste mohli postupovat podle tohoto návodu, budete si muset předem připravit několik věcí. Musíte mít server Ubuntu 18.04, který můžete snadno nainstalovat podle našeho návodu. Kromě toho musíte mít uživatele bez oprávnění root s právy sudo a nakonfigurovaný základní firewall. To můžete nastavit podle našich návodů na konfiguraci souboru Linux sudoers a nastavení UFW na cloudovém serveru Ubuntu a Debian.
Nyní začněme!
Instalace Redis
Redis je přímo dostupný z oficiálního Ubuntu repozitáře. Toto je nejjednodušší způsob jeho instalace a konfigurace. Doporučujeme jít touto cestou, pokud k tomu nejsou specifické důvody. Vzhledem k tomu, že zdrojový kód Redis je k dispozici zdarma, je také možné sestavit Redis ze zdroje. To však nedoporučujeme, protože jeho správa a aktualizace jsou složitější.
Instalace Redis z repozitáře Ubuntu
Nejprve aktualizujte místní mezipaměť balíčků APT:
|
1 |
sudo apt update |
Dále nainstalujte Redis pomocí následujícího příkazu:
|
1 |
sudo apt install redis-server |
Instalace Redis ze zdrojového kódu
Ubuntu ve výchozím nastavení neobsahuje nástroje pro sestavení a potřebné knihovny. Následující příkaz nainstaluje všechny potřebné nástroje pro sestavení Redis:
|
1 |
sudo apt install git build-essential |
Pro sestavení Redis existují dvě další závislosti. Tyto závislosti jsou nutné pro kompilaci Redis s dalšími funkcemi, například s podporou TLS, integrací systemd atd. Chcete-li kompilovat Redis s podporou TLS, nainstalujte balíček „libssl-dev“. Chcete-li kompilovat Redis s podporou systemd, nainstalujte balíček „libsystemd-dev“:
|
1 |
sudo apt install libssl-dev libsystemd-dev |
Zdrojový kód Redis je k dispozici na GitHubu. Podívejte se na stránku Redis na GitHubu. Poté stáhněte zdrojový kód:
|
1 |
git clone https://github.com/redis/redis.git |
Změňte aktuální aktivní adresář na adresář se zdrojovým kódem Redis:
|
1 |
cd redis/ |
Poté spusťte nástroj make pro zahájení kompilace. Zkompiluje Redis bez jakýchkoli dalších prvků:
|
1 |
make -j$(nproc) |
Chcete-li povolit podporu TLS (za předpokladu, že je nainstalován balíček „libssl-dev“), použijte místo toho následující příkaz:
|
1 |
make -j$(nproc) BUILD_TLS=yes |
Chcete-li povolit podporu pro systemd (za předpokladu, že je nainstalován balíček „libsystemd-dev“), použijte následující příkaz:
|
1 |
make -j$(nproc) USE_SYSTEMD=yes |
Dále otestujte, zda byla kompilace úspěšná. Upozorňujeme, že ke spuštění testu může být vyžadován další balíček „tcl-dev“ a související závislosti:
|
1 |
make test |
Nakonec nainstalujte Redis spuštěním následujícího příkazu:
|
1 |
sudo make install |
Pokud byl Redis sestaven s použitím TLS, bude nutné spuštění serveru provést následujícím způsobem:
|
1 2 |
./utils/gen-test-certs.sh ./runtest --tls |
Konfigurace Redis
Po dokončení instalace je čas nakonfigurovat Redis. Otevřete konfigurační soubor Redis v textovém editoru a přejděte dolů do sekce „supervised“:
|
1 |
sudo vim /etc/redis/redis.conf |
Změňte hodnotu „supervised“ na „systemd“. Tím zajistíte, že služba Redis bude spravována systémem. Aby se změny projevily, restartujte službu Redis:
|
1 |
sudo systemctl restart redis.service |
Testování Redis
Před dalším použitím je vždy dobré otestovat, zda Redis funguje správně. Zde je několik způsobů, jak otestovat chování Redis. Prvním krokem je zkontrolovat, zda je služba Redis spuštěna a běží:
|
1 |
sudo systemctl status redis |
Zde již Redis běží. Ve výchozím nastavení se služba Redis spustí při startu systému. Pokud má být služba Redis spouštěna ručně, zakažte ji:
|
1 |
sudo systemctl disable redis |
Dalším testem je kontrola pomocí konzole Redis. Spusťte klienta příkazového řádku Redis:
|
1 |
redis-cli |
Spusťte příkaz „ping“:
|
1 |
ping |
Výstup potvrzuje, že připojení k serveru je stále aktivní. Dalším testem je ověření, zda umožňuje nastavování klíčů. Vytvořte klíč „temp“ s hodnotou „hello world“:
|
1 |
set temp “hello world” |
Získejte hodnotu pomocí příkazu „get“:
|
1 |
get temp |
Pokud vše dosud funguje v pořádku, Redis by měl bez problémů vrátit hodnotu klíče. Zavřete klienta příkazového řádku Redis:
|
1 |
exit |
Závěrečným testem je ověření, zda Redis dokáže uchovat data, i když je zastaven nebo restartován. Restartujte službu Redis:
|
1 |
sudo systemctl restart redis |
Pokud při spuštění výše uvedeného příkazu dojde k chybě, použijte příkaz “systemctl enable redis-server”:
|
1 |
sudo systemctl enable redis-server |
Spusťte klienta příkazového řádku Redis a získejte hodnotu klíče „temp“, který jsme vytvořili dříve:
|
1 2 |
redis-cli get temp |
Tím je testování Redis dokončeno. Váš server Redis je nyní připraven k použití pro požadovaný účel.
Zabezpečení Redis
V tomto okamžiku je Redis plně funkční. Některé z jeho výchozích konfigurací však nenabízejí nejlepší zabezpečení. Pokud nebudou aktualizovány, může jakýkoli útočník využít příležitosti k získání přístupu k serveru a jeho datům. Tato část ukáže, jak tato rizika zmírnit. Přestože jsou tyto kroky volitelné, důrazně doporučujeme je dodržet pro zvýšení zabezpečení systému.
Vázání na localhost
Ve výchozím nastavení je Redis přístupný pouze z localhostu. Pokud však byl Redis nakonfigurován na vzdáleném serveru, je nutné konfiguraci aktualizovat, aby bylo povoleno připojení odkudkoli. To však nemusí být tak bezpečné jako vázání na localhost. Chcete-li Redis znovu navázat na localhost, otevřete konfigurační soubor Redis v textovém editoru:
|
1 |
sudo vim /etc/redis/redis.conf |
Přejděte dolů a najděte následující řádek. Ujistěte se, že není zakomentovaný:
|
1 |
bind 127.0.0.1 ::1 |
Uložte a zavřete soubor. Poté restartujte službu Redis, aby se změna projevila okamžitě:
|
1 |
sudo systemctl restart redis |
Ověřte, zda byla změna úspěšná:
|
1 |
sudo netstat -lnp | grep redis |
Pokud se zobrazí chyba ‘netstat: command not found’, použijte k instalaci net-tools příkaz “sudo apt-get install net-tools”. Výstup ověřuje, že „redis-server“ je úspěšně navázán na localhost (127.0.0.1), což odráží nedávno provedenou změnu. Pokud je tam jakákoli jiná IP adresa (například 0.0.0.0), znovu zkontrolujte konfigurační soubor a restartujte server Redis.
Konfigurace hesla pro Redis
Konfigurace hesla umožňuje použití vestavěné bezpečnostní funkce Redis – příkazu „AUTH“. Vyžaduje, aby se klienti pro přístup k databázi autentizovali. Ve výchozím nastavení nemá Redis nakonfigurované žádné heslo. Heslo musí být deklarováno v konfiguračním souboru Redis. Otevřete konfigurační soubor v textovém editoru:
|
1 |
sudo vim /etc/redis/redis.conf |
Poté přejděte dolů na následující řádek a odkomentujte jej:
|
1 |
requirepass foobared |
Po odkomentování bude výchozím heslem „foobared“. Změňte jej na heslo podle svého výběru. Pokud jde o Redis, síla hesla je velmi důležitým faktorem. Vzhledem k tomu, že Redis je vysoce výkonný server, je potenciálně snazší jej zneužít pomocí útoků hrubou silou. Proto konfigurační soubor přímo obsahuje následující varování. Zde je rychlý příklad vygenerování velmi silného náhodného hesla. K vygenerování náhodného řetězce použijeme příkaz OpenSSL:
|
1 |
echo $(openssl rand 60 | openssl base64 -A) |
Po nakonfigurování nového hesla restartujte službu Redis, aby se změny projevily:
|
1 |
sudo systemctl restart redis.service |
Nyní je čas otestovat, zda bylo heslo úspěšně použito. Spusťte konzoli příkazového řádku Redis:
|
1 |
redis-cli |
Poté se pokuste nastavit nový klíč:
|
1 |
set user “cloudsigma” |
Redis požadavek odmítne, protože pro tuto akci neproběhlo ověření. Chcete-li na serveru provést jakoukoli akci, musí být uživatel nejprve autorizován. Autorizujte uživatele pomocí následujícího příkazu:
|
1 |
auth <password> |
Pokud bylo heslo správné, Redis akci potvrdí. Nyní Redis povolí přístup ke svým serverovým funkcím:
|
1 2 |
set user “cloudsigma” get user |
Prozatím je naše práce s konzolí Redis hotová. Konzoli můžete zavřít:
|
1 |
exit |
Přejmenování nebezpečných příkazů
Redis umožňuje přejmenovat nebo zcela zakázat určité příkazy, které jsou považovány za nebezpečné. Jedná se o další důležitou vestavěnou bezpečnostní funkci systému Redis. Proč jsou příkazy považovány za nebezpečné? Pokud je spustí neoprávněný uživatel, mohou tyto příkazy změnit konfiguraci, zničit nebo vymazat data na serveru. Zakázání nebo přejmenování řady nebezpečných příkazů Redis je běžnou praxí. Upozorňujeme, že bezpečnostní hrozba příkazu závisí na situaci. Některé z následujících příkazů mohou být například vyžadovány pravidelně. V takových případech se jejich zakázání nedoporučuje. V takové situaci může být výhodnější příkaz přejmenovat. Zde je rychlý seznam příkazů, které jsou považovány za nebezpečné. To je dobrý výchozí bod pro zvýšení zabezpečení serveru Redis:
- FLUSHDB
- FLUSHALL
- KEYS
- PEXPIRE
- DEL
- CONFIG
- SHUTDOWN
- BGREWRITEAOF
- BGSAVE
- SAVE
- SPOP
- SREM
- RENAME
- DEBUG
Chcete-li příkaz přejmenovat nebo zakázat, musí být deklarován v konfiguračním souboru Redis. Otevřete konfigurační soubor Redis a přidejte následující řádky. Zde se k přejmenování příkazů na prázdný řetězec používá „rename-command“. Přidejte tolik položek, kolik je potřeba:
|
1 |
sudo vim /etc/redis/redis.conf |
|
1 2 3 4 |
$ rename-command FLUSHDB "" $ rename-command FLUSHALL "" $ rename-command SHUTDOWN "" $ rename-command CONFIG "" |
Podobně je také možné přejmenovat příkazy na jiný název. V určitých situacích to může nabídnout větší flexibilitu:
|
1 2 3 4 |
$ rename-command FLUSHDB "command_1" $ rename-command FLUSHALL "command_2" $ rename-command SHUTDOWN "command_3" $ rename-command CONFIG "command_4" |
Uložte soubor a ukončete editor. Aby se změny projevily, restartujte službu Redis:
|
1 |
sudo systemctl restart redis.service |
Ověřte změny. Dále spusťte konzoli Redis a ověřte přístup:
|
1 2 |
redis-cli auth <password> |
Předpokládejme, že příkaz „CONFIG“ byl zakázán nebo přejmenován. Zkuste použít následující příkaz „CONFIG“. Selže:
|
1 |
config get requirepass |
Pokud byl příkaz zakázán, nelze k němu přistupovat, dokud nebude znovu povolen. Pokud však byl přejmenován, použijte nový alias:
|
1 |
command_4 get requirepass |
Závěr
Tento návod ukazuje, jak nainstalovat, zabezpečit, nakonfigurovat a ověřit instalaci Redis. Ukazuje také, jak používat vestavěné bezpečnostní funkce systému Redis, aby byl méně zranitelný vůči útokům. Pokud je však již někdo k serveru přihlášen, je poměrně snadné bezpečnostní funkce specifické pro Redis obejít. Proto je klíčové mít firewall pro ochranu přístupu k serveru Redis.
Příjemnou práci!






Komentáře
Zatím žádné komentáře. Buďte první.