Le ACL, Access Control Lists, nel loro uso avanzato permettono di sfruttare un router con le funzionalità tipiche di un Firewall, inteso come elemento di separazione tra rete interna (sicura) e reti esterne (non sicure). In quest'articolo vedremo come utilizzare le ACL established, reflexive, dinamiche e a tempo (Time-Based).
Le ACL Established e Reflexive
Le established sono ACL estese con riferimento al traffico TCP: permettono di bloccare tutto il traffico in arrivo dall’esterno, ad eccezione del traffico TCP di ritorno, dovuto ad una sessione TCP iniziata dall’interno. In pratica il router verifica, sui pacchetti TCP in arrivo, la presenza dei flag TCP ACK o RST; se sono presenti, il traffico viene permesso, altrimenti si assume che il traffico sia stato generato dall’esterno e verrà bloccato. La loro configurazione si ottiene aggiungendo la parola chiave established alla fine di una normale acl estesa.
Esempio:
R1(config)# access-list 100 permit tcp any eq 443 192.168.1.0 0.0.0.255 established
R1(config)# access-list 100 permit tcp any 192.168.1.3 0.0.0.0 eq 22
R1(config)# access-list 100 deny ip any any
R1(config)# interface s0/0/0
R1(config-if)# ip access-group 100 in
Le ACL reflexive sono anch'esse di tipo esteso, ma rispetto alle established operano con meccanismi più avanzati, filtrando qualsiasi tipo di traffico (non limitandosi alle sessioni TCP) ed effettuando continue verifiche su indirizzi IP, porte sorgenti e di destinazione. Permettono la creazione dinamica di una temporanea ACL relativa allo stato di una sessione, per un tempo limitato alla sessione stessa. In poche parole, si dice tengono traccia della connessione in corso (è il concetto degli stateful firewall). Si usano per negare qualsiasi traffico in ingresso tranne quello relativo alle sessioni aperte dall'interno.
I passi da seguire per la loro configurazione sono i seguenti:
- Creare un’ACL per il traffico in uscita che verifichi le sessioni generate dall’interno e crei “di riflesso” delle ACL temporanee.
- Creare un’ACL per il traffico in arrivo che utilizzi le ACL reflexive nell'esaminare il traffico di ritorno.
- Applicare le ACL sull’interfaccia opportuna, ad esempio l’interfaccia di collegamento ad Internet
Nell’esempio seguente, verranno permessi: il traffico Web e DNS dalla rete interna (LAN) verso Internet; il traffico di ritorno WEB e DNS da Internet sulla LAN. Tutto il resto verrà bloccato.
In uscita sulla seriale 0/0 verrà creata un'ACL con due regole di tipo reflexive, necessarie per tracciare le connessioni web (web_reflexive_ACL) e le richieste DNS (dns_reflexive_ACL).
R1(config)# ip access-list extended outbound_ACL
R1(config-ext-nacl)# permit tcp any any eq 80 reflect web_reflexive_ACL
R1(config-ext-nacl)# permit udp any any eq 53 reflect dns_reflexive_ACL
A questo punto i “permessi“ temporanei reflexive devono essere associati al traffico di ritorno sulla rete. Si crea quindi una seconda ACL estesa con nome, utilizzando la parola chiave evaluate per far riferimento all’outbound_ACL.
R1(config)# ip access-list extended inbound_ACL
R1(config-ext-nacl)# evaluate web_reflexive_ACL
R1(config-ext-nacl)# evaluate dns_reflexive_ACL
R1(config-ext-nacl)# deny ip any any
Infine si applicano le ACL all’interfaccia seriale 0/0
R1(config)# interface s0/0
R1(config-if)# description Connessione a Internet
R1(config-if)# ip access-group outbound_ACL out
R1(config-if)# ip access-group inbound_ACL in
Le ACL Dinamiche
Le ACL dinamiche, conosciute anche come Lock & Key ACLs, abilitano l'accesso ad un determinato utente a seguito di autenticazione sul router. Con una ACL dinamica, l’utente remoto deve prima di tutto connettersi via Telnet o SSH al router. Se l’autenticazione ha successo, viene creata automaticamente una ACL dinamica e temporanea che consentirà l’accesso alle risorse interne.
I passi da seguire sono i seguenti:
- Creare una ACL per consentire l'accesso Telnet o SSH dall’esterno. Al suo interno, specificare l'ACL dinamica che consente l'accesso alle risorse interne.
- Definire il tipo di autenticazione: basata sulla semplice line password, sul database locale o su un server AAA.
- Abilitare il metodo di autenticazione dinamico sulle linee vty.
Esempio:
ip access-list extended WAN_IN
permit tcp any host 192.168.5.254 eq 22
dynamic DYN_ACL timeout 15 permit ip 192.168.5.0 0.0.0.255 192.168.100.0 0.0.0.255
deny ip any any
interface Serial0/0
description WAN to ISP
ip address 192.168.5.254 255.255.255.0
ip access-group WAN_IN in
username Utente1 secret Cisco1234
line vty 0 4
login local
autocommand access-enable
transport input ssh
Il comando autocommand access-enable specifica l'autenticazione lock-and-key: senza questo comando, il router non sarà in grado di creare le regole temporanee dell'ACL dinamica.
Le ACL Time-Based
Le ACL Time-Based sono simili alle ACL estese, ma hanno il vantaggio di poter regolare gli accessi in base al tempo, ovvero in base agli orari giornalieri, ai giorni della settimana, ai giorni del mese. A questo scopo, l'amministratore crea delle regole specificando il periodo di tempo in cui esse saranno valide. Il periodo di tempo si specifica con il comando time-range.
La sintassi è la seguente:
Router(config)# time-range time_range_name
Router(config-time-range)# absolute [start_time start_date] [end_time end_date]
Router(config-time-range)# periodic day_of_the_week hh:mm to [day_of_the_week] hh:mm
Il comando absolute specifica un singolo intervallo di tempo, non ripetuto nel tempo: l'ACL non sarà più utilizzata dopo questo periodo. Il comando periodic specifica un intervallo di tempo ricorrente. Dopo aver definito gli intervalli, questi ultimi devono essere attivati aggiungendo il parametro time-range nell'ACL.
Esempio: agli utenti non deve essere concesso l'accesso a Internet all'interno dell'orario lavorativo, tranne che nella pausa pranzo e dalle 17.00 alle 19.00.
R1(config)# time-range orario_lavorativo
R1(config-time-range)# periodic weekdays 12:00 to 13:00
R1(config-time-range)# periodic weekdays 17:00 to 19:00
R1(config-time-range)# exit
R1(config)# access-list 100 permit ip 192.168.1.0 0.0.0.255 any time-range orario_lavorativo
R1(config)# access-list 100 deny ip any any
R1(config)# interface FastEthernet 0/1
R1(config-if)# ip access-group 100 in
R1(config-if)# exit