Redestilát — Úložiště klíč/hodnota NoSQL, umístěné v paměti, s možností ukládání na disk. Redis se nejčastěji používá pro ukládání dat do mezipaměti, ukládání relací a pro implementaci různých škálovacích mechanismů.
Redis byl navržen pro použití důvěryhodnými klienty v důvěryhodném prostředí a sám o sobě neposkytuje silné bezpečnostní funkce. Abychom to potvrdili, zde je citát z oficiálního webu Redis:
„Redis je navržen pro přístup důvěryhodným klientům v důvěryhodných prostředích. To znamená, že se obecně nedoporučuje hostovat instanci Redis přímo na internetu, nebo dokonce v prostředí, kde nedůvěryhodní klienti mohou přímo přistupovat k Redis TCP portu nebo UNIX socketu. Obecně je Redis navržen pro maximální výkon a jednoduchost ovládání, ale ne pro maximální bezpečnost.”
Ale výkon a snadná správa bez zabezpečení je chyba. Redis má vestavěno několik základních bezpečnostních funkcí, jako je základní generování nešifrovaného hesla, přejmenování a deaktivace příkazů. Není však poskytován plnohodnotný systém kontroly přístupu.
Konfigurace stávajících funkcí pro zlepšení zabezpečení vaší instalace Redis je důležitým krokem k zajištění přiměřené ochrany dat.
V tomto článku se dozvíte, jak nakonfigurovat vestavěné bezpečnostní funkce Redis a další bezpečnostní vylepšení pomocí samostatné instalace Redis na Ubuntu.
Upozorňujeme, že tato příručka nepokrývá situace, kdy jsou serverové a klientské aplikace Redis hostovány na různých hostitelích nebo v různých datových centrech. Infrastruktury, kde provoz Redis musí procházet nezabezpečenou nebo nedůvěryhodnou sítí, vyžadují další sadu konfigurací nad rámec zde uvedených nastavení, jako je nastavení SSL proxy nebo VPN mezi počítači Redis.
- Předpoklady
- Kontrola dostupnosti Redis
- Zabezpečení serveru pomocí iptables
- Nastavení hesla pro ověřování Redis
- Přejmenování nebezpečných příkazů
- Konfigurace přístupových práv k datovému adresáři a přístupu k souborům
- Závěr
- Instalace, počáteční nastavení a spuštění
- Operační systém Ubuntu
- přístavní dělník
- Kontrola práce
- Přístup k síti
- a) Instalace na operační systém
- b) Spuštění v Dockeru
- Připojení klienta
- Nastavení ověřování
- a) Instalace na operační systém
- b) Spuštění v Dockeru
- Příklad zapojení z programovacích jazyků
Předpoklady
Chcete-li postupovat podle popsaných pokynů, budete potřebovat:
- Ubuntu server s uživatelem s právy sudo;
- iptables;
- Redis je nainstalován a funguje.
Kontrola dostupnosti Redis
Nejprve se připojte k serveru pomocí SSH:
Chcete-li ověřit, že Redis běží, použijte příkazový řádek Redis. Pro přístup k příkazovému řádku použijte příkaz redis-cli.
Poznámka: Pokud jste již nastavili heslo pro Redis, přihlaste se po navázání připojení pomocí auth .
auth your_redis_password
Odpověď:
OK
Zkontrolujte připojení k serveru pomocí příkazu ping:
Pokud Redis funguje správně, uvidíte odpověď:
Chcete-li ukončit použití:
Nyní jste si jisti, že vaše instalace Redis je plně funkční a připravená k použití. Můžete pokračovat v nastavení zabezpečení serveru.
Zabezpečení serveru pomocí iptables
Redis je jednoduše aplikace běžící na serveru, a protože nemá žádné skutečné bezpečnostní schopnosti, prvním krokem k její ochraně je zabezpečení serveru, na kterém běží.
Pokud používáte server s přístupem k síti, prvním krokem je konfigurace brány firewall:
Pokud Redis potřebuje být přístupný klientům z externích IP adres, musíte Redis spustit tak, aby naslouchal požadovaným IP adresám, například 0.0.0.0 (můžete zadat konkrétní IP adresy oddělené mezerou):
Nastavení hesla pro ověřování Redis
Po instalaci Redis pro něj musíte nastavit heslo. Silné heslo můžete nastavit podle pokynů v této části.
Nastavení hesla Redis umožňuje jednu ze dvou vestavěných funkcí zabezpečení, příkaz auth, který vyžaduje, aby se klienti pro přístup k databázi autentizovali. Heslo se konfiguruje přímo v konfiguračním souboru Redis /etc/redis/redis.conf.
Přejděte do sekce ZABEZPEČENÍ a najděte zakomentovanou směrnici:
Odkomentujte tento řádek odstraněním # a nahraďte foobared silným, dlouhým heslem.
Místo toho, abyste si heslo vytvářeli sami, můžete použít nástroj apg nebo pwgen. Pokud nechcete instalovat aplikaci pro generování hesel, můžete použít níže uvedený skript. Změňte slovo v uvozovkách na své heslo.
Zkopírujte a vložte odpověď jako hodnotu pro requirepass v /etc/redis/redis.conf , vaše aplikace by nyní měly používat tento hash jako heslo při ověřování:
Po nastavení hesla uložte soubor a restartujte Redis:
Chcete-li ověřit, že heslo funguje, připojte se k serveru Redis pomocí klienta příkazového řádku:
Níže je uvedena sekvence příkazů pro kontrolu fungování hesla Redis. První příkaz se pokusí nastavit klíč na hodnotu před ověřením.
To nebude fungovat, takže Redis vrátí chybu:
Druhý příkaz umožňuje autentizaci pomocí hesla zadaného v konfiguračním souboru Redis.
Poté, co Redis přijme heslo, předchozí příkaz vrátí úspěšnou odpověď:
get key1 požádá Redis o hodnotu nového klíče.
Nyní můžeme opustit příkazový řádek:
Dále se podíváme na metodu založenou na přejmenování nebezpečných příkazů Redis pro další zlepšení zabezpečení.
Přejmenování nebezpečných příkazů
Další vestavěná bezpečnostní funkce Redis umožňuje přejmenovat nebo zcela zakázat určité příkazy, které jsou považovány za nebezpečné.
Když jsou tyto příkazy spouštěny uživateli, lze je použít ke změně konfigurace, zničení nebo poškození dat. Stejně jako ověřovací heslo jsou příkazy přejmenovány nebo zakázány v souboru /etc/redis/redis.conf.
Některé příkazy, které jsou považovány za nebezpečné, jsou: FLUSHDB, FLUSHALL, KEYS, PEXPIRE, DEL, CONFIG, SHUTDOWN, BGREWRITEAOF, BGSAVE, SAVE, SPOP, SREM, RENAME a DEBUG. Seznam je neúplný, ale pro začátek stačí přejmenovat nebo zakázat příkazy z tohoto seznamu.
Zakázání nebo přejmenování příkazu je určeno jeho použitím klienty Redis. Pokud víte, že nikdy nepoužijete nebezpečný příkaz, je nejlepší jej zakázat. Jinak to alespoň přejmenuj.
Chcete-li přejmenovat nebo zakázat příkazy Redis, otevřete konfigurační soubor pro úpravy znovu:
Zakažte nebo přejmenujte příkazy, které jsou pro vás smysluplné. Příkazy si můžete sami zkontrolovat na redis.io/commands a uvidíte, jak je lze nesprávně použít.
Chcete-li příkaz zakázat, jednoduše jej přejmenujte na prázdný řetězec, jak je znázorněno níže:
Chcete-li příkaz přejmenovat, zadejte pro něj jiný název, jak je znázorněno níže. Přejmenované příkazy by měly být pro útočníky obtížné uhodnout, ale pro vás snadno zapamatovatelné.
Uložte změny a použijte je restartováním Redis.
Chcete-li nový příkaz otestovat, přejděte na příkazový řádek Redis:
Nyní řekněme, že přejmenujete příkaz CONFIG na ASC12_CONFIG . Následující výstup pak ukáže, jak zkontrolovat, zda byl použit nový příkaz.
První pokus o použití příkazu config vrátí chybu, protože. bylo přejmenováno.
Volání přejmenovaného příkazu bude úspěšné (při volání příkazů se nerozlišují velká a malá písmena):
Nyní můžete ukončit redis-cli:
Poznámka: Pokud restartujete Redis bez předchozího zavření příkazového řádku, budete se muset znovu ověřit. Jinak se při spuštění příkazu zobrazí chyba:
NOAUTH Vyžaduje se ověření.
Pokud jde o přejmenování příkazů, na konci sekce ZABEZPEČENÍ v /etc/redis/redis.conf je varování:
“Uvědomte si, že přejmenování příkazů nalezených v souboru protokolu AOF nebo předávaných podřízeným serverům může způsobit problémy.”
To znamená, že pokud z nějakého důvodu změníte příkaz poté, co byl již uložen do protokolu přírůstkového trvalého úložiště, nebo na podřízených serverech má příkaz jiný název, narazíte na problémy se servery Redis.
Pokud tedy používáte prostředí AOF nebo replikované prostředí, po přejmenování příkazů by měly být na všech serverech stejné názvy a úložiště AOF se vymaže, pokud existuje možnost, že tam jsou příkazy se starými názvy.
Konfigurace přístupových práv k datovému adresáři a přístupu k souborům
V tomto okamžiku se podíváme na změny oprávnění, které můžete provést, aby byla vaše instalace Redis bezpečnější. Patří mezi ně kontrola, zda má oprávnění číst data pouze uživatel, který potřebuje přístup k Redis. Toto je výchozí uživatel redis.
Můžete to zkontrolovat prohledáním datového adresáře Redis:
Můžete vidět, že datový adresář Redis je vlastněn uživatelem redis a skupinou redis.
Složitější s oprávněními složky je 755. Chcete-li zajistit, že ke složce a jejímu obsahu bude mít přístup pouze uživatel Redis, změňte oprávnění na 700:
Dalším oprávněním, které by mělo být změněno, jsou oprávnění konfiguračního souboru Redis. Ve výchozím nastavení jsou oprávnění k souborům 644 a patří uživateli root, přičemž sekundární přístup je udělen skupině redis.
Toto oprávnění (644) je čitelné po celém světě, což není dobré, protože obsahuje nezašifrované heslo, které bylo dříve nakonfigurováno.
Musíte změnit vlastnictví a přístupová práva. V ideálním případě by měl být ve vlastnictví uživatele redis, se sekundárním přístupem uděleným uživateli root. Chcete-li to provést, spusťte následující příkaz:
Poté změňte oprávnění tak, aby jej mohl číst a/nebo zapisovat pouze vlastník souboru:
Zkontrolujte nová oprávnění pomocí:
Nakonec restartujte Redis:
Závěr
Uvědomte si prosím, že pokud máte přístup ke svému serveru, je velmi snadné obejít bezpečnostní funkce specifické pro Redis, které jsme implementovali. Nejdůležitějším bezpečnostním prvkem je tedy nastavení firewallu, který co nejvíce blokuje neznámé uživatele.
Chcete-li posunout zabezpečení vašeho serveru na další úroveň, můžete nastavit systém detekce narušení, jako je OSSEC.
K zabezpečení Redis v nezabezpečené síti budete muset použít SSL proxy, jak doporučují vývojáři Redis v oficiálním Redis Security Guide. Nastavení SSL proxy pro zabezpečení připojení Redis je samostatné téma.

Aktualizováno: 24.12.2022. 10.04.2021. XNUMX Zveřejněno: XNUMX. XNUMX. XNUMX
Podíváme se na pokyny pro instalaci Redis jak na operační systém Ubuntu, tak jako kontejner Docker. Tento DBMS se obvykle používá k ukládání dočasných informací, například mezipaměti nebo relací. Jeho výhodou je rychlost.
Instalace, počáteční nastavení a spuštění
Zvažme dvě možnosti instalace – čistou instalaci na systém Linux Ubuntu a spuštění kontejneru z oficiálního obrazu Dockeru.
Operační systém Ubuntu
Aktualizujte seznam balíčků:
apt-get install redis-server
Otevřete konfigurační soubor:
Změna hodnoty pro direktivu pod dohledem:
* toto nastavení vám umožní inicializovat spuštění Redis jako služby. Podle oficiální dokumentace nám to umožní získat větší kontrolu nad databází.
Povolit automatické spuštění služby:
systemctl povolit redis-server
systemctl restartujte redis-server
Náš server je připraven.
Verzi nainstalovaného DBMS můžete zobrazit příkazem:
Měli bychom vidět něco jako:
Redis server v=5.0.7 sha=00000000:0 malloc=jemalloc-5.2.1 bits=64 build=636cde3b5c7a3923
* v tomto příkladu je nainstalována verze 5. V době aktualizace této instrukce byla nejnovější verze 6.
přístavní dělník
Je nutné, aby byl v našem systému nainstalován Docker.
Poté stáhneme obrázek Redis:
docker vytáhnout redis
docker run –name redis-server -d redis
Zkontrolujeme, zda se náš kontejner spustil:
Měli bychom vidět něco jako:
ID KONTEJNERU PŘÍKAZ OBRÁZKU VYTVOŘIL STAV NÁZVY PORTŮ
a8c30431268c redis „docke. “ 4 sec. Nahoru 3. 6379/tcp redis-server
* naše služba běží na portu 6379; můžete ho oslovit jménem redis-server nebo ID a8c30431268c.
Kontrola práce
K našemu lokálnímu serveru se připojíme pomocí příkazu redis-cli.
a) při instalaci do systému:
b) pokud jste spustili kontejner:
docker exec -it redis-server redis-cli
* Kde redis-server — název kontejneru, který jsme zadali při jeho spuštění.
Měli bychom vidět příkazový řádek Redis:
Chcete-li zkontrolovat připojení k serveru, spusťte příkaz:
V odpovědi bychom měli vidět:
Zkusme vytvořit pár klíč–hodnota. Chcete-li to provést, zadejte:
> nastavit test_key „Testovací hodnotu“
Nyní to zkusme získat:
Potřebujeme získat naši hodnotu:
Seznam všech klíčů můžete také získat příkazem:
Server běží. Opusťte konzolu ředkvičky:
Kompletní seznam příkazů pro práci v redis-cli najdete na oficiálních stránkách.
Přístup k síti
Po instalaci Redis se k němu můžete připojit pouze lokálně. Abychom mohli používat databázový server pro síťové požadavky, musíme změnit nastavení v konfiguračním souboru. V závislosti na způsobu instalace se naše akce budou lišit.
a) Instalace na operační systém
Otevřete konfigurační soubor:
. a oddělené čárkami uvádíme IP adresy síťových rozhraní serveru, na kterých by měl přijímat požadavky:
vazba 127.0.0.1 ::1 192.168.0.15
* v našem příkladu jsme přidali adresu 192.168.0.15 — předpokládá se, že toto je adresa našeho serveru.
systemctl restartujte redis-server
Hotovo, můžete zkontrolovat, že server naslouchá požadované adrese pomocí příkazu:
ss -tunlp | grep:6379
b) Spuštění v Dockeru
Ve výchozím nastavení umožňuje Redis v dockeru síťová připojení v síti dockeru a při připojování z místního serveru. Chcete-li kontejner zpřístupnit při přístupu k hostiteli Docker, musíte kontejner spustit s možností -p 6379: 6379.
Nejprve zničme běžící kontejner:
zastavení kontejneru dockeru redis-server && kontejner dockeru rm -v redis-server
A spusťte jej znovu s požadovanou možností:
docker run –name redis-server -p 6379:6379 -d redis
Připojení klienta
Nástroj redis-tools musí být nainstalován na počítači, ze kterého se chceme připojit k našemu serveru. Například na Ubuntu nebo Debianu jej můžete nainstalovat jednoduchým příkazem:
apt-get install redis-tools
Poté se můžeme připojit k našemu databázovému serveru příkazem:
redis-cli -h 192.168.0.15
* Kde 192.168.0.15 — Adresa serveru Redis.
Chcete-li se připojit ze systému Windows, můžete nainstalovat klienta AnotherRedisDesktopManager.
Nastavení ověřování
V případě potřeby můžeme nastavit přihlašovací jméno a heslo pro připojení k Redis. Naše kroky se budou lišit v závislosti na tom, jak jste nainstalovali databázový server.
a) Instalace na operační systém
Otevřete konfigurační soubor:
Odkomentujeme parametr requirepass a jako hodnotu přiřadíme heslo:
* v tomto příkladu používáme slovo jako heslo heslo.
systemctl restartujte redis-server
Připojte se ke konzole pro zadávání příkazů:
* Kde heslo je naše heslo.
Pokud jsme zadali správné heslo, systém zobrazí:
Nyní můžete zadávat dotazy, například:
b) Spuštění v Dockeru
U dockeru spustíme kontejner pomocí Docker Compose. Nejprve jej musíte nainstalovat.
Vytvoříme adresář, do kterého umístíme konfigurační soubor na hostiteli dockeru:
mkdir -p /opt/docker/redis/etc
Vytvoříme náš konfigurační soubor:
* v tomto příkladu používáme slovo jako heslo heslo.
Pojďme do adresáře:
Vytvořme soubor docker-compose:
redis:
obrázek: redis
název_kontejneru: ‘redis-server’
restart: pokud není zastaven
porty:
– „6379:6379“
svazky:
– /opt/docker/redis/etc:/usr/local/etc/redis
příkaz: [ “redis-server”, “/usr/local/etc/redis/redis.conf” ]
* v tomto příkladu spouštíme kontejner redis-server z obrázku redis; služba musí běžet na portu 6379; také přepošleme vytvořený adresář /opt/docker/redis/etc uvnitř kontejneru v /usr/local/etc/redis; nakonec bude spuštění služby provedeno s parametrem /usr/local/etc/redis/redis.conf – náš konfigurační soubor.
Zničení dříve spuštěného kontejneru:
zastavení kontejneru dockeru redis-server && kontejner dockeru rm -v redis-server
Spouštíme nový pomocí docker-compose:
docker-složte nahoru -d
Nyní se můžete připojit ke konzole redis-cli:
docker exec -it redis-server redis-cli
* Kde heslo — heslo zadané v konfiguračním souboru.
Měli bychom vidět:
Můžete zkusit zadat dotazy:
Příklad zapojení z programovacích jazyků
Podívejme se na příklady připojení a spouštění dotazů z několika programovacích jazyků.
Instalace potřebných závislostí pro PHP – příklad pro Ubuntu / Debian:
apt-get install php-pear php-dev
Musíme také nainstalovat rozšíření pecl – aktualizujte kanál:
pecl channel-update pecl.php.net
A zkompilujte rozšíření:
pecl nainstalovat redis
Pro každý možný případ použití PHP musíte vytvořit samostatný konfigurační soubor. V tomto příkladu pod php 7.4 pro cli, php-fpm, apache.
Na systémech založených na RPM (například CentOS nebo Red Hat) neexistuje žádné rozdělení php do verzí. Takto nám bude stačit vytvořit pouze jeden soubor (obvykle v adresáři /etc/php.d).





