Access-list (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.

 

Principe de fonctionnement


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ée.
– 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 !!!

 

  • Eric DUBOIS en BasketACCEPTÉ.

  • Homme seule en Costard + CravateACCEPTÉ.

  • Femme en BasketREFUSE.

  • L’équipe de Rugby en BasketREFUSÉ.

  • Homme seule 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 famille 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 identifées. Comment ?

– Soit par des Nombres (Numbered).
– Soit par des Noms (Named).

Il existe donc 4 types d’access-list :

Standard Numbered = Standard Numérotée 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.

 

Différents type d'access-list

Différents type d’access-list

 

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]

 

Quel 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éer 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 simple à gérer.

 

Ajouter des règles de flux dans notre access-list


Comment est traité 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) est implicite.

* 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 t’il dans le LAN 192.168.1.0 /24 ? NON
– Ligne 2 = 1.1.1.1 est t’il dans le LAN 192.168.2.0 /24 ? NON
– Ligne 3 = 1.1.1.1 est t’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 à un permit devant, je vais l’autoriser à passer.

– Les autres lignes : Je ne vais pas regarder les lignes qui suit car j’ai déjà trouvé quoi faire de ce paquet.

Et si aucune ligne ne correspond au paquet reçu ? Il sera droper !!!

Fonctionnement d'une access-list

Fonctionnement d’une access-list

 

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

 

 

Composition d’une règle de flux


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.

 

Access-list standard


Commencons 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é 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 (Met 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.

Calcul du Wildcard

Calcul du Wildcard

Mais pourquoi les wildcard ? à quoi ca sert ? nous aurions pas pu mettre simplement la valeur de notre masque ?

Pour répondre à cette question, je vous invite à jetez 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’apporte les Wildcard.

 

Access-list étendue


Une access-list étendu possède beaucoup plus d’option 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 égale à 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 ay any log

Une access-list étendue propose des centaines d’options !!!! Vous pouvez aussi matcher un flux en fonction :

– Du champs 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 prendrais un temps fou !!!!! Peut être plus tard, mais pour le moment restons dans les généralités !

 

ACL réflexive


Mise en évidence


– Je connecte deux PC entre eux.
– Je les met dans le même réseau.
– Je veux vérifier ma configuration avec la commande ping.

Problème = Le Pare-Feu de mes PC sont activés.
Solution = Désactiver le pare feu !

Mais que c’est t’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 t-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ée.

 

Mise en place


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éflexive !

il suffit simplement de rajouter cette commande à chaque fin de ligne :

reflect [NOM_DE_L’ACL_DYNAMIQUE]

Puis appliquer cette ACL DYNAMIQUE à une ACL étendu.

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éer de manière dynamique dans l’ACL_SERVEUR_VERS_CLIENTS.

– Lorsque la réponse à la requête est passé par l’access-list reflexive, 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


[...]

 

Mise en place des 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

 

Conclusion


– Une ACL étendue ne remplacera jamais un FIREWALL !!! ACL = Couche 4 | Firewall = Couche 7.
– Les flux récurrent 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.

 

En espérant que cet article vous a été utile ! Hésitez pas à me la faire savoir !!

FingerInTheNet.com

Noël NICOLAS

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

10
Poster un Commentaire

Laisser un commentaire

  Subscribe  
plus récents plus anciens plus de votes
Me notifier des
fsr
Invité
fsr

Merci beaucoup pour le travail et bon résumé

KayouMT
Invité
KayouMT

Félicitations ! Quelques questions. 1 – Dans la section « ACL réflexive », je suis un peu confus au sujet de ACL_DYN_CLT-SRV. Est-ce que cette ACL est crée automatiquement par l’IOS, à partir du moment où on spécifie « reflect » ? 2 – Ce que la conclusion dit « Une ACL se place toujours au plus près de la source », ce n’est pas ce que j’avais appris sur les ACLs. J’avais appris que « l’ACL standard doit être très proche de la cible » et « l’ACL étendue doit être très proche de la source ». 3 – Une différence important entre l’ACL Standard et l’ACL est étendue… Read more »

constantin
Invité
constantin

pourriez m’aider sur comment configurer un firewall ASA

KayouMT
Invité
KayouMT

Merci beaucoup pour les réponses, Noel. C’est OK pour 3 et 4. Sur 3, tu fais bien de me corriger. C’est « ip access-list » (et non l’ACL étendu) qui offre les avantages que j’ai cités. Sur 1 ; il y a encore une petite confusion. ACL_CLIENTS_VERS_SERVEUR et ACL_SERVEUR_VERS_CLIENTS sont définis dans R1, mais sont configurés sur une interface de SW_D_01. À ma connaissance ; une ACL est locale à un routeur (ou une switch). Sur 2 ; dans les livres de CCNA, les règles sont très claires. Ils disent pratiquement tous ce qui est dit dans le blog suivant : http://www.ccnablog.com/acls-access-control-lists-part-i/.… Read more »

kayoumt
Invité
kayoumt

Salut Noel. Je te remercie pour la correction du point 1. Je le testerai dans un lab, quand je vais avoir un peu plus de temps. Concernant le point 2 ; je ne pense pas que ça soit une bonne idée que tu écrives un nouvel article pour ça. Il faut évidemment éviter « de semer plus de troubles ». En réalité, il n’y a pas de contradiction entre ce que tu dis et ce que le CCNA dit. C’est simplement que vous ne l’abordez pas sous le même angle. Toi, tu développes les différentes problématiques qu’on peut régler avec l’Étendu ou… Read more »

kayoumt
Invité
kayoumt

Re-Salut. J’ajoute un point-5 et non des moins importants. Le schéma « Mise en évidence des ACL réflexive » aurait, selon moi, besoin de beaucoup d’améliorations. L’enjeu ici, selon moi, ce n’est pas l’activation (ou la désactivation) du firewall sur le PC. L’enjeu c’est l’activation des Reply ICMP dans une Switch ou Routeur. De ce fait ; il est important que tu mettes le Routeur (ou le Switch) entre les deux PCs. Pour exprimer la problématique de l’ACL réflexive, les deux PCs doivent être prêts à traiter des ICMP Request/Reply. Les exceptions doivent donc être mises en place, de facto, sur le… Read more »