Access-List (ACLs) IPv4 per regolare l’accesso telnet/ssh

Continuiamo con la nostra serie di articoli che, attraverso esempi pratici e semplificati, dimostrano l’applicazioni di strumenti fondamentali nei rispettivi ambiti. È il turno delle Access-List IPv4 (ACLs). Uno strumento onnipresente in tutte le configurazioni degli apparati Cisco e non. Normalmente utilizzate nell’ambito della sicurezza (Packet Filter), questo strumento concorre anche a finalità differenti come ad esempio l’implementazione della Network address translation (NAT) o delle Route Map. Come al solito non vogliamo affrontare la tematica dal punto di vista teorico ma lavorare su un esempio laboratoriale pratico di facile comprensione. Di seguito una topologia e relativo diagramma degli indirizzi su cui sviluppare le successive considerazioni. Tutti i dispositivi intermediari (router e switch) sono configurati con settaggi di base:

PC1: 
IP Address –> 10.10.1.10/24
Default gateway –> 10.10.1.1
SRV1: 
IP Address –> 10.10.2.20/24
Default gateway –> 10.10.2.1
SRV2: 
IP Address –> 203.0.113.30/24
Default gateway –> 203.0.113.1
SW1: 
IP Address VLAN1 –> 10.10.1.4/24
Default gateway –> 10.10.1.1
SW2: 
IP Address VLAN1 –> 10.10.2.4/24
Default gateway –> 10.10.2.1
SW3: 
IP Address VLAN1 –> 203.0.113.4/24
Default gateway –> 203.0.113.1
R1:
E0/0 IP address –> 10.10.1.1/24
E0/1 IP address –> 10.10.2.1/24
E0/3 IP address –> 198.51.100.2/30
R2:
E0/0 IP address –> 203.0.113.1/24
E0/3 IP address –> 198.51.100.1/30

Sul Router R1 è già configurata una access-list (access-list 10) che mostriamo con il comando show run filtrando con l’opzione include. Oppure usiamo il comando show access-list 10.Questa ACL è una dimostrazione di un uso progressivamente meno restrittivo della wildcard masks. Ogni linea della Access-list abbraccia progressivamente un numero più ampio di indirizzi IP. Traducendo rispetto al formato wildcard masks potremmo rappresentare l’ACL così:
– Permit 10.10.1.10
– Deny 10.10.1.*
– Permit 10.10.*.*
– Deny 10.*.*.*
– Permit *.*.*.*
Ma vediamo la CLI:

R1# sh run | include access-list 10
access-list 10 permit 10.10.1.10
access-list 10 deny 10.10.1.0 0.0.0.255
access-list 10 permit 10.10.0.0 0.0.255.255
access-list 10 deny 10.0.0.0 0.255.255.255
access-list 10 permit any

R1# show access-list 10
Standard IP access list 10
10 permit 10.10.1.10
20 deny 10.10.1.0, wildcard bits 0.0.0.255
30 permit 10.10.0.0, wildcard bits 0.0.255.255
40 deny 10.0.0.0, wildcard bits 0.255.255.255
50 permit any

Vediamo l’ Access-List 10 in azione a protezione della line VTY (accesso telnet) del Router R1. Innanzi tutto attiviamo la line sul router e applichiamo l’ACL con il comando access-class 10 in. Ricordiamo sempre che istanziare una Access-List non determina nessuna modifica del comportamento del router come invece la sua applicazione ad una interfaccia o, come in questo caso, ad una line:

R1# configure terminal
Enter configuration commands, one per line. End with CNTL/Z.
R1(config)# line vty 0 4
R1(config-line)#password Cisco123
R1(config-line)#login
R1(config-line)#access-class 10 in

La prima linea dell’Access-List 10 legittima (Permit) un singolo indirizzo IP 10.10.1.10. Esso corrisponde all’indirizzo IP del PC1. Dal PC1 eseguiamo il Telnet puntando al Router R1 digitando la password precedentemente assegnata alla line VTY. Come vediamo la connessione ha esito positivo:

PC1# telnet 10.10.1.1
Trying 10.10.1.1 … Open
User Access Verification
Password: Cisco123
R1>

CORSI CORRELATI:

Consulta il nostro Catalogo Corsi per Tecnologia oppure fai una Ricerca per Vendor o ancora trova uno specifico corso attraverso il motore di ricerca interno: Ricerca Corsi. Contattaci ora al Numero Verde 800-177596, il nostro team saprà supportarti nella scelta del percorso formativo più adatto alla tue esigenze.

Nella stessa sessione Telnet imputiamo di nuovo il comando show access-list 10 notando la comparsa del dettaglio (2 matches) sulla prima riga. Questo matching corrisponde proprio alla connessione telnet realizzata (si incrementa il numeratore delle corrispondenze di 2 unità in questa particolare connessione altresì normalmente di 1 unità). Notiamo anche che l’indirizzo IP 10.10.1.10 causerebbe il “matching” con tutte le righe (entries) dell’Access-List, ma solo la prima ha incrementato i contatori. Questo perché vale la regola “first match”. Il pacchetto della connessione Telnet in entrata (TCP alla porta 23), in questo caso (access-class in), viene confrontato con tutte le righe dell’access-list 10 in maniera sequenziale. Dalla prima riga all’ultima. Qualora l’indirizzo IP mittente (PC1) corrisponda ad una delle righe, cioè l’IP ricada in uno dei range specificati il ciclo si interrompe con l’applicazione dell’azione assegnata alla linea stessa (Permit or Deny). Ricordiamo anche che, qualora il pacchetto non attivi nessuna delle righe nell’acl, l’azione applicata sarebbe di deny. In effetti in ogni acl IPv4 che creiamo sarà presente come ultima riga, anche se non visibile, un “deny ip any any” che garantisca un blocco del pacchetto analizzato qualora nessuna righe precedenti ne regolamenti il comportamento.

R1# show access-list 10
Standard IP access list 10
10 permit 10.10.1.10 (2 matches)
20 deny 10.10.1.0, wildcard bits 0.0.0.255
30 permit 10.10.0.0, wildcard bits 0.0.255.255
40 deny 10.0.0.0, wildcard bits 0.255.255.255
50 permit any

Accedendo in console allo switch SW1 che detiene l’IP 10.10.1.4, procediamo a collegarci in telnet al Router R1. Il tentativo fallirà. Accedendo in console al router R1 noteremmo che la linea che ha intercettato la nostra connessione è la 2°, negando il pacchetto. Notiamo quindi l’incremento del numeratore relativo: 

SW1# telnet 10.10.1.1
Trying 10.10.1.1 …
% Connection refused by remote host

R1# show access-list 10
Standard IP access list 10
10 permit 10.10.1.10 (2 matches)
20 deny 10.10.1.0, wildcard bits 0.0.0.255 (1 match)
30 permit 10.10.0.0, wildcard bits 0.0.255.255
40 deny 10.0.0.0, wildcard bits 0.255.255.255
50 permit any

Adesso mettiamoci nelle condizioni di realizzare un matching con 3° entry dell’access-list. Partendo dal SRV1 realizziamo una connessione Telnet verso il Router R1. Il server SRV1 detiene l’IP 10.10.2.20 quindi non rientra nelle prime 2 reti citate nelle prime 2 righe dell’ACL. La 3° riga, invece, specifica una rete che comprende l’IP di SRV1. La connessione avrà successo e potremo riscontrare il tutto attraverso uno sh access-list 10 che evidenzia un contatore  (+2) incrementarsi in corrispondenza della 3° linea.

SRV1# telnet 10.10.1.1
Trying 10.10.1.1 … Open
User Access Verification
Password: Cisco123
R1> exit
[Connection to 10.10.1.1 closed by foreign host]
SRV1#

R1# show access-list 10
Standard IP access list 10
10 permit 10.10.1.10 (2 matches)
20 deny 10.10.1.0, wildcard bits 0.0.0.255 (1 match)
30 permit 10.10.0.0, wildcard bits 0.0.255.255 (2 matches)
40 deny 10.0.0.0, wildcard bits 0.255.255.255
50 permit any

Collochiamoci ora sul Router R2 e colleghiamoci in telnet con la porta E0/3 di R1 (chiamiamo questa interfaccia … lato pubblico). Possiamo notare come la connessione avrà successo essendo legittimata dalla 5° linea dell’ACL. Vediamo la connessione e lo show appropriato:

R2# telnet 198.51.100.2
Trying 198.51.100.2 … Open
User Access Verification
Password: Cisco123
R1> exit
[Connection to 198.51.100.2 closed by foreign host]
R2#

R1# show access-list 10
Standard IP access list 10
10 permit 10.10.1.10 (2 matches)
20 deny 10.10.1.0, wildcard bits 0.0.0.255 (1 match)
30 permit 10.10.0.0, wildcard bits 0.0.255.255 (2 matches)
40 deny 10.0.0.0, wildcard bits 0.255.255.255
50 permit any (2 matches)

Creiamo ora una nuova ACL di tipo standard per applicarla nuovamente alla line VTY di R1. Ricordiamo che le ACL attenzionate sono di tipo Numbered – Standard. Numbered perchè vengono identificate univocamente all’interno dell’insieme di tutte le ACL attraverso un codice numerico (10, 20 etc). Standard perché fanno leva esclusivamente sul confronto dell’IP source di un pacchetto. In contrapposizione abbiamo le ACL Named, identificate da un nome alfanumerico e le ACL extended che citano in ogni riga (entry) una serie di elementi da confrontare come Protocollo, IP sorgente, IP Destinazione, Porta sorgente, Porta Destinazione e altro. Queste ultime sono evidentemente più chirurgiche nel colpire (permettere o negare) il traffico voluto (pacchetti). Ma procediamo ad applicare l’acl 20 alla line VTY. Come possiamo verificare attribuire un ACL significa soppiantare l’ACL eventualmente già applicata precedentemente. Questo perché può esserci solo una ACL per interfaccia/linea (x direzione, IN-OUT):

R1# configure terminal
Enter configuration commands, one per line. End with CNTL/Z.
R1(config)# access-list 20 permit 10.10.1.10
R1(config)# access-list 20 permit 10.10.2.20
R1(config)# line vty 0 4
R1(config-line)# access-class 20 in
R1(config-line)# end

R1# show access-list 20
Standard IP access list 20
10 permit 10.10.1.10
20 permit 10.10.2.20

Possiamo testare dal PC1 lo connessione Telnet verso R1 verificandone la riuscita. Questo perché esiste una entry di permit nella ACL 20 che legittima tale connessione. Provando a connetterci, invece, dallo Switch SW1 la connessione verrà rifiutata. Perché ? ricordiamoci l’implicita negazione sul fondo di ogni ACL…. che c’è …e non si vede. Verificando i contatori possiamo apprezzare solo quelli delle righe “esplicite”. Ecco perché è conveniente aggiungere una riga di implicita negazione finale senza servirsi di quella “nascosta”. Anzi sarebbe meglio inserire l’opzione “log” per avere anche dei messaggi syslog da anlizzare. Vediamo che l’aggiunta di una riga ad una ACL già esistente comporta l’inserimento della riga a seguire di tutte quelle già inserite:

PC1# telnet 10.10.1.1
Trying 10.10.1.1 … Open
User Access Verification
Password: Cisco123
R1> exit
[Connection to 10.10.1.1 closed by foreign host]
PC1#

SW1# telnet 10.10.1.1
Trying 10.10.1.1 …
% Connection refused by remote host
SW1#

R1# show access-list 20
Standard IP access list 20
10 permit 10.10.1.10 (2 matches)
20 permit 10.10.2.20

R1# configure terminal
Enter configuration commands, one per line. End with CNTL/Z.
R1(config)# access-list 20 deny any log
R1(config)# end

R1# show access-list 20
Standard IP access list 20
10 permit 10.10.1.10 (2 matches)
20 permit 10.10.2.20
30 deny any log

PC1# telnet 10.10.1.1
Trying 10.10.1.1 … Open
User Access Verification
Password: Cisco123
R1> exit
[Connection to 10.10.1.1 closed by foreign host]
PC1#

SW1# telnet 10.10.1.1
Trying 10.10.1.1 …
% Connection refused by remote host
SW1#

R1# show access-list 20
Standard IP access list 20
10 permit 10.10.1.10 (2 matches)
20 permit 10.10.2.20

R1# configure terminal
Enter configuration commands, one per line. End with CNTL/Z.
R1(config)# access-list 20 deny any log
R1(config)# end

R1# show access-list 20
Standard IP access list 20
10 permit 10.10.1.10 (2 matches)
20 permit 10.10.2.20
30 deny any log

Torniamo sullo Switch SW1 e riproponiamo la connessione telnet verso R1. Il risultato non cambia ma questa volta avremo un messaggio syslog a video e il tracciamento del “match”:

SW1# telnet 10.10.1.1
Trying 10.10.1.1 …
% Connection refused by remote host
SW1#

R1#
*Oct 19 12:48:15.906: %SEC-6-IPACCESSLOGNP: list 20 denied 0 10.10.1.4 -> 0.0.0.0, 1
packet

R1# show access-list 20
Standard IP access list 20
10 permit 10.10.1.10 (2 matches)
20 permit 10.10.2.20
30 deny any log (1 match)

Abbiamo concluso un primo approccio allo strumento delle Access-List scegliendo di iniziare dalla loro rappresentazione più semplice. Nei prossimi articoli avanzeremo approfondendone l’utilizzo. Ricordiamo che questo argomento è di estrema utilità perchè le ACL sono presenti praticamente in ogni configurazione di Router/Firewall e in molte configurazioni Switch L3.

Consulta il nostro Catalogo Corsi per Tecnologia oppure fai una Ricerca per Vendor o ancora trova uno specifico corso attraverso il motore di ricerca interno: Ricerca Corsi. Contattaci ora al Numero Verde 800-177596, il nostro team saprà supportarti nella scelta del percorso formativo più adatto alla tue esigenze.

RICHIEDI ORA IL SUPPORTO DI UN NOSTRO SPECIALISTA

Il nostro team, da anni impegnato nella progettazione di piani formativi strutturati nell’ambito dell’ IT, ti supporterà ad orientarti verso la scelta di un percorso formativo certificato rispondente alle tue esigenze.