Access Control List (ACL) IP

Regole, esempi di configurazione e comandi da CLI

Prof. ENRICO MELE – Sistemi e Reti
Guida per comprendere, progettare e configurare le ACL nei router Cisco

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.

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.

Schema ACL host consentito

Configurazione R1

hostname R1
!
interface ethernet0
 ip access-group 1 in
!
access-list 1 permit host 192.168.10.1

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.

Schema ACL host negato

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

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.

Schema ACL intervallo indirizzi

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

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.

Schema ACL blocco Telnet

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.

Schema ACL established

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.

Schema ACL blocco FTP

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.

Schema ACL FTP attivo

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.

Schema ACL FTP passivo

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.

Schema ACL ICMP

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.

Schema ACL servizi principali

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.

Schema ACL DNS

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 IP
  • host <ip> → equivale a <ip> 0.0.0.0
  • <rete> <wildcard> → intervallo di indirizzi

Operatori sulle porte TCP/UDP:

  • eq → uguale alla porta
  • lt → minore di
  • gt → maggiore di
  • range → intervallo
  • neq → diverso

Opzioni utili:

  • log / log-input → loggare i pacchetti che corrispondono alla regola
  • established → solo pacchetti TCP con ACK/RST impostato

3.5 – Comandi di verifica

  • show access-lists
  • show ip access-lists
  • show ip interface
  • show running-config

3.6 – Salvataggio della configurazione

Dopo aver creato o modificato le ACL, salva:

copy running-config startup-config