Redis je moćna pohrana ključ-vrijednost u memoriji koja se može koristiti kao poslužitelj baze podataka, predmemorija i posrednik poruka. Široko je poznat po svojim brzim performansama, fleksibilnosti i podršci za širok raspon jezika. To je besplatan softver otvorenog koda napisan u programskom jeziku C. U ovom vodiču saznajte kako instalirati i osigurati Redis na Ubuntu 18.04.
Preduvjeti
Kako biste pratili ovaj vodič, morat ćete unaprijed pripremiti nekoliko stvari. Morate imati Ubuntu 18.04 poslužitelj, koji možete jednostavno instalirati prateći naš vodič. Osim toga, morate imati korisnika koji nije root sa sudo privilegijama i konfiguriran osnovni vatrozid. To možete postaviti prateći naše vodiče o konfiguriranju Linux sudoers datoteke i postavljanju UFW-a na Ubuntu i Debian poslužitelju u oblaku.
Sada, počnimo!
Instalacija Redisa
Redis je izravno dostupan iz službenog Ubuntu repozitorija. Ovo je najjednostavniji način instalacije i konfiguracije. Preporučujemo da slijedite ovaj put osim ako ne postoje specifični razlozi protiv toga. Budući da je izvorni kod Redisa dostupan besplatno, također je moguće izgraditi Redis iz izvornog koda. Međutim, to ne preporučujemo jer ga je teže upravljati i ažurirati.
Instalirajte Redis iz Ubuntu repozitorija
Prvo ažurirajte lokalnu predmemoriju APT paketa:
|
1 |
sudo apt update |
Zatim instalirajte Redis sljedećom naredbom:
|
1 |
sudo apt install redis-server |
Instalirajte Redis iz izvornog koda
Ubuntu prema zadanim postavkama ne dolazi s alatima za izgradnju i potrebnim bibliotekama. Sljedeća naredba instalirat će sve potrebne alate za izgradnju Redisa:
|
1 |
sudo apt install git build-essential |
Postoje dvije dodatne ovisnosti za izgradnju Redisa. Ove ovisnosti su potrebne za kompajliranje Redisa s dodatnim značajkama, na primjer, podrškom za TLS, integracijom sa systemd-om itd. Za kompajliranje Redisa s podrškom za TLS, instalirajte paket „libssl-dev”. Za kompajliranje Redisa s podrškom za systemd, instalirajte paket „libsystemd-dev”:
|
1 |
sudo apt install libssl-dev libsystemd-dev |
Izvorni kod Redisa dostupan je na GitHubu. Pogledajte Redis GitHub stranicu. Zatim preuzmite izvorni kod:
|
1 |
git clone https://github.com/redis/redis.git |
Promijenite trenutni aktivni direktorij u direktorij izvornog koda Redisa:
|
1 |
cd redis/ |
Nakon toga pokrenite alat make za početak kompajliranja. Kompajlirat će Redis bez ikakvih dodatnih elemenata:
|
1 |
make -j$(nproc) |
Za omogućavanje podrške za TLS (pod pretpostavkom da je instaliran „libssl-dev”), umjesto toga upotrijebite sljedeću naredbu:
|
1 |
make -j$(nproc) BUILD_TLS=yes |
Za omogućavanje podrške za systemd (pod pretpostavkom da je instaliran „libsystemd-dev”), upotrijebite sljedeću naredbu:
|
1 |
make -j$(nproc) USE_SYSTEMD=yes |
Zatim testirajte je li kompajliranje bilo uspješno. Imajte na umu da bi za pokretanje testa mogao biti potreban dodatni paket „tcl-dev” i povezane ovisnosti:
|
1 |
make test |
Na kraju, instalirajte Redis pokretanjem sljedeće naredbe:
|
1 |
sudo make install |
Ako je Redis izgrađen pomoću TLS-a, pokretanje poslužitelja morat će se izvršiti na sljedeći način:
|
1 2 |
./utils/gen-test-certs.sh ./runtest --tls |
Konfiguriranje Redisa
Nakon što je instalacija završena, vrijeme je za konfiguraciju Redisa. Otvorite konfiguracijsku datoteku Redisa u uređivaču teksta i pomaknite se prema dolje do odjeljka „supervised”:
|
1 |
sudo vim /etc/redis/redis.conf |
Promijenite vrijednost „supervised” u „systemd”. To će osigurati da uslugom Redis upravlja systemd. Kako bi promjene stupile na snagu, ponovno pokrenite uslugu Redis:
|
1 |
sudo systemctl restart redis.service |
Testiranje Redisa
Uvijek je dobra ideja testirati radi li Redis ispravno prije nego što ga stavite u daljnju upotrebu. Evo nekoliko načina za testiranje ponašanja Redisa. Prvi korak je provjera je li usluga Redis pokrenuta i radi li:
|
1 |
sudo systemctl status redis |
Ovdje Redis već radi. Prema zadanim postavkama, usluga Redis pokrenut će se pri pokretanju sustava. Ako se usluga Redis želi pokrenuti ručno, onemogućite je:
|
1 |
sudo systemctl disable redis |
Sljedeći test je provjera pomoću Redis konzole. Pokrenite klijent naredbenog retka Redis:
|
1 |
redis-cli |
Pokrenite naredbu „ping”:
|
1 |
ping |
Izlaz potvrđuje da je veza s poslužiteljem još uvijek aktivna. Sljedeći test je provjera dopušta li postavljanje ključeva. Stvorite ključ „temp” s vrijednošću „hello world”:
|
1 |
set temp “hello world” |
Dohvatite vrijednost pomoću naredbe „get”:
|
1 |
get temp |
Ako sve do sada radi kako treba, Redis bi trebao vratiti vrijednost ključa bez ikakvih problema. Zatvorite klijent naredbenog retka Redis:
|
1 |
exit |
Završni test je provjera može li Redis sačuvati podatke čak i ako je zaustavljen ili ponovno pokrenut. Ponovno pokrenite uslugu Redis:
|
1 |
sudo systemctl restart redis |
Ako dobijete pogrešku prilikom pokretanja gornje naredbe, upotrijebite naredbu “systemctl enable redis-server”:
|
1 |
sudo systemctl enable redis-server |
Pokrenite klijent naredbenog retka Redis i dohvatite vrijednost ključa „temp” koji smo prethodno stvorili:
|
1 2 |
redis-cli get temp |
Time je testiranje Redisa završeno. Vaš Redis poslužitelj sada je spreman za korištenje u željenu svrhu.
Osiguravanje Redisa
U ovom trenutku Redis je potpuno operativan. Međutim, neke od njegovih zadanih konfiguracija ne nude najbolju sigurnost. Ako se ne ažuriraju, bilo koji zlonamjerni akter može iskoristiti priliku za pristup poslužitelju i njegovim podacima. Ovaj odjeljak prikazat će kako ublažiti te ranjivosti. Iako su ovi koraci neobavezni, preporučuje se da ih slijedite kako biste ojačali sigurnost sustava.
Povezivanje na localhost
Prema zadanim postavkama, Redisu se može pristupiti samo s lokalnog računala (localhost). Međutim, ako je Redis konfiguriran na udaljenom poslužitelju, konfiguracija se mora ažurirati kako bi se omogućilo povezivanje s bilo kojeg mjesta. Ipak, to možda neće biti tako sigurno kao povezivanje na localhost. Da biste ponovno povezali Redis na localhost, otvorite konfiguracijsku datoteku Redisa u uređivaču teksta:
|
1 |
sudo vim /etc/redis/redis.conf |
Pomaknite se prema dolje i pronađite sljedeće. Provjerite da nije komentirano:
|
1 |
bind 127.0.0.1 ::1 |
Spremite i zatvorite datoteku. Zatim ponovno pokrenite uslugu Redis kako biste osigurali da promjena odmah stupi na snagu:
|
1 |
sudo systemctl restart redis |
Provjerite je li promjena bila uspješna:
|
1 |
sudo netstat -lnp | grep redis |
Ako dobijete pogrešku poput ‘netstat: command not found’, upotrijebite naredbu za instalaciju net-tools “sudo apt-get install net-tools”. Izlaz potvrđuje da je „redis-server” uspješno povezan na localhost (127.0.0.1), što odražava nedavno napravljenu promjenu. Ako postoji bilo koja druga IP adresa (na primjer, 0.0.0.0), ponovno provjerite konfiguracijsku datoteku i ponovno pokrenite Redis poslužitelj.
Konfiguriranje lozinke za Redis
Konfiguriranje lozinke omogućuje korištenje ugrađene sigurnosne značajke Redisa – naredbe „AUTH”. Ona zahtijeva od klijenta autentifikaciju za pristup bazi podataka. Prema zadanim postavkama, Redis nema konfiguriranu lozinku. Lozinka mora biti deklarirana u konfiguracijskoj datoteci Redisa. Otvorite konfiguracijsku datoteku u uređivaču teksta:
|
1 |
sudo vim /etc/redis/redis.conf |
Zatim se pomaknite prema dolje do sljedećeg retka i uklonite komentar:
|
1 |
requirepass foobared |
Nakon uklanjanja komentara, „foobared” će biti zadana lozinka. Promijenite je u lozinku po svom izboru. Kada je u pitanju Redis, jačina lozinke je vrlo važan faktor. Budući da je Redis poslužitelj visokih performansi, potencijalno ga je lakše iskoristiti napadima grubom silom (brute-force). Zato konfiguracijska datoteka izravno sadrži sljedeće upozorenje. Evo brzog primjera generiranja vrlo jake nasumične lozinke. Koristit ćemo naredbu OpenSSL za generiranje nasumičnog niza znakova:
|
1 |
echo $(openssl rand 60 | openssl base64 -A) |
Nakon konfiguriranja nove lozinke, ponovno pokrenite Redis uslugu kako bi promjene stupile na snagu:
|
1 |
sudo systemctl restart redis.service |
Vrijeme je da testirate je li lozinka uspješno primijenjena. Pokrenite Redis konzolu naredbenog retka:
|
1 |
redis-cli |
Zatim pokušajte postaviti novi ključ:
|
1 |
set user “cloudsigma” |
Redis će odbiti zahtjev jer nema autentifikacije za radnju. Za izvođenje bilo koje radnje na poslužitelju, korisnik prvo mora biti autoriziran. Autorizirajte korisnika pomoću sljedeće naredbe:
|
1 |
auth <lozinka> |
Ako je lozinka bila točna, Redis će potvrditi radnju. Sada će Redis dopustiti pristup funkcionalnostima svog poslužitelja:
|
1 2 |
set user “cloudsigma” get user |
Za sada je naš rad s Redis konzolom završen. Možete zatvoriti konzolu:
|
1 |
exit |
Preimenovanje opasnih naredbi
Redis omogućuje preimenovanje ili potpuno onemogućavanje određenih naredbi koje se smatraju opasnima. Ovo je još jedna važna ugrađena sigurnosna značajka Redisa. Zašto se naredbe smatraju opasnima? Ako ih pokrene neovlašteni korisnik, ove naredbe mogu rekonfigurirati, uništiti ili obrisati podatke na poslužitelju. Uobičajena je praksa onemogućiti/preimenovati niz opasnih Redis naredbi. Imajte na umu da sigurnosna prijetnja naredbe ovisi o situaciji. Na primjer, neke od sljedećih naredbi mogu biti potrebne na redovitoj bazi. U takvim slučajevima se njihovo onemogućavanje ne preporučuje. U takvoj situaciji preimenovanje naredbe može se pokazati korisnijim. Evo kratkog popisa naredbi koje se smatraju opasnima. Ovo je dobra polazna točka za poboljšanje sigurnosti Redis poslužitelja:
- FLUSHDB
- FLUSHALL
- KEYS
- PEXPIRE
- DEL
- CONFIG
- SHUTDOWN
- BGREWRITEAOF
- BGSAVE
- SAVE
- SPOP
- SREM
- RENAME
- DEBUG
Da biste preimenovali ili onemogućili naredbu, ona mora biti deklarirana u konfiguracijskoj datoteci Redisa. Otvorite konfiguracijsku datoteku Redisa i dodajte sljedeće retke. Ovdje se „rename-command” koristi za preimenovanje naredbi u prazan niz. Dodajte onoliko unosa koliko je potrebno:
|
1 |
sudo vim /etc/redis/redis.conf |
|
1 2 3 4 |
$ rename-command FLUSHDB "" $ rename-command FLUSHALL "" $ rename-command SHUTDOWN "" $ rename-command CONFIG "" |
Slično tome, također je moguće preimenovati naredbe u drugi naziv. U određenim situacijama to može ponuditi više fleksibilnosti:
|
1 2 3 4 |
$ rename-command FLUSHDB "command_1" $ rename-command FLUSHALL "command_2" $ rename-command SHUTDOWN "command_3" $ rename-command CONFIG "command_4" |
Spremite datoteku i izađite iz uređivača. Kako bi promjene stupile na snagu, ponovno pokrenite Redis uslugu:
|
1 |
sudo systemctl restart redis.service |
Provjerite promjene. Zatim pokrenite Redis konzolu i autentificirajte pristup:
|
1 2 |
redis-cli auth <lozinka> |
Pretpostavimo da je naredba „CONFIG” onemogućena ili preimenovana. Pokušajte upotrijebiti sljedeću naredbu „CONFIG”. Neće uspjeti:
|
1 |
config get requirepass |
Ako je naredba onemogućena, ne može joj se pristupiti dok se ponovno ne omogući. Međutim, ako je preimenovana, upotrijebite novi alias:
|
1 |
command_4 get requirepass |
Zaključak
Ovaj vodič prikazuje kako instalirati, osigurati, konfigurirati i provjeriti instalaciju Redisa. Također prikazuje kako koristiti ugrađene sigurnosne značajke Redisa kako bi bio manje osjetljiv na napade. Međutim, ako je netko već prijavljen na poslužitelj, prilično je lako zaobići sigurnosne značajke specifične za Redis. Zbog toga je posjedovanje vatrozida za zaštitu pristupa Redis poslužitelju ključno.
Ugodan rad!






Komentari
Još nema komentara. Budite prvi.