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).