CCNA2 : Chapitre 9

Listes de contrôle d'accès (ACL)

Qu'est-ce donc, qu'une ACL ?

C'est simplement une petite (ou pas) liste de commandes qui va déterminer si tel paquet destiné à telle destination et venant de telle source va pouvoir passer ou non.

Pour détailler un peu : ça limite le trafic réseau, contrôle le flux du trafic, fournit un niveau de sécurité en plus, filtre le trafic en fonction de son type (accepter les mails mais refuser le telnet...) et filtre les hôtes (accepte ou non l'accès au réseau.)

Conversation TCP

Quand un PC source discute avec un serveur (WEB, par exemple) c'est le protocole TCP qui intervient. C'est aussi lui qui se charge de répartir les données en segments pour IP avant l'envoi d'un e-mail, avant la consultation d'une page WEB... etc. Il fournit un service fiable (avec accusé de réception), un service de contrôle de flux (pour ajuster la taille des paquets) et un mécanisme de contrôle de l'encombrement.

Le protocole TCP sert également à identifier le port correspondant au service demandé. (HTTP=80, SMTP=25, FTP=21...). D'ailleurs : Voici un petit rappel :

Plage de numéros de port Groupe de ports
0 à 1023 Ports réservés
De 1024 à 49151 Ports inscrits
De 49152 à 65535 Ports dynamiques et/ou privés

Filtrage des paquets

La liste de contrôle d'accès est comme une suite d'instructions d'autorisations et de refus séquentielle. Chaque instruction est appelée ACE (Entrée de Contrôle d'Accès). Lorsqu'un routeur de filtrage va disséquer les paquets et comparer avec l'ACL s'il peut passer ou non, il va intervenir sur la couche 4 des paquets (il récupère le port source et destination UDP/TCP). Le filtrage intervient aussi sur la couche 3 : Le routeur va aussi analyser l'@IP source & destination ainsi que le type de message ICMP. Voici un petit schéma qui va nous servir d'exemple :


Fonctionnement des ACL

Bon je vais essayer de vous faire un ptit dessin :

Paquet ===> Routeur ===> Paquet

Bon... On oublie ce dessin tous ensemble et je vais tenter de m'exprimer de façon plus claire. Il y a deux "sortes" d'ACL qui vont intéragir avec le paquet ! Le paquet arrive et est étudié par l'ACL dite "entrante" si le paquet n'a pas le droit d'entrer, on le tej. Ça permet de réduire la charge des recherches de routage en cas d'abandon du pov paquet. S'il est autorisé, il est soumis au routage ! Et quand il est soumis au routage, il est envoyé vers l'interface de sortie et traité par l'ACL "sortante" :D ! Cette ACL est efficace lorsqu'un filtre identique est appliqué aux paquets venant de plusieurs interfaces d'entrée avant de quitter la même interface de sortie.


Types d'ACL

Il y a deux types d'ACL ! L'ACL standard et l'ACL étendue.

ACL Standard

L'ACL standard peut être utilisée pour gérer le trafic uniquement depuis des adresses IPv4 sources. La destination et les ports ne sont pas concernés par ces ACL. Exemple :

access-list 10 permit 192.168.15.0 0.0.0.255

À cause de l'instruction dite "implicite" : "deny any", tout ce qui n'est pas dans le réseau 192.168.15.0/24 sera refusé.


ACL Étendue

Les ACL étendues filtres les critères suivants : Type du protocole, IPv4 source & destination, Ports UDP/TCP source & destination. Exemple :

access-list 105 permit tcp 192.168.15.0 0.0.0.255 any eq 80

Ici, on autorise le réseau 192.168.15.0/24 à entrer sur un réseau IPv4 quelconque tant que le port destination est : 80. Le "eq" veut dire "equal" ou "égal", on pourrait aussi mettre "neq" pour non égal, "gt" pour supérieur et "lt" pour inférieur.


Bien nommer ses ACL

Je vois que tu as nommé tes derniers exemples avec les numéros 10 et 105 ? Il y a une raison particulière ?

Oui ! Si vous voulez nommer vos listes avec des numéros, voici les conseils à suivre :

  • De 1 à 99 et 1300 à 1999 : Pour les ACL standards
  • De 100 à 199 et 2000 à 2699 : Pour les ACL étendues

Maintenant, si vous voulez nommer vos ACL avec des lettres, voici quelques conseils :

  • Les noms doivent se composer uniquement de caractères alphanumériques
  • Écrivez les noms en MAJUSCULE
  • Pas d'espaces, pas de signes de ponctuation
  • Vous pourrez, par la suite, ajouter ou supprimer des entrées à l'ACL
Les plages que tu utilises sont étranges ? Pourquoi je ne peux pas utiliser les numéros 200 à 1299 ?

Ce sont des plages déjà réservées par des protocoles, elles ne sont pas utilisables.


Les masques génériques

Les ACL utilisent les masques génériques ! Nous avons déjà vu ça dans le cours sur le VLSM. Le masque génériques correspond à la ligne bleue du début du cours, dans le tableau !


Les directives générales

Écrire des ACL peut se montrer difficile ! Pour nous aider, il existe quelques conseils :

  • Mettez des ACL sur le routeur par-feu entre le réseau interne et un réseau externe
  • Mettez des ACL sur un routeur situé entre deux sections de votre réseau afin de contrôler le trafic
  • Mettez des ACL sur les routeurs situés à la périphérie de votre réseau, cela permet de protéger votre réseau interne du réseau externe
  • Mettez des ACL pour tout protocole réseau configuré sur les interfaces de routeur périphérique

Ainsi qu'une règle de 3 (que j'appelle aussi la règle DIP) :

  • Une ACL par Direction
  • Une ACL par Interface
  • Une ACL par Protocole

Quelques méthodes sont également recommandées, comme par exemple :

Directive Avantage
Adaptez vos ACL à la stratégie de sécurité de l'entreprise Vous implémenterez des instructions relatives à la sécurité organisationnelle
Faire une description préalable des tâches que devront faire les ACL Cela évitera les soucis éventuels d'accès par mégarde
Notez vos ACL dans un éditeur de texte Créez une bibliothèque d'ACL réutilisables :)
Testez vos ACL avant de les mettre en prod ! Évitez les erreurs coûteuses :/

Placement des ACL

Il y a aussi une façon de bien situer les ACL pour les ACL étendues ET pour les ACL standards :

  • ACL étendues : Placez les le plus proche possible de la source à filtrer ! Comme ça le trafic "qui va être refusé" ne traverse pas l'intégralité du réseau avant de se faire rejeter...
  • ACL standards : Les ACL standards ne prennent pas en compte la destination des paquets... Placez-les donc le plus proche possible de la destination ! Sinon ça empêchera le trafic d'accéder à tous les autres réseaux via l'interface à laquelle l'ACL est appliquée

Entrant / Sortant

Lorsque vous configurez une access-list en mode configuration globale, il s'agit d'une access-list entrante. Pour configurer une access-list sortante voici ce qu'il faut faire :


Routeur(config)# access-list 2 permit 192.168.15.0 0.0.0.255
Routeur(config)# interface serial 0/0/1 (interface de sortie)
Routeur(config-if)# ip access-group 2 out
									

Et voilà ! Votre ACL sera étudiée pour chaque paquet sortant de 0/0/1 :) On peut aussi le faire en ACL nommée :


Routeur(config)# ip access-list sttandart NO_ACCESS
Routeur(config-std-nacl)# deny host 192.168.15.15
Routeur(config-std-nacl)# permit any
Routeur(config-std-nacl)# exit
Routeur(config)# interface g0/1 (interface de sortie)
Routeur(config-if)# ip access-group NO_ACCESS out
									
Les ACL nommées utilisent donc "ip access-list" alros que les ACL standards normales utilisent "access-list".

Il est aussi possible d'ajouter des commentaires dans les ACL avec la commande remark :


Routeur(config)# access-list 2 remark Voila un commentaire
- - -
Routeur(config)# ip access-list standard NO_ACCESS
Routeur(config-std-nacl)# remark voila un commentaire nommé
									

Sécuriser la connexion admin

Maintenant, nous allons voir comment utiliser les access-list pour sécuriser le "vty". C'est assez simple : il suffit de créer une access-list qui accepte le réseau admin et qui refuse les autres puis de lier cette ACL au vty.


Routeur(config)# access-list 21 permit 192.168.15.0 0.0.0.255
Routeur(config)# access-list 21 deny any
Routeur(config)# line vty 0 4
Routeur(config-line)# login local
Routeur(config-line)# transport input ssh
Routeur(config-line)# access-class 21 in
Routeur(config-line)# exit
									

ACL IPv6

En IPv6, vous ne pouvez créer des ACL que si elles sont nommées ! Sinon ben... ça fonctionne pareil que l'IPv4 xD Mais il y a quand même trois différences :

  • La commande ip access-group (en IPv4) permet d'appliquer une ACL à une interface IPv4 ! Vous vous souvenez ? Ben en IPv6 la commande est changée par : ipv6 traffic-filter
  • En IPv6, il n'y a pas de masque générique ! (La ligne bleue du tuto sur VLSM ;)
  • En IPv4, il y a toujours une instruction implicite comme deny any ou deny any any, en IPv6, c'est la commande qui change : permit icmp any any nd-na ainsi que permit icmp any any nd-ns (oui oui, il y en a deux.) Il s'agit de deux annonces (ND pour Neighbor Discovery : Découverte de voisins et NA pour Neighbor Advertissement : Annonce de voisins)

CCNA2 : Chapitre 9