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ť

Firewall s ufw a nftables

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

Cieľ lekcie: Po tejto lekcii dokážete nastaviť firewall, ktorý povoľuje iba to, čo je potrebné, pre IPv4 aj IPv6, bez toho, aby ste sa zablokovali. Budete tiež vedieť, pred čím vás firewall na serveri nechráni.

Kľúčové pojmy: paketový filter, netfilter, nftables, iptables-nft, ufw, predvolená politika, allow, deny, reject, limit, IPv6 v ufw, firewall poskytovateľa, firewalld, Docker a firewall

Čo robí firewall

Firewall na vašom serveri je paketový filter: pri každom prichádzajúcom sieťovom pakete prejde zoznam pravidiel a rozhodne, či paket pustí ďalej. V Linuxe je tento filter súčasťou jadra a volá sa netfilter. Nastavuje sa pomocou programu:

  • nftables (príkaz nft) je súčasný nástroj. Debian ho štandardne používa od verzie Debian 10.
  • iptables je starší nástroj. Na moderných systémoch je iptables zvyčajne prekladom do nftables (iptables-nft), takže staré návody stále fungujú.
  • ufw (Uncomplicated Firewall) je jednoduchá vrstva nad tým, štandardne prítomná v Ubuntu a v Debiane sa dá nainštalovať jedným príkazom. Pre jeden server je ufw najjednoduchšou voľbou. Táto lekcia používa ufw a potom ukáže, ako vyzerajú rovnaké pravidlá v nftables.

Firewall je vaša druhá obranná vrstva. Prvou je to, že služby počúvajú iba na správnej adrese (lekcia 5.1). Spolu zabezpečia, že chyba v jednej vrstve neznamená hneď otvorené dvere.

Najprv: ako sa dostanete späť, keď sa niečo pokazí?

Klasická chyba: zapnete firewall, zabudnete povoliť SSH a spojenie sa preruší. Cez SSH sa potom už na server nedostanete. Skôr než začnete:

  1. Zistite, ako otvoriť konzolu vášho poskytovateľa (lekcia 1.2). Funguje mimo siete, teda aj vtedy, keď firewall všetko zablokuje. Tam sa prihlásite a zadáte ufw disable.
  2. Ak máte pochybnosti, vytvorte snapshot.
  3. Nechajte aktuálnu reláciu SSH otvorenú a testujte v druhej relácii.

ufw v piatich krokoch

Krok 1: inštalácia a výber predvolených nastavení.

anna@web1:~$ sudo apt install ufw
anna@web1:~$ sudo ufw default deny incoming
Default incoming policy changed to 'deny'
anna@web1:~$ sudo ufw default allow outgoing
Default outgoing policy changed to 'allow'

Predvolená politika platí pre všetko, pre čo neexistuje pravidlo. "Deny incoming" znamená: všetko prichádzajúce je zakázané okrem toho, čo následne povolíte. To je jediný bezpečný základ. Odchádzajúcu prevádzku (server, ktorý sťahuje aktualizácie) povolíte.

Krok 2: povolenie SSH ešte pred zapnutím firewallu.

anna@web1:~$ sudo ufw allow OpenSSH
Rules updated
Rules updated (v6)

OpenSSH je aplikačný profil, ktorý ufw pozná (zodpovedá portu 22/tcp). Ak SSH beží na inom porte, použite jeho číslo: sudo ufw allow 2222/tcp. Všimnite si "Rules updated (v6)": ufw vytvorí pravidlo aj pre IPv6. Robí to preto, lebo v /etc/default/ufw je riadok IPV6=yes, čo je predvolené nastavenie. Overte si to; ak je tam no, váš firewall platí iba pre IPv4.

Krok 3: čo ďalšie potrebujete.

anna@web1:~$ sudo ufw allow 80/tcp
anna@web1:~$ sudo ufw allow 443/tcp
anna@web1:~$ sudo ufw allow 443/udp       # iba ak používate HTTP/3

Pravidlo môžete obmedziť na jednu zdrojovú adresu, napríklad pre správcovský port, ktorý má byť dostupný iba z vašej kancelárie:

anna@web1:~$ sudo ufw allow from 198.51.100.20 to any port 9090 proto tcp

Krok 4: zapnutie.

anna@web1:~$ sudo ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup

Krok 5: kontrola. Otvorte druhé okno a prihláste sa znova. Ak sa to podarí, SSH je nastavené správne. Potom si pozrite pravidlá:

anna@web1:~$ sudo ufw status verbose
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), deny (routed)
New profiles: skip

To                         Action      From
--                         ------      ----
22/tcp (OpenSSH)           ALLOW IN    Anywhere
80/tcp                     ALLOW IN    Anywhere
443/tcp                    ALLOW IN    Anywhere
22/tcp (OpenSSH (v6))      ALLOW IN    Anywhere (v6)
80/tcp (v6)                ALLOW IN    Anywhere (v6)
443/tcp (v6)               ALLOW IN    Anywhere (v6)

Pravidlo odstránite pomocou čísel: sudo ufw status numbered a potom sudo ufw delete 3.

deny, reject a limit

  • deny paket potichu zahodí: zvonku vidíte "filtrovaný" (lekcia 5.1).
  • reject pošle späť odmietnutie: zvonku vidíte "zatvorený". Pre vlastné služby je to korektnejšie, ale prezrádza to, že tam je server.
  • limit spojenie povolí, ale zablokuje adresu, ktorá sa v priebehu 30 sekúnd pokúsi pripojiť šesťkrát alebo viackrát. Hodí sa pre SSH: sudo ufw limit OpenSSH namiesto allow. Je to hrubé opatrenie (počíta spojenia, nie neúspešné prihlásenia); fail2ban (lekcia 5.3) je presnejší.

Rovnaké pravidlá v nftables

ufw na pozadí zapisuje pravidlá do netfiltra. Ak chcete pracovať bez ufw, napíšete si vlastný súbor nftables. V Debiane je uložený v /etc/nftables.conf a načítava ho služba nftables:

#!/usr/sbin/nft -f
flush ruleset

table inet filter {
    chain input {
        type filter hook input priority 0; policy drop;
        ct state established,related accept
        ct state invalid drop
        iif "lo" accept
        meta l4proto { icmp, ipv6-icmp } accept
        tcp dport { 22, 80, 443 } accept
    }
    chain forward {
        type filter hook forward priority 0; policy drop;
    }
    chain output {
        type filter hook output priority 0; policy accept;
    }
}

Čítajte ho takto. Tabuľka sa volá filter a patrí do rodiny inet: jedna tabuľka pre IPv4 aj IPv6 súčasne, takže na IPv6 nemôžete zabudnúť. V reťazci input je politika drop. Ďalej: odpovede na už existujúce spojenia môžu prejsť späť (established,related), všetko na loopbacku je povolené, ICMP je povolené (potrebné okrem iného pre IPv6 a chybové hlásenia o veľkosti paketov) a povolené sú porty 22, 80 a 443.

anna@web1:~$ sudo nft -c -f /etc/nftables.conf    # skontrolovať bez načítania
anna@web1:~$ sudo systemctl enable --now nftables
anna@web1:~$ sudo nft list ruleset

Používajte buď ufw, alebo vlastný súbor nftables, nie oboje: obe zapisujú do toho istého netfiltra a ich pravidlá si môžu navzájom prekážať.

Pred čím vás firewall nechráni

  • Služby, ktoré sami povolíte. Port 443 je otvorený pre váš web; zraniteľnosť vo vašom webe je teda normálne dostupná. Firewall chráni iba porty, ktoré sú zatvorené.
  • Docker. Keď v Dockeri zverejníte port (-p 5432:5432), Docker nastaví vlastné pravidlá netfiltra, ktoré presmerujú prevádzku skôr, než sa uplatnia pravidlá ufw. Dokumentácia Dockeru doslova uvádza, že Docker a ufw spolu dobre nefungujú. Port kontajnera teda môže byť zvonku otvorený, hoci ho ufw status nezobrazuje. Riešenie (zverejnenie na 127.0.0.1) sa naučíte v lekcii 9.3.
  • Odchádzajúca prevádzka. Pri "allow outgoing" sa napadnutý program môže pripojiť kamkoľvek. Pre väčšinu malých serverov je to prijateľná voľba; prísne prostredia obmedzujú aj odchádzajúcu prevádzku.

Firewall vášho poskytovateľa

Mnohí poskytovatelia majú aj firewall v sieti, pred vaším serverom, ktorý nastavíte v klientskom paneli (niekedy sa nazýva "cloud firewall" alebo "security group"). Je to výborná dodatočná vrstva a funguje aj vtedy, keď na samotnom serveri niečo nastavíte nesprávne. Firewall na serveri však nenahrádza: ak server presťahujete alebo zmeníte poskytovateľa, nepresunie sa s ním, a nie každý poskytovateľ ho ponúka. Preto majte vždy firewall aj priamo na serveri.

Na AlmaLinux a Rocky Linux

Tam je štandardne zapnutý firewalld so zónami. Najdôležitejšie príkazy:

[root@web1 ~]# firewall-cmd --list-all
[root@web1 ~]# firewall-cmd --permanent --add-service=http --add-service=https
[root@web1 ~]# firewall-cmd --reload

Bez --permanent platí zmena iba do najbližšieho reštartu; s --permanent začne platiť až po --reload. SSH je v predvolenej zóne už otvorené.

V praxi

Ak sa vám napriek tomu stane, že sa na VPS vo WebOké zablokujete, otvorte v obrazovke VPS konzolu, prihláste sa a vypnite firewall (ufw disable) alebo vráťte posledné pravidlo. U iných poskytovateľov sa tento núdzový vstup nazýva tiež konzola, VNC alebo rescue. Zistite si, kde je toto tlačidlo, skôr než ho budete potrebovať.

Zhrnutie

  • Firewall je vaša druhá vrstva po zásade "počúvať iba tam, kde je to potrebné"; nftables je nástroj v jadre, ufw jednoduchá vrstva nad ním.
  • Začnite s default deny incoming, povoľte SSH pred ufw enable, testujte v druhej relácii a poznajte konzolu svojho poskytovateľa.
  • Overte, že ufw pokrýva aj IPv6 (IPV6=yes); v nftables to naraz zabezpečí rodina inet.
  • deny dáva zvonku "filtrovaný", reject dáva "zatvorený"; limit brzdí opakované spojenia.
  • Porty Dockeru obchádzajú ufw (lekcia 9.3); firewall poskytovateľa je dodatočná vrstva, nie náhrada.

Kvíz

1. V akom poradí prvýkrát zapnete ufw na serveri, ku ktorému máte otvorenú reláciu SSH?



2. Po ufw enable váš web cez IPv4 prestal fungovať, ale SSH funguje. Čo je najpravdepodobnejšia príčina?



3. V Dockeri zverejníte port 5432 databázového kontajnera. ufw status nezobrazuje žiadne pravidlo pre 5432. Je databáza dostupná zvonku?



4. Prečo príklad nftables používa tabuľku z rodiny inet?



5. Váš poskytovateľ má v klientskom paneli sieťový firewall. Potrebujete potom ešte firewall na serveri?



Úloha

Úloha O5.2: Nastavenie firewallu. Zapnite na svojom serveri firewall pomocou ufw (alebo nftables, prípadne firewalld na AlmaLinux/Rocky): predvolene všetko prichádzajúce zatvorené, SSH a to, čo ďalšie skutočne potrebujete. Otestujte to v druhej relácii, overte, či je pokryté IPv6, a zvonku pomocou nc skontrolujte, či je nepovolený port zatvorený alebo filtrovaný. Vyplňte kontrolný zoznam a vložte výstup ufw status verbose (alebo nft list ruleset); pri každom otvorenom porte uveďte, na čo slúži.

Úloha O5.2: Nastavenie firewallu

Túto úlohu vykonávate sami, nikto ju nekontroluje. Odškrtnite, čo ste urobili, a označte úlohu ako splnenú.



Vaše zaškrtnutia a poznámky zostávajú iba v tomto prehliadači, nikam ich neposielame. Po prihlásení si v sekcii Moje kurzy uchovávame iba to, že ste úlohu splnili.

Ď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…