Les Access-list (ACL) CISCO

Article de blog | Finger In The Net

Les Access-list (ACL) CISCO

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 BasketACCEPTÉ.
  • Homme seul en Costard + CravateACCEPTÉ.
  • Femme en BasketREFUSE.
  • L’équipe de Rugby en BasketREFUSÉ.
  • 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.
Chapitre 1

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.
Chapitre 2

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.

Un paquet IP arrive sur notre routeur
Un paquet IP arrive sur 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.
Chapitre 3

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.

Chapitre 4

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 !

Chapitre 5

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 ?

Mise en évidence des ACL réflexive
Mise en évidence des ACL réflexive

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 [...]
Chapitre 6

Appliquer une ACL

Sur une interface physique

Interface physique
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

ACL - Interface Vlan
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

ACL - Line VTY ACL – Line VTY

R1(config)# line vty 0 4
R1(config-line)# access-class ACL_SSH in
Chapitre 7

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.
Merci de votre attention

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 !

Noël NICOLAS

Auteur de l'article

Expert Réseau
15 ans d’expérience
CCNP Routing and Switching
Fondateur du site FingerInTheNet

Eric JOUFFRILLON

Co-auteur de l'article

Expert SATCOM
Technicien Réseau
17 ans d’éxpérience déploiement réseau SATCOM
Spécialisé LFN (Long Fat Network).Diffusion vidéo et QOS.

CURSUS DE FORMATION

Administrateur Réseau