Preskoči na vsebino

Nastavitve piškotkov

Za vsako vrsto izberite, katere piškotke dovolite. Svojo izbiro lahko kadar koli spremenite prek povezave Nastavitve piškotkov na dnu vsake strani. Izjava o zasebnosti

Nujni

Vedno vklopljeno

Potrebni so za prijavo, shranjevanje košarice in pomnjenje Vaših izbir. Vedno so vklopljeni.

Kateri piškotki?
  • weboke_sessie, weboke_klant, weboke_remember: Vaša seja in ohranjanje prijave
  • weboke_basket: Vaša košarica
  • wkBtwIncl: prikaz cen z DDV ali brez DDV
  • wok_cookies: Vaša izbira glede piškotkov, 12 mesecev

Meri, kateri oglas vodi do obiska ali naročila, da ne plačujemo za oglase, ki ne prinesejo ničesar.

Kateri piškotki?
  • Google Ads prek Google Tag Manager (_gcl_au, _gcl_aw), do 90 dni
  • OpenAI Ads, oglasi v ChatGPT
  • wok_aff: prek katerega partnerja ste prišli k nam (partnerski program), 60 dni

4,6

Država in jezik

Vsaka država ima svojo spletno stran, s cenami in DDV za to državo.

Prikaži

Požarni zid z ufw in nftables

Modul 5: Zaščita omrežja · Čas branja: 12 minut

Učni cilj: Po tej lekciji boste znali nastaviti požarni zid, ki dovoli samo to, kar je nujno, za IPv4 in IPv6, ne da bi se zaklenili ven, in boste vedeli, pred čim Vas požarni zid na strežniku ne ščiti.

Ključni pojmi: paketni filter, netfilter, nftables, iptables-nft, ufw, privzeta politika, allow, deny, reject, limit, IPv6 v ufw, požarni zid ponudnika, firewalld, Docker in požarni zid

Kaj počne požarni zid

Požarni zid na Vašem strežniku je paketni filter: za vsak dohodni omrežni paket pogleda seznam pravil in odloči, ali sme skozi. V Linuxu je ta filter v jedru in se imenuje netfilter. Nastavite ga s programom:

  • nftables (ukaz nft) je sodobno orodje. Debian ga privzeto uporablja od različice Debian 10.
  • iptables je staro orodje. Na sodobnih sistemih je iptables navadno prevajalnik v nftables (iptables-nft), tako da stara navodila še vedno delujejo.
  • ufw (Uncomplicated Firewall) je preprosta plast nad tem, na Ubuntuju je nameščen privzeto, na Debian pa ga namestite z enim ukazom. Za posamezen strežnik je ufw najpreprostejša izbira. Ta lekcija uporablja ufw in nato pokaže, kako so ista pravila videti v nftables.

Požarni zid je Vaša druga obrambna plast. Prva je, da storitve poslušajo samo na pravem naslovu (lekcija 5.1). Skupaj poskrbita, da napaka v eni plasti ne pomeni takoj odprtih vrat.

Najprej: kako se vrnete, če gre kaj narobe?

Klasična napaka: vklopite požarni zid, pozabite dovoliti SSH in povezava se prekine. Prek SSH potem ne pridete več do strežnika. Preden začnete:

  1. Vedite, kako odprete konzolo svojega ponudnika (lekcija 1.2). Ta deluje mimo omrežja, torej tudi, ko požarni zid vse zapre. Tam se prijavite in vtipkate ufw disable.
  2. Če niste prepričani, naredite posnetek stanja (snapshot).
  3. Trenutno sejo SSH pustite odprto in preizkušajte z drugo sejo.

ufw v petih korakih

1. korak: namestitev in izbira privzete politike.

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'

Privzeta politika velja za vse, za kar ni pravila. "Deny incoming" pomeni: vse dohodno je prepovedano, razen tega, kar dovolite v nadaljevanju. To je edina varna osnova. Odhodni promet (strežnik, ki prenaša posodobitve) dovolite.

2. korak: dovolite SSH, preden vklopite požarni zid.

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

OpenSSH je aplikacijski profil, ki ga ufw pozna (pomeni vrata 22/tcp). Če SSH teče na drugih vratih, uporabite številko: sudo ufw allow 2222/tcp. Bodite pozorni na "Rules updated (v6)": ufw pravilo ustvari tudi za IPv6. To naredi, ker je v /etc/default/ufw nastavljeno IPV6=yes, kar je privzeto. To na hitro preverite; če je nastavljeno na no, Vaš požarni zid velja samo za IPv4.

3. korak: kar še potrebujete.

anna@web1:~$ sudo ufw allow 80/tcp
anna@web1:~$ sudo ufw allow 443/tcp
anna@web1:~$ sudo ufw allow 443/udp       # samo, če uporabljate HTTP/3

Pravilo lahko omejite na en izvorni naslov, na primer za skrbniška vrata, ki so dovoljena samo iz Vaše pisarne:

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

4. korak: vklop.

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

5. korak: preverjanje. Odprite drugo okno in se ponovno prijavite. Če uspe, je SSH pravilno nastavljen. Nato si oglejte pravila:

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)

Pravilo odstranite s številkami: sudo ufw status numbered in nato sudo ufw delete 3.

deny, reject in limit

  • deny paket tiho zavrže: od zunaj vidite "filtrirano" (lekcija 5.1).
  • reject vrne zavrnitev: od zunaj vidite "zaprto". To je lepše za Vaše lastne storitve, vendar izda, da strežnik obstaja.
  • limit povezavo dovoli, a blokira naslov, ki v 30 sekundah šestkrat ali večkrat poskusi vzpostaviti povezavo. Uporabno za SSH: sudo ufw limit OpenSSH namesto allow. Ukrep je grob (šteje povezave, ne neuspelih prijav); fail2ban (lekcija 5.3) je natančnejši.

Ista pravila v nftables

ufw v ozadju piše pravila netfilter. Če želite delati brez ufw, sami napišete datoteko nftables. Na Debianu je to /etc/nftables.conf, naložite pa jo s storitvijo 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;
    }
}

Berite jo tako. Tabela se imenuje filter in je iz družine inet: ena tabela za IPv4 in IPv6 hkrati, tako da IPv6 ne morete pozabiti. V verigi input je politika drop. Nato: odgovori na že vzpostavljene povezave smejo nazaj (established,related), vse na povratni zanki (loopback) je dovoljeno, ICMP je dovoljen (potreben med drugim za IPv6 in za sporočila o napakah glede velikosti paketov), dovoljena pa so tudi vrata 22, 80 in 443.

anna@web1:~$ sudo nft -c -f /etc/nftables.conf    # preverjanje brez nalaganja
anna@web1:~$ sudo systemctl enable --now nftables
anna@web1:~$ sudo nft list ruleset

Uporabite bodisi ufw bodisi lastno datoteko nftables, ne obojega: oba pišeta v isti netfilter in si lahko pravila medsebojno ovirata.

Pred čim Vas požarni zid ne ščiti

  • Storitve, ki jih sami dovolite. Vrata 443 so odprta za Vaše spletno mesto, zato je ranljivost v spletnem mestu povsem dosegljiva. Požarni zid ščiti samo zaprta vrata.
  • Docker. Ko z Dockerjem objavite vrata (-p 5432:5432), Docker nastavi lastna pravila netfilter, ki promet preusmerijo, preden začnejo veljati pravila ufw. Dokumentacija Dockerja dobesedno pravi, da se Docker in ufw ne razumeta dobro. Vrata vsebnika so lahko torej od zunaj odprta, čeprav jih ufw status ne prikaže. Rešitev (objava na 127.0.0.1) spoznate v lekciji 9.3.
  • Odhodni promet. Z "allow outgoing" lahko vdrt program pošilja kamorkoli. Za večino majhnih strežnikov je to sprejemljiva izbira; stroga okolja omejujejo tudi odhodni promet.

Požarni zid Vašega ponudnika

Mnogi ponudniki imajo tudi požarni zid v omrežju, pred Vašim strežnikom, ki ga nastavite v nadzorni plošči za stranke (včasih se imenuje "cloud firewall" ali "security group"). To je odlična dodatna plast in deluje tudi, če na samem strežniku kaj nastavite narobe. Vendar ne nadomesti požarnega zidu na strežniku: če strežnik preselite ali zamenjate ponudnika, ne gre z Vami, in ga ne ponuja vsak ponudnik. Zato imejte vedno požarni zid tudi na samem strežniku.

Na AlmaLinux in Rocky Linux

Tam je privzeto vklopljen firewalld, ki deluje z conami. Najpomembnejši ukazi:

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

Brez --permanent sprememba velja le do naslednjega ponovnega zagona; z --permanent pa šele po --reload. SSH je v privzeti coni že odprt.

V praksi

Če se na VPS pri WebOké vseeno zaklenete ven, na zaslonu VPS odprite konzolo, se prijavite in izklopite požarni zid (ufw disable) ali razveljavite zadnje pravilo. Pri drugih ponudnikih se ta zasilni vhod prav tako imenuje konzola, VNC ali rescue. Vedite, kje je ta gumb, preden ga potrebujete.

Povzetek

  • Požarni zid je Vaša druga plast po načelu "poslušaj samo, kjer je treba"; nftables je orodje v jedru, ufw preprosta plast nad njim.
  • Začnite z default deny incoming, dovolite SSH pred ufw enable, preizkusite z drugo sejo in poznajte konzolo svojega ponudnika.
  • Preverite, da ufw pokriva tudi IPv6 (IPV6=yes); v nftables to naenkrat stori družina inet.
  • deny od zunaj pokaže "filtrirano", reject pokaže "zaprto"; limit zavira ponavljajoče se povezave.
  • Vrata Dockerja gredo mimo ufw (lekcija 9.3); požarni zid ponudnika je dodatna plast, ne nadomestilo.

Kviz

1. V kakšnem vrstnem redu prvič vklopite ufw na strežniku, na katerega ste prijavljeni prek SSH?



2. Po ufw enable Vaše spletno mesto prek IPv4 ne deluje več, SSH pa deluje. Kaj je najverjetnejši vzrok?



3. Z Dockerjem objavite vrata 5432 vsebnika s podatkovno bazo. ufw status ne prikaže pravila za 5432. Je podatkovna baza dosegljiva od zunaj?



4. Zakaj primer nftables uporablja tabelo iz družine inet?



5. Vaš ponudnik ima v nadzorni plošči za stranke omrežni požarni zid. Ali potem še potrebujete požarni zid na strežniku?



Naloga

Naloga O5.2: Nastavitev Vašega požarnega zidu. Na svojem strežniku vklopite požarni zid z ufw (ali nftables ali firewalld na AlmaLinux/Rocky): privzeto vse dohodno zaprto, SSH in to, kar resnično še potrebujete. Preizkusite z drugo sejo, preverite, ali je pokrit tudi IPv6, in od zunaj z nc poglejte, ali so nedovoljena vrata zaprta ali filtrirana. Izpolnite kontrolni seznam in prilepite svoj ufw status verbose (ali nft list ruleset); pri vseh odprtih vratih navedite, čemu so namenjena.

Naloga O5.2: Nastavitev Vašega požarnega zidu

To nalogo opravite sami; nihče je ne pregleda. Odkljukajte, kar ste naredili, in nalogo označite kot opravljeno.



Vaše kljukice in zapiski ostanejo samo v tem brskalniku, nikamor jih ne pošiljamo. Če ste prijavljeni, v Moji tečaji shranimo samo podatek, da ste nalogo opravili.

Za nadaljnje branje

Trenutek…

Nastavite svoje domene

Za vsako domeno uredite imenske strežnike, povezavo z gostovanjem in kdo bo imetnik.

Nalaganje Vaših domen…