# Firewall

Nell'informatica, nell'ambito delle reti di computer, un firewall (termine inglese dal significato originario di parete refrattaria, muro tagliafuoco, muro ignifugo; in italiano anche parafuoco o parafiamma) è un componente hardware e/o software di difesa perimetrale di una rete, originariamente passivo, che può anche svolgere funzioni di collegamento tra due o più segmenti di rete, o tra una rete e un computer locale, fornendo dunque una protezione in termini di sicurezza informatica della rete stessa e proteggendo il computer da malware o altri pericoli di internet.

## Storia

Il termine "firewall" in origine si riferiva a un muro destinato a confinare un incendio all'interno di un edificio. Gli usi successivi si riferiscono a strutture analoghe, come la lamiera che separa il vano motore di un veicolo o di un aereo dall'abitacolo. Il termine fu applicato alla fine degli anni Ottanta alla tecnologia di rete che emerse quando internet era abbastanza nuovo in termini di uso e connettività globali. I predecessori dei firewall per la sicurezza della rete erano i router utilizzati alla fine degli anni Ottanta. Poiché le reti erano già segregate, i router potevano applicare il filtraggio ai pacchetti che le attraversavano.

### Evoluzione

Con l'introduzione delle reti LAN nella seconda metà degli anni 1970 e l'aumentare della connettività tra queste, favorita dalla diffusione dei primi router a partire dai primi anni 1980, cominciarono a emergere i primi problemi di sicurezza riguardanti gli accessi non autorizzati ad una rete. Una delle prime soluzioni adottate consisteva nell'impostare all'interno dei router le liste di controllo degli accessi (ACL) che consentivano di stabilire quali pacchetti accettare e quali scartare sulla base dell'indirizzo IP. Questo approccio diventò sempre meno utilizzabile quanto più aumentavano gli host connessi alla rete Internet. Per cercare di contrastare le intrusioni, alla fine degli anni 1980 vennero introdotti i primi firewall.
La prima generazione fu quella dei packet filter firewall o stateless firewall, il cui primo esemplare venne sviluppato nel 1988 dalla Digital Equipment Corporation. Il loro funzionamento consisteva nel filtrare il traffico secondo un insieme di regole basate su alcune informazioni presenti nell'header dei pacchetti. Questi semplici filtri, usati spesso all'interno dei router e degli switch, potevano essere aggirati utilizzando l'IP spoofing e non riuscivano a rilevare le vulnerabilità nei livelli del modello OSI superiori al terzo.
La seconda generazione di firewall introdusse, rispetto alla prima, la possibilità di salvare e monitorare lo stato di una connessione. Il primo stateful firewall (chiamato anche circuit-level gateway) venne sviluppato tra il 1989 e il 1990 dagli AT&T Bell Laboratories. Un firewall di questo tipo consentiva la formulazione di regole in grado di bloccare pacchetti fasulli, cioè non appartenenti ad alcuna connessione attiva, ma non garantiva la protezione da attacchi che sfruttavano vulnerabilità nei livelli superiori del modello OSI. Inoltre erano sensibili anche ad attacchi di tipo DoS che puntavano a riempire la tabella dello stato delle connessioni.
Firewall di tipo stateful vennero integrati all'interno di piattaforme UTM (Unified Threat Management) che inizialmente, oltre al firewall, prevedevano anche un antivirus e un sistema per la prevenzione delle intrusioni (IPS). Altre funzioni che vennero aggiunte in seguito a questo tipo di soluzioni per la sicurezza sono VPN, reporting, load balancing e il filtraggio del contenuto. All'interno di questo insieme di strumenti, il firewall costituiva il primo elemento di difesa del sistema. Uno dei problemi più importanti delle soluzioni UTM erano le prestazioni.
La crescita di Internet portò alla diffusione degli attacchi inseriti all'interno del traffico web ai quali i stateful firewall non erano in grado di far fronte. Infatti i firewall della seconda generazione, come quelli della prima, non avevano la capacità di individuare le minacce all'interno del traffico in quanto riuscivano a classificarlo semplicemente sulla base della porta e del protocollo. Il problema portò allo sviluppo degli application firewall (anche detti proxy firewall o application gateway), una nuova generazione di firewall in grado di offrire protezione fino al livello applicativo (livello 7) del modello OSI. Tra i firewall di questo tipo DEC SEAL e FWTK furono tra i primi ad essere sviluppati nella prima metà degli anni 1990. Tuttavia questo tipo di firewall poteva supportare un solo protocollo applicativo e influiva negativamente sul traffico di rete.
Nella seconda metà degli anni 2000 vennero realizzati i primi next-generation firewall i quali riunivano vecchie e nuove tecnologie di sicurezza in un'unica soluzione, evitando il degrado delle prestazioni e migliorandone la configurazione e la gestione.

## Descrizione

Di norma, la rete viene divisa in due sottoreti: una, detta esterna, è tipicamente una WAN (Wide Area Network) che può comprendere Internet, mentre l'altra interna, detta LAN (Local Area Network), comprende una sezione più o meno grande di un insieme di computer host locali; in alcuni casi può essere utile creare una terza sottorete, detta DMZ (o zona demilitarizzata), adatta a contenere quei sistemi che devono essere isolati dalla rete interna, ma che devono comunque essere protetti dal firewall ed essere raggiungibili dall'esterno (server pubblici).

### Caratteristiche

In generale può essere un software oppure un dispositivo hardware oppure una composizione di hardware e software: in particolare si definisce appliance nel caso in cui sia realizzato come un dispositivo hardware provvisto di software integrato in grado di svolgere le funzioni di firewall. Si tratta dunque di un componente per la sicurezza informatica avente lo scopo di controllare gli accessi alle risorse di un sistema filtrando tutto il traffico che tale sistema scambia con l'esterno: il sistema, che si suppone sicuro e attendibile, protetto dal firewall, può essere un singolo computer o una rete di computer (detta rete interna o rete locale o rete privata) mentre l'ambiente esterno con cui interagisce è tipicamente una rete che si suppone sconosciuta, insicura e non attendibile (detta rete esterna o rete pubblica). In particolare un firewall filtra il traffico sulla base di un insieme di regole, solitamente dette policy (in italiano si potrebbe rendere con criteri o politiche), che vengono applicate secondo due possibili criteri generali:
* criterio default-deny: viene permesso solo ciò che viene dichiarato esplicitamente e il resto viene vietato;
* criterio default-allow: viene vietato solo ciò che è esplicitamente proibito e il resto viene permesso.
I firewall utilizzano normalmente il criterio default-deny poiché garantisce una maggiore sicurezza e una maggiore precisione nella definizione delle regole rispetto al criterio default-allow, anche se quest'ultimo consente una configurazione più semplice. L'analisi dei pacchetti che costituiscono il traffico, secondo i criteri di sicurezza formalizzati dalle regole, si traduce in una delle seguenti azioni:
* allow: il firewall lascia passare il pacchetto;
* deny: il firewall blocca il pacchetto e lo rimanda al mittente;
* drop: il firewall blocca il pacchetto e lo scarta senza inviare alcuna segnalazione al mittente.
Di solito i firewall non prevedono il blocco del pacchetto e il rinvio dello stesso al mittente per evitare uno spreco di banda.
I firewall si dividono in host-based e network-based a seconda della natura del sistema che proteggono. Un host-based firewall, chiamato anche personal firewall o firewall software, è un'applicazione software che controlla il traffico uscente ed entrante di un singolo computer. In particolare blocca le applicazioni installate sulla macchina a cui non è concessa la connessione con l'esterno. Un network-based firewall, detto anche network firewall o firewall hardware, è un componente hardware stand-alone che viene posto sul confine di una rete in modo da filtrare tutto il traffico che questa scambia con l'esterno (per questo viene anche detto firewall perimetrale).
I firewall hardware sono macchine che vengono progettate per la particolare funzione che devono svolgere e possono essere realizzate con hardware e software dedicati o con un server opportunamente configurato per eseguire solamente un firewall. Dato che vengono impiegate per separare una rete interna da una rete esterna, sono dotate di due schede di rete e presentano un sistema operativo minimale composto solo da software indispensabile per l'esecuzione del firewall. Per questo motivo i firewall hardware sono più sicuri e allo stesso tempo più difficili da configurare rispetto ai firewall software.

### Filtraggio dei pacchetti/contenuti

Una funzione che alcuni firewall prevedono è la possibilità di filtrare ciò che arriva da Internet sulla base di diversi tipi di criteri non relativi alla sicurezza informatica, ma volti a limitare gli utilizzi della rete sulla base di decisioni politiche, in particolare vietando la connessione su determinate porte o, per quanto riguarda il web, a determinate categorie di siti:
* contenuti non adatti ai minori (ad esempio in una rete domestica con postazioni libere non protette individualmente);
* contenuti ritenuti non pertinenti con l'attività lavorativa (in una rete aziendale);
* contenuti esclusi in base alle informazioni veicolate, su base politica, religiosa o per limitare la diffusione della conoscenza (in questi casi il firewall è uno strumento di censura).
Alcune nazioni arrivano a filtrare tutto il traffico internet proveniente dal proprio territorio nazionale nel tentativo di controllare il flusso di informazioni. Spesso l'attivazione di questa funzionalità è demandata a software e/o hardware dedicati al filtraggio in base a URL, appartenenti alla categoria dei proxy. Ai firewall viene però richiesto di impedire che gli utenti aggirino tali limitazioni. Le applicazioni di "controllo della navigazione", in ambito aziendale ovvero per scopi professionali, supportate dai firewall, hanno periodici aggiornamenti per quanto concerne le black list standard (per genere) da utilizzare come base di partenza per la configurazione.

### Altre funzionalità associate (NAT e Intrusion prevention system)

Una funzione spesso associata al firewall è quella di NAT (traduzione degli indirizzi di rete), che può contribuire a rendere inaccessibili i calcolatori sulla rete interna mascherandone gli indirizzi IP. Molti firewall possono registrare tutte le operazioni fatte (logging), effettuare registrazioni più o meno selettive (ad esempio, registrare solo i pacchetti che violano una certa regola, non registrare più di N pacchetti al secondo), e tenere statistiche di quali regole sono state più violate.
La registrazione integrale dell'attività di un firewall può facilmente assumere dimensioni ingestibili, per cui spesso si usa il logging solo temporaneamente per diagnosticare problemi, o comunque in modo selettivo (logging dei soli pacchetti rifiutati o solo di alcune regole). Tuttavia, l'analisi dei log di un firewall (o anche dei contatori delle varie regole) può permettere di individuare in tempo reale tentativi di intrusione. Talvolta ad un firewall è associata anche la funzione rilevamento delle intrusioni (IDS), un sistema basato su euristiche che analizza il traffico e tenta di riconoscere possibili attacchi alla sicurezza della rete, e può anche scatenare reazioni automatiche da parte del firewall (Intrusion prevention system).

### Vantaggi e svantaggi

Rispetto ad un firewall perimetrale, il personal firewall è eseguito sullo stesso sistema operativo che dovrebbe proteggere, ed è quindi soggetto al rischio di venir disabilitato da un malware che prenda il controllo del calcolatore con diritti sufficienti. Inoltre, la sua configurazione è spesso lasciata a utenti finali poco esperti. A suo favore, il personal firewall ha accesso ad un dato che un firewall perimetrale non può conoscere, ovvero può sapere quale applicazione ha generato un pacchetto o è in ascolto su una determinata porta, e può basare le sue decisioni anche su questo, ad esempio bloccando una connessione SMTP generata da un virus e facendo passare quella generata da un'altra applicazione.

### Limiti

Il firewall, pur essendo spesso un componente vitale in una strategia di sicurezza informatica, resta un singolo elemento di tale strategia:
* la sua efficacia è legata strettamente all'efficacia delle regole con cui è stato configurato (es. regole permissive possono lasciare falle di sicurezza);
* la sua configurazione è un compromesso tra usabilità della rete, sicurezza e risorse disponibili per la manutenzione della configurazione stessa (le esigenze di una rete cambiano rapidamente);
* una quota rilevante delle minacce alla sicurezza informatica proviene dalla rete interna (portatili, virus, connessioni abusive alla rete, dipendenti, accessi VPN, reti wireless non adeguatamente protette).

### Vulnerabilità

Una delle vulnerabilità più conosciute di un firewall di fascia media è l'HTTP tunneling, che consente di bypassare le restrizioni Internet utilizzando comunicazioni HTTP solitamente concesse dai firewall. Altra tipica vulnerabilità è la dll injection, ovvero una tecnica utilizzata da molti trojan, che sovrascrive il codice maligno all'interno di librerie di sistema utilizzate da programmi considerati sicuri. L'informazione riesce ad uscire dal computer in quanto il firewall, che di solito controlla i processi e non le librerie, crede che l'invio ad Internet lo stia eseguendo un programma da esso ritenuto sicuro, ma che di fatto utilizza la libreria contaminata. Alcuni firewall hanno anche il controllo sulla variazione delle librerie in memoria, ma è difficile capire quando le variazioni sono state fatte da virus.

## Tipologie

Generalmente classificati come basati su rete o basati su host, i firewall di rete sono posizionati sui computer gateway di LAN, WAN e intranet: si tratta di dispositivi software in esecuzione su hardware generico o dispositivi per computer firewall basati su hardware. Le appliance firewall possono anche offrire funzionalità aggiuntive alla rete interna che proteggono, come ad es. un server DHCP o VPN per quella rete. I firewall basati su host sono invece posizionati sul nodo terminale di rete stesso e controllano il traffico di rete in entrata e in uscita da tali macchine: può essere un daemon o un servizio come parte del sistema operativo o un'applicazione agente come la sicurezza o la protezione degli endpoint. Ognuno possiede vantaggi e svantaggi, tuttavia, ognuno ha un ruolo nella sicurezza a più livelli; anche i firewall variano di tipo a seconda di dove proviene la comunicazione dati, dove viene intercettata e viene tracciato lo stato della comunicazione.

### Personal firewall o Firewall software

Oltre al firewall a protezione perimetrale ne esiste un secondo tipo, definito "Personal Firewall", che si installa direttamente sui sistemi da proteggere (per questo motivo è chiamato anche Firewall Software). In tal caso, un buon firewall effettua anche un controllo di tutti i programmi che tentano di accedere ad Internet presenti sul computer nel quale è installato, consentendo all'utente di impostare delle regole che possano concedere o negare l'accesso ad Internet da parte dei programmi stessi, questo per prevenire la possibilità che un programma malevolo possa connettere il computer all'esterno pregiudicandone la sicurezza.
Il principio di funzionamento differisce rispetto a quello del firewall perimetrale in quanto, in quest'ultimo, le regole che definiscono i flussi di traffico permessi vengono impostate in base all'indirizzo IP sorgente, quello di destinazione e la porta attraverso la quale viene erogato il servizio, mentre nel personal firewall all'utente è sufficiente esprimere il consenso affinché una determinata applicazione possa interagire con il mondo esterno attraverso il protocollo IP. Da sottolineare che l'aggiornamento di un firewall è importante ma non è così vitale come invece lo è l'aggiornamento di un antivirus, in quanto le operazioni che il firewall deve compiere sono sostanzialmente sempre le stesse. È invece importante creare delle regole che siano corrette per decidere quali programmi devono poter accedere alla rete esterna e quali invece non devono.

### Packet filter firewall o stateless firewall

Un packet filter firewall o stateless firewall analizza ogni pacchetto che lo attraversa singolarmente, senza tenere conto dei pacchetti che lo hanno preceduto. In tale analisi vengono considerate solo alcune informazioni contenute nell'header del pacchetto, in particolare quelle appartenenti ai primi tre livelli del modello OSI più alcune del quarto. Le informazioni in questione sono l'indirizzo IP della sorgente, l'indirizzo IP della destinazione, la porta della sorgente, la porta della destinazione e il protocollo di trasporto. Su questi parametri vengono costruite le regole che formalizzano la policy del firewall e che stabiliscono quali pacchetti lasciar passare e quali bloccare. Questo tipo di filtraggio è semplice e leggero ma non garantisce un'elevata sicurezza. Infatti risulta vulnerabile ad attacchi di tipo IP spoofing in quanto non riesce a distinguere se un pacchetto appartenga o no ad una connessione attiva. Quindi, a causa della mancanza di stato, il firewall lascia passare anche i pacchetti il cui indirizzo IP sorgente originale, non consentito dalla policy del firewall, viene volutamente modificato con un indirizzo consentito. Inoltre il filtraggio, basato solo sulle informazioni dei primi livelli del modello OSI, non permette al firewall di rilevare gli attacchi basati su vulnerabilità dei livelli superiori. Pochi packet filter firewall supportano delle funzionalità di logging e di reporting di base.
Il primo documento pubblicato sulla tecnologia firewall è stato nel 1988, quando gli ingegneri della Digital Equipment Corporation (DEC) hanno sviluppato sistemi di filtraggio noti come firewall per filtri a pacchetto. Questo sistema abbastanza basilare è la prima generazione di quella che in seguito divenne una funzionalità di sicurezza Internet altamente coinvolta e tecnica. Alla AT & T Bell Labs, Bill Cheswick e Steve Bellovin hanno continuato la loro ricerca nel filtraggio dei pacchetti e hanno sviluppato un modello funzionante per la propria azienda basato sulla loro originale architettura di prima generazione.

### Stateful firewall o circuit-level gateway

Uno stateful firewall o circuit-level gateway svolge lo stesso tipo di filtraggio dei packet filter firewall e in più tiene traccia delle connessioni e del loro stato. Questa funzionalità, detta stateful inspection, viene implementata utilizzando una tabella dello stato interna al firewall nella quale ogni connessione TCP e UDP viene rappresentata da due coppie formate da indirizzo IP e porta, una per ciascun endpoint della comunicazione. Per tenere traccia dello stato di una connessione TCP vengono memorizzati il sequence number, l'acknowledgement number e i flag che ne indicano l'inizio (SYN), la parte centrale (ACK) e la fine (FIN). Quindi uno stateful firewall bloccherà tutti i pacchetti che non appartengono ad una connessione attiva, a meno che non ne creino una nuova, o che non rispettino l'ordine normale dei flag nella comunicazione. La possibilità di filtrare i pacchetti sulla base dello stato delle connessioni previene gli attacchi di tipo IP spoofing ma comporta una maggiore difficoltà nella formulazione delle regole. Inoltre gli stateful firewall non rilevano gli attacchi nei livelli OSI superiori al quarto e sono sensibili agli attacchi DoS che ne saturano la tabella dello stato. In generale, rispetto ai packet filter firewall, offrono una maggiore sicurezza, un logging migliore e un controllo migliore sui protocolli applicativi che scelgono casualmente la porta di comunicazione (come FTP) ma sono più pesanti dal punto di vista delle performance.

### Application firewall o proxy firewall o application gateway

Un application firewall o proxy firewall o application gateway opera fino al livello 7 del modello OSI filtrando tutto il traffico di una singola applicazione sulla base della conoscenza del suo protocollo. Questo tipo di firewall analizza i pacchetti nella sua interezza considerando anche il loro contenuto (payload) ed è quindi in grado di distinguere il traffico di un'applicazione indipendentemente dalla porta di comunicazione che questa utilizza. Un'altra caratteristica che lo distingue da un packet filter firewall e da uno stateful firewall è la capacità di spezzare la connessione tra un host della rete che protegge e un host della rete esterna. Infatti nelle comunicazioni svolge il ruolo di intermediario ed è quindi l'unico punto della rete che comunica con l'esterno, nascondendo così gli altri host che vi appartengono. Questo tipo di firewall è in grado di rilevare i tentativi di intrusione attraverso lo sfruttamento di un protocollo e di realizzare le funzionalità di logging e reporting in modo migliore rispetto ai firewall precedentemente descritti. Sebbene aumenti il livello della sicurezza, un application firewall è specifico per ogni applicazione e costituisce un collo di bottiglia per le performance della rete.

### Next-generation firewall

Un next-generation firewall è una piattaforma che riunisce in un unico pacchetto diverse tecnologie per la sicurezza. Fra queste ci sono le tecnologie di filtraggio dei firewall presentati in precedenza ovvero il filtraggio stateless, la stateful inspection, l'analisi dei pacchetti a livello applicativo (deep-packet introspection) e altre funzionalità aggiuntive come il NAT e il supporto alle VPN. Alcune delle altre caratteristiche tipiche di un next-generation firewall sono: il rilevamento e la prevenzione delle intrusioni (sistemi IDS e IPS), la definizione di policy specifiche per ogni applicazione, l'integrazione dell'identità dell'utente, l'acquisizione di dati di supporto per la sicurezza da fonti esterne, la qualità di servizio. L'obiettivo di questa tecnologia di firewall è la semplificazione di configurazione e gestione di un insieme eterogeneo di strumenti di sicurezza e allo stesso tempo il miglioramento del loro impatto sulle performance dell'intero sistema.

### WAF

Un web application firewall (WAF) è una specifica forma di firewall software che filtra, monitora e blocca traffico HTTP in entrata e uscita da un servizio web. Ispezionando il traffico HTTP, una soluzione WAF può prevenire attacchi provenienti da minacce veicolate attraverso il web.

## Implementazioni

* Software
** Netfilter/iptables: l'infrastruttura di packet filtering integrata nei kernel Linux versione 2.4 e superiori
** Microsoft Internet Security and Acceleration Server
** Firestarter, frontend di iptables
** shorewall, frontend di iptables
** ipchains: l'infrastruttura di packet filtering integrata nei kernel Linux versione 2.2
** ipfw: l'infrastruttura di packet filtering integrata nel kernel FreeBSD versione 2
** ipfw2: l'infrastruttura di packet filtering integrata nel kernel FreeBSD versione 4
** IPFilter (ipf)
** pf
* Distribuzioni
** IpCop progetto Open Source basato su GNU/Linux
** PfSense progetto Open Source basato su FreeBSD
** Endian Firewall distribuzione e appliance no Freeware. Distribuzione Open Source solo versione Community basata su Linux (Fork IpCop).
** m0n0wall progetto basato su FreeBSD
** Collax Security Gateway progetto Open Source basato su GNU/Linux
** RouterOS prodotto di Mikrotik basato su Linux
** SmoothWall progetto Open Source basato su GNU/Linux
** Untangle distribuzione basata su Linux non più OpenSource
** IPFire progetto Open Source tedesco basato su GNU/Linux (Fork IpCop).
** Zeroshell progetto basato su GNU/Linux
* Appliance
** Sophos XG Firewall con HTTPS e TLS Inspection
** Cisco PIX\ASA
** Check Point FireWall 1
** Cyberoam Identity-based Unified Threat Management.
** gateProtect appliance non Open Source basato su linux
** Juniper Netscreen
** Modulo firewall di livello aziendale per gli switch HP ProCurve
** Palo Alto Networks Next Generation Firewall
** Stonesoft Stonegate
** vantronix progetto basato su OpenBSD
** WatchGuard XTM, XCS, NGFW
* Personal firewalls
** Online Armor
** Agnitum Outpost
** Comodo Internet Security
** Core Force
** GhostWall
** intelliGuard Antivirus
** Jetico
** Look 'n' Stop
** Norton Personal Firewall
** OpenFirewall
** PrivateFirewall
** Sunbelt Kerio
** Sygate Personal Firewall
** Windows Firewall
** ZoneAlarm