C’est quoi une ACL ?
- ACL = Access Control List
- Access-list = Liste d’accès !
Pour mettre en place des ACL, il faut créer une access-list ET l’appliquer quelque part. Imaginez que vous organisez une soirée privée et que vous ne voulez pas donner l’accès à cette soirée à tout le monde ! Vous allez faire quoi ?
- Créer une liste d’invitées.
- Placer un agent de sécurité devant la porte avec votre liste.
Vous allez donner la consigne suivante à votre agent de sécurité :
Voici ta liste. Pour l’appliquer, rien de plus simple, tu regardes ligne par ligne !!!

- Éric DUBOIS en Basket ? ACCEPTÉ.
- Homme seul en Costard + Cravate ? ACCEPTÉ.
- Femme en Basket ? REFUSE.
- L’équipe de Rugby en Basket ? REFUSÉ.
- Homme seul en Chaussure de ville ? REFUSÉ.
Dans notre cas c’est exactement pareil ! on va
- Créer une access-list.
- Mettre cette access-list en place pour qu’elle puisse être active !
Ce cours va porter trois grands chapitres :
- Création d’une Acess-list.
- Ajouter des règles de flux.
- Mise en place d’une access-list.
Création d'une Access-list
Il existe deux grandes familles d’access-list :
- Standard (Standard) – Filltrage via l’adresse IP Source.
- Extended (Étendue) – Filltrage via l’IP, le port, le protocole et pleins d’autres choses.
Sachant qu’il est possible de créer plusieurs access-list sur un même équipement, il va nous falloir les identités. Comment ?
- Soit par des Nombres (Numbered).
- Soit par des Noms (Named).
Il existe donc 4 types d’access-list :
- Standard Numbered = Standard numéroté de 1 à 99 et de 1300 à 1999.
- Extended Numbered = Étendue Numérotée. de 100 à 199 et de 2000 à 2699.
- Standard Named = Standard Nommée.
- Extented Named = Étendue nommée.
Créer une access-list
Comme nous l’avons vu plus haut, vous avez le choix entre 4 types d’access-list :
Access-list Standard Numbered
R1(config)# access-list <1-99> <1300-1999> ou R1(config)# ip access-list standard <1-99> <1300-1999>
A vous de choisir un numéro compris entre 1 à 99 ou de 1300 à 1999.
Access-list Standard Named
R1(config)# ip access-list standard [WORD]
Access-list Extended Numbered
R1(config)# access-list <100-199> <2000-2699> ou R1(config)# ip access-list extended <100-199> <2000-2699>
A vous de choisir un numéro compris entre 100 à 199 ou de 2000 à 2699.
Access-list Extended Named
R1(config)# ip access-list extended [WORD]
Quelle est la différence entre access-list et ip access-list ?
La réponse :
- access-list est l’ancienne méthode.
- ip access-list est la nouvelle méthode.
La commande access-list :
- Oblige à spécifier le numéro de l’access-list à chaque fois que l’on rajoute une règle de filtrage.
- Supporte que les access-list Numbered. (Numérotée).
Exemple :
R1(config)# access-list 1 permit 192.168.1.0 0.0.0.255 R1(config)# access-list 1 permit host 192.168.2.1
La commande ip access-list :
- Nous fais rentrer dans un sous-menu nous permettant de rajouter directement les règles de filtrage sans rappeler le numéro de l’access-list.
- Supporte les access-list Numbered (Numérotée) et Named (Nommée).
- Permet de rajouter des règles de filtrages entre deux lignes après avoir créé une access-list.
Exemple :
R1(config)# ip access-list standard ACL_LINE_VTY R1(config-std-nacl)# permit 192.168.1.0 0.0.0.255 R1(config-std-nacl)# permit host 192.168.2.1
Conclusion :
- Privilégiez les access-list Named : Un nom est plus parlant qu’un numéro.
- Privilégiez les ip access-list : elles sont plus simples à gérer.
Les règles de flux d'une access-list
Comment est traitée une access-list
Comment un équipement actif utilise cette access-list ?
- Quand un paquet est reçu, les règles sont évaluées du haut vers le bas.
- Dès que le paquet match* une règle de l’access-list, l’évaluation des règles s’arrête.
- À la fin de toutes les règles, le « deny any » (Standard) et le « deny ip any any » (étendue) sont implicites.
* Match = Rencontre ! Le paquet correspond parfaitement à la règle de filtrage (comme un match Tinder !! Paul et Sabine veulent tous les deux se rencontrer ! C’est un match !)
Mise en situation :
Nous avons mis une access-list sur l’interface physique de notre routeur.

Dès qu’un paquet IP arrive sur cette interface, ce paquet va traverser l’access-list suivante :
ip access-list standard LAN_CLIENT permit 192.168.1.0 0.0.0.255 permit 192.168.2.0 0.0.0.255 permit 192.168.3.0 0.0.0.255 permit host 1.1.1.1 permit 192.168.11.0 0.0.0.255 permit 192.168.12.0 0.0.0.255 permit 192.168.13.0 0.0.0.255
Que se dit le routeur :
- Ligne 1 = 1.1.1.1 est-il dans le LAN 192.168.1.0 /24 ? NON
- Ligne 2 = 1.1.1.1 est-il dans le LAN 192.168.2.0 /24 ? NON
- Ligne 3 = 1.1.1.1 est-il dans le LAN 192.168.3.0 /24 ? NON
- Ligne 4 = 1.1.1.1 correspond à l’IP 1.1.1.1 ? OUI !!!
Cette ligne correspond bien au paquet que je viens de recevoir !!! Vu qu’il y a un permis devant, je vais l’autoriser à passer.
- Les autres lignes : Je ne vais pas regarder les lignes qui suivent, car j’ai déjà trouvé quoi faire de ce paquet.
Et si aucune ligne ne correspond au paquet reçu ? Il sera dropé !!!
DROP et Forward
FORWARD* = Le paquet est autorisé, je le laisse passer.
DROP ** = Le paquet est refusé, je le supprime.
* Traduction de Forward = Vers l’avant
** Traduction du mot Drop = Laissez tomber
Conclusion
Il existe une multitude d’options pour les règles de filtrage, pour voir ceci étape par étape, nous allons commencer par les :
- access-list standard (plus simple, moins d’options).
- access-list étendue.
- access-list réflexive.
Configuration d'une access-list standard
Commençons par un petit exemple d’access-list standard :
ip access-list standard LINE_VTY remark ***** LAN Admin réseau ***** permit 10.10.10.0 0.0.0.255 remark ** Serveur de sauvegarde ** permit host 10.10.20.1 permit host 10.10.20.2 remark *********** LOG *********** deny any log
De quoi est composée une règle de flux :
ip access-list standard LINE_VTY [Action] [Adresse IP Source]
Action
- Permit (autorise le flux).
- Deny (Drop le flux).
- Remark (mets un commentaire).
Adresse IP
- any (tout le monde)
- host X.X.X.X (Adresse IP)
- X.X.X.X 0.0.0.255 (Adresse réseau)
R1(config)# ip access-list standard LINE_VTY R1(config-std-nacl)# permit ? A.B.C.D Address to match ! Une adresse réseau any Any source host ! Tout le monde host A single host address ! Une adresse IP
Que se passe-t-il quand vous voulez matcher une adresse réseau ?
R1(config-std-nacl)# permit 192.168.10.0 ? A.B.C.D Wildcard bits ! Mettre le masque réseau en Wildcard
Il faut spécifier le Wildcard mask.
Hop-hop-hop-hop-hop-hop !!!! Wildcard mask ??? C’est quoi ça ?
Wildcard = Masque inversé.
- Un masque de 255.255.255.0 nous donnera un wildcard de 0.0.0.255.
- Un masque de 255.255.0.0 nous donnera un wildcard de 0.0.255.255.
- Un masque de 255.0.0.0 nous donnera un wildcard de 0.255.255.255.
Comment j’ai fait ?
J’ai utilisé la formule suivante : Wildcard = 255 – Masque.
Mais pourquoi les wildcard ? à quoi ca sert ? nous n’aurions pas pu mettre simplement la valeur de notre masque ?
Pour répondre à cette question, je vous invite à jeter un coup d’oeil sur l’article Wildcard. Mais pas pour le moment …. Je vous conseille de bien maîtriser les access-list afin de comprendre la plus-value qu’apportent les Wildcard.
Configuration d'une access-list étendue
Une access-list étendu possède beaucoup plus d’options que les access-list standard :
ip access-list extended ACL_TEST [Action] [Protocole] [@IP Src] [Port Source] [@IP Dest.] [Port Dest.] [Options]
NB : Nous avons déjà vu la partie [Action] et [@IP Source] dans le chapitre sur les access-list standard
Protocole
Les plus courants
- ip (Tout protocole – pas de notion de port).
- tcp (protocole tcp).
- udp (protocole udp).
- icmp (ping, traceroute).
Routage dynamique
- ospf.
- eigrp.
Tunneling.
- esp.
- gre.
- ipinip.
Et pleins d’autres …
Port
- eq (port égal à XXX ).
- gt (port supérieur à XXX).
- lt (port inférieur à XXX).
- neq (tous les ports sauf le port XXX).
- range X-Y (tous les ports compris entre X et Y).
Options
- log (informe notre serveur Syslog lorsque le flux est matché).
Voici un exemple d’access-list étendue :
R1(config)# ip access-list extended ACL_CLIENTS_VERS_SERVEUR
R1(config-ext-nacl)# remark -------------------------------------------------------------
R1(config-ext-nacl)# remark ACTIVE DIRECTORY
R1(config-ext-nacl)# remark -------------------------------------------------------------
R1(config-ext-nacl)# remark -------------------------- LDAP -----------------------------
R1(config-ext-nacl)# permit tcp [@Rsx-Client] [Wildcard] gt 1023 host [@IP_AD1] eq 389
R1(config-ext-nacl)# permit udp [@Rsx-Client] [Wildcard] gt 1023 host [@IP_AD1] eq 389
R1(config-ext-nacl)# remark -------------------------- RPC ------------------------------
R1(config-ext-nacl)# permit tcp [@Rsx-Client] [Wildcard] gt 1023 host [@IP_AD1] eq 135
R1(config-ext-nacl)# remark ---------------------- RPC Dynamique ------------------------
R1(config-ext-nacl)# permit tcp [@Rsx-Client] [Wildcard] gt 1023 host [@IP_AD1] gt 1023
R1(config-ext-nacl)# remark ------------------------ Kerberos ----------------------------
R1(config-ext-nacl)# permit tcp [@Rsx-Client] [Wildcard] gt 1023 host [@IP_AD1] eq 88
R1(config-ext-nacl)# permit udp [@Rsx-Client] [Wildcard] gt 1023 host [@IP_AD1] eq 88
R1(config-ext-nacl)# remark --------------------------- SMB ------------------------------
R1(config-ext-nacl)# permit tcp [@Rsx-Client] [Wildcard] gt 1023 host [@IP_AD1] eq 445
R1(config-ext-nacl)# remark --------------------------- GPO ------------------------------
R1(config-ext-nacl)# permit icmp [@Rsx-Client] [Wildcard] host [@IP_AD1] echo
R1(config-ext-nacl)# permit icmp [@Rsx-Client] [Wildcard] host [@IP_AD1] echo-reply
R1(config-ext-nacl)# remark -------------------------------------------------------------
R1(config-ext-nacl)# remark DENY ANY ANY LOG
R1(config-ext-nacl)# remark -------------------------------------------------------------
R1(config-ext-nacl)# deny ip any any log
Une access-list étendu propose des centaines d’options !!!! Vous pouvez aussi matcher un flux en fonction :
- Du champ TOS.
- Si la connexion est déjà établie ou non.
- Mettre une plage horaire
- Matcher les SYN SYN-ACK ACK d’une connexion TCP.
- Et tellement d’autres options !!!
En gros vous avez une multitude d’options ! Faire un article sur toutes ces options prendrait un temps fou !!!!! Peut-être plus tard, mais pour le moment, restons dans les généralités !
Configuration d'une access-list réflexive
Mise en évidence
- Je connecte deux PC entre eux.
- Je les mets dans le même réseau.
- Je veux vérifier ma configuration avec la commande ping.
Problème = Le Pare-Feu de mes PC est activé.
Solution = Désactiver le pare-feu !
Mais que s’est-il passé réellement ?

Notre firewall :
- Nous permet de faire des ping.
- Ne permet pas une personne externe de nous pinger.
Mais comment se fait-il que notre Firewall laisse passer la réponse à notre ping ?
Grâce à une règle de filtrage réflective !
Notre Firewall voit notre requête et comprend qu’elle va recevoir une réponse d’ici peu de temps. Elle autorise donc le destinataire du ping à répondre au ping dans un laps de temps donné.
configuration
Reprenons notre exemple d’ACL étendu. Si nous mettons cette ACL en place, nous allons filtrer uniquement les flux CLIENTS => SERVEURS. Mais que fais t’ont des flux SERVEURS => CLIENTS ?
Nous allons créer une deuxième ACL, identique à la première, mais en inversant les sources et les destinations ? Tout en sachant que nos serveurs ne vont jamais interroger directement nos clients sur ces flux, nous allons mettre en place des ACL réflexives ! il suffit simplement de rajouter cette commande à chaque fin de ligne :
- reflect [NOM_DE_L’ACL_DYNAMIQUE]
Puis appliquer cette ACL DYNAMIQUE à une ACL étendue.
- evaluate [NOM_DE_L’ACL_DYNAMIQUE]
R1(config)# show run | begin ip access-list ip access-list extended ACL_CLIENTS_VERS_SERVEUR remark ------------------------------------------------------------- remark ACTIVE DIRECTORY remark ------------------------------------------------------------- remark -------------------------- LDAP ----------------------------- permit tcp [@Rsx-Client] [Wildcard] gt 1023 host [@IP_AD1] eq 389 reflect ACL_DYN_CLT-SRV permit udp [@Rsx-Client] [Wildcard] gt 1023 host [@IP_AD1] eq 389 reflect ACL_DYN_CLT-SRV remark -------------------------- RPC ------------------------------ permit tcp [@Rsx-Client] [Wildcard] gt 1023 host [@IP_AD1] eq 135 reflect ACL_DYN_CLT-SRV remark ---------------------- RPC Dynamique ------------------------ permit tcp [@Rsx-Client] [Wildcard] gt 1023 host [@IP_AD1] gt 1023 reflect ACL_DYN_CLT-SRV remark ------------------------ Kerberos ---------------------------- permit tcp [@Rsx-Client] [Wildcard] gt 1023 host [@IP_AD1] eq 88 reflect ACL_DYN_CLT-SRV permit udp [@Rsx-Client] [Wildcard] gt 1023 host [@IP_AD1] eq 88 reflect ACL_DYN_CLT-SRV remark --------------------------- SMB ------------------------------ permit tcp [@Rsx-Client] [Wildcard] gt 1023 host [@IP_AD1] eq 445 reflect ACL_DYN_CLT-SRV remark --------------------------- GPO ------------------------------ permit icmp [@Rsx-Client] [Wildcard] host [@IP_AD1] echo reflect ACL_DYN_CLT-SRV permit icmp [@Rsx-Client] [Wildcard] host [@IP_AD1] echo-reply reflect ACL_DYN_CLT-SRV remark ------------------------------------------------------------- remark DENY ANY ANY LOG remark ------------------------------------------------------------- deny ip ay any log
R1(config)# ip access-list extended ACL_SERVEUR_VERS_CLIENTS R1(config-ext-nacl)# evaluate ACL_DYN_CLT-SRV R1(config-ext-nacl)# exit
Et enfin, nous allons appliquer nos ACL sur l’interface vlan VLAN_CLIENT.
R1(config)# interface vlan 10 R1(config-if)# description VLAN_CLIENT R1(config-if)# ip access-group ACL_CLIENTS_VERS_SERVEUR out R1(config-if)# ip access-group ACL_SERVEUR_VERS_CLIENTS in
Que se passe-t-il ?
- Dès qu’un flux est matché par notre access-list ACL_CLIENTS_VERS_SERVEUR, une règle de filtrage temporaire autorisant la réponse à cette requête vas être créée de manière dynamique dans l’ACL_SERVEUR_VERS_CLIENTS.
- Lorsque la réponse à la requête est passée par l’access-list réflexif, cette règle de flux sera supprimée.
Vérification
SW_D_01# show access-lists [...]
Reflexive IP access list ACL_DYN_CLT-SRV
permit icmp host X.X.X.X host X.X.X.X (12 matches) (time left 275)
Extended IP access list ACL_SERVEUR_VERS_CLIENTS
10 evaluate ACL_DYN_CLT-SRV [...]
Appliquer une ACL
Sur une interface physique

R1(config)# interface FastEthernet 0/1 R1(config-if)# description VLAN_CLIENT R1(config-if)# ip access-group ACL_R1_VERS_WAN out R1(config-if)# ip access-group ACL_WAN_VERS_R1 in
Sur une interface vlan

SW_D_01(config)# interface vlan 10 SW_D_01(config-if)# description VLAN_CLIENT SW_D_01(config-if)# ip access-group ACL_VLAN_10_VERS_WAN in SW_D_01(config-if)# ip access-group ACL_WAN_VERS_VLAN_10 out
Sur une Line vty

R1(config)# line vty 0 4
R1(config-line)# access-class ACL_SSH in
Conclusion
Les conclusion de cette leçon sont les suivantes :
- Une ACL étendue ne remplacera jamais un FIREWALL !!! ACL = Couche 4 | Firewall = Couche 7.
- Les flux récurrents sont à matcher en début d’ACL afin de ne pas surcharger le CPU de notre équipement.
- Une ACL se place toujours au plus près de la source.
- Vous voulez rajouter un flux ?
- Désactiver l’ACL.
- Effacer l’ACL.
- Insérer la nouvelle ACL.
- Appliquer la nouvelle ACL.
Sur le même thème
Merci de votre soutien et de votre fidélité ! Ce site existe grâce à vous et je ne vous remercierais jamais assez !