[successivo] [precedente] [inizio] [fine] [indice generale] [licenze] [indice analitico] [tomo] [parte]


Capitolo 227.   Introduzione ai concetti di Firewall e di NAT

All'interno di una rete, il firewall è un componente che serve a proteggerne una parte rispetto al resto. Di solito, si tratta di qualcosa che si interpone tra una rete interna e una rete esterna, come Internet, per evitare un accesso indiscriminato alla rete interna da parte di nodi collocati all'esterno di questa.

Il firewall, a parte il significato letterale del nome, è una sorta di filtro (passivo o attivo) che si interpone al traffico di rete. Come tale, deve essere regolato opportunamente, in base agli obiettivi che si intendono raggiungere.

                        .----------.          Rete interna da proteggere
- - - ------------------| Firewall |------------*-----------*-------- - - -
Rete esterna            `----------'            |           |
(Internet)                                  .--------.  .--------.
                                            |  host  |  |  host  |
                                            `--------'  `--------'

Figura 227.1. Il firewall è un filtro che si interpone tra una rete interna e una rete esterna.

Generalmente, i compiti del firewall vengono svolti da un elaboratore configurato opportunamente, munito di almeno due interfacce di rete: una per l'accesso alla rete esterna e una per la rete interna.

Il NAT (Network Address Translator) è un procedimento attraverso cui si modificano gli indirizzi IP, generalmente allo scopo di consentire a una rete privata di accedere all'esterno. Spesso, questa funzionalità si integra con quella di firewall.

227.1   Cosa può essere un Firewall

Il firewall elementare è un elaboratore con due interfacce di rete, per le quali siano stati definiti gli instradamenti nel modo consueto, ma dove sia stato impedito il transito del traffico tra un'interfaccia e l'altra.

L'utilità di un filtro del genere è minima. Probabilmente si potrebbe utilizzare come servente SMTP e come punto di arrivo per i messaggi di posta elettronica, che gli utenti della rete interna potrebbero scaricare attraverso un protocollo come POP3, o IMAP. Inoltre, gli utenti che desiderano accedere alla rete esterna, potrebbero utilizzare il protocollo TELNET per collegarsi al firewall per poi avviare da lì il programma cliente adatto all'operazione che vogliono compiere.

Evidentemente, questa non deve essere intesa come una scelta ottimale, anzi, di sicuro si tratta di un approccio sbagliato dal punto di vista della sicurezza, ma serve a rendere l'idea del significato che può avere un firewall.

Volendo, l'inserimento di una cache proxy all'interno del firewall potrebbe permettere agli utenti della rete interna, disponendo di software adatto, di accedere alle risorse della rete esterna (di solito solo con i protocolli HTTP e FTP).

All'estremo opposto, un router è un firewall che consente il transito di tutto il traffico, senza porre alcun limite, né alcun controllo.

227.1.1   Tipologie fondamentali

Si distinguono due tipi fondamentali di firewall: filtri di pacchetto IP e serventi proxy. In particolare, il kernel Linux aggiunge alle funzionalità di filtro di pacchetto anche il mascheramento e il proxy trasparente.

I filtri di pacchetto IP permettono di bloccare o abilitare selettivamente il traffico che attraversa il firewall, definendo i protocolli (o meglio, il tipo di pacchetto), gli indirizzi IP e le porte utilizzate. Questo tipo di sistema permette al massimo di controllare i tipi di servizio che possono essere utilizzati in una direzione e nell'altra, da e verso indirizzi IP determinati, ma senza la possibilità di annotare in un registro i collegamenti che sono stati effettuati (salvo eccezioni), né di poter identificare gli utenti che li utilizzano. In un certo senso, questo tipo di firewall è come un router su cui si può soltanto filtrare il tipo dei pacchetti che si vogliono lasciar transitare.

I serventi proxy rappresentano una sorta di intermediario che si occupa di intrattenere le connessioni per conto di qualcun altro nella rete interna. Per tornare all'esempio del firewall elementare, è come se un utente aprisse una connessione TELNET verso il proxy, utilizzando da lì un programma cliente adatto per il tipo di collegamento che intende realizzare al di fuori della sua rete interna. Dal momento che il proxy ha un ruolo attivo nelle connessioni, può tenere un registro delle azioni compiute; eventualmente può anche tentare di identificare l'utente che lo utilizza.

Per completare il discorso, una cache proxy è qualcosa di simile al servente proxy a cui si sta facendo riferimento. La differenza sta essenzialmente nella specializzazione che nel primo caso è puntata alla gestione di una memoria cache, mentre nel secondo è rivolta alla protezione della rete interna.

227.2   Firewall in forma di filtri di pacchetto

Il filtro di pacchetto può intervenire al terzo o al massimo al quarto livello del modello OSI/ISO. In altri termini, è in grado di identificare e filtrare i pacchetti in base agli indirizzi IP, alle porte utilizzate e a poche altre informazioni, come elencato nella tabella 227.2.

.-------------------.                                   .-------------------.
| Applicazione      |                                   | Applicazione      |
|-------------------|                                   |-------------------|
| Presentazione     |              filtro               | Presentazione     |
|-------------------|                 :                 |-------------------|
| Sessione          |                 :                 | Sessione          |
|-------------------|   .-------------:-------------.   |-------------------|
| Trasporto         |   | Trasporto   :   Trasporto |   | Trasporto         |
|-------------------|   |-------------:-------------|   |-------------------|
| Rete              |   |   Rete      :     Rete    |   | Rete              |
|-------------------|   |-------------:-------------|   |-------------------|
| Collegamento dati |   |  C. dati  | : |  C. dati  |   | Collegamento dati |
|-------------------|   |-----------|   |-----------|   |-------------------|
| Fisico            |   |  Fisico   |   |  Fisico   |   | Fisico            |
`-------------------'   `-----------'   `-----------'   `-------------------'
         |                   |                |                   |
         `-------------------'                `-------------------'

Figura 227.2. Un firewall che funziona come filtro di pacchetto IP, può interviene al terzo e quarto livello del modello OSI/ISO.

Caratteristica Annotazioni
interfaccia di rete l'interfaccia interessata nel nodo locale
indirizzo IP di origine
indirizzo IP di destinazione
protocollo TCP, UDP, ICMP
porta di origine TCP o UDP
porta di destinazione TCP o UDP
messaggio ICMP rappresentato da un numero
pacchetto frammentato frammentazione a livello IP
pacchetto SYN richiesta inizio di connessione TCP

Tabella 227.1. Caratteristiche dei pacchetti che possono essere prese in considerazione per il filtro.

Si tratta di una limitazione significativa, che rappresenta in pratica il problema maggiore nella configurazione corretta di un filtro del genere in base ai fini che si tendono a ottenere. Volendo esprimere la cosa attraverso un esempio molto semplice, un filtro di questo tipo non può intervenire esattamente ed esclusivamente sul «protocollo HTTP»; al massimo si può intercettare il transito dei pacchetti TCP in arrivo verso la porta 80, se si vuole impedire l'instaurarsi di connessioni a un servizio HTTP locale, oppure in uscita se si vuole impedire di raggiungere servizi esterni. Ma questo non vuol dire che si blocca il protocollo HTTP, è solo un intervento fatto in modo tale da arrivare a tale risultato.

Numero Nome Chi lo utilizza
0 echo-reply ping
3 destination-unreachable traffico TCP/UDP
5 redirect instradamento dei pacchetti
8 echo-request ping
11 time-exceeded traceroute

Tabella 227.2. Tipi di messaggi ICMP.

Un'altra cosa fondamentale da considerare è il fatto che i pacchetti frammentati a livello di protocollo IP, possono essere identificati come frammenti, mentre diventa impossibile conoscere le altre caratteristiche (TCP o UDP).

227.2.1   Punto di applicazione e significato dell'intercettazione

Teoricamente, ammesso che l'applicazione utilizzata come filtro (assieme al kernel) sia abbastanza sofisticata da permetterlo, si può intervenire in tre punti differenti: nel transito dei pacchetti da un'interfaccia a un'altra, nei pacchetti in arrivo attraverso una data interfaccia, e nei pacchetti in uscita. La distinzione è importante perché i risultati pratici che si ottengono possono essere molto diversi a seconda del punto in cui si inserisce il filtro.

                               Firewall
          filtro in : .-------------------------. : filtro in
           ingresso : | :          :          : | : ingresso
            - - - ->: | :          :          : | :<- - - -
    ------------------* :<- - -    :    - - ->: *----------------------
            - - - ->: | :          :          : | :<- - - -
                    : | :          :          : | :
                      `-------------------------'
                        :          :          :
                        :          :          :
                      filtro     filtro     filtro
                        in         in         in
                      uscita    transito    uscita

Figura 227.3. Punti di inserzione di un filtro di pacchetto.

Anche senza fare un riferimento preciso alle interfacce di rete coinvolte, si pensi al caso in cui si intercettano in uscita i pacchetti ICMP di tipo 8, echo-request, allo scopo di bloccarne il transito. In tal caso, ci si impedisce di usare il PING verso l'esterno; al contraio, intercettando lo stesso tipo di pacchetto, ma in ingresso, il suo blocco impedisce ai nodi esterni di usare il PING verso di noi. Se invece l'intercettazione avvenisse nella fase di transito, questo potrebbe servire solo a impedire il PING che riguarda altri nodi, oppure solo l'interfaccia del lato opposto.

I pacchetti intercettati possono essere trattati in modi differenti:

Eventualmente, la contabilizzazione del traffico può essere implicita in ogni tipo di intercettazione.

227.2.2   Ricomposizione dei pacchetti frammentati

In generale, un nodo di rete che svolge funzioni di firewall dovrebbe trovarsi in un «passaggio obbligato» della rete, per evitare che i pacchetti possano utilizzare percorsi alternativi. In questo senso, è opportuno che tale nodo possa ricomporre i pacchetti frammentati a livello IP, in modo da riunire assieme tutte le informazioni necessarie a identificare i pacchetti, proprio per poter attuare effettivamente il controllo che il firewall deve fare.

In mancanza della possibilità di ricomporre i pacchetti frammentati, il firewall può individuare nei frammenti solo gli indirizzi IP, del mittente e del destinatario, oltre al riconoscere che si tratta di frammenti. Diventa impossibile l'identificazione delle porte, TCP o UDP, e dei messaggi ICMP.

227.3   Esempi di utilizzo di firewall

È il caso di raccogliere qualche esempio schematico del modo in cui si potrebbe configurare un firewall che utilizza la tecnica del filtro di pacchetto. Le impostazioni vengono indicate in forma di record, secondo lo schema seguente:

Azione Pos. Prot. IP srg IP dst ICMP Interf.
1 2 3 4 5 6 7 8 9 10

I campi del record hanno il significato descritto nell'elenco che segue, tenendo conto che i valori mancanti vengono considerati indifferenti:

  1. azione del filtro: blocco, rifiuto o altro;

  2. posizione del filtro: in ingresso, in uscita, in transito o altro;

  3. protocollo: TCP, UDP, ICMP;

  4. indirizzi IP di origine;

  5. porte TCP o UDP di origine;

  6. indirizzi IP di destinazione;

  7. porte TCP o UDP di destinazione;

  8. numero di messaggio ICMP;

  9. interfaccia di rete coinvolta;

  10. altre caratteristiche.

Si osservi in particolare che gli indirizzi IP si indicano nella forma indirizzo / maschera, dove la maschera si esprime attraverso un intero che rappresenta una quantità iniziale di bit da impostare a uno. Inoltre, gli indirizzi e le porte possono essere prefissate da un punto esclamativo che indica la negazione logica, ovvero tutti gli altri indirizzi o tutte le altre porte.

227.4   Annotazioni finali sulla gestione di un firewall

Vanno tenute a mente alcune cose quando si configura un firewall attraverso il filtro di pacchetto, per evitare di compromettere le funzionalità che invece si vogliono mantenere.

227.4.1   Pacchetti ICMP

È già stato accennato il fatto che non si deve bloccare il transito dei pacchetti del protocollo ICMP. Il messaggio di tipo 3, destination-unreachable, è indispensabile nei protocolli TCP e UDP per sapere che un certo indirizzo non è raggiungibile; bloccandolo, si attende senza sapere il perché.

Il protocollo ICMP viene usato anche nella determinazione automatica della dimensione massima dei pacchetti (MTU discovery). Mancando la possibilità di ricevere questi pacchetti ICMP, il funzionamento delle comunicazioni potrebbe essere compromesso seriamente.

227.4.2   Pacchetti UDP

I protocolli che si basano su UDP sono usati frequentemente nell'ambito di servizi locali, come NIS e NFS. Tra le altre cose, questi servizi tendono a fare viaggiare informazioni particolarmente delicate che non dovrebbero essere accessibili dall'esterno. Per questa ragione, è normale che venga impedito il transito dei pacchetti UDP. Tuttavia, capita che proprio il servizio DNS (per la risoluzione dei nomi), possa averne bisogno.

Azione Pos. Prot. IP srg IP dst ICMP Interf.
blocco transito UDP 0/0 0/0

Per la precisione, il servizio DNS può usare pacchetti UDP o connessioni TCP, a seconda della dimensione di questi. Così, il blocco eventuale di tale servizio si avvertirebbe solo in modo intermittente, complicando l'individuazione del problema.

Generalmente, un servizio DNS collocato in una posizione tale per cui non possa inviare o ricevere pacchetti UDP dall'esterno, si deve avvalere necessariamente di un altro collocato al di fuori di tale blocco. Infatti, in questo modo userebbe solo il protocollo TCP.

Eventualmente, il firewall potrebbe essere configurato espressamente per consentire il transito di questi pacchetti legati al servizio DNS. Nell'esempio seguente si suppone che il servizio DNS in questione sia collocato nel nodo 196.1.2.3:

Azione Pos. Prot. IP srg IP dst ICMP Interf.
accetta transito UDP 0/0 53 196.1.2.3
accetta transito TCP 0/0 53 196.1.2.3
accetta transito UDP 196.1.2.3 0/0 53
accetta transito TCP 196.1.2.3 0/0 53

227.5   NAT

Il NAT, o Network Address Translator, conosciuto anche come mascheramento IP, è una tecnica descritta nell'RFC 1631, con la quale un nodo di rete speciale acquista funzionalità simili a quelle di un router, intervenendo però sui pacchetti, allo scopo di sostituire gli indirizzi IP reali con altri indirizzi più convenienti.

Il problema a cui fa riferimento l'RFC 1631 riguarda la possibilità di riutilizzare dinamicamente gli indirizzi IP riservati alle reti private, permettendo ugualmente a tali reti di accedere all'esterno, pur non essendo questi univoci a livello globale. Si osservi l'esempio della figura 227.4.

                        .---------------.        192.168.1.*
              196.1.2.3 |               |       Rete privata
- - - ------------------|      NAT      |-------*-----------*-------- - - -
Rete pubblica           |               |       |           |
(Internet)              `---------------'   .--------.  .--------.
                                            |  host  |  |  host  |
                                            `--------'  `--------'

Figura 227.4. Esempio di NAT: l'indirizzo IP 196.1.2.3 è un esempio che sta a rappresentare un indirizzo univoco riconosciuto nella rete esterna.

In condizioni normali, gli indirizzi IP 192.168.1.* non hanno la possibilità di essere riconosciuti univocamente all'interno della rete globale, pertanto i nodi relativi non hanno la possibilità di accedere all'esterno. Attraverso il NAT e le sue varianti, si può ottenere questo risultato anche se poi è necessario accettare qualche compromesso.

227.5.1   Conversione dinamica degli indirizzi IP

Nella sua impostazione più semplice, il NAT può gestire un numero ristretto di indirizzi IP univoci, da abbinare dinamicamente a degli indirizzi IP locali privati.

                196.1.2.1 .---------------.        192.168.1.*
                196.1.2.2 |               |       Rete privata
- - - --------------------|      NAT      |-------*-----------*-------- - - -
Rete pubblica   196.1.2.3 |               |       |           |
(Internet)      196.1.2.4 `---------------'   .--------.  .--------.
                                              |  host  |  |  host  |
                                              `--------'  `--------'

Figura 227.5. Utilizzo dinamico di un gruppo ristretto di indirizzi IP univoci.

Osservando la figura 227.5 si può vedere che il nodo che ha il ruolo di NAT dispone di un accesso all'esterno con quattro diversi indirizzi IP univoci. In questo modo, in base alle richieste provenienti dalla rete interna, può abbinare temporaneamente un indirizzo univoco a un indirizzo privato interno. Per esempio, in un dato momento, i pacchetti provenienti o destinati all'indirizzo 192.168.1.1 potrebbero essere modificati in modo da rimpiazzare tale indirizzo con quello univoco 196.1.2.3.

connessione TCP vista                        connessione TCP vista
all'esterno                                  localmente
                           .---------------.
199.3.2.1:23               |               | 199.3.2.1:23            .---------.
<- - - - - - - - - - - - ->|      NAT      |<- - - - - - - - - - - ->| cliente |
            196.1.2.3:1050 |               |        192.168.1.1:1050 `---------'
                           `---------------'

Figura 227.6. Una connessione TCP rielaborata dal NAT.

In questo caso, il NAT si limita a sostituire ai pacchetti gli indirizzi IP di origine o di destinazione, in base all'attribuzione dinamica stabilita.

La conversione degli indirizzi può anche essere dinamica solo in parte, in cui alcuni indirizzi univoci sono abbinati in modo statico ad altrettanti indirizzi della rete privata. Questo permette a tali nodi di essere raggiungibili anche da un accesso esterno, senza che debbano essere loro per primi a instaurare una connessione.

227.5.2   Conversione dinamica delle porte

Oltre alla sostituzione degli indirizzi, un NAT più evoluto può gestire anche la sostituzione delle porte TCP e UDP. Spesso, la realtà è tale per cui sia indispensabile questo approccio, disponendo di un solo indirizzo IP univoco.

connessioni TCP viste                        connessioni TCP viste
all'esterno                                  localmente
                           .---------------.
199.3.2.1:23               |               | 199.1.2.3:23            .---------.
<- - - - - - - - - - - - ->|               |<- - - - - - - - - - - ->| cliente |
            196.1.2.3:1050 |               |        192.168.1.1:1050 `---------'
                           |      NAT      |
200.7.8.9:23               |               | 200.7.8.9:23            .---------.
<- - - - - - - - - - - - ->|               |<- - - - - - - - - - - ->| cliente |
           196.1.2.3:1093  |               |        192.168.1.2:1050 `---------'
                           `---------------'

Figura 227.7. Due connessioni TCP indipendenti, rielaborate dal NAT.

La figura 227.7 mostra il caso in cui i nodi 192.168.1.1 e 192.168.1.2 instaurano due connessioni TELNET indipendenti attraverso il NAT. In questo caso, il NAT non si limita a sostituire ai pacchetti gli indirizzi IP di origine o di destinazione, intervenendo anche sui numeri di porta TCP.

Utilizzando il NAT in questo modo, considerando che gli accessi iniziano sempre dalla parte della rete interna, per raggiungere indirizzi esterni, è normale che le porte di origine siano sempre non privilegiate, cioè siano maggiori o uguali a 1 024. Il NAT potrebbe anche essere utilizzato per dirigere le connessioni originate dall'esterno e dirette a porte determinate (probabilmente nel gruppo di porte privilegiato) a nodi ben precisi nella rete locale, solitamente per raggiungere dei servizi realizzati lì. Per fare questo occorre quindi che il NAT annoti delle ridirezioni statiche riferite alla richiesta di porte particolari. Per esempio, la figura 227.8 mostra il caso in cui il NAT ridiriga sistematicamente le connessioni provenienti dall'esterno, dirette alla porta 80, verso il nodi locale 192.168.1.1 alla stessa porta 80, dal momento che questo offre un servizio HTTP.

connessione TCP vista                        connessione TCP vista
all'esterno                                  localmente
                           .---------------.
199.3.2.1:1045             |               | 199.1.2.3:1045
<- - - - - - - - - - - - ->|      NAT      |<- - - - - -.
              196.1.2.3:80 |               |            :
                           `---------------'            :
                                                        : 
                                                        V 192.168.1.1:80
                                                   .----------.
                                                   | servente |
                                                   |   HTTP   |
                                                   | interno  |
                                                   `----------'

Figura 227.8. Ridirezione del traffico diretto a un servente HTTP interno.

227.5.3   Problemi

Il NAT, come qualunque altra forma di rimaneggiamento dei pacchetti allo scopo di sostituire gli indirizzi IP o le porte TCP/UDP, funziona bene solo quando i protocolli utilizzati a livello di sessione, ovvero il quarto del modello OSI/ISO, non prendono iniziative autonome allo scopo di gestire gli indirizzi e le porte. In altri termini, tutto funziona bene se non si inseriscono informazioni sugli indirizzi e sulle porte al di sopra del livello del TCP o di UDP.

Il classico esempio problematico è dato dall'FTP che negozia con la controparte l'instaurazione di una connessione TCP aggiuntiva, attraverso informazioni contenuta nell'area «dati» dei pacchetti. In questo modo, un NAT ingenuo riuscirebbe a trasferire solo la prima connessione TCP.

Evidentemente, un NAT evoluto dovrebbe essere consapevole, non solo dei protocolli IP, TCP e UDP, ma anche di tutti i protocolli che si inseriscono al di sopra di questi, in modo da intervenire opportunamente.

Un'ultima cosa da considerare riguarda anche il problema dei pacchetti frammentati, che nel caso del NAT devono essere necessariamente ricomposti.

227.6   Riferimenti

Appunti di informatica libera 2001.01.30 --- Copyright © 2000-2001 Daniele Giacomini --  daniele @ swlibero.org

Dovrebbe essere possibile fare riferimento a questa pagina anche con il nome introduzione_ai_concetti_di_firewall_e_di_nat.html

[successivo] [precedente] [inizio] [fine] [indice generale] [licenze] [indice analitico] [tomo] [parte]