Routage LAN privees/publiques, IOS Cisco (quagga), Motivation filtrage et NAT

Travaux Pratiques
Routage statique sur trois LAN
Interpréteur CISCO IOS (quagga)
Vers la notion de filtrage et de NAT

Copyright (C) 2012  Jean-Vincent Loddo
Licence Creative Commons Paternité - Partage à l’Identique 3.0 non transposé.

Séance de TP entièrement effectuée avec le logiciel Marionnet. Durée estimée : 2h - 2h30.
Prérequis.
Avoir compris les notions de routage (1ère partie) et de filtrage (2ème partie), et leur mise en oeuvre sous GNU/Linux avec iptables.

Câblage et configuration du réseau local

Deux machines, m1 et m2 et un commutateur S1 réalisent un réseau local LAN1 = {m1, m2} en 192.168.1.0 ⁄ 24. Deux autres machines m3 et m4 et un concentrateur H1 réalisent un réseau local LAN2 = {m3, m4} en 10.0.0.0 ⁄ 8. Un troisième réseau CAN1 (Campus Area Network) sera constitué d’une machine appelée intrus et d’une partie indéfinie (de niveau 2) représentée par le composant marionnet “nuage”. Un routeur assurera la laison (de niveau 3) entre LAN1 (port 0), LAN2 (port 2) et CAN1 (port 1).
Distributions GNU/Linux.
Utilisez n’importe quelle distribution : il suffira de pouvoir lancer les commandes basiques de configuration et observation du réseau (ifconfig, route, tcpdump, ...)
Figure images/plan_avec_routeur.png
Attribution des IP.
Par simplicité, la machine mi aura l’adresse 192.168.1.i ou 10.0.0.i selon le réseau d’appartenance. Le routeur R1 doit avoir son port 0 branché au LAN1 et configuré en 192.168.1.254 (cela se fait dans la fenêtre de dialogue à l’ajout du routeur ou à travers l’onglet Interfaces de Marionnet). Concernant le réseau CAN1, la machine intrus prendra le 145.12.0.42, et le routeur prendra le 145.12.0.53 sur le port 1 (eth1).

 Configuration d’un routeur par le langage CISCO IOS

Le but du TP est, dans cette première partie, de faire communiquer l’ensemble des réseaux définis.
Astuce.
Il est fortement conseillé d’observer les petites fenêtres graphiques représentant les appareils de concentration (H1), commutation (S1) et routage (R1). Cela permet de vérifier facilement où se situe un problème de non acheminement de paquets ou trames. Pour garder constamment une vision, et donc un contrôle, de l’état des liaisons, vous pouvez réduire la fenêtre principale de Marionnet de façon à laisser la place, sur un côté de l’écran, aux 3 fenêtre correspondantes aux appareils :
Figure images/astuce_placement_des_fenetres_appareils.png
Commencez par tester la réponse du routeur à un ping (ECHO REQUEST du protocole ICMP) provenant d’une machine du LAN1. Lorsque ce ping fonctionne, vous pouvez vous connecter en telnet au routeur avec le mot de passe zebra :
m1#  telnet 192.168.1.254 2601 
À ce stade, vous êtes connecté et vous pouvez commencer la configuration du routeur grâce à l’interpréteur de commandes IOS CISCO (que le démon du logiciel quagga, avec lequel vous êtes connecté, simule). La première commande à taper est celle qui permet de passer en mode administration :
Router> enable  
Password: zebra
Router#
Habituez-vous à utiliser la touche point d’interrogation ? pour demander la complétion de vos commandes à l’interpréteur. Par exemple, avec :
Router# configure ?
  terminal  Configuration terminal 
vous aurez appris de pouvoir écrire la commande :
Router# configure terminal 
Router(config)# 
Essayez donc seuls, avec l’aide de la touche ?, de trouver la séquence de commandes pour :
  • configurer l’interface eth2 (LAN2) en 10.255.255.254
  • configurer l’interface eth1 (CAN1) en 145.12.0.53
Puis, pour que la configuration soit persistante, pensez à faire :
Router(config-if)# write memory 
Configuration saved to /etc/quagga/zebra.conf
Vous devez pouvoir tester votre configuration (effectuée donc par l’interpréteur IOS) depuis les autres machines :
m4#  ping 10.255.255.254
intrus#  ping 145.12.0.53
En modifiant les tables de routage de chaque machine, assurez-vous que toutes les machines puissent communiquer entre elles (de n’importe quel réseau à n’importe quel autre). Il est conseillé de modifier tous les fichiers /etc/hosts de façon à faire les tests avec des noms de machine symboliques.

 Configuration d’un routeur GNU/Linux

Remplacez le routeur R1 par une machine GNU/Linux, appelée router, rendant le même service que R1.
Considérations finales.
Après configuration, vous observerez que la machine intrus reçoit (et répond) aux ping (ECHO REQUEST/REPLY du protocole ICMP) des machines du LAN1 et du LAN2, même si elles appartiennent à un réseau à priori privé. Cette situation n’est pas souhaitable pour plusieurs raisons :
  1. intrus a défini 145.12.0.53 comme passerelle par défaut, ce qui est abusif : il devrait ignorer l’existence des réseaux privés ; ces derniers devraient, dans l’idéal, être cachés derrière le routeur ;
  2. intrus peut lui même pinguer les réseaux privés, ce qui veut dire que routeur laisse passer toutes les trames (pas de filtrage), même celles qui correspondent à des initiatives de l’extérieur vers les réseaux privés (et dans ce contexte, initiative peut vouloir dire attaque) ;
  3. lorsque l’initiative est prise par l’intérieur, comme dans le cas d’un ping depuis LAN1 ou LAN2 vers intrus, la machine routeur laisse passer les paquets IP sans les changer (pas de NAT) et intrus constate donc la réception de messages provenant d’adresse telles que 192.168.1.0 ⁄ 24 ou 10.0.0.8 ; s’il ne le sait pas déjà, il peut donc imaginer pouvoir utiliser routeur pour atteindre ces adresses. Autrement dit, s’il l’ignorait auparavant, il n’ignorera plus l’existence de ces réseaux, ce qui nous ramène à la question du point 1.