Prijeđite na sadržaj

Postavke kolačića

Za svaku vrstu odaberite koje kolačiće dopuštate. Svoj odabir uvijek možete promijeniti putem poveznice Postavke kolačića na dnu svake stranice. Izjava o privatnosti

Nužni

Uvijek uključeni

Potrebni za prijavu, čuvanje košarice i pamćenje Vaših odabira. Uvijek su uključeni.

Koji kolačići?
  • weboke_sessie, weboke_klant, weboke_remember: Vaša sesija i to da ostanete prijavljeni
  • weboke_basket: Vaša košarica
  • wkBtwIncl: prikaz cijena s PDV-om ili bez njega
  • wok_cookies: Vaš odabir kolačića, 12 mjeseci

Mjeri koji oglas dovodi do posjeta ili narudžbe, kako ne bismo plaćali oglase koji ništa ne donose.

Koji kolačići?
  • Google Ads putem Google Tag Managera (_gcl_au, _gcl_aw), do 90 dana
  • OpenAI Ads, oglasi u ChatGPT-u
  • wok_aff: preko kojeg ste partnera došli k nama (partnerski program), 60 dana

4,6

Država i jezik

Svaka država ima vlastitu stranicu, s cijenama i PDV-om te države.

Pogledajte

Priključci i usluge koje slušaju

Modul 5: Zaštita mreže · Vrijeme čitanja: 10 minuta

Cilj učenja: Nakon ove lekcije moći ćete vidjeti koje usluge slušaju na Vašem poslužitelju i na kojoj adresi, objasniti razliku između 0.0.0.0 i 127.0.0.1 te izvana provjeriti što svatko na internetu vidi od Vašeg poslužitelja.

Ključni pojmovi: priključak (port), TCP i UDP, slušanje, ss -tulpn, 0.0.0.0 i [::], 127.0.0.1 i [::1], bind-address, otvoren, zatvoren i filtriran, površina napada, skeneri

IP adresa sa 65.535 vrata

Vaš poslužitelj ima IP adresu, na primjer 192.0.2.10 i 2001:db8::10. Na toj adresi istodobno može biti dostupno više programa, svaki na svojem priključku (portu): broju od 1 do 65.535. Program koji prihvaća veze sluša na priključku. Nekoliko poznatih:

PriključakProtokolUsluga
22TCPSSH
80TCPhttp (web-poslužitelj)
443TCP i UDPhttps (UDP za HTTP/3)
25TCPpošta između poslužitelja e-pošte (SMTP)
3306TCPMySQL i MariaDB
5432TCPPostgreSQL
6379TCPRedis

TCP je protokol za veze koje moraju pouzdano stići (web, SSH, baze podataka). UDP služi za brze pojedinačne pakete (DNS, VPN-ovi poput WireGuarda, HTTP/3). Usluga sluša na TCP-u, UDP-u ili na oba.

Svaki priključak koji sluša su vrata prema Vašem poslužitelju. Iza svakih vrata nalazi se softver koji može sadržavati pogreške. Skup svih vrata dostupnih izvana naziva se Vaša površina napada. Što manja, to bolje: poslužitelju s web-stranicom izvana trebaju samo 22, 80 i 443.

Pogledajte što sluša: ss

Naredba ss (socket statistics) prikazuje što sluša na Vašem poslužitelju. S opcijama -t (TCP), -u (UDP), -l (samo oni koji slušaju), -p (koji program) i -n (brojevi, ne nazivi):

anna@web1:~$ sudo ss -tulpn
Netid State  Local Address:Port  Peer Address:Port Process
udp   UNCONN 127.0.0.54:53       0.0.0.0:*         users:(("systemd-resolve",pid=402,fd=16))
tcp   LISTEN 0.0.0.0:22          0.0.0.0:*         users:(("sshd",pid=611,fd=3))
tcp   LISTEN 0.0.0.0:80          0.0.0.0:*         users:(("nginx",pid=902,fd=6))
tcp   LISTEN 0.0.0.0:443         0.0.0.0:*         users:(("nginx",pid=902,fd=7))
tcp   LISTEN 127.0.0.1:3306      0.0.0.0:*         users:(("mariadbd",pid=755,fd=21))
tcp   LISTEN 0.0.0.0:6379        0.0.0.0:*         users:(("redis-server",pid=780,fd=6))
tcp   LISTEN [::]:22             [::]:*            users:(("sshd",pid=611,fd=4))
tcp   LISTEN [::]:80             [::]:*            users:(("nginx",pid=902,fd=8))
tcp   LISTEN [::]:443            [::]:*            users:(("nginx",pid=902,fd=9))

Najvažniji stupac je Local Address: adresa na kojoj program sluša.

AdresaZnačenje
0.0.0.0Sve IPv4 adrese poslužitelja, dakle i javna adresa: dostupno izvana (osim ako to ne zaustavi vatrozid)
[::]Sve IPv6 adrese: isto, za IPv6
127.0.0.1 ili [::1]Samo sam poslužitelj (loopback): izvana nikad nije dostupno
127.0.0.53, 127.0.0.54Također loopback; ovdje sluša lokalni DNS pomoćnik servisa systemd-resolved
192.0.2.10Samo ta jedna adresa

U gornjem primjeru MariaDB je u redu: sluša na 127.0.0.1, pa joj mogu pristupiti samo programi na samom poslužitelju (Vaša web-stranica). No Redis sluša na 0.0.0.0:6379. Ako vatrozid nije dobro postavljen, može mu pristupiti cijeli internet. Upravo o takvoj pogrešci govori ova lekcija.

Slušanje na pravoj adresi

Baza podataka, predmemorija (cache) ili upravljačka ploča gotovo nikad ne smiju biti dostupni izvana. Prva i najbolja obrana je da usluga sluša samo na loopbacku. Vatrozid (lekcija 5.2) je drugi sloj; on može slučajno biti isključen ili ne vrijediti (na primjer kod Dockera, lekcija 9.3).

Gdje se to postavlja, ovisi o programu:

ProgramPostavkaDatoteka (Debian/Ubuntu)
MariaDB/MySQLbind-address = 127.0.0.1/etc/mysql/mariadb.conf.d/50-server.cnf
PostgreSQLlisten_addresses = 'localhost'/etc/postgresql/<versie>/main/postgresql.conf
Redisbind 127.0.0.1 -::1 i protected-mode yes/etc/redis/redis.conf

Paketi za Debian i Ubuntu te usluge prema zadanim postavkama već postavljaju na localhost. Problem obično nastaje kad netko slijedi upute koje kažu "postavite bind-address na 0.0.0.0 da biste se spojili izvana". Želite li sami pristupiti bazi podataka sa svojeg prijenosnog računala, upotrijebite SSH tunel (lekcija 2.3): priključak ostaje zatvoren, a pristupiti može samo onaj tko uđe putem SSH-a.

Nakon izmjene ponovno pokrenite uslugu i ponovno provjerite naredbom ss -tulpn.

Otvoren, zatvoren i filtriran

Gledano izvana, priključak može biti u jednom od tri stanja:

  • Otvoren (open): nešto sluša i veza uspijeva.
  • Zatvoren (closed): ništa ne sluša ili vatrozid aktivno odbija. Poslužitelj odmah vraća "ne" (kod TCP-a paket RST). Veza odmah ne uspijeva s porukom "Connection refused".
  • Filtriran (filtered): vatrozid tiho odbacuje paket. Veza visi dok ne istekne vrijeme čekanja (time-out).

Za Vašu bazu podataka i zatvoren i filtriran su dobri: nitko joj ne može pristupiti. Razlika Vam govori samo zašto: filtriran gotovo uvijek znači da ga zaustavlja Vaš vatrozid.

Gledajte izvana

ss pokazuje što sluša na poslužitelju, ali ne i što je dostupno izvana. Između se nalazi još vatrozid, a kod Vašeg pružatelja usluge ponekad i mrežni vatrozid. Jedina prava provjera stoga je: gledajte izvana, s drugog računala.

S vlastitog računala (ne sa samog poslužitelja, jer tada idete preko loopbacka) to možete učiniti alatom nc (netcat) za jedan priključak:

anna@laptop:~$ nc -vz -w 3 192.0.2.10 6379
nc: connect to 192.0.2.10 port 6379 (tcp) failed: Connection refused
anna@laptop:~$ nc -vz -w 3 192.0.2.10 22
Connection to 192.0.2.10 22 port [tcp/ssh] succeeded!

Na Windowsu isto radi PowerShell naredbom Test-NetConnection 192.0.2.10 -Port 6379. Skener priključaka poput nmap može pregledati više priključaka odjednom; takav skener koristite samo na vlastitom poslužitelju.

Ne zaboravite IPv6. Česta pogreška je vatrozid koji ima pravila samo za IPv4, dok usluga sluša i na [::]. Zato testirajte i IPv6 adresu: nc -6 -vz -w 3 2001:db8::10 6379.

Zašto je to toliko važno

Vaš se poslužitelj skenira od prve minute. Tražilice za uređaje i usluge na internetu, kao i botovi kriminalaca, neprestano isprobavaju sve IPv4 adrese na poznatim priključcima. Otvoreni Redis bez lozinke, Elasticsearch klaster ili MongoDB bez kontrole pristupa pronađu se u kratkom roku. Curenja podataka zbog otvorenih baza podataka i otvorenih klastera za pretraživanje redovito se pojavljuju u vijestima, a gotovo uvijek riječ je upravo o ovoj pogrešci: usluga namijenjena internoj upotrebi slušala je na svim adresama.

I na priključak za SSH kuca se cijeli dan. To je normalno i uz ključeve (lekcija 2.2) i fail2ban (lekcija 5.3) nije problem.

Provjera u tečaju

U zadatku uz ovu lekciju program tečaja izvana provjerava pet fiksnih priključaka baza podataka Vašeg poslužitelja: 3306 (MySQL/MariaDB), 5432 (PostgreSQL), 6379 (Redis), 9200 (Elasticsearch/OpenSearch) i 27017 (MongoDB). Program samo pokušava uspostaviti vezu, ne šalje nikakve podatke i nigdje se ne prijavljuje. Ne skenira druge priključke. Provjere dolaze s IP adrese navedene u zadatku, tako da ih možete prepoznati u vlastitom zapisniku. Jedna se adresa može provjeriti samo nekoliko puta na sat.

Na AlmaLinuxu i Rocky Linuxu

ss radi jednako. Datoteke usluga nalaze se na drugim mjestima (na primjer /etc/my.cnf.d/ za MariaDB, /var/lib/pgsql/data/postgresql.conf za PostgreSQL). Osim toga, SELinux može zaustaviti uslugu koja želi slušati na neuobičajenom priključku; to tada vidite u journalctl (lekcija 6.2), a ne u ss.

Sažetak

  • Svaki priključak koji sluša su vrata; izvana ostavite otvorenim samo ono što je zaista potrebno (obično 22, 80 i 443).
  • sudo ss -tulpn pokazuje koji program sluša na kojoj adresi i kojem priključku.
  • 0.0.0.0 i [::] znače "sve adrese", 127.0.0.1 i [::1] znače "samo sam poslužitelj". Baze podataka, predmemorije i klasteri za pretraživanje trebaju biti na loopbacku.
  • Zatvoren i filtriran su oba dobri za bazu podataka; otvoren je pogrešno.
  • Uvijek provjeravajte izvana, za IPv4 i za IPv6, jer ss ne vidi vatrozid.

Kviz

1. U ss -tulpn uz mariadbd stoji 127.0.0.1:3306. Što to znači?



2. Redis sluša na 0.0.0.0:6379. Vaš vatrozid ne propušta 6379. Koji je najbolji pristup?



3. Izvana testirate priključak 5432 i veza visi 3 sekunde, a zatim ne uspijeva. Koje je vjerojatno stanje?



4. Zašto otvoreni priključak trebate provjeriti izvana, a ne samo naredbom ss na poslužitelju?



5. Vaš vatrozid ima pravila za IPv4, ali Vaš poslužitelj ima i IPv6 adresu. Redis sluša na [::]:6379. Koji je rizik?



Zadatak

Zadatak Z5.1: Priključci baza podataka zatvoreni izvana. Pokrenite sudo ss -tulpn na svojem poslužitelju i utvrdite na kojim adresama slušaju Vaše usluge. Zatim neka program tečaja izvana provjeri da priključci 3306, 5432, 6379, 9200 i 27017 Vašeg poslužitelja nisu dostupni, za IPv4 i (ako Vaš poslužitelj ima AAAA zapis) IPv6. Upišite i koje usluge kod Vas slušaju na 0.0.0.0 ili [::]. Program uspostavlja samo vezu prema tih pet priključaka i ništa ne šalje.

Zadatak Z5.1: Priključci baza podataka zatvoreni izvana

Ne prijavljujemo se i ne isprobavamo nikakvu lozinku ni ključ. Najprije pokažite da je poslužitelj Vaš: kliknite "Prikaži moj kod" i postavite datoteku /.well-known/weboke-cursus-<code>.txt koja sadrži samo taj kod na web-poslužitelj Vašeg naziva hosta. Dohvaćamo je izravno sa svake IP adrese koju provjeravamo (IPv4 i IPv6 zasebno); TXT zapis se ovdje ne računa. Provjera dolazi s heavy.webawere.nl (185.158.167.16 i 2a07:ae80:100:0:185:158:167:16), a ne s našeg web-poslužitelja. Samo za prijavljene polaznike; najviše 6 provjera po poslužitelju na sat. Uspostavljamo samo TCP vezu prema priključcima 3306, 5432, 6379, 9200, 27017 i 2375 (IPv4 i IPv6) i ništa ne šaljemo.




Ono što unesete i što pronađemo ne spremamo. Vaš preglednik pamti Vaše odgovore i je li zadatak položen. Ako ste prijavljeni, u Moji tečajevi čuvamo samo podatak da ste zadatak (gotovo) uspješno riješili; ondje to možete i izbrisati.

Dodatno štivo

Trenutak…

Postavite svoje domene

Za svaku domenu odredite nameservere, povezivanje s hostingom i tko postaje vlasnik.

Učitavanje Vaših domena…