Ako nainštalovať a zabezpečiť Redis na Ubuntu
Úvod
Redis je in-memory úložisko kľúč-hodnota známe svojou flexibilitou, výkonom a širokou podporou jazykov. Často sa používa ako databáza, cache a message broker. Hoci je predvolená inštalácia funkčná, nie je zabezpečená a necháva vaše údaje a server vystavené útokom. Nezabezpečená inštancia Redis môže viesť k únikom údajov, neoprávnenému prístupu a dokonca k kompromitácii servera.
Tento tutoriál vás prevedie inštaláciou najnovšej verzie Redis na serveri Ubuntu a implementáciou bezpečnostnej konfigurácie pripravené pre produkciu. Naučíte sa konfigurovať používateľský prístup pomocou zoznamov riadenia prístupu (ACL), šifrovať komunikáciu pomocou TLS, obmedziť sieťový prístup pomocou firewallu a aplikovať ďalšie opatrenia na posilnenie systému, ktoré zahŕňajú správu pamäte, perzistenciu a bezpečné sieťové konfigurácie.
Hlavné body
- Používajte ACL na modernú autentifikáciu: Vždy používajte zoznamy riadenia prístupu (ACL) na správu používateľov namiesto zastaraného smerníka
requirepass. Zakážte používateľadefaulta vytvorte konkrétnych používateľov s minimálnymi potrebnými oprávneniami pre zvýšenú bezpečnosť. - Šifrujte všetku sieťovú prevádzku pomocou TLS: Nikdy neprenášajte údaje Redis v nešifrovanej podobe. Implementujte TLS na šifrovanie všetkej komunikácie medzi klientmi a serverom, čím ochránite citlivé informácie pred zachytením v sieti.
- Nikdy neodkryte Redis priamo na internet: Odkrytie portu Redis verejnosti predstavuje vážne bezpečnostné riziko. Pre vzdialený prístup vždy používajte bezpečné alternatívy, ako je VPN (WireGuard/OpenVPN) alebo SSH tunel na vytvorenie súkromného, šifrovaného spojenia.
- Implementujte prísny firewall: Firewall je vaša prvá línia obrany. Ak musíte povoliť vzdialené pripojenia, nakonfigurujte svoj firewall (
ufw), aby prijímal prenos na porte Redis iba z konkrétnych, dôveryhodných IP adries. - Zabráňte útokom vyčerpania pamäte: Chráňte svoj server pred útokmi typu Denial-of-Service (DoS) nastavením limitu pamäte pomocou smernice
maxmemoryvo vašej konfigurácii. Tiež definujtemaxmemory-policy, aby ste kontrolovali, ako Redis uvoľňuje kľúče, keď je dosiahnutý limit. - Uprednostnite ACL pred premenovaním príkazov: Vyhnite sa staršej praxi premenovávania nebezpečných príkazov. Je to krehké a môže to poškodiť klientské aplikácie a replikáciu. Namiesto toho použite pravidlá ACL na obmedzenie prístupu k týmto príkazom podľa používateľa (napr.
-@dangerous). - Používajte Unixové sokety pre lokálne pripojenia: Pre aplikácie bežiace na rovnakom serveri ako Redis používajte Unixové sokety namiesto TCP portov. Sú rýchlejšie a bezpečnejšie, pretože obchádzajú sieťový zásobník a spoliehajú sa na oprávnenia súborového systému.
- Aktívne monitorujte logy na hrozby: Pravidelne sledujte systémové logy pomocou
journalctla zapnite Redis slow log. Sledujte vzorce ako opakované neúspešné autentifikácie, pripojenia z neznámych zdrojov alebo zneužívajúce príkazy, ktoré by mohli naznačovať bezpečnostný problém alebo problém s výkonom. - Zabezpečte svoje dáta v pokoji: Povoliť perzistenciu Redis (RDB a/alebo AOF) na prevenciu straty dát. Uistite sa, že dátové súbory (
dump.rdb,appendonly.aof) majú prísne súborové oprávnenia a sú zahrnuté do vašej pravidelnej, šifrovanej zálohy mimo miesta uloženia. - Využite zabudovanú bezpečnosť systému: Využite bezpečnostné funkcie poskytované operačným systémom. Na Ubuntu je pre server Redis automaticky povolený predvolený profil AppArmor, ktorý obmedzuje jeho proces a minimalizuje potenciálne škody spôsobené zraniteľnosťou.
Predpoklady
Na dokončenie tohto sprievodcu budete potrebovať prístup k serveru Ubuntu, ktorý má ne-root používateľa s právomocami sudo a firewall nakonfigurovaný pomocou ufw. Môžete to nastaviť podľa nášho sprievodcu Počiatočné nastavenie servera pre Ubuntu.
Krok 1 — Inštalácia a konfigurácia Redisu
Použijeme správcu balíčkov APT na inštaláciu redisu z oficiálnych repozitárov Ubuntu. K času písania je verzia dostupná v predvolených repozitároch 7.0.15.
Začnite aktualizáciou lokálnej vyrovnávacej pamäte balíkov apt:
sudo apt updatePotom nainštalujte Redis zadaním:
sudo apt install redis-serverTýmto sa stiahne a nainštaluje Redis a jeho závislosti. Po dokončení inštalácie je dobré overiť nainštalovanú verziu:
redis-server --versionPo tomto je potrebné vykonať jednu dôležitú zmenu konfigurácie v konfiguračnom súbore Redis, ktorý bol automaticky vygenerovaný počas inštalácie.
Tento súbor otvorte vo vašom obľúbenom textovom editore:
sudo nano /etc/redis/redis.confVo vnútri súboru nájdite direktívu supervised. Táto direktíva vám umožňuje deklarovať init systém na správu Redis ako služby, čo vám poskytuje väčšiu kontrolu nad jeho prevádzkou. Direktíva supervised je predvolene nastavená na no. Keďže používate Ubuntu, ktoré využíva init systém systemd, zmeňte ju na systemd:
. . .
# If you run Redis from upstart or systemd, Redis can interact with your
# supervision tree. Options:
# supervised no - no supervision interaction
# supervised upstart - signal upstart by putting Redis into SIGSTOP mode
# supervised systemd - signal systemd by writing READY=1 to $NOTIFY_SOCKET
# supervised auto - detect upstart or systemd method based on
# UPSTART_JOB or NOTIFY_SOCKET environment variables
# Note: these supervision methods only signal "process is ready."
# They do not enable continuous liveness pings back to your supervisor.
supervised systemd
. . .To je jediná zmena, ktorú musíte v tomto bode vykonať v konfiguračnom súbore Redis, takže ho uložte a zatvorte, keď skončíte. Ak ste na úpravu súboru použili nano, urobíte to stlačením CTRL + X, Y a potom ENTER.
Potom reštartujte službu Redis, aby sa prejavili zmeny, ktoré ste vykonali v konfiguračnom súbore:
sudo systemctl restart redis.serviceTýmto ste nainštalovali a nakonfigurovali Redis a ten beží na vašom počítači. Predtým ako ho začnete používať, je však rozumné najprv skontrolovať, či Redis funguje správne.
Krok 2 — Testovanie Redisu
Rovnako ako pri každom novo nainštalovanom softvéri, je dobré overiť, či Redis funguje podľa očakávania, skôr než vykonáte ďalšie zmeny v jeho konfigurácii. V tomto kroku si prejdeme niekoľko spôsobov, ako skontrolovať, či Redis funguje správne.
Začnite kontrolou, či služba Redis beží:
sudo systemctl status redisAk beží bez akýchkoľvek chýb, tento príkaz vygeneruje výstup podobný nasledujúcemu:
● redis-server.service - Advanced key-value store
Loaded: loaded (/lib/systemd/system/redis-server.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2020-04-30 23:26:54 UTC; 4s ago
Docs: http://redis.io/documentation,
man:redis-server(1)
Process: 36552 ExecStart=/usr/bin/redis-server /etc/redis/redis.conf (code=exited, status=0/SUCCESS)
Main PID: 36561 (redis-server)
Tasks: 4 (limit: 2345)
Memory: 1.8M
CGroup: /system.slice/redis-server.service
└─36561 /usr/bin/redis-server 127.0.0.1:6379
. . .Tu môžete vidieť, že Redis beží a je už povolený, čo znamená, že je nastavený tak, aby sa spúšťal vždy pri štarte servera.
Poznámka: Toto nastavenie je žiaduce pri mnohých bežných prípadov použitia Redis. Ak však uprednostňujete spúšťanie Redis ručne pri každom štarte servera, môžete to nakonfigurovať pomocou nasledujúceho príkazu:
sudo systemctl disable redisAk chcete overiť, či Redis funguje správne, pripojte sa na server pomocou redis-cli, príkazového klienta Redis:
redis-cliV nasledujúcom príkaze otestujte konektivitu pomocou príkazu ping:
pingPONGTento výstup potvrdzuje, že spojenie so serverom je stále aktívne. Ďalej skontrolujte, či môžete nastaviť kľúče spustením:
set test "It's working!"OKZískajte hodnotu zadaním:
get testAk všetko funguje, budete môcť získať hodnotu, ktorú ste uložili:
"It's working!"
Po overení, že dokážete získať hodnotu, opustite príkazový riadok Redis, aby ste sa vrátili do terminálu:
exitAko záverečný test skontrolujeme, či je Redis schopný uchovať údaje aj po jeho zastavení alebo reštartovaní. Najprv reštartujte inštanciu Redis:
sudo systemctl restart redisPotom sa znova pripojte pomocou klienta príkazového riadku:
redis-cliA potvrďte, že vaša testovacia hodnota je stále dostupná
get testHodnota vášho kľúča by mala byť stále prístupná:
"It's working!"Po dokončení znova prejdite do príkazového riadku:
exitTýmto je vaša inštalácia Redis plne funkčná a pripravená na používanie. Niektoré jej predvolené konfiguračné nastavenia sú však nebezpečné a poskytujú škodlivým aktérom príležitosti na útok a získanie prístupu k vášmu serveru a jeho dátam. Zvyšné kroky v tomto návode sa zaoberajú metódami, ako zmierniť tieto zraniteľnosti, ako je uvedené na oficiálnej webovej stránke Redis. Hoci sú tieto kroky voliteľné a Redis bude fungovať aj v prípade, že sa ich rozhodnete vynechať, dôrazne sa odporúča, aby ste ich dokončili, aby ste posilnili bezpečnosť vášho systému.
Krok 3 — Pripojenie na localhost
Predvolene je Redis prístupný iba z localhost. Ak ste však Redis nainštalovali a nakonfigurovali podľa iného návodu než tohto, mohli ste aktualizovať konfiguračný súbor, aby umožnil pripojenia odkiaľkoľvek. Toto nie je také bezpečné ako viazanie na localhost.
Na opravu otvorte konfiguračný súbor Redis na úpravu:
sudo nano /etc/redis/redis.confNájdite tento riadok a uistite sa, že nie je zakomentovaný (ak existuje, odstráňte #):
bind 127.0.0.1 ::1Uložte a zatvorte súbor po dokončení (stlačte CTRL + X, Y, potom ENTER).
Potom reštartujte službu, aby sa systém systemd načítal vaše zmeny:
sudo systemctl restart redisAk chcete skontrolovať, či táto zmena nadobudla účinnosť, spustite nasledujúci príkaz netstat:
sudo netstat -lnp | grep redistcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN 14222/redis-server
tcp6 0 0 ::1:6379 :::* LISTEN 14222/redis-server Poznámka: Príkaz netstat nemusí byť vo vašom systéme predvolene dostupný. Ak je to tak, môžete ho nainštalovať (spolu s množstvom ďalších užitočných sieťových nástrojov) pomocou nasledujúceho príkazu:
sudo apt install net-toolsTento výstup ukazuje, že program redis-server je viazaný na localhost (127.0.0.1), čo odráža zmenu, ktorú ste práve vykonali v konfiguračnom súbore. Ak v tejto kolónke vidíte inú IP adresu (napríklad 0.0.0.0), mali by ste si dvakrát skontrolovať, či ste odkomentovali správny riadok a znova reštartovať službu Redis.
Teraz, keď vaša inštalácia Redis počúva iba na localhost, bude pre škodlivých používateľov ťažšie zasielať požiadavky alebo získať prístup k vášmu serveru. Redis však momentálne nie je nastavený tak, aby vyžadoval, aby sa používatelia autentifikovali pred vykonaním zmien v jeho konfigurácii alebo v údajoch, ktoré obsahuje. Na nápravu toho, Redis umožňuje vyžadovať, aby sa používatelia autentifikovali pomocou hesla pred vykonaním zmien prostredníctvom klienta Redis (redis-cli).
Krok 4 — Zabezpečenie Redis pomocou zoznamov prístupových práv (ACL)
Od Redis 6 sú zoznamy riadenia prístupu (ACL) preferovanou metódou na správu prístupu používateľov a oprávnení. ACL nahrádzajú staršiu direktívu requirepass flexibilnejším systémom, ktorý umožňuje definovať viacerých používateľov s odlišnými heslami a oprávneniami pre príkazy.
Generovanie bezpečného hesla
Najprv vytvorte silné heslo pre svojho používateľa. Na vytvorenie dlhého, náhodného reťazca môžete použiť príkaz openssl.
openssl rand 60 | openssl base64 -ASkopírujte výstup, pretože ho budete používať ako heslo pre svojho nového používateľa Redis.
Konfigurácia nového používateľa
Teraz znova otvorte konfiguračný súbor Redis.
sudo nano /etc/redis/redis.confPrejdite na sekciu ACL. Ak chcete vytvoriť nového používateľa, pridáte direktívu user. Je tiež bezpečnostnou najlepšou praktikou zakázať používateľa default, ktorý má predvolene žiadne heslo a plné oprávnenia.
Pridajte nasledujúce riadky do svojej konfigurácie:
# Disable the default user.
user default off
# Create a new user with a strong password and full permissions.
user myuser on >your_generated_password ~* &* +@allTu je rozpis nového pravidla pre používateľov:
myuser: Užívateľské meno.on: Umožní používateľovi.>your_generated_password: Nastaví užívateľské heslo.~* &* +@all: Pravidlo, ktoré umožňuje používateľovi spúšťať všetky príkazy (+@all) vo všetkých keyspaces (~*) a na všetkých Pub/Sub kanáloch (&*).
Uložte a zatvorte súbor, potom reštartujte Redis.
sudo systemctl restart redis.serviceOverovanie konfigurácie ACL
Aby ste overili, že zmeny fungovali, skúste sa pripojiť cez redis-cli a spustiť príkaz bez autentifikácie.
redis-cli pingKeďže používateľ default je teraz deaktivovaný, Redis vráti chybu overenia.
NOAUTH Authentication required.Týmto sa potvrdzuje, že neautorizovaný prístup je zablokovaný. Teraz otestujte nového používateľa. Použitie príznaku --askpass je bezpečnejšie ako priame zadávanie hesla, pretože zabraňuje jeho uloženiu do histórie shellu.
redis-cli --user myuser --askpassZadajte heslo, ktoré ste vytvorili, keď ste boli vyzvaní. Keď budete pripojení, skúste spustiť príkaz.
pingRedis by mal vrátiť PONG. Vaša konfigurácia ACL funguje správne.
Krok 5 — Šifrovanie komunikácie Redis pomocou TLS
ACL chránia vašu inštanciu Redis pred neoprávneným prístupom, ale nechránia dáta prenášané cez sieť. TLS (Transport Layer Security) šifruje tento prenos a zabraňuje odpočúvaniu medzi klientom a serverom.
Generovanie TLS certifikátov
Najprv vytvorte adresár, kde budete uchovávať svoje certifikáty.
sudo mkdir /etc/redis/tlsĎalej použite openssl na vytvorenie vlastnej certifikačnej autority (CA), serverového kľúča a serverového certifikátu. Budete vyzvaní na zadanie informácií (názov krajiny, názov organizácie atď.).
# Generate CA Key and Certificate
sudo openssl genrsa -out /etc/redis/tls/ca.key 4096
sudo openssl req -x509 -new -nodes -key /etc/redis/tls/ca.key -sha256 -days 365 -out /etc/redis/tls/ca.crt
# Generate Server Key and Certificate Signing Request (CSR)
sudo openssl genrsa -out /etc/redis/tls/redis.key 2048
sudo openssl req -new -key /etc/redis/tls/redis.key -out /etc/redis/tls/redis.csr
# Sign the server certificate with the CA
sudo openssl x509 -req -in /etc/redis/tls/redis.csr -CA /etc/redis/tls/ca.crt -CAkey /etc/redis/tls/ca.key -CAcreateserial -out /etc/redis/tls/redis.crt -days 365 -sha256Nastavte správne povolenia, aby mal k týmto citlivým súborom prístup iba používateľ redis.
sudo chmod 640 /etc/redis/tls/*
sudo chown redis:redis /etc/redis/tls/*Upozornenie: Samopodpísané certifikáty sú vhodné na vývoj, testovanie alebo interné služby, kde môžete bezpečne distribuovať certifikát CA všetkým klientom. Pre produkčné prostredia pripojené cez verejný internet používajte certifikáty vydané dôveryhodnou certifikačnou autoritou (CA), ako je Let’s Encrypt.
Konfigurácia Redis pre TLS
Otvorte konfiguračný súbor Redis.
sudo nano /etc/redis/redis.confPridajte alebo upravte nasledujúce riadky, aby ste povolili TLS. Najlepšou praxou je zakázať nešifrovaný port nastavením port 0 a používať iba port s povoleným TLS.
# Disable the non-encrypted TCP port.
port 0
# Enable the TLS port on the standard Redis port.
tls-port 6379
# Point to your certificate files.
tls-cert-file /etc/redis/tls/redis.crt
tls-key-file /etc/redis/tls/redis.key
tls-ca-cert-file /etc/redis/tls/ca.crtUložte súbor a reštartujte Redis.
sudo systemctl restart redis.serviceTestovanie TLS pripojenia
Na pripojenie pomocou redis-cli je teraz potrebné špecifikovať parametre TLS.
redis-cli --user myuser --askpass --tls --cacert /etc/redis/tls/ca.crtPo overení je vaše pripojenie k Redis plne šifrované.
Voliteľné: Konfigurácia vzájomného TLS (mTLS)
Pre ešte vyššiu úroveň zabezpečenia môžete nakonfigurovať vzájomné TLS (mTLS), kde klient musí serveru tiež predložiť platný certifikát.
Najprv vygenerujte kľúč a certifikát klienta, podpísané vašou CA.
# Generate client key and CSR
openssl genrsa -out client.key 2048
openssl req -new -key client.key -out client.csr
# Sign the client certificate with your CA
sudo openssl x509 -req -in client.csr -CA /etc/redis/tls/ca.crt -CAkey /etc/redis/tls/ca.key -CAcreateserial -out client.crt -days 365 -sha256Ďalej povoľte autentifikáciu klienta v /etc/redis/redis.conf.
tls-auth-clients yesReštartujte Redis. Teraz sa musia klienti pripojiť pomocou svojho certifikátu a kľúča.
redis-cli --user myuser --askpass --tls \
--cacert /etc/redis/tls/ca.crt \
--cert client.crt \
--key client.keyKrok 6 — Konfigurácia pravidiel firewallu a bezpečný vzdialený prístup
Firewall je kritická vrstva zabezpečenia, ktorá obmedzuje sieťovú prevádzku na váš server. Predvolene Redis počúva iba na lokálnom loopback rozhraní (127.0.0.1), takže nie je vystavený verejnému internetu. Ak potrebujete pripojenie z externého servera, musíte nakonfigurovať Redis tak, aby počúval na svojej verejnej IP adrese, a nastaviť prísne pravidlá firewallu.
Varovanie: Priame vystavenie inštancie Redis na verejný internet predstavuje vážne bezpečnostné riziko. Odporúča sa používať bezpečnejšie alternatívy na vzdialený prístup.
Pravidlá firewallu pre vzdialený server
Ak musíte povoliť priame pripojenia, použite ufw na povolenie prevádzky na porte Redis TLS (6379) len z jednej konkrétnej, dôveryhodnej IP adresy.
sudo ufw allow from your_trusted_ip/32 to any port 6379 proto tcpNahraďte your_trusted_ip statickou IP adresou vášho aplikačného servera.
Vždy sa uistite, že je váš SSH port povolený.
sudo ufw allow OpenSSHNakoniec zapnite firewall, ak už nie je aktívny.
sudo ufw enableBezpečnejšie alternatívy pre vzdialený prístup
Namiesto otvárania portu Redis svetu zvážte tieto bezpečnejšie metódy:
- VPN: Nastavte súkromnú sieť pomocou VPN ako WireGuard alebo OpenVPN. Váš aplikačný server a Redis server potom môžu komunikovať cez bezpečný, súkromný kanál bez verejnej expozície.
- SSH tunel: Vytvorte šifrovaný SSH tunel z vášho klientského počítača na server Redis. Toto presmeruje lokálny port na vašom klientovi na port Redis na serveri cez zabezpečené SSH pripojenie.
Príklad vytvorenia SSH tunela:
ssh -L 8000:127.0.0.1:6379 user@your_redis_server_ipPotom môžete pripojiť svoj lokálny Redis klient na localhost:8000 a prenos bude bezpečne preposlaný na Redis server.
Krok 7 — Aplikovanie dodatočných techník spevňovania
Svoju inštanciu Redis môžete ďalej zabezpečiť týmito dodatočnými opatreniami.
Obmedzovanie príkazov pomocou ACL (moderný prístup)
Namiesto premenovania nebezpečných príkazov (staršia prax) používajte pravidlá ACL na obmedzenie ich použitia na úrovni jednotlivých používateľov. To poskytuje podrobnejšiu kontrolu a nepoškodzuje klientov Redis ani monitorovacie nástroje.
Napríklad, aby ste zabránili používateľovi myuser používať príkazy, ktoré by mohli spôsobiť významné škody (ako FLUSHALL, DEBUG, SHUTDOWN), môžete upraviť jeho pravidlo ACL odstránením kategórie @all a pridaním konkrétnejších kategórií, pričom zároveň výslovne zablokujete nebezpečné príkazy.
# Example of a more restrictive user
user myuser on >your_generated_password ~* &* +@read +@write +@connection -@dangerous -FLUSHALLToto pravidlo umožňuje používateľovi vykonávať príkazy na čítanie, zapisovanie a pripojenie, ale výslovne blokuje kategóriu príkazov @dangerous a príkaz FLUSHALL.
Premenovanie príkazu (starý spôsob - neodporúča sa)
Prax premenovania príkazov je väčšinou zastaraná a mala by sa nahradiť používaním ACL. Premenovanie príkazov môže narušiť klientské knižnice, skomplikovať údržbu a spôsobiť problémy s perzistenciou (AOF) a replikáciou.
Ak narazíte na systém používajúci túto metódu, príkazy sa premenúvajú v /etc/redis/redis.conf takto:
# rename-command FLUSHALL ""
# rename-command CONFIG MY_SECURE_CONFIG_COMMANDSpráva pamäte a bezpečnosť
Útočník by mohol skúsiť útok odmietnutia služby (DoS) tým, že zaplní pamäť vášho servera. Nakonfigurujte Redis tak, aby nastavil limit pamäte na zabránenie tomu.
V súbore /etc/redis/redis.conf odkomentujte a nastavte direktívy maxmemory a maxmemory-policy:
maxmemory 2gb
maxmemory-policy allkeys-lrumaxmemory: Nastavuje pevný limit, koľko pamäte môže Redis využívať.maxmemory-policy: Hovorí Redis, čo má robiť, keď je dosiahnutý limit.allkeys-lruodstraňuje najmenej nedávno používané kľúče, čo je bežná voľba pre cache.
Konfigurácia siete a časové limity
Unixové sokety: Pre aplikácie bežiace na tom istom počítači ako Redis je použitie Unixového soketu bezpečnejšie než TCP port, pretože obchádza sieťový zásobník. Aktivujte ho v
redis.conf:unixsocket /var/run/redis/redis.sock unixsocketperm 770Potom sa pripojte pomocou
redis-cli -s /var/run/redis/redis.sock.Nečinné časové limity: Automaticky zatvárajte nečinné pripojenia, aby sa uvoľnili zdroje a znížila sa zraniteľnosť systému.
timeout 300Týmto sa zatvoria pripojenia, ktoré sú nečinné po dobu 300 sekúnd.
/etc/redis/redis.conf
/etc/redis/redis.conf
AppArmor
Ubuntu obsahuje AppArmor, bezpečnostný modul, ktorý obmedzuje programy na súbor zdrojov. Balík redis-server je dodávaný s predvoleným profilom AppArmor, ktorý je automaticky povolený.
Jeho stav si môžete overiť pomocou:
sudo aa-status | grep redisTento profil poskytuje dôležitú vrstvu ochrany tým, že obmedzuje, čo môže proces Redis na systéme vykonávať. Na iných distribúciách Linuxu, ako je CentOS, plní SELinux podobnú funkciu.
Krok 8 — Monitorovanie aktivity a logov Redis
Pravidelné monitorovanie záznamov je dôležité na odhaľovanie chýb, problémov s výkonom a podozrivej činnosti.
Systémové záznamy
Môžete si prezrieť logy v reálnom čase spravované systemd pomocou journalctl.
sudo journalctl -u redis-server.service -fDávajte pozor na vzory, ako napríklad:
- Veľké množstvo nových pripojení z neznámych IP adries.
- Opakované zlyhania overenia (
NOAUTH). - Chyby súvisiace s príkazmi, ktoré máte obmedzené.
Pre produkčné systémy preposielajte tieto záznamy do centralizovanej platformy na zaznamenávanie (ako je ELK stack), aby ste nastavili automatické upozornenia na podozrivé vzory.
Pomalý záznam Redis
Redis slow log zaznamenáva dotazy, ktorých vykonanie prekročí stanovený čas. Je užitočný pri hľadaní výkonových úzkych miest a môže tiež pomôcť identifikovať zneužívajúce alebo neefektívne príkazy od klientov.
Povoľte ho v /etc/redis/redis.conf:
slowlog-log-slower-than 10000
slowlog-max-len 128slowlog-log-slower-than: Ukladá príkazy, ktoré trvajú dlhšie ako táto hodnota v mikrosekundách (10000=10 ms).slowlog-max-len: Maximálny počet záznamov v pomalom denníku.
Zobraziť pomalý záznam pomocou redis-cli:
redis-cli SLOWLOG GETKrok 9 — Konfigurácia perzistencie a záloh Redis
Predvolene Redis uchováva všetky dáta v pamäti. Mechanizmy perzistencie ukladajú tieto dáta na disk, čím ich chránia pred stratou v prípade reštartu servera.
Možnosti perzistencie
Redis ponúka dva hlavné režimy perzistencie:
- RDB (Redis databáza): Vykonáva snímky vašich dát k určitému času v stanovených intervaloch. Zvyčajne je rýchlejšia.
- AOF (Súbor iba na pridávanie): Ukladá každý zápis, ktorý server prijme. Ponúka lepšiu odolnosť, no môže viesť k väčším súborom.
Môžete povoliť jedno alebo oboje v /etc/redis/redis.conf. Predvolená konfigurácia povolí RDB. Na povolenie AOF:
appendonly yesZabezpečenie dátových súborov a záloh
Dátové súbory Redis (dump.rdb, appendonly.aof) sú predvolene uložené v /var/lib/redis/. Uistite sa, že tento adresár a jeho súbory sú vo vlastníctve používateľa redis a nie sú prístupné pre všetkých.
sudo ls -l /var/lib/redisPre obnovu po katastrofe musíte tieto súbory zálohovať.
- Bezpečné ukladanie: Ukladajte zálohy na bezpečnom, vzdialenom mieste (napríklad v úložisku objektov).
- Šifrovanie: Šifrujte svoje záložné súbory pomocou nástroja ako
gpgpredtým, než ich prenesiete zo servera. - Testovanie obnovy: Pravidelne testujte vaše postupy obnovy tým, že obnovíte zálohu na skúšobnom serveri, aby ste sa uistili, že zálohy sú platné a proces funguje podľa očakávaní.
Často kladené otázky
1. Prečo by som mal používať Redis ACL namiesto staršej metódy requirepass?
Redis Access Control Lists (ACL), zavedené v Redis 6, sú moderným štandardom pre správu oprávnení používateľov. Na rozdiel od jedného hesla poskytovaného pomocou requirepass, ACL umožňujú vytvárať viacerých používateľov s unikátnymi heslami a podrobnými oprávneniami. Môžete kontrolovať, ktoré príkazy môže používateľ spúšťať, k akým kľúčom má prístup a ktoré Pub/Sub kanály môže používať. Tento „princíp minimálneho oprávnenia“ je základnou bezpečnostnou praxou, pretože obmedzuje potenciálne škody, ktoré môže útočník spôsobiť, ak by boli kompromitované prihlasovacie údaje jedného používateľa.
2. Je bezpečné sprístupniť moju inštanciu Redis priamo verejnému internetu?
Nie, je to veľmi neodporúčané. Priame vystavenie Redis, aj s heslom a TLS, ho robí cieľom útokov hrubou silou a potenciálnych zero-day zraniteľností. Najbezpečnejšie metódy na vzdialený prístup zahŕňajú súkromnú sieť. Mali by ste použiť VPN (napríklad WireGuard alebo OpenVPN) alebo SSH tunel na vytvorenie bezpečného, šifrovaného kanála medzi vaším aplikačným serverom a vašou inštanciou Redis, bez toho, aby ste port Redis niekedy vystavili otvorenému internetu.
3. Aký je rozdiel medzi perzistenciou RDB a AOF a ktorú by som mal použiť?
RDB aj AOF sú metódy ukladania vašich údajov v pamäti Redis na disk.
- RDB (Redis databáza): Vytvára snímky vášho datasetu k určitému času v určených intervaloch (napr. každých 5 minút, ak existuje aspoň jeden zápis). Všeobecne je rýchlejší pri vytváraní záloh a reštartovaní Redis.
- AOF (Súbor iba na zápis): Loguje každú jednu zápisovú operáciu prijatú serverom. Tým sa zabezpečuje oveľa lepšia trvácnosť údajov, pretože v prípade havárie riskujete stratu iba maximálne jedného sekundy údajov, ale logovacie súbory môžu byť väčšie.
Pre väčšinu prípadov použitia v produkcii sa odporúča povoliť obe metódy perzistencie, aby ste získali výhody trvanlivosti (AOF) a pohodlné zálohovanie (RDB).
4. Ako môžem chrániť Redis pred vyčerpaním pamäte?
Útočník by mohol spustiť útok typu Denial-of-Service (DoS) tým, že bude neustále zapisovať údaje, až kým nebude vyčerpaná pamäť vášho servera. Aby ste tomu predišli, mali by ste nastaviť limit pamäte vo vašom súbore redis.conf pomocou direktívy maxmemory (napr. maxmemory 2gb). Mali by ste tiež definovať maxmemory-policy (napr. allkeys-lru), ktorá povie Redis, ako vyraďovať kľúče, keď sa dosiahne tento limit.
5. Mal by som pre bezpečnosť premenovať nebezpečné príkazy Redis?
Premenovanie príkazov je zastaraná bezpečnostná prax, ktorá sa už neodporúča. Moderný a efektívnejší prístup je používať ACL v Redis na obmedzenie prístupu k nebezpečným príkazom na úrovni jednotlivých používateľov. Premenovanie príkazov je ťažké udržiavať, môže poškodiť knižnice klientov a nástroje na monitorovanie a spôsobuje komplikácie pri replikácii a perzistencii AOF.
6. Mám nastavené heslo s ACL. Prečo teda potrebujem aj TLS?
ACL a heslá chránia váš Redis server pred neoprávneným prístupom (overovaním), ale nechránia dáta počas prenosu po sieti. Bez TLS (Transport Layer Security) sú všetky vaše dáta—vrátane príkazov a odpovedí—odosielané v čitateľnej podobe. Útočník na sieti by mohol tento prenos zachytiť a ukradnúť citlivé informácie. TLS šifruje celé spojenie, čím zabezpečuje, že všetka komunikácia medzi vaším klientom a Redis serverom je súkromná a bezpečná.
7. Ako môžem sledovať svoju inštanciu Redis kvôli podozrivej činnosti?
Mali by ste sledovať ako systémové logy, tak aj pomalý log Redisu.
- Systémové zápisy (
journalctl -u redis-server.service): Skontrolujte ich kvôli vysokému počtu neúspešných pokusov o autentifikáciu, neočakávaným pripojeniam z neznámych IP adries alebo chybám súvisiacim so zablokovanými príkazmi. - Redis Slow Log: Povoliť túto funkciu na zaznamenávanie dotazov, ktoré trvajú dlho na vykonanie. Hoci je primárne určená na ladenie výkonu, môže tiež odhaliť zneužívajúce alebo zle napísané príkazy od kompromitovaného klienta, ktorý by mohol byť súčasťou útoku.
Pre produkčné systémy by mali byť tieto logy odoslané do centralizovanej platformy pre protokolovanie, kde si môžete nastaviť automatické upozornenia na tieto vzory.
8. Čo je AppArmor a potrebujem ho nakonfigurovať pre Redis?
AppArmor je bezpečnostný modul Linuxu zahrnutý v Ubuntu, ktorý obmedzuje programy na obmedzenú sadu systémových zdrojov. Balík redis-server obsahuje prednastavený profil AppArmor, ktorý je predvolene povolený. Tento profil obmedzuje súbory a sieťové schopnosti, ku ktorým môže proces Redis pristupovať, čím poskytuje dôležitú vrstvu obrany, ak útočník nájde zraniteľnosť priamo v Redis. Pri štandardnej inštalácii nie je potrebná žiadna ďalšia konfigurácia.
9. Ako sa bezpečne pripojiť k Redis z aplikácie bežiacej na rovnakom serveri?
Keď vaša aplikácia a Redis bežia na rovnakom počítači, najbezpečnejšia metóda pripojenia je Unix socket, nie TCP port. Unix socket je súbor v súborovom systéme používaný na komunikáciu medzi procesmi a úplne obchádza sieťový zásobník. Je to rýchlejšie a bezpečnejšie, pretože podlieha oprávneniam v súborovom systéme a nemožno k nemu pristupovať zvonku servera.
10. Nakonfiguroval som TLS s vlastnými certifikátmi. Je to v poriadku pre produkciu?
Samosignované certifikáty sú prijateľné pre vývoj, testovanie alebo interné služby, kde môžete bezpečne distribuovať vlastnú Generálnu certifikačnú autoritu (CA) každému klientovi. Pre aplikácie však, ktoré sa pripájajú cez verejný internet alebo v väčších, zložitejších produkčných prostrediach, sa dôrazne odporúča používať TLS certifikáty vydané dôveryhodnou, verejnou certifikačnou autoritou, ako je Let’s Encrypt. To zjednodušuje správu certifikátov a zabraňuje problémom s dôverou zo strany klientov.
Záver
V tomto návode ste nainštalovali a nakonfigurovali Redis, overili ste, že vaša inštalácia Redis funguje správne, a využili jeho vstavané bezpečnostné funkcie na zníženie zraniteľnosti voči útokom škodlivých aktérov.
Majte na pamäti, že keď je niekto prihlásený na váš server, je veľmi ľahké obísť špecifické bezpečnostné funkcie Redis, ktoré sme zaviedli. Preto je najdôležitejšou bezpečnostnou funkciou na vašom Redis serveri váš firewall (ktorý ste nakonfigurovali, ak ste postupovali podľa predbežného návodu na nastavenie servera), pretože to veľmi sťažuje škodlivým aktérom, aby prenikli cez túto bariéru.
Hoci vám tento sprievodca pomôže začať s inštaláciou a zabezpečením Redisu, dôrazne odporúčame odvolávať sa na oficiálnu dokumentáciu pre lepšiu bezpečnosť:
- Správa Redis
- Bezpečnosť Redis
- Konfigurácia Redis
Ďakujeme, že sa učíte s komunitou Linux-Console.net.