A proposito dell'autore

write about it later

Le Access Control List (ACL) sono uno strumento essenziale nella costruzione di configurazioni efficaci, anche se molto spesso si tende ad utilizzarle in modo superficiale o poco ortodosso.

Le ACL possono assumere principalmente due ruoli all’interno di una configurazione:

  • Identificare una categoria di dati secondo parametri precisi, all’interno di un istruzione che lo richieda
  • Identificare e filtrare il traffico indesiderato, quando applicate ad un’interfaccia.


Esistono più sintassi per esprimere una ACL, in questo articolo parleremo dei fondamentali, mentre ci riserviamo di parlare delle metodiche avanzate nei prossimi numeri.

Prima di cominciare però, vediamo di comprendere la natura del nostro argomento:
Cosa sono le ACL?

Sono delle liste di istruzioni di controllo sui pacchetti di dati. Ogni istruzione congloba una parte descrittiva e una parte decisionale. Quando un pacchetto viene analizzato, l’ACL viene sfogliata istruzione per istruzione, dall’alto al basso, in cerca di una descrizione che combaci con il pacchetto. Quando ciò accade, viene effettuata l’azione descritta nella parte decisionale e lo sfoglio si ferma. E’ facile capire che l’ordine delle istruzioni è fondamentale.

ACL standard

Ogni ACL è contraddistinta da un numero che raggruppa le sue istruzioni. Il numero è arbitrario ma deve sottostare ad una clausola: range diversi implicano sintassi diverse.
Le ACL standard (le più anziane) possono venire identificate da un numero compreso tra 1 e 99. Come tutte le ACL, comprendono una parte descrittiva e una decisionale, ma le possibilità espressive sono molto limitate e vengno normalmente impiegate al fine di descrivere range di IP in istruzioni (NAT, access-group nelle line vty, ecc.).
Vediamo la sintassi:

access-list [1-99] [decisione] [ip_sorgente]

Le decisioni possibili sono permit e deny (permetti e nega).
La parte descrittiva, effettivamente stringata, permette di descrivere solo l’indirizzo (o un gruppo di indirizzi) di origine del pacchetto. Nel caso si tratti di un solo indirizzo, basta scrivere l’IP in questione. Se invece si tratta di un gruppo di indirizzi, bisogna scrivere l’indirizo IP iniziale seguito dalla wildcard mask (ne parleremo in futuro) che descrive quanti IP successivi verranno coinvolti. Nel caso si desideri invece descrivere qualsiasi pacchetto, basta utilizzare la parola chiave any.
Un esempio:

L’ACL che segue permette la comunicazione da parte del network 192.168.0.0 255.255.255.0, eccezion fatta per 192.168.0.5.

access-list 5 deny 192.168.0.5
access-list 5 permit 192.168.0.0 0.0.0.255
access-list 5 deny any

Si noti come l’ordine delle istruzioni sia ESSENZIALE ai nostri scopi. Una ACL di questo tipo potrebbe, per esempio, gestire il passaggio di dati fra due network private o regolamentare un’istruzione di NAT dove 192.168.0.5 esce verso un’altra network senza essere nattato.

ACL estese – fase 1

Sono la seconda generazione di Access Control List e sono identificate dai numeri da 100 a 199.
I blocchi della sintassi sono i medesimi, ma le possibilità descrittive sono molto più potenti. Qui infatti è possibile descrivere un pacchetto con: IP di origine, IP di destinazione, protocollo, porta di origine, porta di destinazione e, ove applicabile, tipo di messaggio.

access-list [100-199] [decisione] [protocollo] [indirizzo_sorgente] [porta_sorgente] [indirizzo_destinazione] [porta_destinazione]
[tipo_messaggio]

Le decisioni sono sempre permit e deny.
Per quanto riguarda la parte descrittiva, bisona fare una piccola premessa. Protocollo, indirizzo sorgente e indirizzo destinazione sono gli elementi essenziali. Gli altri possono essere facoltativi o inficiati dalla selezione del protocollo. TCP e UDP contemplano il multiplexing delle porte e abilitano porta_sorgente e porta_destinazione, mentre ICMP non prevede porte ma abilita la selezione del tipo di messaggio.
PROTOCOLLO: le possibilità di selezione variano a seconda dell’IOS. Gli essenziali sono TCP, UDP e ICMP. La selezione IP (che appartiene ad un layer inferiore), implica qualsiasi protocollo basato su IP…
PORTA_SORGENTE/PORTA_DESTINAZIONE: se si desidera indicare una porta di preciso, basta far precedere la parola chiave eq prima del numero di porta desidertata, lt per indicare tutte le porte inferiori ad essa, bt per indicare tutte quelle superiori. Con la parola chiave range invece, si indica che seguiranno due numeri di porta e che il match avverrà nell’intervallo descritto.
TIPO_MESSAGGIO: ove previsto dal protocollo, si può indicare il tipo di messaggio. Nel caso in cui il protocollo sia ICMP, alcuni dei possibili valori sono echo, echo-reply, destination-unreachable ecc.
NOTA: nella descrizione degli indirizzi di origine e di destinazione, quando è necessario indicare un solo IP preciso, al contrario di quanto accade nelle ACL standard, questo deve essere preceduto dalla parola chiave host.
Vediamo quindi un esempio:

Creiamo una ACL che permetta alla network 192.168.0.0 255.255.255.0 di accedere a qualsiasi indirizzo, verso TCP/80 e che permetta i ping verso 80.80.80.80.

access-list 105 permit TCP 192.168.0.0 0.0.0.255 any eq 80
access-list 105 permit ICMP 192.168.0.0 0.0.0.255 host 80.80.80.80 echo
access-list 105 deny IP any any

ACL estese – fase 2

Adesso parleremo di un ulteriore sviluppo delle ACL estese: la stateful inspection.
La stateful inspection è uno strumento essenziale nella creazione di ACL efficaci ai fini di filtraggio. L’argomento è molto ampio e proverò ad esprimere solo i concetti che ci coinvolgono direttamente, per questo argomento.
Questo strumento molto potente ci permette di riconoscere nei pacchetti una caratteristica che, scappando un po’ dalle regole appartiene al layer di sessione (ISO/OSI).

Senza scendere nei dettagli, possiamo capire se un pacchetto TCP fa parte di una sessione di comunicazione preesistente.
In questo modo è facile capire se dei dati che si presentano ad un’interfaccia facciano parte di una sessione cominciata nel senso opposto… capito nulla? Perfetto, un esempio vale più di 1000 parole.
Creiamo una ACL da applicare ad una immaginaria interfaccia WAN con verso IN, che permetta il passaggio dei resolve del DNS (190.1.1.1) e tutti i dati TCP che sono stati richiesti dall’interno:

access-list 106 permit UDP host 190.1.1.1 eq 53 any
access-list 106 permit TCP any any established

La parola chiave established abilita la stateful inspection e, nel caso specifico, permette il traffico TCP che ENTRA nell’interfaccia WAN e che sia stato sollecitato dall’interno (nel verso OUT).

Post correlati

Close
Entra in contatto con altri professionisti ICT, seguici su Facebook e Twitter: