Table of Contents
acl
ACL
Les ACLs pour Access Control List sont implémentées sur les switchs et routeurs CISCO ; c'est un mécanisme de filtrage de paquets. Il existe 3 types d'ACLs :
- RACL (Routed ACL) : s'applique en “in” ou en “out” sur une interface de routage (niveau 3).
- VACL (Vlan ACL) : s'applique dans ou en dehors d'un VLAN ; n'a pas de sens.
- PACL (Port ACL) : filtre le trafic L2 sur un port de type “switchport” (niveau 2) via une MAC ACL.
Par convention ou par abus de langage, on appelle souvent ACLs les RACLs (se sont de loin les plus utilisées). Dans la suite de cet article nous utiliserons cette contraction.
Il existe les ACLs standards (numérotées de 1-99 ou 1300-1999) et les ACLs étendues (numérotées 100-199 ou 2000-2699).
- ACLs standards : elles travaillent au niveau 3 de la pile OSI et uniquement sur les adresses IPs source. Chaque ligne s'empile à la suite des précédentes ; pour supprimer une ligne il faut supprimer l'ACL entière et la réécrire sans ladite ligne.
(config)#ip access-list <numéro entre 1-99> {permit | deny} <ip source> [<wildcard>]
- ACLs étendues : elles travaillent au niveau 3/4 de la pile OSI = on peut tester également les protocoles de niveau 4 (tcp, udp) et notamment les numéros de port. Elles sont de la forme :
(config)#access-list <numéro> {permit | deny} <procole> <adresse src> <wildcard src> [<port src]] <adresse dst> <wildcard dst> [<port dst>] [established] [log]
- ACLs nommées : elle peuvent être de type standard ou étendues ; on peut supprimer les lignes indépendamment.
(config)#ip access-list <standard | extended> <nom_de_l'ACL> (config-std-nacl)#permit ip host 10.0.0.1 host 10.0.1.1 log
Les ACLs standards doivent être placées au plus près de la destination, alors que les ACLs étendues doivent être placées au plus près de source.
- ACLs additonnelles :
- ACLs dynamiques : l'utilisateur s'authentifie sur un routeur, qui va charger une ACL sur mesure en fonction du profil.
- Reflexive ACLs : permet de passer en staful = on permet un traffic de passer uniquement s'il est déjà passé dans l'autre sens sur une autre ligne de l'ACL. C'est plus fin que le mot clé established des ACLs étendues.
- Time-based ACLs défini des critère de date/time pour l'application d'une ACL.
On applique une access-list sur une interface en “in” ou en “out” (entrée ou sortie de l'interface) :
Router(config)#interface fa0/0 Router(config-if)#access-group 1 {in | out}
Une ACL est lue de manière séquentielle = ligne 1 puis ligne 2, etc. Si la ligne 1 matche, le routeur applique la règle pour le paquet et sort de l'ACL. Ainsi, si plusieurs lignes conviennent pour un même paquet, seule la première sera appliquée.
ip access-list resequence
Voici une manière habile de modifier une ACL “proprement”, c'est-à-dire de la façon la plus efficiente. Soit l'ACL étendue suivante :
#show access-lists Extended IP access list 101 1 permit ip host 10.0.0.1 host 10.0.1.1 2 permit ip host 10.0.0.1 host 10.1.1.1 3 deny tcp host 10.2.1.1 host 10.3.1.1 eq www
On veut ajouter la ligne deny tcp ip host 10.0.0.1 host 10.1.1.1 eq www
en #2. La façon “classique” est de supprimer l'ACL et de la réécrire en insérant la ligne supplémentaire.
La façon la plus rapide est de faire comme ceci :
(config)#ip access-list resequence 101 10 10 (config)#ip access-list extended 101 (config-ext-nacl)#11 deny tcp ip host 10.0.0.1 host 10.1.1.1 eq www (config)#ip access-list resequence 101 10 10
Dans l'ordre, on renumérote les lignes de l'ACL en commençant à 10, et de 10 en 10 (10, 20, 30) ; puis on édite l'ACL pour insérer notre ligne entre les lignes 10 et 20 (exclues) ; enfin, pour avoir une numérotation “propre”, on renumérote l'ACL pour avoir un incrément de 10 entre chaque numéro de ligne.
NB : pour remplacer une ligne :
- on insère un ligne avant celle à remplacer (on préfixe la ligne par son numéro de séquence :
25 permit etc..
) - on supprime la ligne à remplacer (
no <No_Sequence>
) - on renumérote les lignes de l'ACL (
resequence
)
ACL de niveau 2
Exemple d'ACL de niveau 2, appliqué sur une interface physique :
Switch(config)# mac access-list ext Filter_mac Switch(config-ext-macl)# deny host XXXX.XXXX.XXXX any Switch(config-ext-macl)# permit any any Switch(config-ext-macl)# exit Switch(config)# int g1/0/40 Switch(config-if)# mac access-group Filter_mac in
VACL
Les VLAN Access-list ou VLAN access maps sont des ACLs de niveau 2 ou 3, qui s'appliquent sur un VLAN ; elles peuvent donc filtrer du trafic par adresse MAC, mais sont assez peu utilisées.
Pour les mettre en place, il faut spécifier une ou plusieurs map sequence qui associent une action à une ACL ; si un permit de l'ACL “matche”, l'action est appliquée ; si c'est un “deny”, les map sequence suivantes sont vérifiées jusqu'à ce que ça matche. Si un paquet ne match aucune ligne et qu'au moins une ACL de son type est configurée, par défaut le paquet sera droppé.
Ici donc, comme dans les route-map, les termes permit et deny ne sont pas à prendre au sens strict mais en fonction du contexte.
! déclaration de l'ACL niveau 2 mac access-list extended MAC-ACL permit host 0050.5611.05b1 any ! Déclaration de l'access map 1 ; le numéro de séquence (10 ici) est optionnel ; ! il permet de déterminer un ordre d'application dans le cas de multiples access-map ! On filtre (match) sur les adresses MAC (|IP|IPX) en spécifiant "mac address", suivi du nom de l'ACL filtrante ! L'action effectuée en cas de match est de forwarder les paquets vlan access-map 1 10 match mac address MAC-ACL action forward
! Pour dropper le reste on doit créer un second statement (20) vlan access-map 1 20 action drop
! On associe l'access-map qu'on vient de mettre en place aux VLAN 11 et 12 vlan filter 1 vlan-list 11,12
Dans l'exemple précédent on filtre les flux des VLANs 11 et 12 pour ne forwarder que les paquets de la machine d'adresse MAC 0050.5611.05b1.
time-based
Cisco permet aussi, avec ses IOS récents, d'inclure la notion de temps sur les ACLs.
Voici un exemple :
! définiton de la période time-range semaine_de_travail periodic weekdays 8:00 to 17:00 ! ! utilisation dans l'ACL ip access-list extended 101 permit tcp 10.0.0.0 0.0.0.255 172.16.1.0 0.0.0.255 eq ssh time-range semaine_de_travail