Vai al contenuto

Impostazioni cookie

Scelga per ogni tipo quali cookie consente. Può modificare la sua scelta in qualsiasi momento tramite Impostazioni cookie in fondo a ogni pagina. Informativa sulla privacy

Necessari

Sempre attivi

Servono per accedere, conservare il carrello e ricordare le sue scelte. Sono sempre attivi.

Quali cookie?
  • weboke_sessie, weboke_klant, weboke_remember: la sua sessione e la permanenza dell'accesso
  • weboke_basket: il suo carrello
  • wkBtwIncl: visualizzazione dei prezzi con o senza IVA
  • wok_cookies: la sua scelta sui cookie, 12 mesi

Misurano quale annuncio porta a una visita o a un ordine, così non paghiamo annunci che non funzionano.

Quali cookie?
  • Google Ads tramite Google Tag Manager (_gcl_au, _gcl_aw), fino a 90 giorni
  • OpenAI Ads, annunci in ChatGPT
  • wok_aff: tramite quale partner è arrivato da noi (programma di affiliazione), 60 giorni

4,6

Paese e lingua

Ogni paese ha il suo sito, con i prezzi e l'IVA di quel paese.

Vedi

Modulo 5 · 5.2

Un firewall con ufw e nftables

Modulo 5: Proteggere la rete · Tempo di lettura: 12 minuti

Obiettivo della lezione: Dopo questa lezione saprà configurare un firewall che lascia passare solo ciò che serve, per IPv4 e per IPv6, senza chiudersi fuori, e saprà da che cosa un firewall sul Suo server non La protegge.

Concetti chiave: filtro di pacchetti, netfilter, nftables, iptables-nft, ufw, policy predefinita, allow, deny, reject, limit, IPv6 in ufw, firewall del provider, firewalld, Docker e il firewall

Che cosa fa un firewall

Un firewall sul Suo server è un filtro di pacchetti: per ogni pacchetto di rete in arrivo consulta un elenco di regole e decide se può passare. In Linux questo filtro si trova nel kernel e si chiama netfilter. Lo si configura con un programma:

  • nftables (comando nft) è lo strumento attuale. Debian lo usa come predefinito da Debian 10.
  • iptables è lo strumento precedente. Sui sistemi moderni iptables è di solito una traduzione verso nftables (iptables-nft), in modo che le vecchie guide funzionino ancora.
  • ufw (Uncomplicated Firewall) è un semplice livello sovrapposto, presente di serie su Ubuntu e installabile con un solo comando su Debian. Per un singolo server ufw è la scelta più semplice. Questa lezione usa ufw e poi mostra come appaiono le stesse regole in nftables.

Un firewall è la Sua seconda linea di difesa. La prima è che i servizi siano in ascolto solo sull'indirizzo giusto (lezione 5.1). Insieme fanno sì che un errore in un livello non diventi subito una porta aperta.

Prima di tutto: come rientrare se qualcosa va storto?

L'errore classico: attiva il firewall, dimentica di consentire SSH e la connessione cade. A quel punto non può più accedere tramite SSH. Prima di iniziare:

  1. Sappia come aprire la console del Suo provider (lezione 1.2). Funziona al di fuori della rete, quindi anche se il firewall blocca tutto. Lì effettua l'accesso e digita ufw disable.
  2. Crei uno snapshot se ha dei dubbi.
  3. Tenga aperta la sessione SSH attuale e faccia la prova con una seconda sessione.

ufw in cinque passaggi

Passaggio 1: installare e scegliere la policy predefinita.

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'

La policy predefinita vale per tutto ciò per cui non esiste una regola. "Deny incoming" significa: tutto ciò che arriva è vietato, tranne ciò che consentirà in seguito. È l'unica base sicura. Il traffico in uscita (il Suo server che scarica gli aggiornamenti) lo consente.

Passaggio 2: consentire SSH, prima di attivare il firewall.

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

OpenSSH è un profilo applicativo che ufw conosce (corrisponde alla porta 22/tcp). Se SSH gira su un'altra porta, usi il numero: sudo ufw allow 2222/tcp. Noti "Rules updated (v6)": ufw crea la regola anche per IPv6. Lo fa perché in /etc/default/ufw è presente la riga IPV6=yes, che è l'impostazione predefinita. Lo verifichi: se è impostata su no, il Suo firewall vale solo per IPv4.

Passaggio 3: ciò che Le serve in più.

anna@web1:~$ sudo ufw allow 80/tcp
anna@web1:~$ sudo ufw allow 443/tcp
anna@web1:~$ sudo ufw allow 443/udp       # solo se usa HTTP/3

Può limitare una regola a un solo indirizzo di origine, ad esempio una porta di amministrazione accessibile solo dal Suo ufficio:

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

Passaggio 4: attivare.

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

Passaggio 5: verificare. Apra una seconda finestra ed effettui di nuovo l'accesso. Se funziona, SSH è configurato correttamente. Poi controlli le regole:

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)

Per rimuovere una regola si usano i numeri: sudo ufw status numbered e poi sudo ufw delete 3.

deny, reject e limit

  • deny scarta il pacchetto in silenzio: dall'esterno si vede "filtrata" (lezione 5.1).
  • reject rimanda indietro un rifiuto: dall'esterno si vede "chiusa". È più corretto per i Suoi servizi, ma rivela che c'è un server.
  • limit consente una connessione, ma blocca un indirizzo che tenta di connettersi sei o più volte entro 30 secondi. Utile per SSH: sudo ufw limit OpenSSH invece di allow. È un metodo grossolano (conta le connessioni, non gli accessi falliti); fail2ban (lezione 5.3) è più preciso.

Le stesse regole in nftables

Dietro le quinte ufw scrive regole netfilter. Se vuole lavorare senza ufw, scrive Lei stesso un file nftables. Su Debian si trova in /etc/nftables.conf e lo si carica con il servizio 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;
    }
}

Lo legga così. La tabella si chiama filter ed è della famiglia inet: un'unica tabella per IPv4 e IPv6 insieme, così non può dimenticare IPv6. Nella catena input la policy è drop. Poi: le risposte a connessioni già esistenti possono rientrare (established,related), tutto ciò che passa sul loopback è consentito, ICMP è consentito (necessario tra l'altro per IPv6 e per i messaggi di errore sulla dimensione dei pacchetti) e le porte 22, 80 e 443 sono consentite.

anna@web1:~$ sudo nft -c -f /etc/nftables.conf    # verificare senza caricare
anna@web1:~$ sudo systemctl enable --now nftables
anna@web1:~$ sudo nft list ruleset

Usi o ufw o un proprio file nftables, non entrambi: scrivono nello stesso netfilter e le loro regole possono ostacolarsi a vicenda.

Da che cosa il firewall non La protegge

  • Servizi che consente Lei stesso. La porta 443 è aperta per il Suo sito web; una falla nel sito è quindi raggiungibile normalmente. Il firewall protegge solo le porte chiuse.
  • Docker. Quando pubblica una porta con Docker (-p 5432:5432), Docker imposta proprie regole netfilter che deviano il traffico prima che si applichino le regole di ufw. La documentazione di Docker dice testualmente che Docker e ufw non vanno d'accordo. Una porta di un container può quindi essere aperta dall'esterno mentre ufw status non la mostra. La soluzione (pubblicare su 127.0.0.1) la vedrà nella lezione 9.3.
  • Traffico in uscita. Con "allow outgoing" un programma compromesso può collegarsi ovunque. Per la maggior parte dei piccoli server è una scelta accettabile; gli ambienti più rigorosi limitano anche il traffico in uscita.

Il firewall del Suo provider

Molti provider offrono anche un firewall nella rete, davanti al Suo server, che si configura nel pannello clienti (a volte chiamato "cloud firewall" o "security group"). È un ottimo livello aggiuntivo e funziona anche se sul server stesso commette un errore. Ma non sostituisce il firewall sul server: se sposta il server o cambia provider, non La segue, e non tutti i provider lo offrono. Mantenga quindi sempre un firewall sul server stesso.

Su AlmaLinux e Rocky Linux

Lì firewalld è attivo di serie, con le zone. I comandi principali:

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

Senza --permanent una modifica vale solo fino al riavvio successivo; con --permanent vale solo dopo --reload. SSH è già aperto nella zona predefinita.

In pratica

Se si chiude comunque fuori da un VPS di WebOké, apra la console nella schermata del VPS, effettui l'accesso e disattivi il firewall (ufw disable) oppure annulli l'ultima regola. Presso altri provider questo accesso di emergenza si chiama anch'esso console, VNC o rescue. Sappia dove si trova quel pulsante prima di averne bisogno.

Riepilogo

  • Un firewall è il Suo secondo livello dopo "restare in ascolto solo dove serve"; nftables è lo strumento del kernel, ufw un semplice livello sovrapposto.
  • Inizi con default deny incoming, consenta SSH prima di ufw enable, faccia la prova con una seconda sessione e conosca la console del Suo provider.
  • Verifichi che ufw copra anche IPv6 (IPV6=yes); in nftables la famiglia inet lo fa in un colpo solo.
  • deny dall'esterno risulta "filtrata", reject risulta "chiusa"; limit frena le connessioni ripetute.
  • Le porte Docker aggirano ufw (lezione 9.3); il firewall del Suo provider è un livello aggiuntivo, non un sostituto.

Quiz

1. In quale ordine attiva ufw per la prima volta su un server a cui è collegato tramite SSH?



2. Dopo ufw enable il Suo sito web non funziona più via IPv4, mentre SSH sì. Qual è la causa più probabile?



3. Pubblica con Docker la porta 5432 di un container di database. ufw status non mostra alcuna regola per la 5432. Il database è raggiungibile dall'esterno?



4. Perché l'esempio nftables usa una tabella della famiglia inet?



5. Il Suo provider offre un firewall di rete nel pannello clienti. Le serve ancora un firewall sul server?



Esercizio

Esercizio O5.2: Configurare il Suo firewall. Attivi sul Suo server un firewall con ufw (oppure nftables, o firewalld su AlmaLinux/Rocky): per impostazione predefinita tutto chiuso in entrata, SSH e ciò di cui ha davvero bisogno. Faccia la prova con una seconda sessione, verifichi che IPv6 sia coperto e controlli dall'esterno con nc che una porta non consentita risulti chiusa o filtrata. Compili la checklist e incolli il Suo ufw status verbose (o nft list ruleset); per ogni porta aperta indichi a che cosa serve.

Esercizio O5.2: Configurare il Suo firewall

Questo esercizio lo svolge da sé; nessuno lo verifica. Spunti ciò che ha fatto e segni l'esercizio come completato.



Le Sue spunte e note restano solo in questo browser; non le inviamo da nessuna parte. Se ha effettuato l'accesso, conserviamo in I miei corsi solo il fatto che ha svolto l'esercizio.

Per approfondire

Un momento…

Configuri i suoi domini

Per ogni dominio imposti i nameserver, il collegamento al suo hosting e chi ne diventa l'intestatario.

Caricamento dei suoi domini…