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:
Le ACL IP più usate in ambito didattico sono:
ACL_WEB).
Range numerici principali per le ACL IP:
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>
Le ACL non usano la subnet mask tradizionale, ma la wildcard mask, che è l’inverso:
Per ottenere la wildcard dalla subnet mask:
Esempio:
255.255.255.00.0.0.255Esempio con /20:
255.255.240.00.0.15.255.
0.0.0.0 indica un host
singolo
(tutti i bit dell’indirizzo devono coincidere).
Una ACL può essere progettata secondo due logiche:
access-list 10 deny host 192.168.10.10
access-list 10 permit any
access-list 10 permit 192.168.10.0 0.0.0.255
! tutto il resto è implicitamente negato
Regola pratica (linea guida, non legge assoluta):
Per ogni interfaccia/protocollo/direzione si può applicare una sola ACL:
in)out)access-list 101 remark filtro accesso server dati interno
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.
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.
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.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
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.
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
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
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
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
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
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
Quando si applicano ACL in ingresso, bisogna assicurarsi che gli aggiornamenti dei protocolli di routing non vengano bloccati.
access-list 102 permit udp any any eq rip
access-list 102 permit igrp any any
access-list 102 permit eigrp any any
access-list 102 permit ospf any any
access-list 102 permit tcp any any eq 179
access-list 102 permit tcp any eq 179 any
È 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
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
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
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
Parole chiave:
any → corrisponde a qualsiasi indirizzo IPhost <ip> → equivale a <ip> 0.0.0.0<rete> <wildcard> → intervallo di indirizziOperatori sulle porte TCP/UDP:
eq → uguale alla portalt → minore digt → maggiore dirange → intervalloneq → diversoOpzioni utili:
log / log-input → loggare i pacchetti che corrispondono alla
regolaestablished → solo pacchetti TCP con ACK/RST impostatoshow access-listsshow ip access-listsshow ip interfaceshow running-configDopo aver creato o modificato le ACL, salva:
copy running-config startup-config