In questi anni i temi della sicurezza e della privacy in rete hanno assunto una rilevanza sempre maggiore. Questo perché la nostra presenza online è aumentata esponenzialmente grazie alla miriade di servizi web che usiamo quotidianamente e che ormai sono indispensabili. Non solo per le attività lavorative.
Uno dei principali strumenti per difendere i nostri device, oltre ad adottare comuni norme di buon senso e tenere alto il nostro livello di attenzione, è sicuramente il firewall.
Tutti i sistemi operativi più recenti sono dotati di uno strumento di questo tipo. Ci focalizzeremo ora sul firewall presente in Raspberry Pi OS. La distribuzione Linux dedicata alla nota board ARM.
Che cos'è un firewall
Prima di passare alla configurazione del firewall è bene chiarirne ruolo e natura, cosi da capirne a grandi linee il funzionamento.
Gran parte dei router integrano anche un firewall. Tali dispositivi in genere sono preimpostati dall'ISP di turno in modo tale da applicare regole di sicurezza per il traffico dati in entrata/uscita dalla nostra rete locale.
Possiamo pensare a computer e router come ad una casa piena di porte. Tramite questi ingressi le applicazioni scambiano dati con internet. Il firewall è sostanzialmente un "guardiano" che decide cosa fare entrare o uscire. Nel caso dei normali utenti domestici l'impostazione ideale è quella che garantisce un traffico in ingresso più ridotto possibile, cosi da prevenire possibili intrusioni.
In genere questo setting è lo standard nei firewall presenti sui nostri router. Tuttavia è possibile impostare regole differenti in base al device di riferimento, sfruttando il firewall presente nel sistema operativo.
Installazione e prima configurazione di Raspberry Pi OS
Diamo inizio a questo tutorial andando ad installare Raspberry Pi OS all'interno della board. Se avete già configurato il device potete saltare questa parte e recarvi direttamente nella sezione chiamata "Impostare il firewall su Raspberry Pi OS".
Prima di tutto dobbiamo reperire Raspberry Pi Imager. Questo imaging tool esegue il flash della distribuzione in una microSD, quindi avviamo il software per ritrovarci davanti a tale schermata:
Selezioniamo l'opzione "Choose Device" cosi da impostare il modello della board che stiamo utilizzando. Tramite la voce "Choose OS" si va invece ad indicare al tool l'edizione di Raspberry Pi OS. Per i modelli più recenti consigliamo quella a 64bit. Successivamente da "Choose Storage" selezioniamo la nostra microSD.
Pigiamo adesso sul bottone "Next" e poi su "EDIT SETTING". Da tale tab si può configurare l'accesso tramite SSH, l'hostname, la timezone ed il keyboard layout.
Confermiamo i setting inseriti premendo su "YES" e attendiamo pazientemente il termine del processo d'installazione.
Impostare ed abilitare il firewall su Raspberry Pi OS
Siamo pronti per avviare la configurazione del firewall su Raspberry Pi OS. Se avete scelto di impostare l'accesso tramite SSH alla board potrete fare tutto dal vostro computer tramite bash.
In alternativa dovete connettere a Raspberry Pi tutte le periferiche, ovvero mouse, tastiera e monitor. Oltre ovviamente ad usare un cavo di rete, o sfruttare la connessione WIFI, per comunicare con il router.
Una volta entrati nel sistema operativo apriamo il terminale ed assicuriamoci che tutti i pacchetti presenti siano aggiornati alle ultime release stabili disponibili nei repository della distribuzione. Per tale operazione sfruttiamo la CLI di APT e digitiamo:
sudo apt update && sudo apt upgrade -y
Successivamente installiamo il programma UFW (Uncomplicated Firewall):
sudo apt install ufw
Questo software è stato progetto per semplificare la gestione di iptables, il firewall adottato da gran parte dei sistemi Linux. UFW può essere considerato come una GUI da riga di comando che dà accesso rapido e semplificato alle configurazioni di iptables.
iptables è un tool avanzato e complesso. Per questo non è facilmente accessibile agli utenti meno esperti. In questa guida abbiamo preferito sfruttare UFW cosi da offrire a tutti un ventaglio di comandi molto semplice.
Di base UFW imposta iptables per bloccare tutte le connessioni in entrata. Tale regola però non diventa operativa subito dopo l'installazione del pacchetto. UFW deve essere infatti avviato manualmente. Quindi abbiamo tutto il tempo di generare delle regole dedicate per le porte che ci interessa tenere aperte. Ecco come aprire una porta:
sudo ufw allow NUMEROPORTA
Questo comando andrà ad aprire completamente la porta che desideriamo. Ad esempio possiamo consentire tutto il traffico sulla porta 80
usata da diversi Web server:
sudo ufw allow 80
Oppure alla porta 22
sfruttata da SSH:
sudo ufw allow 22
Inoltre l'utente può anche filtrare le regole in base al protocollo di riferimento:
sudo ufw allow NUMEROPORTA/PROTOCOLLO
sudo ufw allow 22/tcp
sudo ufw allow 80/udp
In base ai servizi di cui necessitate dovete generare le regole corrette e selezionare le porte che è possibile utilizzare. In genere il numero di porta viene indicato all'interno del file di configurazione di un determinato programma. Per proporre un esempio concreto: se utilizziamo Raspberry Pi come server per le self-hosted App con Docker, la porta viene indicata all'interno del Docker compose file.
Dopo aver terminato le nostre configurazioni possiamo abilitare le modifiche scrivendo questo in bash:
sudo ufw enable
Si dovrebbe ricevere un output come il seguente:
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Assicuriamoci di aver aperto almeno la porta 22
, cioè quella di SSH. Cosi in caso di conflitti con altri programmi e porte si potrà intervenire e creare una regola ad hoc senza venire buttati fuori dalla sessione remota.
Rispondiamo ora affermativamente alla domanda di UFW cosi da ottenere questo risultato:
Firewall is active and enabled on system startup
Possiamo inoltre verificare le regole attive in questo modo:
sudo ufw status
Inoltre UFW può essere disabilitato in caso di problemi o ripensamenti:
sudo ufw disable