Salt la conținut

Setări cookie-uri

Alegeți pentru fiecare tip ce cookie-uri permiteți. Puteți modifica oricând alegerea prin Setări cookie-uri, în partea de jos a fiecărei pagini. Declarație de confidențialitate

Necesare

Mereu active

Necesare pentru autentificare, pentru păstrarea coșului și pentru a vă reține alegerile. Acestea sunt mereu active.

Ce cookie-uri?
  • weboke_sessie, weboke_klant, weboke_remember: sesiunea și menținerea autentificării
  • weboke_basket: coșul de cumpărături
  • wkBtwIncl: afișarea prețurilor cu sau fără TVA
  • wok_cookies: alegerea privind cookie-urile, 12 luni

Măsoară ce reclamă duce la o vizită sau o comandă, ca să nu plătim pentru reclame care nu aduc nimic.

Ce cookie-uri?
  • Google Ads prin Google Tag Manager (_gcl_au, _gcl_aw), până la 90 de zile
  • OpenAI Ads, reclame în ChatGPT
  • wok_aff: prin ce partener ați ajuns la noi (program de afiliere), 60 de zile

4,6

Țară și limbă

Fiecare țară are propriul site, cu prețurile și TVA-ul pentru țara respectivă.

Vedeți

Un firewall cu ufw și nftables

Modulul 5: Protejarea rețelei · Timp de citire: 12 minute

Obiectivul lecției: După această lecție veți putea configura un firewall care permite doar ce este necesar, pentru IPv4 și IPv6, fără să vă blocați propriul acces, și veți ști împotriva căror lucruri nu vă protejează un firewall pe server.

Noțiuni cheie: filtru de pachete, netfilter, nftables, iptables-nft, ufw, politică implicită, allow, deny, reject, limit, IPv6 în ufw, firewall-ul furnizorului, firewalld, Docker și firewall-ul

Ce face un firewall

Un firewall pe serverul dumneavoastră este un filtru de pachete: pentru fiecare pachet de rețea care sosește, consultă o listă de reguli și decide dacă îl lasă să treacă. În Linux, acest filtru se află în kernel și se numește netfilter. Îl configurați cu ajutorul unui program:

  • nftables (comanda nft) este instrumentul actual. Debian îl folosește implicit începând cu Debian 10.
  • iptables este instrumentul vechi. Pe sistemele moderne, iptables este de obicei o traducere către nftables (iptables-nft), astfel încât ghidurile vechi încă funcționează.
  • ufw (Uncomplicated Firewall) este un strat simplu deasupra, prezent implicit pe Ubuntu și instalabil cu o singură comandă pe Debian. Pentru un singur server, ufw este cea mai simplă alegere. Această lecție folosește ufw și arată apoi cum arată aceleași reguli în nftables.

Un firewall este al doilea dumneavoastră strat de apărare. Primul este ca serviciile să asculte doar pe adresa corectă (lecția 5.1). Împreună, ele fac ca o greșeală într-un strat să nu însemne imediat o ușă deschisă.

Mai întâi: cum reveniți dacă ceva nu merge?

Greșeala clasică: porniți firewall-ul, uitați să permiteți SSH, iar conexiunea se întrerupe. Atunci nu mai puteți accesa serverul prin SSH. Înainte de a începe:

  1. Aflați cum deschideți consola furnizorului dumneavoastră (lecția 1.2). Aceasta funcționează în afara rețelei, deci și atunci când firewall-ul blochează totul. Acolo vă autentificați și tastați ufw disable.
  2. Faceți un snapshot dacă aveți îndoieli.
  3. Păstrați deschisă sesiunea SSH curentă și testați cu o a doua sesiune.

ufw în cinci pași

Configurarea unui firewall cu ufw 1:07

Pasul 1: instalarea și alegerea politicii implicite.

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'

Politica implicită se aplică pentru tot ce nu are o regulă. "Deny incoming" înseamnă: tot ce intră este interzis, cu excepția a ceea ce permiteți ulterior. Aceasta este singura bază sigură. Traficul de ieșire (serverul dumneavoastră care descarcă actualizări) îl permiteți.

Pasul 2: permiteți SSH, înainte de a porni firewall-ul.

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

OpenSSH este un profil de aplicație pe care ufw îl cunoaște (corespunde portului 22/tcp). Dacă SSH rulează pe alt port, folosiți numărul: sudo ufw allow 2222/tcp. Observați "Rules updated (v6)": ufw creează regula și pentru IPv6. Face acest lucru deoarece în /etc/default/ufw se află setarea IPV6=yes, care este valoarea implicită. Verificați acest lucru; dacă este setată la no, firewall-ul dumneavoastră se aplică doar pentru IPv4.

Pasul 3: ce mai aveți nevoie.

anna@web1:~$ sudo ufw allow 80/tcp
anna@web1:~$ sudo ufw allow 443/tcp
anna@web1:~$ sudo ufw allow 443/udp       # doar dacă folosiți HTTP/3

Puteți limita o regulă la o singură adresă sursă, de exemplu un port de administrare accesibil doar de la birou:

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

Pasul 4: pornirea.

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

Pasul 5: verificarea. Deschideți o a doua fereastră și autentificați-vă din nou. Dacă reușiți, SSH este configurat corect. Apoi verificați regulile:

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)

Ștergerea unei reguli se face prin numere: sudo ufw status numbered și apoi sudo ufw delete 3.

deny, reject și limit

  • deny aruncă pachetul în tăcere: din exterior vedeți "filtrat" (lecția 5.1).
  • reject trimite înapoi un refuz: din exterior vedeți "închis". Este mai elegant pentru propriile servicii, dar dezvăluie că există un server.
  • limit permite o conexiune, dar blochează o adresă care încearcă să se conecteze de șase ori sau mai mult în 30 de secunde. Util pentru SSH: sudo ufw limit OpenSSH în loc de allow. Este o metodă grosieră (numără conexiunile, nu autentificările eșuate); fail2ban (lecția 5.3) este mai precis.

Aceleași reguli în nftables

În spate, ufw scrie reguli netfilter. Dacă doriți să lucrați fără ufw, scrieți singur un fișier nftables. Pe Debian acesta se află în /etc/nftables.conf și îl încărcați cu serviciul 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;
    }
}

Citiți-l astfel. Tabelul se numește filter și aparține familiei inet: un singur tabel pentru IPv4 și IPv6 în același timp, astfel încât nu puteți uita IPv6. În lanțul input, politica este drop. Apoi: răspunsurile la conexiunile deja existente pot reveni (established,related), tot ce este pe loopback este permis, ICMP este permis (necesar, printre altele, pentru IPv6 și pentru mesajele de eroare privind dimensiunea pachetelor), iar porturile 22, 80 și 443 sunt permise.

anna@web1:~$ sudo nft -c -f /etc/nftables.conf    # verificare fără încărcare
anna@web1:~$ sudo systemctl enable --now nftables
anna@web1:~$ sudo nft list ruleset

Folosiți fie ufw, fie un fișier nftables propriu, nu pe amândouă: ele scriu în același netfilter și își pot încurca reciproc regulile.

Împotriva a ce nu vă protejează firewall-ul

  • Serviciile pe care le permiteți chiar dumneavoastră. Portul 443 este deschis pentru site-ul dumneavoastră; o vulnerabilitate în site rămâne deci accesibilă. Firewall-ul protejează doar porturile închise.
  • Docker. Când publicați un port cu Docker (-p 5432:5432), Docker își setează propriile reguli netfilter, care redirecționează traficul înainte ca regulile ufw să se aplice. Documentația Docker spune textual că Docker și ufw nu se înțeleg bine. Un port de container poate fi deci deschis din exterior, în timp ce ufw status nu îl afișează. Soluția (publicarea pe 127.0.0.1) o învățați în lecția 9.3.
  • Traficul de ieșire. Cu "allow outgoing", un program compromis poate comunica oriunde. Pentru majoritatea serverelor mici aceasta este o alegere acceptabilă; mediile stricte limitează și traficul de ieșire.

Firewall-ul furnizorului dumneavoastră

Mulți furnizori au și un firewall în rețea, în fața serverului dumneavoastră, pe care îl configurați în panoul de client (numit uneori "cloud firewall" sau "security group"). Acesta este un strat suplimentar excelent și funcționează chiar dacă greșiți ceva pe server. Dar nu înlocuiește firewall-ul de pe server: dacă mutați serverul sau schimbați furnizorul, acesta nu vine cu dumneavoastră, iar nu orice furnizor îl oferă. De aceea, păstrați întotdeauna un firewall pe serverul propriu-zis.

Pe AlmaLinux și Rocky Linux

Acolo, firewalld este activ implicit, cu zone. Cele mai importante comenzi:

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

Fără --permanent, o modificare se aplică doar până la următoarea repornire; cu --permanent, abia după --reload. SSH este deja deschis în zona implicită.

În practică

Dacă totuși vă blocați accesul pe un VPS la WebOké, deschideți consola în ecranul VPS-ului, vă autentificați și opriți firewall-ul (ufw disable) sau anulați ultima regulă. La alți furnizori, această intrare de urgență se numește tot consolă, VNC sau rescue. Aflați unde se află acel buton înainte să aveți nevoie de el.

Rezumat

  • Un firewall este al doilea strat după "ascultați doar unde este necesar"; nftables este instrumentul din kernel, ufw un strat simplu deasupra.
  • Începeți cu default deny incoming, permiteți SSH înainte de ufw enable, testați cu o a doua sesiune și cunoașteți consola furnizorului dumneavoastră.
  • Verificați ca ufw să acopere și IPv6 (IPV6=yes); în nftables, familia inet face acest lucru dintr-o dată.
  • deny apare din exterior ca "filtrat", reject apare ca "închis"; limit frânează conexiunile repetate.
  • Porturile Docker ocolesc ufw (lecția 9.3); firewall-ul furnizorului este un strat suplimentar, nu un înlocuitor.

Test (quiz)

1. În ce ordine porniți ufw pentru prima dată pe un server la care sunteți conectat prin SSH?



2. După ufw enable, site-ul dumneavoastră nu mai funcționează prin IPv4, dar SSH funcționează. Care este cauza cea mai probabilă?



3. Publicați cu Docker portul 5432 al unui container de bază de date. ufw status nu afișează nicio regulă pentru 5432. Este baza de date accesibilă din exterior?



4. De ce folosește exemplul nftables un tabel din familia inet?



5. Furnizorul dumneavoastră are un firewall de rețea în panoul de client. Mai aveți nevoie de un firewall pe server?



Exercițiu

Exercițiul O5.2: Configurarea firewall-ului dumneavoastră. Porniți pe serverul dumneavoastră un firewall cu ufw (sau nftables, sau firewalld pe AlmaLinux/Rocky): implicit tot traficul de intrare închis, SSH și ce mai aveți cu adevărat nevoie. Testați cu o a doua sesiune, verificați dacă IPv6 este acoperit și verificați din exterior cu nc dacă un port nepermis este închis sau filtrat. Completați lista de verificare și lipiți rezultatul ufw status verbose (sau nft list ruleset); indicați pentru fiecare port deschis la ce folosește.

Exercițiul O5.2: Configurarea firewall-ului dumneavoastră

Acest exercițiu îl faceți singur; nimeni nu îl verifică. Bifați ce ați făcut și marcați exercițiul ca finalizat.



Bifele și notițele dumneavoastră rămân doar în acest browser; nu le trimitem nicăieri. Dacă sunteți autentificat, păstrăm în Cursurile mele doar faptul că ați finalizat exercițiul.

Lecturi suplimentare

Un moment…

Configurați domeniile

Stabiliți pentru fiecare domeniu nameserverele, legătura cu hostingul și cine devine titularul.

Se încarcă domeniile…