Prejsť na obsah

Nastavenia súborov cookie

Vyberte, aké druhy súborov cookie povolíte. Svoj výber môžete kedykoľvek zmeniť cez Nastavenia súborov cookie v dolnej časti každej stránky. Vyhlásenie o ochrane osobných údajov

Nevyhnutné

Vždy zapnuté

Potrebné na prihlásenie, uchovanie košíka a zapamätanie vašich volieb. Sú vždy zapnuté.

Ktoré súbory cookie?
  • weboke_sessie, weboke_klant, weboke_remember: vaša relácia a trvalé prihlásenie
  • weboke_basket: váš košík
  • wkBtwIncl: zobrazovanie cien s DPH alebo bez DPH
  • wok_cookies: váš výber súborov cookie, 12 mesiacov

Merajú, ktorá reklama vedie k návšteve alebo objednávke, aby sme neplatili za reklamy, ktoré nič neprinášajú.

Ktoré súbory cookie?
  • Google Ads cez Google Tag Manager (_gcl_au, _gcl_aw), najviac 90 dní
  • OpenAI Ads, reklamy v ChatGPT
  • wok_aff: ktorý partner vás k nám odporučil (partnerský program), 60 dní

4,6

Krajina a jazyk

Každá krajina má vlastný web s cenami a DPH danej krajiny.

Zobraziť

Porty a počúvajúce služby

Modul 5: Ochrana siete · Čas čítania: 10 minút

Cieľ lekcie: Po tejto lekcii dokážete zistiť, ktoré služby na vašom serveri počúvajú a na akej adrese, vysvetliť rozdiel medzi 0.0.0.0 a 127.0.0.1 a zvonku overiť, čo z vášho servera vidí ktokoľvek na internete.

Kľúčové pojmy: port, TCP a UDP, počúvanie, ss -tulpn, 0.0.0.0 a [::], 127.0.0.1 a [::1], bind-address, otvorený, zatvorený a filtrovaný, útočná plocha, skenery

IP adresa so 65 535 dverami

Váš server má IP adresu, napríklad 192.0.2.10 a 2001:db8::10. Na tejto adrese môže byť súčasne dostupných viacero programov, každý na vlastnom porte: je to číslo od 1 do 65 535. Program, ktorý prijíma spojenia, na porte počúva. Niekoľko známych portov:

PortProtokolSlužba
22TCPSSH
80TCPhttp (webový server)
443TCP a UDPhttps (UDP pre HTTP/3)
25TCPpošta medzi poštovými servermi (SMTP)
3306TCPMySQL a MariaDB
5432TCPPostgreSQL
6379TCPRedis

TCP je protokol pre spojenia, pri ktorých musia dáta spoľahlivo doraziť (web, SSH, databázy). UDP slúži na rýchle samostatné pakety (DNS, VPN ako WireGuard, HTTP/3). Služba počúva na TCP, na UDP alebo na oboch.

Každý počúvajúci port sú dvere do vášho servera. Za každými dverami je softvér, ktorý môže obsahovať chyby. Súhrn všetkých dverí dostupných zvonku sa nazýva útočná plocha. Čím je menšia, tým lepšie: server s webovou stránkou potrebuje zvonku len porty 22, 80 a 443.

Čo počúva: ss

Príkaz ss (socket statistics) ukazuje, čo na vašom serveri počúva. S voľbami -t (TCP), -u (UDP), -l (len počúvajúce), -p (ktorý program) a -n (čísla namiesto názvov):

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))

Najdôležitejší je stĺpec Local Address: adresa, na ktorej program počúva.

AdresaVýznam
0.0.0.0Všetky IPv4 adresy servera, teda aj verejná adresa: dostupné zvonku (pokiaľ to nezastaví firewall)
[::]Všetky IPv6 adresy: to isté pre IPv6
127.0.0.1 alebo [::1]Len samotný server (loopback): zvonku nikdy nedostupné
127.0.0.53, 127.0.0.54Tiež loopback; tu počúva lokálny pomocník DNS zo systemd-resolved
192.0.2.10Len táto jedna adresa

V príklade vyššie je MariaDB v poriadku: počúva na 127.0.0.1, takže sa k nej dostanú len programy na samotnom serveri (vaša webová stránka). Redis však počúva na 0.0.0.0:6379. Ak firewall nie je správne nastavený, dostane sa k nemu celý internet. Presne o takejto chybe je táto lekcia.

Počúvanie na správnej adrese

Databáza, cache alebo administračný panel by takmer nikdy nemali byť dostupné zvonku. Prvou a najlepšou obranou je, aby služba počúvala len na loopbacku. Firewall (lekcia 5.2) je druhá vrstva; ten môže byť omylom vypnutý alebo sa nemusí uplatňovať (napríklad pri Dockeri, lekcia 9.3).

Kde sa to nastavuje, závisí od programu:

ProgramNastavenieSúbor (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 a protected-mode yes/etc/redis/redis.conf

Balíky v Debiane a Ubuntu nastavujú tieto služby štandardne na localhost. Problém zvyčajne vznikne, keď niekto postupuje podľa návodu, ktorý hovorí "nastavte bind-address na 0.0.0.0, aby ste sa mohli pripojiť zvonku". Ak sa chcete k databáze pripojiť zo svojho notebooku, použite SSH tunel (lekcia 2.3): port zostane zatvorený a pripojiť sa môže len ten, kto vojde cez SSH.

Po zmene službu reštartujte a znova skontrolujte pomocou ss -tulpn.

Otvorený, zatvorený a filtrovaný

Pri pohľade zvonku môže byť port v jednom z troch stavov:

  • Otvorený (open): niečo počúva a spojenie sa podarí.
  • Zatvorený (closed): nič nepočúva, alebo firewall aktívne odmieta. Server okamžite pošle späť "nie" (pri TCP paket RST). Spojenie hneď zlyhá s hlásením "Connection refused".
  • Filtrovaný (filtered): firewall paket potichu zahodí. Spojenie visí, kým nevyprší časový limit (time-out).

Pre vašu databázu sú zatvorený aj filtrovaný stav v poriadku: nikto sa k nej nedostane. Rozdiel vám len prezradí prečo: filtrovaný takmer vždy znamená, že to zastavuje váš firewall.

Pohľad zvonku

ss ukazuje, čo na serveri počúva, ale nie to, čo je dostupné zvonku. Medzi tým je ešte firewall a u poskytovateľa niekedy aj sieťový firewall. Jediná skutočná kontrola preto je: pozrite sa zvonku, z iného počítača.

Z vášho vlastného počítača (nie zo samotného servera, pretože tam by ste išli cez loopback) to pre jeden port urobíte pomocou nc (netcat):

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!

Vo Windows urobí to isté PowerShell s Test-NetConnection 192.0.2.10 -Port 6379. Skener portov ako nmap dokáže skontrolovať viac portov naraz; takýto skener používajte len na vlastnom serveri.

Nezabudnite na IPv6. Častou chybou je firewall, ktorý má pravidlá len pre IPv4, zatiaľ čo služba počúva aj na [::]. Otestujte preto aj IPv6 adresu: nc -6 -vz -w 3 2001:db8::10 6379.

Prečo je to také dôležité

Váš server je skenovaný od prvej minúty. Vyhľadávače zariadení a služieb na internete aj boty kriminálnikov neustále skúšajú všetky IPv4 adresy na známych portoch. Otvorený Redis bez hesla, cluster Elasticsearch alebo MongoDB bez riadenia prístupu sa nájde za krátky čas. Úniky dát cez otvorené databázy a otvorené vyhľadávacie clustre sa pravidelne objavujú v správach a takmer vždy ide presne o túto chybu: služba určená na interné použitie počúvala na všetkých adresách.

Aj na port SSH niekto klope celý deň. To je normálne a s kľúčmi (lekcia 2.2) a fail2ban (lekcia 5.3) to nie je problém.

Kontrola v kurze

V úlohe k tejto lekcii program kurzu zvonku skontroluje päť pevne daných databázových portov vášho servera: 3306 (MySQL/MariaDB), 5432 (PostgreSQL), 6379 (Redis), 9200 (Elasticsearch/OpenSearch) a 27017 (MongoDB). Program len skúša, či sa nadviaže spojenie, neposiela žiadne dáta a nikam sa neprihlasuje. Iné porty neskenuje. Kontroly prichádzajú z IP adresy uvedenej v úlohe, aby ste ich vo svojom logu spoznali. Jednu adresu možno skontrolovať len niekoľkokrát za hodinu.

V AlmaLinux a Rocky Linux

ss funguje rovnako. Súbory služieb sú na iných miestach (napríklad /etc/my.cnf.d/ pre MariaDB, /var/lib/pgsql/data/postgresql.conf pre PostgreSQL). Okrem toho môže SELinux zablokovať službu, ktorá chce počúvať na nezvyčajnom porte; to potom uvidíte v journalctl (lekcia 6.2), a nie v ss.

Zhrnutie

  • Každý počúvajúci port sú dvere; zvonku nechajte otvorené len to, čo je naozaj potrebné (zvyčajne 22, 80 a 443).
  • sudo ss -tulpn ukazuje, ktorý program počúva na ktorej adrese a ktorom porte.
  • 0.0.0.0 a [::] znamenajú "všetky adresy", 127.0.0.1 a [::1] znamenajú "len samotný server". Databázy, cache a vyhľadávacie clustre patria na loopback.
  • Zatvorený aj filtrovaný stav sú pre databázu v poriadku; otvorený je chyba.
  • Vždy kontrolujte zvonku, pre IPv4 aj IPv6, pretože ss firewall nevidí.

Kvíz

1. V ss -tulpn je pri mariadbd uvedené 127.0.0.1:3306. Čo to znamená?



2. Redis počúva na 0.0.0.0:6379. Váš firewall port 6379 nepovoľuje. Aký je najlepší postup?



3. Zvonku testujete port 5432 a spojenie 3 sekundy visí a potom zlyhá. Aký je pravdepodobný stav?



4. Prečo treba otvorený port kontrolovať zvonku, a nie len pomocou ss na serveri?



5. Váš firewall má pravidlá pre IPv4, ale váš server má aj IPv6 adresu. Redis počúva na [::]:6379. Aké je riziko?



Úloha

Úloha Z5.1: Databázové porty zatvorené zvonku. Spustite na svojom serveri sudo ss -tulpn a zistite, na ktorých adresách vaše služby počúvajú. Potom nechajte program kurzu zvonku overiť, že porty 3306, 5432, 6379, 9200 a 27017 vášho servera nie sú dostupné, pre IPv4 a (ak má váš server záznam AAAA) aj pre IPv6. Uveďte tiež, ktoré služby u vás počúvajú na 0.0.0.0 alebo [::]. Program sa len pripojí k týmto piatim portom a nič neposiela.

Úloha Z5.1: Databázové porty zatvorené zvonku

Neprihlasujeme sa a neskúšame žiadne heslo ani kľúč. Najprv preukážte, že server patrí vám: kliknite na „Zobraziť môj kód“ a na webový server vášho názvu hostiteľa umiestnite súbor /.well-known/weboke-cursus-<code>.txt, ktorý obsahuje iba tento kód. Súbor načítame priamo z každej IP adresy, ktorú kontrolujeme (IPv4 a IPv6 zvlášť); záznam TXT sa tu nepočíta. Kontrola prichádza z heavy.webawere.nl (185.158.167.16 a 2a07:ae80:100:0:185:158:167:16), nie z nášho webového servera. Iba pre prihlásených účastníkov kurzu; na jeden server najviac 6 kontrol za hodinu. Iba nadviažeme spojenie TCP na porty 3306, 5432, 6379, 9200, 27017 a 2375 (IPv4 a IPv6) a nič neodosielame.




Čo vyplníte a čo nájdeme, neukladáme. Váš prehliadač si pamätá vaše odpovede a to, či ste úlohu splnili. Po prihlásení si v sekcii Moje kurzy uchovávame iba to, že úloha bola (takmer) správne vyriešená; aj to tam môžete odstrániť.

Ďalšie čítanie

Chvíľu strpenia…

Nastavte svoje domény

Pri každej doméne nastavte nameservery, prepojenie s hostingom a to, kto bude jej vlastníkom.

Načítavajú sa vaše domény…