Chapitre 917 minIntermédiaire
ACL Cisco : standard, étendue et masque générique
Par Josselyn C., prof de BTS SIO. Mis à jour le .
À la fin de ce chapitre, tu sauras
- calculer un masque générique ;
- écrire une ACL standard et une ACL étendue nommées ;
- placer et appliquer une ACL dans le bon sens ;
- autoriser les réponses avec
establishedet lire les compteurs.
6 exercices corrigés
Une ACL (Access Control List, liste de contrôle d'accès) est une liste ordonnée de règles permit (autoriser) ou deny (refuser) qu'un routeur ou un switch de niveau 3 applique aux paquets qui traversent une interface, dans un sens donné. C'est l'outil de filtrage des équipements Cisco : il sert à cloisonner les VLAN, à protéger l'accès d'administration, et à désigner le trafic à traduire pour le NAT. Ce chapitre explique leur logique, le masque générique, les ACL standard et étendues, leur placement, et les applique chez Sorbier.
Comment une ACL décide
Une ACL se lit de haut en bas, et la première règle qui correspond au paquet s'applique : le reste de la liste est ignoré. Si aucune règle ne correspond, le paquet est refusé : chaque ACL se termine par un deny implicite, invisible dans la configuration.
Trois conséquences pratiques :
- L'ordre compte. Une règle générale placée avant une règle particulière l'écrase. On écrit du plus précis au plus général.
- Une ACL sans aucun
permitbloque tout. Une ACL qui ne contient que desdeny, appliquée à une interface, coupe tout le trafic de cette interface. - Le refus implicite ne journalise rien. Pour voir ce qui est refusé, on termine par un
deny ip any any logexplicite.
Une ACL ne fait rien tant qu'elle n'est pas appliquée à une interface, dans un sens :
in(en entrée) : les paquets sont filtrés quand ils arrivent sur l'interface, avant la décision de routage ;out(en sortie) : quand ils quittent l'interface, après la décision de routage.
Une interface accepte au plus une ACL IPv4 par sens. Sur une SVI, « entrée » signifie « venant des machines du VLAN » : c'est là qu'on filtre ce qu'un VLAN a le droit d'atteindre.
Le masque générique (wildcard)
Les ACL désignent des plages d'adresses avec un masque générique (wildcard mask) : un bit à 0 signifie « ce bit doit correspondre », un bit à 1 « ce bit est indifférent ». Pour un réseau, c'est l'inverse du masque de sous-réseau. Le calcul le plus rapide : 255.255.255.255 moins le masque.
| Réseau | Masque | Masque générique | Écriture dans l'ACL |
|---|---|---|---|
192.168.10.64/26 (VLAN 10) | 255.255.255.192 | 0.0.0.63 | 192.168.10.64 0.0.0.63 |
192.168.10.128/27 (VLAN 30) | 255.255.255.224 | 0.0.0.31 | 192.168.10.128 0.0.0.31 |
192.168.10.208/28 (VLAN 99) | 255.255.255.240 | 0.0.0.15 | 192.168.10.208 0.0.0.15 |
10.30.0.0/23 (Marseille) | 255.255.254.0 | 0.0.1.255 | 10.30.0.0 0.0.1.255 |
| Une seule adresse | 255.255.255.255 | 0.0.0.0 | host 192.168.10.177 |
| Toutes les adresses | 0.0.0.0 | 255.255.255.255 | any |
Les mots host et any remplacent les deux cas extrêmes et rendent les règles lisibles.
ACL standard et ACL étendue
| ACL standard | ACL étendue | |
|---|---|---|
| Critères | L'adresse source seulement | Protocole, source, destination, ports, type ICMP, état TCP |
| Numéros | 1 à 99 et 1300 à 1999 | 100 à 199 et 2000 à 2699 |
| Placement | Près de la destination | Près de la source |
| Usage typique | Restreindre l'accès aux lignes vty, désigner les adresses à traduire (NAT) | Filtrer les flux entre VLAN ou vers un serveur |
Une ACL peut être numérotée (access-list 10 permit …, l'ancienne forme) ou nommée (ip access-list extended ENTREPOT-IN). Préfère les ACL nommées : le nom dit à quoi elle sert, et on peut modifier une ligne sans réécrire toute la liste.
Pourquoi ce placement ? Une ACL standard ne connaît que la source : placée près de la source, elle couperait cette source de toutes les destinations, alors qu'on voulait n'en protéger qu'une. On la met donc juste devant la destination à protéger. Une ACL étendue connaît la destination : on la place près de la source, pour jeter le trafic interdit le plus tôt possible, sans qu'il traverse le réseau pour rien.
Protéger l'accès SSH aux équipements
Premier usage, et le plus répandu : n'accepter les connexions d'administration que depuis le VLAN 99. Une ACL standard, appliquée aux lignes vty avec access-class (et non ip access-group) :
SW-COEUR(config)# ip access-list standard ADMIN-SSH
SW-COEUR(config-std-nacl)# remark Administration depuis le VLAN 99 uniquement
SW-COEUR(config-std-nacl)# permit 192.168.10.208 0.0.0.15
SW-COEUR(config-std-nacl)# deny any log
SW-COEUR(config-std-nacl)# exit
SW-COEUR(config)# line vty 0 15
SW-COEUR(config-line)# access-class ADMIN-SSH in
La même ACL se pose sur tous les switchs et tous les routeurs. Un poste du VLAN 10 qui tente une connexion SSH vers SW-COEUR est refusé avant même la demande d'identifiant, et la tentative est journalisée.
Filtrer un VLAN : l'entrepôt
Les terminaux de scan de l'entrepôt (VLAN 30, 192.168.10.128/27) n'ont besoin que de trois choses : obtenir une adresse par DHCP, résoudre les noms auprès de srv-ad (192.168.10.177) et envoyer les colis traités à l'application de gestion de srv-gestion (192.168.10.179) en HTTPS. Ce sont des appareils peu mis à jour : s'ils sont compromis, ils ne doivent rien atteindre d'autre. Une ACL étendue, en entrée de la SVI du VLAN 30 :
SW-COEUR(config)# ip access-list extended ENTREPOT-IN
SW-COEUR(config-ext-nacl)# remark DHCP : demandes des terminaux vers le relais
SW-COEUR(config-ext-nacl)# permit udp any eq bootpc any eq bootps
SW-COEUR(config-ext-nacl)# remark DNS vers srv-ad
SW-COEUR(config-ext-nacl)# permit udp 192.168.10.128 0.0.0.31 host 192.168.10.177 eq domain
SW-COEUR(config-ext-nacl)# permit tcp 192.168.10.128 0.0.0.31 host 192.168.10.177 eq domain
SW-COEUR(config-ext-nacl)# remark Application de gestion en HTTPS
SW-COEUR(config-ext-nacl)# permit tcp 192.168.10.128 0.0.0.31 host 192.168.10.179 eq 443
SW-COEUR(config-ext-nacl)# remark Ping de la passerelle, pour le diagnostic
SW-COEUR(config-ext-nacl)# permit icmp 192.168.10.128 0.0.0.31 host 192.168.10.158 echo
SW-COEUR(config-ext-nacl)# remark Tout le reste est refuse et journalise
SW-COEUR(config-ext-nacl)# deny ip any any log
SW-COEUR(config-ext-nacl)# exit
SW-COEUR(config)# interface Vlan30
SW-COEUR(config-if)# ip access-group ENTREPOT-IN in
La syntaxe d'une ligne étendue :
permit|deny <protocole> <source> <masque> [port source] <destination> <masque> [port destination] [options]
- Le protocole :
ip(tout),tcp,udp,icmp… - Les ports :
eq 443(égal à),neq(différent de),ltetgt(inférieur, supérieur),range 1024 65535. IOS connaît des noms :domain(53),www(80),bootps(67, serveur DHCP),bootpc(68, client DHCP),ntp(123),snmp(161),syslog(514). - Les options :
log(journaliser),established(voir plus bas), un type ICMP (echo,echo-reply).
La première ligne mérite une explication. Un terminal sans adresse envoie sa demande DHCP depuis 0.0.0.0, port 68, vers 255.255.255.255, port 67. Une ACL en entrée filtre aussi les paquets destinés au switch lui-même, et c'est la SVI qui reçoit cette diffusion pour la relayer. Sans cette ligne, le deny final bloquerait toutes les demandes DHCP du VLAN : plus aucun terminal n'aurait d'adresse. La règle autorise aussi les renouvellements de bail, envoyés directement au serveur.
DNS utilise UDP, mais aussi TCP pour les grosses réponses : on autorise les deux.
Le problème des réponses : established
L'ACL ENTREPOT-IN filtre ce qui entre depuis le VLAN 30, donc aussi les réponses que les terminaux renvoient. Un administrateur du VLAN 99 qui se connecte en SSH à un terminal pour le dépanner envoie sa demande sans problème (elle sort vers le VLAN 30, elle n'est pas filtrée), mais la réponse du terminal entre par la SVI du VLAN 30… et tombe sur le deny final.
Le mot-clé established autorise les segments TCP qui appartiennent à une connexion déjà ouverte (ceux qui portent le drapeau ACK ou RST) : les réponses, pas les ouvertures de connexion.
SW-COEUR(config)# ip access-list extended ENTREPOT-IN
SW-COEUR(config-ext-nacl)# 55 permit tcp 192.168.10.128 0.0.0.31 eq 22 192.168.10.208 0.0.0.15 established
Un terminal peut répondre à une session SSH ouverte depuis le VLAN 99, mais il ne peut pas en ouvrir une vers le VLAN 99. C'est une approximation du suivi d'état d'un pare-feu, limitée à TCP : pour l'ICMP, on autoriserait de même echo-reply.
Modifier une ACL
Les ACL nommées numérotent leurs lignes de 10 en 10. On insère une ligne en lui donnant un numéro intermédiaire (comme le 55 ci-dessus, placé avant le deny final, qui porte le numéro 60), et on en supprime une par son numéro :
SW-COEUR(config)# ip access-list extended ENTREPOT-IN
SW-COEUR(config-ext-nacl)# no 50
SW-COEUR(config-ext-nacl)# 45 permit icmp 192.168.10.128 0.0.0.31 any echo
ip access-list resequence ENTREPOT-IN 10 10 renumérote la liste de 10 en 10 quand les numéros intermédiaires s'accumulent.
Vérifier une ACL
SW-COEUR# show access-lists ENTREPOT-IN
Extended IP access list ENTREPOT-IN
10 permit udp any eq bootpc any eq bootps (48 matches)
20 permit udp 192.168.10.128 0.0.0.31 host 192.168.10.177 eq domain (1520 matches)
30 permit tcp 192.168.10.128 0.0.0.31 host 192.168.10.177 eq domain
40 permit tcp 192.168.10.128 0.0.0.31 host 192.168.10.179 eq 443 (8873 matches)
45 permit icmp 192.168.10.128 0.0.0.31 any echo (12 matches)
55 permit tcp 192.168.10.128 0.0.0.31 eq 22 192.168.10.208 0.0.0.15 established (310 matches)
60 deny ip any any log (215 matches)
Les compteurs (matches) sont le premier outil de dépannage : une ligne qui devrait servir et reste à zéro est mal écrite, ou masquée par une ligne plus haute ; un deny final qui monte vite signale un flux oublié (ou une tentative d'intrusion). Les lignes journalisées (log) apparaissent dans show logging et sur le serveur syslog. clear access-list counters remet les compteurs à zéro avant un test.
show ip interface Vlan30 indique quelles ACL sont appliquées à l'interface, et dans quel sens (« Inbound access list is ENTREPOT-IN »). Une ACL bien écrite mais jamais appliquée est un oubli fréquent.
ACL ou pare-feu ?
Les ACL d'un switch de niveau 3 filtrent à la vitesse de la commutation, mais elles sont sans état, deviennent vite illisibles et journalisent mal. Le cours Cybersécurité des infrastructures compare les deux approches, avec l'exemple d'une ACL qui cantonne le VLAN des visiteurs à Internet. À l'écrit E7 SISR, on te demande de traduire une matrice de flux en règles, pour un pare-feu ou pour un commutateur de niveau 3 : la méthode est dans le chapitre Rédiger une réponse du cours E7.
Exercices
Exercice 1 sur 6 Calculer des masques génériques Réussi À revoir
Donne la forme « adresse masque générique » (ou host, any) pour : 172.16.0.8/30 ; 10.30.1.128/27 ; 10.40.0.0/24 ; le serveur 192.168.10.180 ; toutes les adresses de Marseille (10.30.0.0/23) ; les adresses de 192.168.10.0 à 192.168.10.127.
Voir la réponseMasquer la réponse de l'exercice 1
172.16.0.8 0.0.0.3(/30 : 255.255.255.255 − 255.255.255.252)10.30.1.128 0.0.0.31(/27)10.40.0.0 0.0.0.255(/24)host 192.168.10.18010.30.0.0 0.0.1.255(/23)192.168.10.0 0.0.0.127: de .0 à .127, c'est un /25.
Tu avais trouvé ?
Exercice 2 sur 6 Traduire une consigne Réussi À revoir
On veut que les téléphones et les caméras (VLAN 50, 192.168.10.160/28) ne puissent joindre que : le DHCP (relais sur la SVI), le serveur de téléphonie de l'opérateur 198.51.100.20 en SIP (UDP 5060) et pour la voix (UDP 10000 à 20000), et srv-journaux (192.168.10.180) en syslog (UDP 514). Écris l'ACL nommée TELEPHONIE-IN et applique-la sur SW-COEUR.
Voir la réponseMasquer la réponse de l'exercice 2
ip access-list extended TELEPHONIE-IN
remark DHCP vers le relais
permit udp any eq bootpc any eq bootps
remark Signalisation SIP et voix vers l'operateur
permit udp 192.168.10.160 0.0.0.15 host 198.51.100.20 eq 5060
permit udp 192.168.10.160 0.0.0.15 host 198.51.100.20 range 10000 20000
remark Journaux vers srv-journaux
permit udp 192.168.10.160 0.0.0.15 host 192.168.10.180 eq syslog
deny ip any any log
!
interface Vlan50
ip access-group TELEPHONIE-IN in
L'ACL est en entrée de la SVI du VLAN 50, au plus près de la source. Les flux vers l'opérateur passent ensuite par le pare-feu, qui applique ses propres règles. Il faudrait sans doute autoriser aussi le DNS et le NTP si les téléphones en ont besoin : à vérifier avec le responsable.
Tu avais trouvé ?
Exercice 3 sur 6 Trouver les erreurs Réussi À revoir
Un stagiaire veut interdire au VLAN 40 (visiteurs, 192.168.10.0/26) d'atteindre le VLAN 20 (serveurs, 192.168.10.176/28), tout en le laissant sortir sur Internet. Il écrit :
ip access-list extended VISITEURS-IN
permit ip 192.168.10.0 0.0.0.63 any
deny ip 192.168.10.0 0.0.0.63 192.168.10.176 255.255.255.240
!
interface Vlan20
ip access-group VISITEURS-IN in
Relève trois erreurs et corrige.
Voir la réponseMasquer la réponse de l'exercice 3
- L'ordre : la première ligne autorise tout ce qui vient des visiteurs, la seconde n'est jamais atteinte. Le
denydoit venir avant lepermit. - Le masque :
255.255.255.240est un masque de sous-réseau, pas un masque générique. Il faut0.0.0.15. - L'interface et le sens : appliquée en entrée de la SVI du VLAN 20, l'ACL voit le trafic qui vient des serveurs, pas celui des visiteurs. Elle doit être en entrée de la SVI du VLAN 40 (au plus près de la source).
ip access-list extended VISITEURS-IN
permit udp any eq bootpc any eq bootps
deny ip 192.168.10.0 0.0.0.63 192.168.10.176 0.0.0.15
permit ip 192.168.10.0 0.0.0.63 any
!
interface Vlan40
ip access-group VISITEURS-IN in
La ligne DHCP est indispensable : une demande DHCP part de la source 0.0.0.0, qui n'est pas dans 192.168.10.0/26. Sans elle, le refus implicite bloquerait les demandes et les visiteurs n'obtiendraient plus d'adresse. Et pour un vrai Wi-Fi invité, on interdirait tous les réseaux internes, pas seulement les serveurs.
Tu avais trouvé ?
Exercice 4 sur 6 Lire les compteurs Réussi À revoir
Après une matinée de fonctionnement, show access-lists ENTREPOT-IN affiche (0 matches) sur la ligne 40 (HTTPS vers srv-gestion) et un deny final à 4 312 correspondances. Les opérateurs se plaignent que l'application de scan « ne se connecte plus ». Le journal montre de nombreuses lignes :
%SEC-6-IPACCESSLOGP: list ENTREPOT-IN denied tcp 192.168.10.135(51022) -> 192.168.10.179(8443), 1 packet
- Que s'est-il passé ?
- Que corriges-tu ?
- Quelle démarche aurait évité la panne ?
Voir la réponseMasquer la réponse de l'exercice 4
- Les terminaux joignent
srv-gestionsur le port 8443, et non 443 : la règle 40 ne sert jamais et tout part dans ledenyfinal. Sans doute une mise à jour de l'application a changé de port. - Remplacer la règle :
no 40, puis40 permit tcp 192.168.10.128 0.0.0.31 host 192.168.10.179 eq 8443(après avoir vérifié le port auprès de l'éditeur ou du responsable de l'application). - Toute modification d'une application se prépare avec l'équipe réseau (matrice des flux à jour) ; après une mise en service, on surveille les compteurs du
denyfinal et le journal, qui montrent immédiatement le port refusé.
Tu avais trouvé ?
Exercice 5 sur 6 Standard ou étendue, et où ? Réussi À revoir
- On veut empêcher le réseau des visiteurs (
192.168.10.0/26) d'atteindre le seul serveursrv-fichiers, avec une ACL standard. Où la places-tu, dans quel sens ? - Pourquoi ne pas la mettre en entrée de la SVI du VLAN 40 ?
- Quelle ACL serait plus adaptée, et où ?
Voir la réponseMasquer la réponse de l'exercice 5
- Au plus près de la destination : en sortie de la SVI du VLAN 20 (
ip access-group … outsurinterface Vlan20), avecdeny 192.168.10.0 0.0.0.63puispermit any. - Une ACL standard ne regarde que la source : en entrée du VLAN 40,
deny 192.168.10.0 0.0.0.63couperait les visiteurs de tout, Internet compris. - Une ACL étendue en entrée de la SVI du VLAN 40 :
deny ip 192.168.10.0 0.0.0.63 host 192.168.10.178, puis les autres règles. Le trafic interdit est jeté dès son arrivée, et la règle dit précisément ce qu'elle bloque. (Le serveur étant dans le VLAN 20, l'ACL standard en sortie de la SVI du VLAN 20 bloquerait aussi l'accès des visiteurs aux autres serveurs : elle est moins précise.)
Tu avais trouvé ?
Exercice 6 sur 6 Le mot-clé established Réussi À revoir
L'ACL ENTREPOT-IN contient la ligne permit tcp 192.168.10.128 0.0.0.31 eq 22 192.168.10.208 0.0.0.15 established.
- Le poste d'administration
192.168.10.209peut-il ouvrir une session SSH sur le terminal192.168.10.140? - Le terminal
192.168.10.140peut-il ouvrir une session SSH vers192.168.10.209? - Un pare-feu à états aurait-il besoin de cette ligne ?
Voir la réponseMasquer la réponse de l'exercice 6
- Oui : la demande de connexion part du VLAN 99 et sort vers le VLAN 30, elle n'est pas filtrée par
ENTREPOT-IN(en entrée du VLAN 30). Les réponses du terminal (port source 22, drapeau ACK) correspondent à la ligneestablished. - Non : le premier segment d'une connexion (SYN, sans ACK) ne correspond pas à
established, et son port source n'est pas 22. Il tombe sur ledenyfinal. - Non : un pare-feu à états autorise automatiquement les réponses des connexions qu'il a laissé s'ouvrir. On n'écrit que la règle d'ouverture (VLAN 99 vers VLAN 30, TCP 22).
Tu avais trouvé ?