Un firewall è un software od un hardware costruito per filtrare lo scambio di dati via rete tra computer, in base a regole predefinite. I firewall hardware, comunemente contenuti nei modem/router di uso quotidiano, sono utilizzati per impedire accessi non autorizzati dall'Internet alla rete locale interna.
Quello che viene comunemente definito come personal firewall od host firewall, invece, è un programma installato sul computer, che controlla le comunicazioni in entrata ed in uscita dallo stesso, in base a regole definite dal suo utilizzatore. Esistono diverse tipologie di firewall, delle quali la più semplice - e quella di nostro interesse attuale - risulta la tipologia packet filtering, che accetta o scarta le connessioni TCP/IP in base agli indirizzi IP ed ai numeri di porta sorgente/destinatario. Non entra nel merito del contenuto del payload (protocolli applicativi).
Linux fornisce un sistema di filtraggio dei pacchetti molto potente, chiamato Netfilter, le cui regole vengono impostate utilizzando la suite di comandi (solamente testuali) iptables, che però richiedono una certa conoscenza del dominio. Netfilter interviene a livello dello scambio dati tra il kernel e le interfacce di rete e, conformemente alle regole impostate in tabelle, filtra o trasforma i pacchetti di dati in transito. Netfilter si avvale, in maniera gerarchica, dei moduli del kernel ip_tables, ip6_tables, arp_tables, ed ebtables, che agiscono sul livello dello stack di rete opportuno. I tool in user-space iptables, ip6tables, arptables ed ebtables vanno a configurare il comportamento degli omonimi kernel module mediante regole definite in forma appunto tabellare.
Uncomplicated Firewall (ufw) per le distribuzioni Linux Ubuntu mira a semplificare la logica descritta, fornendo semplici comandi di frontend per iptables, sempre da utilizzarsi via shell, e risulta assolutamente adatto a firewall di tipo personale per connessioni IPv4 o IPv6.
Ad esempio, i comandi seguenti settano, loggano e verificano una regola per la quale viene permesso tutto il traffico entrante limitatamente al servizio ssh (quindi porta 22):
$ sudo ufw allow ssh/tcp $ sudo ufw logging on $ sudo ufw enable $ sudo ufw status Firewall loaded To Action From -- ------ ---- 22:tcp ALLOW Anywhere
Notiamo infine che, al contrario di un firewall hardware di rete, essendo installato sul sistema che protegge, un personal firewall non è infallibile: potrebbe infatti essere disabilitato da un qualche malware attivo sul sistema, malware che riesca comunque ad ottenere privilegi amministrativi.
ufw Frontends è un programma, scritto in Python e dall'utilizzo immediato, che implementa un frontend grafico per ufw - ovvero ufw Frontends risulta essere un frontend di ufw, che a sua volta è un frontend di iptables; utilizza PyGTK ed è costruito per utilizzare direttamente i moduli UFW di Python. ufw Frontends viene infine rilasciato quale software opensource con licenza GPLv3. Il progetto è quindi analogo e molto simile al già esistente Gufw.
Vanta una corrispondenza biunivoca con quanto gestibile da ufw via shell; è quindi possibile fare tutto ciò che è fattibile dallo stesso ufw (attivare o disabilitare il firewall, creare, modificare, spostare o rimuovere le regole, visualizzare report e via discorrendo) ed è possibile esportare le stesse regole create graficamente come set di comandi ufw, che risulta essere davvero una caratteristica importante.
Il programma può esser scaricato dalla pagina del progetto, ospitato su Google Code, sotto forma di pacchetto .deb per sistemi Ubuntu, oppure, sempre per il medesimo sistema operativo, sul progetto Launchpad è possibile ottenere un PPA, Personal Package Archive contenente, appunto, ufw Frontends.
Nel primo caso, al fine di installare il software sul sistema operativo Ubuntu, è necessario scaricare il pacchetto DEB, cliccare due volte sul file e acconsentire all'installazione dello stesso (inserendo come sempre la propria password, al fine di poter compiere le azioni amministrative previste), oppure, da shell dare:
sudo dpkg -i <pacchetto>
seguito, nel caso qualche dipendenza non sia soddisfatta, da sudo apt-get -f update, che tenterà di scaricare ed installare i pacchetti dipendenza.
Nel secondo caso, ovvero mediante PPA, dare:
sudo add-apt-repository ppa:baudm/ppa Executing: gpg --ignore-time-conflict --no-options --no-default-keyring --secret-keyring /etc/apt/secring.gpg --trustdb-name /etc/apt/trustdb.gpg --keyring /etc/apt/trusted.gpg --primary-keyring /etc/apt/trusted.gpg --keyserver keyserver.ubuntu.com --recv F8DAF736A0F5EEE030AE0B9CB00E04A9D58062FB gpg: richiesta della chiave D58062FB dal server hkp keyserver.ubuntu.com gpg: chiave D58062FB: chiave pubblica «Launchpad PPA for Darwin Bautista» importata gpg: Numero totale esaminato: 1 gpg: importate: 1 (RSA: 1) sudo apt-get update sudo apt-get install ufw-gtk apt-get clean
I comandi provvederanno ad inserire il repository correlato nelle software sources del sistema e a scaricare la chiave della PPA, quindi ad aggiornare le fonti e scaricare ed installare ufw Frontends. Ed infine a pulire la cache apt.
La procedura di cui sopra è valida solo se si disponde della versione 9.10 o superiori del sistema Canonical, altrimenti sarà necessario compiere ogni singolo passo manualmente; la prima cosa da fare sarà includere la PPA nei sorgenti software.
Inseriamo quindi la stringa:
deb http://ppa.launchpad.net/baudm/ppa/ubuntumain
ad esempio per Ubuntu 9.04:
deb http://ppa.launchpad.net/baudm/ppa/ubuntu jaunty main
in /etc/apt/sources.list, ad esempio mediante il comando:
sudo gedit /etc/apt/sources.list
e quindi aggiungiamo la software key D58062FB al sistema di pacchetti e ripetiamo i passi precedentemente trattati:
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys D58062FB sudo apt-get update sudo apt-get install ufw-gtk apt-get clean
ufw-frontends: un primo utilizzo di esempio
Una volta installato, sarà possibile lanciare il programma, che chiaramente richiede diritti amministrativi per funzionare, dal menu di amministrazione.
L'utilizzo tipico di un personal firewall su PC è quello di bloccare le connessioni al computer su porte non abilitate e/o per protocolli non usati, bloccare connessioni non desiderate che traggano origine dal PC verso l'esterno ed anche bloccare i ping (o altri pacchetti ICMP) in uscita, per "nascondersi" al mondo esterno.
Le regole che definiscono il comportamento del firewall vanno lette ed eseguite dallo stesso programma in sequenza, dalla prima all'ultima, ed è norma definire prima le regole di negazione dell'accesso per rilassare poi il comportamento del firewall mediante le regole di permesso.
Ad esempio, la prima regola dell'immagine seguente nega la connessione da qualsiasi dispositivo (Source = *) verso il computer dell'utente (127.0.0.1 = localhost, cioè host locale, con senso Direction = IN) per qualunque porta sorgente e destinazione e per qualsiasi protocollo (TCP o UDP).
La seconda regola, che deve necessariamente seguire la prima per ottenere il risultato desiderato, impone al firewall di accettare incondizionatamente tutte le connessioni verso l'host locale e verso la porta 80; nell'host locale di esempio è infatti in esecuzione un webserver che ascolta sulla well known port 80. Non si è ritenuto di dover creare log su queste connessioni TCP/IP.
Nell'immagine seguente viene invece presa in considerazione la rete locale 192.168.0.1/24, cioè 192.168.0.1-255. La prima regola nega a chiunque l'accesso OUT>IN, mentre la seconda impone di accettare connessioni verso l'Apache locale, sia sula porta 80 che sulla 443, quest'ultima comunemente utilizzata per le connessioni cifrate HTTP su SSL (per gli amici "https").
L'ultima regola, infine, permette al computer di accettare connessioni dall'host 192.168.0.3 per l'amministrazione via ssh (porta 22).
Conclusioni
ufw e ufw Frontend mettono a disposizione un insieme di primitive necessarie alla configurazione del firewall del personal computer Ubuntu-based, basandosi semplicemente sulle informazioni rilevanti per lo scambio di dati TCP/IP: indirizzo, porta e protocollo.
Sebbene queste informazioni possano esser (senza altre precauzioni) spoofate, cioè malevolmente modificate, sia da chi sta fuori che da un programma interno, utilizzare corettamente un firewall, anche personale, porta ad aumentare discretamente il livello di sicurezza del proprio sistema.
Vale infine notare come, a differenza della pratica cui alcuni utenti sono avvezzi sui sistemi Microsoft Windows (ad esempio con software quali Zone Alarm o Comodo Firewall), ufw non interagisce con l'utente al fine di chiedere se permettere o negare ad un particolare programma l'accesso alla rete, e tutto ciò che fa è eseguire "ordini" perconfigurati e non mutabili, a meno di non metter mano nuovamente ad ufw Frontends.