Cisco ACL

Le Access Control Lists, o più semplicemente ACL, sono una lista ordinata di criteri a cui un determinato pacchetto deve essere conforme. Le ACL possono essere usate per filtrare l’attraversamento di determinati flussi di traffico, per i protocolli di routing o per limitare l’accesso interattivo al router. Si consiglia come approfondimento la lettura della documentazione fornita attraverso il sito Internet di Cisco (CCO).

Le ACL di base

Ripassiamo velocemente i tipi di ACL di base sui router, che ci serviranno in seguito. Possiamo distinguere quattro tipi fondamentali di ACL, le base:

access-list 1 permit 1.1.2.0 0.0.1.255

Le estese con commenti

access-list 100 remark telnet access list
access-list 100 permit tcp host 1.1.1.1 2.2.2.0 0.0.0.255 telnet


Quelle con un Type-Code

access-list 200 permit 0x0000 0x0d0d

Le ACL con nomi (named)

ip access-list standard allow-telnet
remark machine from which telnet is accepted
permit 1.1.1.1
permit 2.2.2.2
Le ACL a tempo (Time-Based)

Sono ACL che vengono abilitate solo in un determinato spazio temporale, ad esempio limitando l’accesso al solo orario lavorativo. Per esempio:

access-list 100 remark Only allow IP traffic during open hours
access-list 100 permit ip any any time-range only-during-open-hours
!
time-range only-during-open-hours
absolute start 00:00 01 January 2002
periodic weekdays 7:30 to 18:30
periodic Saturday 8:30 to 13:30
periodic Sunday 8:30 to 18:30
Le ACL Lock & Key

Le ACL di tipo Lock & Key, talvolta riferite anche come Dynamic Extended access list, abilitano l’accesso ad un determinato IP sorgente in base all’utente. In pratica si tratta di un firewall dinamico in cui l’utente si autentica via telnet al router e abilita il proprio IP all’accesso. Ad esempio:

interface ethernet0
  ip address 172.18.23.9 255.255.255.0
  ip access-group 101 in
!
access-list 101 permit tcp any host 172.18.21.2 eq telnet
access-list 101 dynamic mytestlist timeout 120 permit ip any any
!
line vty 0
  login local
  autocommand access-enable timeout 5
Le ACL di tipo TCP Intercept

Queste ACL sono solitamente usate per proteggere i server da un attacco di tipo Syn Flood. Esistono due modalità: watch, che controlla e termina le connessioni incomplete, ed intercept, che tenta di completare la connessione con il client al posto del server. Se il 3-WAY handshake del TCP è andato a buon fine, crea una connessione al server, altrimenti chiude la connessione al client. Ad esempio:

access-list 120 remark Web Servers
access-list 120 permit tcp any 1.1.1.0 0.0.0.255
ip tcp intercept list 120
ip tcp intercept mode watch
ip tcp intercept connection-timeout 60
ip tcp intercept watch-timeout 10
ip tcp intercept one-minute low 1500
ip tcp intercept one-minute high 6000
Le ACL reflexive

Le ACL di tipo reflexive permettono di creare dinamicamente una access list relativa allo stato di una connessione. Si possono usare le reflexive access list per permettere il traffico IP originato dalla propria rete, ma negare qualsiasi traffico in ingresso tranne per le sessioni aperte dall’interno. Di seguito un esempio:

interface Serial 1
  description Access to the Internet via this interface
  ip access-group inboundfilters in
  ip access-group outboundfilters out
!
ip reflexive-list timeout 120
!
ip access-list extended outboundfilters
permit tcp any any reflect tcptraffic
!
ip access-list extended inboundfilters
permit bgp any any
permit eigrp any any
deny icmp any any
evaluate tcptraffic
Le ACL di tipo Reverse Path Forward

Il Reverse Path Forward (RPF) serve per mitigare i problemi causati dallo spoofing degli indirizzi IP, in quanto scarta i pacchetti IP non provenienti da una sorgente verificabile. Nel caso successivo, la ACL 197 ha delle istruzioni tali per cui nega o permette il traffico di rete per un intervallo specifico di indirizzi IP. Il RPF è configurato nell’interfaccia Ethernet0 per verificare i pacchetti che arrivano da quella interfaccia.

ip cef distributed
!
int eth0/1/1
  ip address 192.168.200.1 255.255.255.0
  ip verify unicast reverse-path 197
!
int eth0/1/2
  ip address 192.168.201.1 255.255.255.0
!
access-list 197 deny ip 192.168.201.0 0.0.0.63 any log-input
access-list 197 permit ip 192.168.201.64 0.0.0.63 any log-input
access-list 197 deny ip 192.168.201.128 0.0.0.63 any log-input
access-list 197 permit ip 192.168.201.192 0.0.0.63 any log-input
access-list 197 deny ip host 0.0.0.0 any log
Le ACL e l’ICMP

Non è detto che disabilitare tutto possa essere la soluzione, anzi! Bisogna tenere conto che alcuni pacchetti ICMP sono vitali al buon funzionamento del TCP in genere. Ad esempio, l’ICMP viene usato per negoziare la MTU di una connessione TCP, per cui sarà necessario usare:

access-list 110 permit icmp any any packet-too-big

Per abilitare l’ICMP solamente in uscita:

access-list 102 permit icmp any any echo
access-list 102 permit icmp any any parameter-problem
access-list 102 permit icmp any any source-quench
access-list 102 deny icmp any any log

Per abilitare anche il traceroute:

access-list 102 permit udp any any range 33400 34400 log
access-list 102 permit icmp any any time-exceeded
Le Turbo ACL

Le turbo ACL sono state introdotte a partire dalla versione di IOS 12.1.5T per i router Cisco di fascia alta. Il tempo per confrontare i pacchetti si riduce drasticamente ed ha un tempo fisso. La latenza quindi e’ minore, con una miglior stabilita’ della rete e un minor tempo di attraversamento del router. I comandi per agire sulle turbo ACL sono:

access-list compiled

show access-list compiled

Le ACL ed il rate limiting Oltre all’uso delle ACL di tipo TCP Intercept, è possibile usare una ACL per limitare un attacco Syn Flood. Oltre a questa tipologia di attacco, tramite variazioni all’esempio successivo e’ possibile attacchi Fraggle (UDP) e attacchi Smurf (ICMP)

access-list 120 deny tcp any any established
access-list 120 permit tcp any any
!
interface Serial 0/0
  rate-limit input access-group 120 64000 8000 8000
  conform-action transmit
  exceed-action drop
Le ACL per proteggersi dallo spoofing

Le Access Control Lists possono essere usate anche come tecnica di anti-spoofing. Lo spoofing è l’invio di pacchetto con IP address legittimo proveniente da una rete totalmente diversa. In particolare, vogliamo che il router non faccia routare indirizzi IP che non hanno senso. Ad esempio, su un router di bordo su Internet non vogliamo che i nostri indirizzi privati (RFC 1918) vengano ruotati su Internet, ma soprattutto che qualcuno su Internet non si presenti con tali indirizzi IP (di cui ci fidiamo). Ammettiamo che i nostri indirizzi IP sulla rete ethernet interna siano 192.106.21.0/24, l’esempio sarebbe:

interface Serial0/0
  ip access-group serial-acl-incoming in
!
ip access-list extended serial-acl-incoming
remark Deny RFC1918
deny ip 10.0.0.0 0.255.255.255 any
deny ip 172.16.0.0 0.15.255.255 any
deny ip 192.168.0.0 0.0.255.255 any
remark Deny loopback
deny ip 127.0.0.0 0.255.255.255 any
remark Anti-spoofing Rule
deny ip 192.106.21.0 0.0.0.255 any
remark Deny Multicast traffic
deny ip 224.0.0.0 15.255.255.255.255 any
remark Allow traffic to flow
permit ip any any
Le CBAC (IOS Firewall)

Le Context-Based Access Control (CBAC) sono una funzionalità tipica dell’IOS Firewall, che è una versione speciale dell’IOS di Cisco. Questo firmare contiene opzioni di sicurezza aggiuntive: esso integra robuste funzionalità di firewall e di intrusion detection, ideali per una sicurezza perimetrale. Vediamo un esempio di CBAC:

interface Serial0/0
  ip access-group 116 in
  ip inspect myfw in
  ip auth-proxy mywebproxy
!
access-list 116 permit tcp any any eq www
access-list 116 permit tcp any any eq smtp
access-list 116 deny ip any any
!
ip inspect name myfw http timeout 3600
ip inspect name myfw smtp timeout 3600
!
ip auth-proxy name mywebproxy http
ip http authentication aaa
ip http server

Per maggiori informazioni sulle CBAC, e più in generale sulle ACL, si invita ad approfondire il tema consultando l’ottima documentazione presente sul sito Internet di Cisco (CCO).