Access Control List (ACL) IP
Regole, esempi di configurazione e comandi da CLI
1 – Regole e concetti fondamentali
1.1 – Che cos’è una ACL
Una Access Control List (ACL) è un insieme ordinato di regole che permettono o negano il passaggio dei pacchetti attraverso un’interfaccia del router. Possiamo immaginarla come un buttafuori virtuale: per ogni pacchetto controlla se soddisfa una regola; alla prima corrispondenza decide se lasciarlo passare (permit) o bloccarlo (deny).
Il router esamina i pacchetti dall’alto verso il basso nella ACL:
- appena trova una regola che corrisponde, applica quella decisione (permit/deny);
- se nessuna regola corrisponde, alla fine c’è sempre una regola implicita: implicit deny all (tutto il resto viene bloccato).
1.2 – Tipi di ACL IP e numerazione
Le ACL IP più usate in ambito didattico sono:
- ACL standard: filtrano solo in base all’indirizzo IP di origine.
- ACL extended: filtrano in base a origine, destinazione, protocollo (IP, TCP, UDP, ICMP…) e numero di porta.
- ACL con nome: stesse funzioni delle ACL numeriche, ma identificate da un
nome (es.
ACL_WEB).
Range numerici principali per le ACL IP:
- ACL standard numeriche: 1–99 e 1300–1999
- ACL extended numeriche: 100–199 e 2000–2699
Sintassi base:
access-list <numero> permit|deny <condizione>
Oppure, in forma “moderna”:
ip access-list standard <nome_o_numero>
ip access-list extended <nome_o_numero>
1.3 – Wildcard mask
Le ACL non usano la subnet mask tradizionale, ma la wildcard mask, che è l’inverso:
- dove la subnet mask ha 0, la wildcard ha 0 → il bit deve corrispondere;
- dove la subnet mask ha 1, la wildcard ha 1 → il bit può variare.
Per ottenere la wildcard dalla subnet mask:
- per ogni ottetto: 255 – valore maschera
Esempio:
- subnet mask:
255.255.255.0 - wildcard mask:
0.0.0.255
Esempio con /20:
- subnet mask:
255.255.240.0 - calcolo wildcard: 255−255 = 0, 255−255 = 0, 255−240 = 15, 255−0 = 255 →
0.0.15.255.
0.0.0.0 indica un host
singolo
(tutti i bit dell’indirizzo devono coincidere).
1.4 – Black list e White list
Una ACL può essere progettata secondo due logiche:
- Black list: elencare ciò che non è consentito e permettere
il resto.
access-list 10 deny host 192.168.10.10 access-list 10 permit any - White list: elencare solo ciò che è consentito e bloccare
tutto il resto.
access-list 10 permit 192.168.10.0 0.0.0.255 ! tutto il resto è implicitamente negato
1.5 – Dove applicare le ACL
Regola pratica (linea guida, non legge assoluta):
- ACL standard: in genere vicino alla destinazione.
- ACL extended: in genere vicino alla sorgente.
Per ogni interfaccia/protocollo/direzione si può applicare una sola ACL:
- una ACL per il traffico in ingresso (
in) - una ACL per il traffico in uscita (
out)
1.6 – Buone pratiche (remark, ordine, established)
- Usare sempre un remark:
access-list 101 remark filtro accesso server dati interno - Scrivere prima le regole più specifiche, poi quelle più generali.
- Per connessioni TCP verso Internet, il traffico di risposta può essere riconosciuto con established (bit ACK/RST impostati).
2 – Esempi di configurazione ACL
2.1 – Consentire solo un host a una rete (ACL standard)
Nell’esempio, solo l’host con IP 192.168.10.1 può accedere alla rete NetA
attraverso
l’interfaccia ethernet0 di R1.
Configurazione R1
hostname R1
!
interface ethernet0
ip access-group 1 in
!
access-list 1 permit host 192.168.10.1
access-list 1 permit 192.168.10.1 0.0.0.0.
2.2 – Negare un host, permettere il resto (ACL standard)
Blocchiamo solo l’host 192.168.10.1 verso NetA; tutti gli altri host di NetB possono accedere.
Configurazione R1
hostname R1
!
interface ethernet0
ip access-group 1 in
!
access-list 1 deny host 192.168.10.1
access-list 1 permit any
access-list 1 permit any
access-list 1 deny host 192.168.10.1
la seconda regola non verrà mai applicata.
2.3 – Consentire un intervallo di indirizzi (ACL extended)
Tutti gli host della rete 192.168.10.0/24 possono accedere alla rete 192.168.200.0/24.
Configurazione R1
hostname R1
!
interface ethernet0
ip access-group 101 in
!
access-list 101 permit ip 192.168.10.0 0.0.0.255 192.168.200.0 0.0.0.255
0.0.0.255 permette tutti gli host nella
rete /24.2.4 – Bloccare Telnet (TCP porta 23)
Si vuole impedire l’accesso Telnet da NetB a NetA, ma consentire tutto il resto del traffico IP.
Configurazione R1
hostname R1
!
interface ethernet0
ip access-group 102 in
!
access-list 102 deny tcp any any eq 23
access-list 102 permit ip any any
2.5 – Consentire solo TCP di ritorno (established)
Gli host di NetA possono iniziare connessioni TCP verso NetB, ma NetB non può avviare connessioni verso NetA.
Configurazione R1
hostname R1
!
interface ethernet0
ip access-group 102 in
!
access-list 102 permit tcp any any gt 1023 established
Le risposte TCP ai client interni usano porte sorgente > 1023 e hanno ACK/RST impostati, quindi passano. I tentativi dall’esterno non soddisfano queste condizioni e vengono bloccati.
2.6 – Bloccare il traffico FTP (porte 20 e 21)
Si blocca l’accesso FTP (comando e dati) da NetB verso NetA, consentendo tutto il resto.
Configurazione R1
hostname R1
!
interface ethernet0
ip access-group 102 in
!
access-list 102 deny tcp any any eq ftp
access-list 102 deny tcp any any eq ftp-data
access-list 102 permit ip any any
2.7 – Consentire FTP attivo verso un server interno
Il server FTP (192.168.1.100) si trova in NetA. Si consente l’accesso FTP attivo da NetB verso il server.
Configurazione R1
hostname R1
!
interface ethernet0
ip access-group 102 in
!
access-list 102 permit tcp any host 192.168.1.100 eq ftp
access-list 102 permit tcp any host 192.168.1.100 eq ftp-data established
!
interface ethernet1
ip access-group 110 in
!
access-list 110 permit tcp host 192.168.1.100 eq ftp any established
access-list 110 permit tcp host 192.168.1.100 eq ftp-data any
2.8 – Consentire FTP passivo verso un server interno
In modalità passiva, il server usa la porta 21 per il controllo e porte dinamiche >= 1024 per i dati.
Configurazione R1
hostname R1
!
interface ethernet0
ip access-group 102 in
!
access-list 102 permit tcp any host 192.168.1.100 eq ftp
access-list 102 permit tcp any host 192.168.1.100 gt 1023
!
interface ethernet1
ip access-group 110 in
!
access-list 110 permit tcp host 192.168.1.100 eq ftp any established
access-list 110 permit tcp host 192.168.1.100 gt 1023 any established
2.9 – Filtrare i ping (ICMP)
Gli host in NetA possono eseguire il ping verso NetB, ma NetB non può avviare ping verso NetA.
Configurazione R1
hostname R1
!
interface ethernet0
ip access-group 102 in
!
access-list 102 permit icmp any any echo-reply
2.10 – Consentire HTTP, Telnet, Mail, POP3, FTP
Si consente solo il traffico TCP verso i servizi principali; il resto è negato implicitamente.
Configurazione R1
hostname R1
!
interface ethernet0
ip access-group 102 in
!
access-list 102 permit tcp any any eq www
access-list 102 permit tcp any any eq telnet
access-list 102 permit tcp any any eq smtp
access-list 102 permit tcp any any eq pop3
access-list 102 permit tcp any any eq ftp
access-list 102 permit tcp any any eq ftp-data
! il resto viene negato implicitamente
2.11 – Consentire solo traffico DNS
Si consente solo traffico DNS (TCP/UDP porta 53) e si blocca tutto il resto.
Configurazione R1
hostname R1
!
interface ethernet0
ip access-group 102 in
!
access-list 102 permit udp any any eq domain
access-list 102 permit udp any eq domain any
access-list 102 permit tcp any any eq domain
access-list 102 permit tcp any eq domain any
2.12 – Consentire gli aggiornamenti di routing
Quando si applicano ACL in ingresso, bisogna assicurarsi che gli aggiornamenti dei protocolli di routing non vengano bloccati.
- RIP (UDP porta 520):
access-list 102 permit udp any any eq rip
- IGRP:
access-list 102 permit igrp any any
- EIGRP:
access-list 102 permit eigrp any any
- OSPF:
access-list 102 permit ospf any any
- BGP (TCP porta 179):
access-list 102 permit tcp any any eq 179
access-list 102 permit tcp any eq 179 any
2.13 – Filtrare frame in base al MAC address
È possibile filtrare a livello 2 (MAC) usando il bridging e ACL specifiche per MAC address.
Configurazione base
Router(config)# bridge irb
Router(config)# bridge 1 protocol ieee
Router(config)# bridge 1 route ip
Applicazione del bridge e della ACL a livello MAC:
Router(config)# interface fastEthernet0/0
Router(config-if)# no ip address
Router(config-if)# bridge-group 1 input-address-list 700
Router(config-if)# exit
Creazione dell’interfaccia virtuale con indirizzo IP:
Router(config)# interface bvi1
Router(config-if)# ip address 192.168.1.1 255.255.255.0
Router(config-if)# exit
Definizione ACL MAC (esempio):
Router(config)# access-list 700 deny aaaa.bbbb.cccc 0000.0000.0000
Router(config)# access-list 700 permit 0000.0000.0000 ffff.ffff.ffff
3 – Comandi da CLI per le ACL
3.1 – Sintassi base (ACL numeriche)
ACL standard numeriche (1–99, 1300–1999):
access-list <numero_standard> permit|deny <sorgente>
Esempi:
access-list 10 permit 192.168.10.0 0.0.0.255
access-list 10 deny host 192.168.10.100
access-list 10 permit any
ACL extended numeriche (100–199, 2000–2699):
access-list <numero_extended> permit|deny <protocollo> <sorgente> [<operatore_porta porta>] <destinazione> [<operatore_porta porta>] [opzioni]
Esempi:
access-list 101 deny tcp any any eq 23
access-list 101 permit ip 192.168.10.0 0.0.0.255 192.168.200.0 0.0.0.255
3.2 – Sintassi con ACL con nome
ACL standard con nome:
ip access-list standard ACL_INTERNA
remark filtro host laboratorio
deny host 192.168.10.50
permit 192.168.10.0 0.0.0.255
! implicit deny per il resto
ACL extended con nome:
ip access-list extended ACL_DMZ
remark accesso ai server in DMZ
permit tcp any 192.168.50.0 0.0.0.255 eq www
permit tcp any 192.168.50.0 0.0.0.255 eq https
deny ip any 192.168.10.0 0.0.0.255
permit ip any any
3.3 – Applicare e rimuovere ACL dalle interfacce
Applicare una ACL:
interface fastEthernet0/0
ip access-group 101 in
!
interface fastEthernet0/1
ip access-group ACL_DMZ out
Rimuovere una ACL da un’interfaccia:
interface fastEthernet0/0
no ip access-group 101 in
Cancellare una ACL numerica:
no access-list 101
Cancellare una ACL con nome:
ip access-list extended ACL_DMZ
no 10
no 20
3.4 – Operatori e parole chiave
Parole chiave:
any→ corrisponde a qualsiasi indirizzo IPhost <ip>→ equivale a<ip> 0.0.0.0<rete> <wildcard>→ intervallo di indirizzi
Operatori sulle porte TCP/UDP:
eq→ uguale alla portalt→ minore digt→ maggiore dirange→ intervalloneq→ diverso
Opzioni utili:
log/log-input→ loggare i pacchetti che corrispondono alla regolaestablished→ solo pacchetti TCP con ACK/RST impostato
3.5 – Comandi di verifica
show access-listsshow ip access-listsshow ip interfaceshow running-config
3.6 – Salvataggio della configurazione
Dopo aver creato o modificato le ACL, salva:
copy running-config startup-config