Nel corso dell'articolo TLI risponde: devo installare un firewall su Linux/Ubuntu? abbiamo parlato delle ragioni per cui molte distribuzioni Linux non attivino di default alcun firewall. Nonostante Ubuntu sia una di queste, un potente strumento per la gestione del traffico di rete chiamato Uncomplicated Firewall (ufw) è incluso ed immediatamente disponibile a chiunque desideri aggiungere una protezione in più al proprio PC o server. In questa guida vederemo dunque come procedere per attivare e configurare il firewall di Ubuntu

Guida rapida ufw - Come attivare/configurare firewall Ubuntu Desktop/Server linea comando: aprire porte, bloccare connessioni indirizzi IP - Schermata del 2016-11-06 22-03-55

Nel presente articolo vederemo nello specifico come configurare il firewall di Ubuntu tramite linea di comando. La procedura funziona sia con Ubuntu Desktop, sia con Ubuntu Server. Se però state impiegando un ambiente desktop, potreste preferire un tool ad interfaccia grafica:

» Leggi: Configurare il firewall di Ubuntu (ufw) tramite interfaccia grafica: guida semplice a Gufw

Le indicazioni fornite riguardano il pacchetto ufw, installato di default su Ubuntu. Per quanto riguarda la distribuzione CentOS, invece:

» Leggi: Aprire le porte sul firewall di Linux CentOS - guida rapida a firewalld

Per la trattazione equivalente incentrata sui sistemi Windows:

» Leggi: Guida: come aprire le porte su Windows Firewall

Passo 1: Aprire il terminale

Se state lavorando con Ubuntu Server, siete già davanti alla linea di comando, quindi andate oltre. Se però desiderate attivare il firewall su Ubuntu Desktop -l'edizione "regolare" per PC-, cliccate sul pulsante con i 3x3 punti in basso a sinistra e cercate terminale per lanciare rapidamente l'omonima applicazione

Guida rapida ufw - Come attivare/configurare firewall Ubuntu Desktop/Server linea comando: aprire porte, bloccare connessioni indirizzi IP - linux apri terminale

» Leggi anche: Come aprire il terminale di Ubuntu

Passo 2: Attivare il Firewall di Ubuntu

Come ricordato, il firewall di Ubuntu è inattivo di default. Per attivarlo, è sufficiente impartire

sudo ufw enable

Digitate la password seguita da Invio e dovreste ricevere un messaggio di conferma: Firewall attivo e abilitato all'avvio del sistema

Guida rapida ufw - Come attivare/configurare firewall Ubuntu Desktop/Server linea comando: aprire porte, bloccare connessioni indirizzi IP - Schermata del 2016-11-06 22-03-55

Ricordate che, in qualsiasi momento, potete visualizzare lo stato del firewall con

systemctl status ufw

In caso si legga, fra le altre informazioni, anche la dicitura Active in verde, significa che il software di sicurezza è in esecuzione.

In questo momento, il sistema è "blindato", poiché ogni connessione in ingresso viene immediatamente bloccata. Se, dunque, impieghiamo software di filesharing peer-to-peer come BitTorrent oppure eroghiamo servizi tramite un server web, dobbiamo "aprire" le specifiche porte, ovvero renderle contrattabili dai client esterni.

Passo 3: Aprire le porte sul firewall con Ubuntu

Per far sì che una porta locale sia raggiungibile dai client remoti impartiamo un comando simile a questo:

sudo ufw allow 21/tcp

Il numero indica, ovviamente, la porta che si desidera aprire. In questo esempio, ho aperto la 21 (server FTP).

Otterrete la risposta Regola aggiunta due volte, la seconda delle quali con il suffisso (v6): è normale sia così (brevemente: si tratta della stessa impostazione, con una regola per il traffico IPv4 e una per IPv6)

Guida rapida ufw - Come attivare/configurare firewall Ubuntu Desktop/Server linea comando: aprire porte, bloccare connessioni indirizzi IP - Schermata del 2016-11-06 22-06-37

È possibile anche specificare un intervallo di porte. Per aprire le 100 porte comprese fra 2121 e 2221 (estremi inclusi), lanciare:

sudo ufw allow 2121:2221/tcp

Possiamo anche esplicitare i numeri di porta separandoli con virgole:

sudo ufw allow 137,138/udp (a cosa serve?)

Sebbene non sia quasi mai necessario, con gli stessi comandi si regolano anche le porte UDP. Basta specificare, appunto, /udp al posto di /tcp. Se non viene indicato nessuno dei due, il firewall crea una regola unica, valida sia per le porte TCP, sia per quelle UDP.

Passo 4: Attenzione! Aprire la porta 22 (SSH)

È bene ricordare che, contrariamente a molti altri strumenti per la configurazione del firewall in ambiente Linux, le regole create con ufw vengono immediatamente salvate in modo persistente, per poi essere ricaricate in automatico ad ogni riavvio. Se state lavorando ad un server remoto via SSH, non dimenticate quindi di aprire la porta appropriata, o rimarrete chiusi fuori! Per quanto appena esposto, il comando è

sudo ufw allow 22/tcp

Ancora meglio: probabilmente vorremo consentire la connessione alla porta 22 solo quando arriva da un determinato indirizzo IP (il nostro!). In tal caso, il comando diventa:

ufw allow from 151.141.100.59 to any port 22

Attenzione, ovviamente, a sostituire l'indirizzo IP di esempio con quello reale e a non dimenticare che la maggior parte dei fornitori di connettività (ISP) utilizza indirizzi IP dinamici, quindi è probabile che che l'indirizzo IP appena autorizzato non sia più associato a noi dopo pochi giorni.

Passo 5: Visualizzare le regole in uso

Per visualizzare le regole attualmente in uso, impartire:

sudo ufw status numbered

Guida rapida ufw - Come attivare/configurare firewall Ubuntu Desktop/Server linea comando: aprire porte, bloccare connessioni indirizzi IP - Schermata del 2016-11-11 22-37-13

Il parametro numbered è molto utile (e, francamente, non capisco perché non sia sott'inteso!): se presente, viene infatti mostrata una colonna aggiuntiva (la prima) che indica fra parentesi quadre un numero progressivo associato ad ogni regola. Specificando questo numero nei comandi a seguire, potremmo quindi "selezionare" in modo inequivocabile una determinata regola, magari per cancellarla.

Nell'immagine precedente, 1 indica la regola 21/tcp, 2 l'intervallo di porte creato ai passi precedenti e 3 l'apertura della porta SSH. Le tre successive, come già spiegato, sono le corrispondenze per IPv6.

Azione indica invece il comportamento del firewall: generalmente, avremo ALLOW (consenti) e IN (connessione in ingresso).

Da mostra invece la sorgente della connessione: in questo caso abbiamo Anywhere (ovunque), ad indicare che la regola viene sempre applicata indipendentemente dall'origine. Ai passi successivi creeremo però regole di blocco specifiche per determinati indirizzi IP: la colonna Da rispecchierà questa specificità.

Passo 6: Eliminare una regola

Per eliminare una qualsiasi regola dal firewall basta impartire:

sudo ufw --force delete 1

Il numero 1 a fine comando rappresenta il numero di regola che vogliamo eliminare, così come mostrato tra parentesi quadre nella prima colonna dal comando sudo ufw status numbered trattato al passo precedente. Notate però che la corrispondente regola IPv6 non viene rimossa automaticamente: è quindi necessario lanciare nuovamente il comando specificando il suo "numero".

Ricordate che la numerazione viene ricalcolata dopo ogni cancellazione. Eliminando la regola 1, quindi, quella che precedentemente era 2 diventa 1, 3 diventa 2 eccetera.

L'uso di --force è solo una comodità per saltare la richiesta di conferma.

Passo 6 alternativo: Un altro modo per eliminare una regola

Se, per qualsiasi motivo, l'uso del numero progressivo come "selezionatore" non vi piace, sappiate che potete eliminare una regola anche descrivendola espressamente. L'istruzione, ad esempio, potrebbe essere:

sudo ufw delete allow 21/tcp

Basta dunque usare lo stesso comando usato per la creazione della regola, ma aggiungendo il parametro delete prima di allow. Il numero di porta, di nuovo, va in fondo. In questo caso, la corrispondete regola (v6) viene rimossa automaticamente.

Notate che dovete specificare la porta esattamente come riportata nella colonna A della tabella visualizzabile con il comando status (v. paragrafo precedente). Di conseguenza, se la regola viene mostrata con il suffisso /tcp (come 21/tcp) dovete specificarlo anche qui. Se invece non è presente alcun suffisso, non mettetelo nemmeno nel comando di eliminazione.

Passo 7: Bloccare completamente le connessioni da parte di un indirizzo IP

Avete identificato qualcuno che tenta di attaccare il vostro sistema? per far sì che il firewall blocchi sul nascere ogni suo ulteriore tentativo di comunicazione -a prescindere da ogni ulteriore regola già presente- basta lanciare:

sudo ufw insert 1 deny from 103.230.84.239 to any

L'indirizzo dello scocciatore va, ovviamente, fornito al posto di quello dell'esempio (103.230.84.239, ovvero uno degli IP presenti nella blocklist del malware ZeuS)

Guida rapida ufw - Come attivare/configurare firewall Ubuntu Desktop/Server linea comando: aprire porte, bloccare connessioni indirizzi IP - Schermata del 2016-11-12 09-48-48

È molto importante ricordare che il firewall scorre l'elenco delle regole dall'alto verso il basso (legge quelle "più vecchie" per prime) e si interrompe alla prima istruzione adeguata a gestire la richiesta. Di conseguenza, se avete dapprima aperto la porta 80 (sudo ufw allow 80/tcp) e poi provate a bloccare ogni connessione da parte di un aggressore, lo scocciatore potrà comunque continuare a connettersi alla porta 80, poiché questa, essendo stata inserita per prima, viene applicata e interrompe ogni ulteriore valutazione. Per gestire questa problematica dobbiamo inserire le regole di blocco di determinati indirizzi IP sempre in prima posizione (parametro insert 1 presente nel comando mostrato ad inizio paragrafo) per evitare che ulteriori istruzioni già presenti abbiano la priorità. Per questo motivo, come si vede anche nello screenshot precedente, le regole di blocco puntuali sono sempre "più in alto" nella lista.

Nell'improbabile caso in cui si desideri limitare il blocco delle connessioni da parte dello scocciatore ad una specifica porta, continuando ad accettare la comunicazione sulle altre, basta aggiungere un ulteriore parametro alla fine:

sudo ufw insert 1 deny from 103.230.84.239 to any port 80

Per eliminare le regole di blocco per un determinato indirizzo IP si usano gli stessi comandi già visti ai passi precedenti.

Passo 8: Resettare il firewall di Ubuntu

Per eliminare in un colpo solo l'intera configurazione e ripristinare la situazione "pulita" originale basta impartire:

sudo ufw --force reset

Da notare che, così facendo, ufw crea automaticamente una copia di sicurezza delle regole correntemente in uso nella cartella /etc/ufw/.

Il firewall viene altresì disabilitato: se lo desiderate, dovete quindi attivarlo di nuovo come illustrato ad inizio articolo.

L'uso di --force è solo una comodità per saltare la richiesta di conferma.

Passo 9: Disattivare il firewall di Ubuntu

Sebbene usato di rado, è bene ricordate il comando da impartire per disattivare completamente il firewall su Ubuntu, senza però perdere la configurazione corrente:

sudo ufw disable

Come conferma il messaggio Firewall fermato e disabilitato all'avvio del sistema, la modifica è immediata. Inoltre, così facendo il firewall non sarà più avviato ai successivi reboot.

Documentazione completa

In questo articolo abbiamo visto tutti i comandi più importanti per configurare il firewall di Ubuntu da linea di comando. ufw permette però di fare anche altro, come gestire i log delle connessioni, stabilire regole di default diverse, limitare il numero di connessioni per unità di tempo eccetera. Per maggiori informazioni si veda la documentazione ufficiale (man ufw).