Configurazione del firewall UFW
In questo tutorial vedremo come installare, configurare e attivare il firewall UFW.
Cos'è UFW
Il kernel Linux fornisce il firewall Netfilter da sempre configurabile grazie alla suite Iptables che, pur essendo molto completa e configurabile, ha una curva di apprendimento molto elevata. Per ovviare al problema è nato UFW, acronimo di Uncomplicated FireWall, che altro non è che un front-end per Iptables. Si definisce front-end un tool (grafico e non) che permette di interagire con altro software.
Introduzione for dummies: gli indirizzi IP
Prima di addentrarci nei meandri di UFW un po' di ripasso.
Come sicuramente sapete (e se non lo sapete ve lo dico io perché sono prepotente) ogni device connesso ad una rete (locale e non) è munito di un indirizzo IP, cioè di una "chiave numerica" formata da quattro terzine di numeri che vanno da 1 a 255.
Vista la mole di reti locali presenti nell'universo conosciuto alcuni indirizzi sono stati classificati come privati, vanno da 192.168.0.0
a 192.168.255.255
. In una rete casalinga l'indirizzo IP viene assegnato in automatico dal router (grazie al servizio DHCP), di solito vanno da 192.168.0.1
a 192.168.0.255
ma da un po' è di moda utilizzare quelli del gruppo 192.168.1.*
. Si fa riferimento a tutti gli indirizzi della rete utilizzando 192.168.0.0/24
(o 192.168.1.0/24
).
Per completezza gli IP non locali si dividono poi fra dinamici e fissi. La maggior parte dei provider Internet assegnano indirizzi dinamici mentre le "reti serie" utilizzano IP fissi.
In questo momento Wind/3 ha assegnato al il mio smartphone l'indirizzo IP 151.37.67.23
(se siete curiosi di sapere a quale IP risponde la vostra macchina, o il vostro router, potete utilizzare il servizio Mio-IP )
Introduzione for dummies 2: Le porte
Un servizio di rete attivo per funzionare risponde ad una porta identificata da un numero (da 1 a 9999). Le porte più comuni sono:
- 21 server ftp
- 22 servizio ssh
- 25 server di posta
- 80 web server senza https
- 443 web server con https
- 631 il servizio di stampa cups, essendo un applicativo client/server, risponde ad una porta
- 5900 servizio VNC
Ad ogni porta può rispondere un solo servizio.
Un utente normale necessita di un firewall?
Se si usa il PC per lavorare/studiare senza aver aperto servizi raggiungibili dall'esterno (ssh, server web, ecc.) possiamo farne a meno, se invece usiamo la macchina come server (anche casalingo) secondo me risulta indispensabile. Esempio: a casa ho un Raspberry Pi 4 che in orario di ufficio è sempre online, vi ho attivato un server web e ho configurato l'applicativo Web Nextcloud. Netxtcloud, per chi non lo conoscesse, è un ottimo applicativo open source che permette di avere un file cloud simile Google Drive/Dropbox ma privato. In un caso come questo, anche se l'accesso è protetto da password, è buona norma filtrare la porta (in questo caso 443) altrimenti potenzialmente tutto il mondo può avere accesso a file privati. Ho configurato il mio UFW di modo che solo la rete locale e la rete dell'ufficio (che esce su Internet con un IP fisso) possa accedere alla macchina. Per il resto dell'universo il servizio è come se non esistesse.
Ovviamente quanto detto vale solo se non vivete all'interno di una qualsiasi serie TV. In quel mondo parallelo c'è sempre qualcuno in grado di scardinare qualsiasi firewall bendato e con le mani legate dietro la schiena, il qualcuno non è un nerd brufoloso (se lo è non ha più di 11 anni) ma una ragazza intelligente e sexy o un fusto da paura (dipende dal target della serie)
Installazione
UFW è presente nei repository della maggior parte delle distribuzioni moderne quindi possiamo installarlo tramite il gestore di pacchetti. Su Debian e derivate si usa semplicemente apt:
sudo apt install ufw
Configurazione
Una volta attivo UFW segue il principio del chiudi tutto e apri quello che serve, quindi dobbiamo preoccuparci solo delle porte che ci servono.
Apertura porte non condizionato
Con un semplice comando:
sudo ufw allow numero_porta
apriamo una porta per tutti. Nell'esempio abilitiamo l'universo all'uso della porta 22 (ovviamente la porta risponderà a tutti ma per accedere al servizio servirà ugualmente la password):
sudo ufw allow 22
Apertura porta condizionato
Se invece vogliamo che uno o più IP accedano ad una porta il comando è leggermente più complicato:
sudo ufw allow from indirizzo_ip to any port numero_porta
Se vogliamo abilitare ssh solo per l'IP associato al mio smartphone (inutile essendo un indirizzo dinamico quindi a scadenza):
sudo ufw allow from 151.37.67.23 to any port 22
Se invece vogliamo aprire la porta per tutta la nostra rete locale usiamo:
sudo ufw allow from 192.168.1.0/24 to any port 22
Aprire più porte contemporaneamente
Essendo UFW Uncomplicated non è possibile farlo con un solo comando ma serve un comando per ogni porta/indirizzo/rete.
Attiviamo il firewall
Una volta che abbiamo creato tutte le nostre regole possiamo attivare il firewall:
sudo ufw enable
Attenzione: Se accedete via ssh e decidete di filtrare la porta 22 potreste essere impossibilitati al login, consiglio quindi di fare una o più connessioni di prova prima di disconnettervi dalla sessione corrente.
Disattivare il firewall
In qualsiasi momento possiamo buttare giù il muro con un semplice comando:
sudo ufw disable
In che stato siamo
Una volta attivato il firewall possiamo vedere quali filtri abbiamo attivato:
sudo ufw status
Nel mio caso del mio Raspberry il comando risponde:
Status: active
To Action From
-- ------ ----
22 ALLOW xxx.xxx.xxx.xxx
22 ALLOW 192.168.1.0/24
443 ALLOW 192.168.1.0/24
443 ALLOW xxx.xxx.xxx.xxx
Ovviamente al posto delle x c'è un indirizzo IP valido. Per poter interagire con le registrazioni necessitiamo del numero identificativo:
sudo ufw status numbered
Cancellare una regola
Se vogliamo eliminare una regola possiamo farlo utilizzando il numero (reperito con il comando precedente):
sudo ufw delete numero_regola
Conclusioni
Con pochi semplici comandi abbiamo blindato la nostra macchina più semplice di così...