VLAN Access-List (VACL)

Les ACLs (Access Control Lists) traditionnelles, aussi parfois appelées RACL (Router-based ACL) nous permettent de filtrer du trafic qui passe d’un réseau à un autre, donc dans le cas de VLANs, … le trafic qui est routé d’un VLAN à l’autre. En aucun cas celles-ci ne permettent de filtrer le trafic qui circule au sein d’un VLAN. Pourtant … c’est faisable…

Pour cela on fait appel aux VACLs (Vlan Access Control List), celles-ci, une fois appliquées à un VLAN vont nous permettre d’autoriser ou non la propagation d’une trame et même éventuellement de contrecarrer la logique de commutation du switch en redirigeant celle-ci vers une interface spécifique.

Voici comment configurer ces VACLs…

La topologie

vacl

Nous avons ici trois routeurs, qui serviront ici de simples hôtes dans un VLAN.

  • R1 : 192.168.0.1/24
  • R2 : 192.168.0.2/24
  • R3 : 192.168.0.3/24

Le switch (c3750-1) est ici l’unique élément intéressant. Afin de concentrer le config sur les VACLs, tous les ports de celui-ci sont placées dans le VLAN10, en mode accès.

Configuration initiale du switch

3750-1(config)#vlan 10
3750-1(config-vlan)#exit
3750-1(config)#interface range fastEthernet1/0/1-24
3750-1(config-if-range)#switchport mode access
3750-1(config-if-range)#switchport access vlan 10
3750-1(config-if-range)#spanning-tree portfast
3750-1(config-if-range)#exit

Petits tests de routine, R1,R2 et R3 doivent pouvoir communiquer sans problème…

R1#ping 192.168.0.2

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.0.2, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 1/2/4 ms
R1#
R1#ping 192.168.0.3

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.0.3, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 1/2/4 ms
R1#
R2#ping 192.168.0.3

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.0.3, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 1/3/4 ms
R2#

Passons maintenant aux VACLs…

Objectif de la configuration

Alors que sans VACLs, les trois routeurs peuvent communiquer entre eux sans problème, nous allons faire en sorte que R1 puisse communiquer avec R2 et R3 … mais que R2 et R3 ne puissent pas communiquer entre eux.

Configuration de la VACL

De manière générale, une VACL fonctionne sur un principe similaire à celui des route-maps. Il s’agit d’une liste ordonnée de règles, chacune ayant un numéro de séquence. Pour chacune de ces règles nous devons identifier le trafic correspondant à laide d’une clause « match », à laquelle nous ferons correspondre une « action » qui peut être l’une des trois suivantes:

  • forward: le trafic est traité normalement en suivant la logique de commutation du switch.
  • drop: le trafic est rejeté.
  • redirect: le trafic est redirigé vers une interface spécifique, indépendamment de la logique de commutation du switch.

Les clauses « match » utilisent des ACL (soit IP, soit MAC). C’est donc par là que nous devrons commencer.

Chose importante… A l’instar d’une ACL classique, les VACL rejettent tout ce qui n’est pas permis. Une VACL sans règle « forward » bloquera tout simplement tout le trafic dans le vlan donné.

Etape n°1 : Créer une ACL (classique) pour identifier le trafic à traiter

Attention à la confusion, l’ACL sert ici à identifier un trafic spécifique. Il faut donc qu’une règle « permit » corresponde à ce que l’ont souhaite rejeter ou autoriser, indépendamment de l’action. Ici, ce que nous voulons identifier, c’est le trafic entre R2 et R3, parce que nous voulons le bloquer. Donc il faut une règle permit qui y corresponde.

3750-1(config)#ip access-list extended VLAN10
3750-1(config-ext-nacl)#permit ip host 192.168.0.2 host 192.168.0.3
3750-1(config-ext-nacl)#permit ip host 192.168.0.3 host 192.168.0.2
3750-1(config-ext-nacl)#exit

Etape n°2 : Créer la VACL pour associer des « match » à des « action »

Nous allons donc créer ici une Vlan Access Map (l’élément qui combine les matches avec les actions), munie de deux règles.

  1. Le trafic correspondant à l’ACL VLAN10 doit être « droppé » (n° de séquence 10)
  2. Le reste du trafic doit être « forwardé » (n° de séquence 20)
3750-1(config)#vlan access-map VMAP-VLAN10 10
3750-1(config-access-map)#match ip address VLAN10
3750-1(config-access-map)#action drop
3750-1(config-access-map)#exit
3750-1(config)#vlan access-map VMAP-VLAN10 20
3750-1(config-access-map)#action forward
3750-1(config-access-map)#exit

Etape n°3 : Appliquer la VACL au(x) VLAN(s) désiré(s)

Il ne reste plus qu’à appliquer ces règles au Vlan 10.

3750-1(config)#vlan filter VMAP-VLAN10 vlan-list 10

Test de la configuration

Si tout se passe comme prévu, un ping entre R1 et R2, ou entre R1 et R3 devrait fonctionner, tandis que entre R2 et R3, le trafic devrait être bloqué…

R1#ping 192.168.0.2

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.0.2, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 1/2/4 ms
R1#
R1#
R1#ping 192.168.0.3

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.0.3, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 1/3/4 ms
R1#
R2#ping 192.168.0.3

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.0.3, timeout is 2 seconds:
.....
Success rate is 0 percent (0/5)
R2#

Tout fonctionne comme prévu! Nous arrivons donc bien ici à filtrer du trafic au sein du VLAN10, chose impossible avec les ACLs classiques.

13 Comments on “VLAN Access-List (VACL)

  1. Yo Steve!
    Je passe mon dernier module de la CCNP demain et je voulais revoir les VACL. J’ai vu ton site dans les premiers sur google, je n’ai pas hésité une seconde ! Évidement,je ne suis pas déçu. Bien expliqué, succinctement .. Juste ce qu’il faut !
    À tout bientôt !

    Karim

  2. cela marche t’il avec les protocoles ? voici ma configuration :

    Vlan26
    Création des ACL

    Switch(config)#ip access-list extended VLAN26
    Switch(config-ext-nacl)#permit tcp any any eq 80
    Switch(config-ext-nacl)#permit tcp any any eq 21
    Switch(config-ext-nacl)#permit tcp any any eq 995
    Switch(config-ext-nacl)#permit tcp any any eq 993
    Switch(config-ext-nacl)#permit tcp any any eq 465
    Switch(config-ext-nacl)#permit tcp any any eq 587
    Switch(config-ext-nacl)#exit

    Le traffic correspondant a l’acl vlan 24 est accepté

    Switch(config)#vlan access-map VMAP-VLAN26 10
    Switch(config-access-map)#match ip address VLAN26
    Switch(config-access-map)#action forward
    Switch(config-access-map)#exit

    Tout le reste on rejete :

    Switch(config)#vlan access-map VMAP-VLAN26 20
    Switch(config-access-map)#action drop
    Switch(config-access-map)#exit

  3. Merci, Pour le tuto, mais pourquoi faire des permits et ne pouvais-t-on pas dire

    Merci beaucoup pour le transfert de connaissance.

  4. Alors là je suis vraiment bleuflé dommage qu’on ne puisse pas le tester avec packet tracer. Pouvez vous nous donner le nom du simulateur que vous utilisez. Encore merci

    • A ma connaissance aucun simulateur ne prend ces fonctionnalités en charge. Seuls de vrais IOS le permettent, ce qui laisse peu de choix si ce n’est du vrai matériel.

  5. C’est une merveille !! Vraiment, encore une fois de plus merci merci merci pour tout.

  6. « Le trafic correspondant à l’ACL VLAN10 doit être « droppé » (n° de séquence 10) »

    Ce serait le trafic correspondant au VLAN10, pas à l’ACL, non?

    • Non c’est bien comme je l’avais formulé. Tout le trafic du VLAN 10 n’est pas bloqué, seulement celui qui correspond à la règle permit de l’ACL.