Tom Daluzeau
← Parcours Réseau · TP
Réseau · TP · leçon 7 / 8TP 5 · ACL14 minTerminée

ACL : filtrer le trafic sur un routeur

Tu sais lire une ACL ligne par ligne, dire si un paquet passe, choisir entre ACL standard et étendue, l'écrire, l'appliquer sur la bonne interface dans le bon sens et la placer au bon endroit du réseau.

Mis à jour le

À recouper avec le cours. Cette leçon a été écrite à partir du plan du chapitre, avant relecture avec les supports. En cas de doute, le cours fait foi.

Pourquoi on voit ça

Par défaut, un routeur fait passer tout ce qu’il sait router. Ce n’est pas toujours ce qu’on veut : les PC des visiteurs n’ont pas à ouvrir une session d’administration sur les serveurs.

Une ACL (Access Control List, liste de contrôle d’accès) est une liste de règles qui dit au routeur quels paquets laisser passer et lesquels jeter. C’est le filtrage demandé dans le projet (DNS, Web, Telnet), et c’est exactement la logique que tu retrouveras dans les pare-feu et les groupes de sécurité du cloud.

Comment le routeur lit une ACL

Une ACL est une suite de lignes permit (autoriser) ou deny (refuser). Pour chaque paquet :

  1. Le routeur lit les lignes de haut en bas.
  2. À la première ligne qui correspond, il applique l’action et s’arrête. Les lignes suivantes ne sont pas lues.
  3. Si aucune ligne ne correspond, le paquet est refusé.

Ce dernier point est le piège numéro un : toute ACL se termine par un deny any implicite. Il n’est pas écrit, mais il est là.

un paquet arrive deny tcp 192.168.1.0 0.0.0.255 any eq 23 non permit ip any any non deny any ligne implicite : jamais écrite, toujours là oui oui toujours Paquet jeté Paquet transmis Paquet jeté Première ligne qui correspond : on applique l'action et on s'arrête.
L'ACL 110 lue par le routeur : un Telnet de 192.168.1.0/24 s'arrête à la ligne 1, tout le reste passe à la ligne 2.

Deux conséquences :

  • L’ordre compte. Les règles précises d’abord, les règles générales ensuite.
  • Une ACL qui ne contient que des deny bloque tout. Il faut au moins un permit.

L’image : un vigile avec une liste. Il la lit dans l’ordre et s’arrête au premier nom qui correspond. Si tu n’es pas sur la liste, tu n’entres pas.

Standard ou étendue

ACL standard ACL étendue
Numéro 1 à 99 100 à 199
Ce qu’elle regarde L’adresse source seulement Source, destination, protocole, port
Exemple « Bloque tout ce qui vient de ce réseau » « Bloque Telnet de ce réseau vers ce serveur »

C’est le numéro qui dit au routeur de quel type d’ACL il s’agit.

Écrire une ACL

Les adresses s’écrivent avec un masque générique (wildcard mask) : 255.255.255.255 moins le masque. Pour un /24 : 0.0.0.255. Deux raccourcis :

  • any : n’importe quelle adresse ;
  • host 192.168.1.10 : cette adresse précise, et elle seule.

ACL standard

R1(config)# access-list 10 permit 192.168.1.0 0.0.0.255

« Autorise ce qui vient de 192.168.1.0/24. » Tout le reste est refusé par le deny any implicite.

ACL étendue

L’ordre des mots est toujours le même :

access-list <numéro> <permit|deny> <protocole> <source> <destination> eq <port>

Le protocole est tcp, udp, ou ip pour dire « tout ». Le port est celui de destination ; eq veut dire « égal à ».

R1(config)# access-list 110 deny tcp 192.168.1.0 0.0.0.255 any eq 23
R1(config)# access-list 110 permit ip any any

Ligne 1 : refuse Telnet (TCP 23) de 192.168.1.0/24 vers n’importe où. Ligne 2 : autorise tout le reste. Sans cette seconde ligne, le deny any implicite bloquerait tout.

Les ports à connaître

Service Protocole Port
SSH TCP 22
Telnet TCP 23
DNS UDP 53
HTTP TCP 80
HTTPS TCP 443

Appliquer une ACL

Une ACL écrite mais pas appliquée ne filtre rien. On l’accroche à une interface, avec un sens :

R1(config)# interface GigabitEthernet0/0
R1(config-if)# ip access-group 110 in

Le sens se lit du point de vue du routeur :

  • in : les paquets qui entrent dans le routeur par cette interface ;
  • out : les paquets qui sortent du routeur par cette interface.
PC 192.168.1.0/24 R1 Serveurs G0/0 G0/1 in le paquet entre dans R1 out le paquet sort de R1
Le même paquet est « in » sur G0/0 et « out » sur G0/1 : le sens se lit depuis le routeur.

Où placer l’ACL

  • ACL standard : le plus près possible de la destination. Elle ne regarde que la source. Placée trop tôt, elle couperait cette source de tous les réseaux, pas seulement de celui que tu veux protéger.
  • ACL étendue : le plus près possible de la source. Elle est précise, donc elle ne bloque que ce qu’il faut. Autant jeter le paquet tout de suite plutôt que de lui faire traverser le réseau pour rien.
ACL étendue près de la source ACL standard près de la destination LAN A R1 R2 R3 LAN serveurs LAN B ACL standard sur R1 ? le LAN A ne joindrait plus le LAN B
L'étendue sait ce qu'elle vise : elle filtre dès R1. La standard ne voit que la source : elle attend R3.

Deux exemples

Bloquer Telnet, laisser le reste

C’est l’ACL 110 ci-dessus, appliquée en in sur l’interface côté PC. Telnet est le premier service à filtrer : il fait circuler les mots de passe en clair.

Autoriser seulement le Web et le DNS

R1(config)# access-list 120 permit tcp 192.168.1.0 0.0.0.255 any eq 80
R1(config)# access-list 120 permit tcp 192.168.1.0 0.0.0.255 any eq 443
R1(config)# access-list 120 permit udp 192.168.1.0 0.0.0.255 any eq 53
R1(config)# interface GigabitEthernet0/0
R1(config-if)# ip access-group 120 in

Ici, pas de permit ip any any : on veut que le deny any implicite bloque le reste (Telnet, ping…). Remarque la ligne DNS : sans elle, les PC ne pourraient plus traduire les noms de sites, et le Web ne marcherait pas non plus.

Vérifier

R1# show access-lists
Extended IP access list 110
    10 deny tcp 192.168.1.0 0.0.0.255 any eq telnet (4 match(es))
    20 permit ip any any (25 match(es))
  • Le routeur numérote les lignes (10, 20…) et remplace certains ports par leur nom (telnet pour 23, www pour 80).
  • match(es) compte les paquets qui ont correspondu à chaque ligne. Lance un Telnet, puis vérifie que le compteur du deny augmente : c’est la preuve que ton ACL fait son travail.

À retenir

  • Une ACL se lit de haut en bas ; la première ligne qui correspond s’applique, puis la lecture s’arrête. À la fin : un deny any implicite.
  • Standard : 1 à 99, source seulement. Étendue : 100 à 199, source, destination, protocole et port.
  • Les adresses s’écrivent avec un masque générique ; any et host sont des raccourcis.
  • ip access-group <numéro> in|out sur l’interface : sans ça, l’ACL ne filtre rien.
  • Placement : standard près de la destination, étendue près de la source.
  • Ports : SSH 22, Telnet 23, DNS 53, HTTP 80, HTTPS 443.

Entraînement

12 questions, dont 3 à compléter. Tu réponds, on passe à la suivante. La note arrive à la fin.

Cartes · 8

Réviser les cartes ici

Espace : retourner