TP sysres IMA5sc 2018/2019 G4
Sommaire
- 1 Présentation du Sujet
- 2 PARTIE 1 : TP GIS
- 3 PARTIE 2 : TP PrA
Présentation du Sujet
Le but de ce TP est de mettre en place un réseau redondant qui sera capable de faire face à certaines pannes. De plus, nous aurons l'occasion de manipuler les protocoles IPv6, une machine virtuelle et de mettre en place un réseau wifi et un site web sécurisé. Ceux ci nous permettront de tester la fiabilité des différents protocoles de sécurité tels que WEP, WPA ... En introduction de ce TP, nous avons eu l'occasion de manipuler les conteneurs logiciels au travers d'un TP GIS4.
PARTIE 1 : TP GIS
Séance 1 : création de conteneurs "à la main" (12/11/2018)
Dans cette séance nous devions créer des conteneurs "à la main". L'objectif étant de créer 3 conteneurs connectés entre eux via un commutateur virtuel. Un d'entre eux est également connecté au commutateur virtuel de la machine de TP étant sur bridge. Ce sera le mandataire inverse qui permettra de rediriger les flux vers les différentes machines.
Création des partitions
Dans un premier temps, nous avons créé 3 partitions qui seront utilisées par nos conteneurs afin d'avoir des systèmes de fichiers isolés. Pour cela, après s'être mis en mode root, nous avons utilisé les commandes suivantes:
dd if=/dev/zero of=/disk1 bs=1024k count=1024 // Création du fichier "partition". L'argument bs (block size) définit une taille de partition de 1Go avec des blocks de données de 1Mo. mkfs /disk1 // Formatage de la partition. mkdir /tmp/fs1 // Création de l'endroit où sera initialisé le file system. mount –o loop disk1 /tmp/fs1 // Monte la partition sur ce système de fichiers. export http_proxy=http://proxy.polytech-lille.fr:3128 // Permet la prise en compte du proxy pour l'ajout des dépendances.
Et finalement, nous avons lancé Debootstrap qui installe un système Debian de base avec les dépendances spécifiées : debootstrap --include=apache2,vi stable /tmp/fs1.
Cette commande prend un peu de temps (5 à 10 min). Une fois que debootstrap a terminé son exécution, il faut répéter l'opération deux fois afin d'obtenir 3 partitions : démonter disk1, le copier dans deux disques disk2 et disk3, créer les systèmes de fichiers fs2 et fs3 puis remonter les 3 disques sur leur système de fichier respectif.
Remarque: Nous avions dans un premier temps oublié d'exécuter la commande echo "proc /proc proc defaults 0 0" >> /tmp/fs1/etc/fstab permettant la préparation du montage du pseudo système de fichier /proc. Cela entraînait une erreur lors de la création des conteneurs.
Commutateur et interfaces virtuels
La création du commutateur virtuel se fait via la commande suivante:
ip link add commutateurTP type bridge
Création des interfaces virtuelles:
Une fois le commutateur créé, il nous a fallu créer et ajouter des interfaces virtuelles sur ce commutateur. Ces interfaces permettent de connecter les conteneurs. Nous les avons nommées vif pour virtual interface. Vif 1, Vif 2 et Vif3 seront liés à eth0 et vif 4 sera lié à eth1 pour le mandataire inverse.
ip link add vif1 type veth peer name eth0@vif1 // Exemple de création de l'interface vif 1. ip link set vif1 master commutateurTP // Ajout de l'interface dans le commutateur. ip link set vif1 up // Active l'interface.
Création des conteneurs
On commence par la création d'un processus isolé à l'aide de la commande unshare. Cette commande permet de séparer les espaces de noms indiqués du processus parent puis exécuter le programme indiqué:
unshare -p -f -m -n -u chroot tmp/fs1 /bin/sh -c "mount /proc ; /bin/bash" ;
- Les arguments -n et -u assurent un réseau indépendant. Ce que l'on peut vérifier au sein du conteneur à l'aide de la commande ip l
- L'argument -m permet d'isoler l'espace de noms de montage.
- L'argument -p permet d'isoler l'espace de noms PID ce que l'on peut vérifier avec la commande psaux
- L'argument -f permet Engendrer le programme indiqué comme un processus fils d’unshare plutôt que de l’exécuter directement.
Déplacement des pairs dans un espace réseau différent:
Il faut ensuit lier les conteneurs à notre commutateur virtuel. Un des 3 conteneurs sera également lié au bridge de la machine :
ps aux | grep unshare // Récupération des différents PID. ip link set eth0@vif1 netns /proc/<PID_Récupéré>/ns/net name eth0 // Lie l'interface virtuelle 1 à notre commutateur virtuel. ip link set eth1@vif4 netns /proc/<PID_Récupéré>/ns/net name eth1 // Lie l'interface virtuelle 1 au bridge de la Zabeth, faisant de notre vif1 le mandataire inverse.
Configuration réseau dans l’espace alternatif :
On a ensuite ajouté à chaque conteneur une adresse ip. Celles-ci nous permettront d'établir la communication. Pour cela nous sommes allés directement au sein du conteneur et nous avons ajouté l'adresse 192.168.60.41/24 (Adresse choisie arbitrairement de la forme 192.168.60.<n°groupe><n°conteneur>).
Ceci s'effectue à l'aide de la commande ip addr add 192.168.60.41/24. Cependant, pour l'interface eth1, nous avons mis l'adresse 172.26.14.44/24.
Il faut également activer les interfaces à l'aide de la commande ip link set eth0 up.
Remarque : Dans le mandataire inverse on ajoute la route par défaut via la commande route add default via 172.26.145.254 dev eth1.
Séance 2 : création de conteneurs "à la main" et avec Docker + mise en place du mandataire inverse (19/11/2018)
Nous avons dû dans un premier temps refaire ce que nous avions fait lors de la séance précédente. Cependant, nous n'arrivions pas à ping les différents conteneurs car nous avions oublié deux commandes :
ifup lo // Activation de la boucle locale sur le conteneur ip link set commutateurTP up // Activation du commutateur virtuel sur la machine
Configuration des serveurs apaches
Création des noms de domaine:
Nous avons dans un premier temps créé 3 noms de domaine (1 pour le mandataire inverse et 2 pour les deux autres conteneurs). Pour cela nous nous sommes rendus sur l'hébergeur Gandi à l'aide des identifiants qui nous étaient fournis. Dans la rubrique domaine nous avons ajouté une configuration DNS dans le domaine plil.space:
- Type : A pour le mandataire inverse -> Permet de relier un nom de domaine à l'adresse IP d'un serveur et Cname pour les autres conteneurs.
- TTL : Nous avons laissé la valeur par défaut qui était de 1800 secondes.
- Name : mandataireribunt pour le mandataire inverse et ribunt1,2 pour les 2 conteneurs.
- Adresse ipV4 (pour le mandataire inverse) : 172.26.145.111
- Nom d'hôte (pour les deux autres noms de domaine) : mandataireribunt.
Création du fichier de configuration apache2:
Sur le mandataire inverse :
On active les modules proxy avec la commande a2enmod proxy proxy_http:
- Le module proxy permet l'implémentation d'un serveur mandataire/passerelle
- Le module proxy_http apporte le support des requêtes HTTP et HTTPS au module proxy
Dans le fichier par défaut du dossier sites-available on ajoute les lignes suivantes
ProxyPass /ribunt1 http://192.168.60.42/ ProxyPass /ribunt2 http://192.168.60.43/ ProxyPassReverse /ribunt1 http://192.168.60.42/ ProxyPassReverse /ribunt2 http://192.168.60.43/ ProxtRequest Off
- On modifie alors la première page d'apparence des sites dans les dossiers /var/www/html/ des deux conteneurs hébergeant les sites.
- On doit enfin relancer le serveur Apache2 pour prendre en compte les modifications à l'aide de la commande service apache2 restart
10h40 => serveurs Web unshare OK
Conteneurs via docker
Nous avons dans un premier temps vérifié que Docker était bien installé sur notre machine. Nous avons alors pu lancer notre premier conteneur avec une image de base debian grâce à la commande:
docker run -it debian /bin/bash
Le conteneur ainsi créé est isolé du réseau. Dans l'état initial, il nous était impossible d'installer Apache et les différents modules souhaités. Pour résoudre ce problème:
* Sortir du conteneur * Ouvrir le fichier /dev/default/.docker * Commenter la ligne avec les IP tables * iptables-save * service docker restart // Relance Docker * docker run -it debian /bin/bash // Démarre et entre dans le conteneur
Une fois ce problème réglé nous avons pu lancer un apt-get update et un apt-get install Apache2,nano, vim, après avoir exporté le proxy comme précédemment avec la commande export http_proxy=http://proxy.polytech-lille.fr:3128.
- Sauvegarde de l'image du conteneur modifié:
docker ps //Pour trouver l'ID du conteneur docker commit 7097317ae643 poloporto/testDebian:v1 //Commit du conteneur d'ID 7097317ae643, version 1
- Création du network:
Pour cela il faut d'abord quitter le conteneur. Ensuite on crée un network à l'aide de la commande docker network create <nomduNetwork>. Dans notre cas nous l'avons appelé netpra. On peut ensuite relancer le conteneur avec l'option --network:
docker run --name mandatairedocker -p 80:80 -i --network netpra -t poloporto/testdebian:v1 /bin/bash
Nous avons également lancé deux autres conteneurs qui permettront d'héberger les deux sites sur des serveurs Apache2 via :
docker run --name mandatairedocker -i --network netpra -t poloporto/testdebian:v1 /bin/bash
Ces conteneurs n'ayant pas besoin d'être exposés sur la machine physique car ils sont accédés via le mandataire inverse.
- Configuration d'Apache sur le mandataire inverse:
De la même manière, on configure le fichier de configuration Apache. A la création des conteneurs, une adresse ip est initialisée par défaut par docker, il suffit donc de la trouver via la commande ip a puis de les renseigner comme précédemment:
ProxyPass /dockerribunt1 http://172.23.0.3/ ProxyPass /dockerribunt2 http://172.23.0.4/ ProxyPassReverse /dockerribunt1 http://172.23.0.3/ ProxyPassReverse /dockerribunt2 http://172.23.0.4/ ProxyRequests Off
De même que précédemment, nous devons créer les nom de domaines correspondants sur Gandhi
remarque: Nous avions oublié de refaire la commande a2enmod proxy proxy_http
10h30 Serveurs Web (docker) OK
PARTIE 2 : TP PrA
Séance 3 : Découverte du sujet et repartition des taches(26/11/2018)
Mise en place du plan de connexion
L'objectif principal est de mettre en place un reseau sécurisé avancé, pouvant pallier aux risques éventuels de pannes sur les commutateurs ou routeurs. Étant donné qu'il n'y a qu'un serveur de virtualisation, aucune panne n'est possible sur celui-ci.
Le travail étant conséquent, nous avons reparti le travail sur l'ensemble de la classe. Notre partie consiste à configurer les commutateurs, c'est à dire déclarer les différents VLANs pour que les différents éléments puissent communiquer.
Il y aura donc sur nos commutateurs différents VLANs:
- Un vlan pour la connexion au réseau de l'école associé à un seul port du commutateur. (vlan 131)
- Un vlan pour le serveur de virtualisation associé à un seul port du commutateur. (vlan 8)
- Un vlan par groupe.
La liaison vers les deux routeurs ainsi que les points d'accès se fera elle avec des vlans en mode trunk afin de pouvoir laisser passer les paquets des différents vlans tout en conservant cette information grâce à l'encapsulation dot1q qui va ajouter une information sur le vlan, puis, lorsque le paquet sera transmis au commutateur suivant, va retirer cette information une fois le paquet dans le bon vlan.
De plus, pour pouvoir tester le bon fonctionnement du réseau, nous allons relier un port du commutateur à chaque vlan de groupe soit 11 vlans supplémentaires. (vlan de 11 à 21)
L'architecture finale du réseau au niveau des commutateurs peut donc être résumée schématiquement comme ceci :
Configuration du premier commutateur
Maintenant que nous avons réfléchi à la manière d'agencer nos vlans, nous allons donc passer à la configuration de nos commutateurs. Pour ceci nous nous sommes connectés directement sur le commutateur à l'aide d'un cable série <-> USB :
minicom -o -D /dev/ttyUSB0 -b 9600
- -o : Saute le code d'initialisation : pratique si l'on souhaite redémarrer facilement une session.
- -D : Choisir le périphérique sur lequel se connecter.
- -b : Choisir le baudrate.
E306 : commutateur Catalyst 6000 :
Nous avons regardé dans un premier temps les VLAN déjà présents à l'aide de la commande vlan show. Nous avons donc vu qu'un VLAN XEN était déjà en place, le VLAN 8.
Pour créer un VLAN (exemple du VLAN d’interconnexion) :
config terminal vlan 131 name interco exit
Remarque : Ne pas oublier la commande write afin de sauvegarder la configuration, et ne pas avoir à tout refaire la séance prochaine.
Ensuite, il faut relier les VLAN créés au ports que nous allons utiliser. Pour voir les ports, leur utilisation et leur nom nous avons utilisé la commande
sh int status
- Nous avons ainsi décidé de commencer au port 4. Pour assigner le port 4 connecté au routeur 1 en mode trunk :
Switch_E306#configure terminal Switch_E306(config)# interface gi4/4 Switch_E306(config-if)# switchport Switch_E306(config-if)# switchport mode trunk Switch_E306(config-if)# no shut
Il n'y a pas besoin de préciser le protocole dot1q car le commutateur ne connait que ce protocole. La commande switchport trunk encapsulation dot1q n'est donc pas nécessaire.
- Exemple pour la configuration du port 15 relié au réseau de l'école, et au VLAN interconnect (131):
Switch_E306#configure terminal Switch_E306(config)# interface gi4/15 Switch_E306(config-if)# switchport Switch_E306(config-if)# switchport mode access Switch_E306(config-if)# switchport access vlan 131 Switch_E306(config-if)# no shut
Pour verifier que tout est bien configurer on lance, une fois fini, la commande show runing-config
Voici le résumé de notre configuration pour le commutateur catalyst 6000 :
Séance 4 (27/11/2018)
Configuration du second commutateur
Au début de la séance, nous devions attendre car la seconde baie n'était pas encore installée. Pendant ce temps nous avons donc dans un premier temps vérifié que notre configuration de la veille était encore en place. Puis, nous avons attribué un port à chaque groupe, avec les VLAN correspondants. Nous avons fait cela car les ports disponibles étaient nombreux et cela permettra aux différents groupes de réaliser des tests en liaison filaire direct.
- Configuration du commutateur 4006 :
Les différents VLANs et port configurés sont les mêmes que sur l'autre commutateur :
- VLAN 11 à 21 : VLANS associés au ports 21 à 31 pour les groupes
- VLAN 131 : VLAN d'interconnexion connecté au port 15
- VLAN 8 : VLAN d'interconnexion connecté au port 17
En plus de cela, nous avons configuré les ports 4 à 13 en mode trunk pour le routeur Catalyst 3560. Connecter 10 cables permet d'avoir une vitesse accrue.
Sur ce commutateur, le protocole dot1q n'est pas le seul protocole connu. Il était donc obligatoire de le préciser :
configure terminal interface fa4/10 switchport switchport trunk encapsulation dot1q switchport mode trunk no shut exit exit write
Voici le résumé de notre configuration pour le commutateur 4006 :
Création de la machine virtuelle
Nous devons créer la machine virtuelle sur le dom0 de corduan.insecserv.deule.net, nous nous sommes donc tout d'abord connecté en ssh via la commande :
ssh root@corduan.insecserv.deule.net // Avec les identifiants habituels.
Puis nous avons lancé la création de la machine virtuelle via :
xen-create-image --hostname=Hades --ip=193.48.57.180 --gateway=193.48.57.160 --netmask=255.255.255.224 --dir=/usr/local/xen --force
Une fois la création de la machine virtuelle terminée, nous avons pu retrouver le fichier de configuration de notre machine virtuelle dans /etc/xen/Hades.cfg et avons dû ajouter "bridge=IMA5sc" dans le vif.
Puis, nous avons pu lancer notre machine virtuelle grâce à :
xen create Hades.cfg
Enfin, pour entrer en mode console dans notre machine virtuelle :
xl console Hades
Pour quitter la console, nous devons utiliser les touches "ctrl + alt gr + parenthère droite".
Enfin, nous pouvons éteindre notre machine virtuelle :
xl shutdown Hades
En re-créant notre VM nous nous sommes rendus compte que nous n'avions pas d'accès au réseau. Pour arranger cela, nous avons tapé la commande suivante qui ajoute la route par défaut vers le eth0:
ip route add default via 193.48.57.190 dev eth0 onlink
Nous arrivons désormais à Pinger google depuis notre machine virtuel mais aussi à pinger notre VM depuis la Zabeth. Enfin pour pouvoir se connecter en ssh depuis la zabeth sur la VM nous avons modifié le fichier sshd_config présent dans etc/ssh/ pour décommenter la ligne
PermitRootLogin yes
Séance 5 (10/12/2018)
Configuration DNS
Nous nous sommes premièrement rendu sur Gandi afin d'acheter un nom de domaine. Les nom "hades" les moins cher n'étant plus disponibles, nous avons acheter le nom de domaine "hadess.space".
Nous avons tout d'abord installé bind9 via :
apt install bind9 bind9-host dnsutils
Nous avons modifié le fichier /etc/bind/named.conf.local afin d'ajouter la zone correspondant à notre site hadess.space :
zone "hadess.space" { type master; file "/etc/bind/db.hadess.space"; allow-transfer {217.70.177.40;}; //autorise le transfert vers ns6.gandi.net };
Puis, nous avons créé le fichier de résolution de zone dans /etc/bind/db.hadess.space :
; ; BIND data file for local loopback interface ; $TTL 604800 @ IN SOA ns.hadess.space. root.hadess.space ( 2 ; Serial 604800 ; Refresh 86400 ; Retry 2419200 ; Expire 604800 ; Negative Cache TTL ) IN NS ns.hadess.space. IN NS ns6.gandi.net ns IN A 193.48.57.180 www IN A 193.48.57.180
IN : signifie que la zone qui suit est destinée à internet. SOA (star of authority) : spécifie le serveur de nom faisant authorité. C'est à dire, notre DNS principal.
Nous avons alors redémarré le service bind :
service bind9 restart
Nous devons ensuite faire des modifications sur Gandi afin de renseigner nos DNS. Nous avons alors ajouter dans les "Glues records", le DNS de notre machine virtuelle.
nameServer : "ns.hadess.space" IP : 193.48.57.180
Et nous avons ensuite pu modifier nos serveurs DNS dans les "Serveurs de noms" de Gandi en remplaçant le premier serveur de nom par "ns.hadess.space". Les deux autres serveurs de noms sont eux renseignés dans le fichier named.conf.local.
Il faut ensuite attendre un certain temps afin que notre adresse DNS se propage sur les serveurs mondiaux.
Création des volumes
Dans un premier temps nous avons créé plusieurs volumes pour faire en sorte que les répertoires /home et /var de notre machine virtuelle sur des partitions de l'hôte Cordouan. Voici les différentes commandes que nous avons utilisé pour cela (sur Cordouan) :
# lv create -L10G -n hades-var virtual //Création d'un volume logique de 10G pour le dossier var dans le groupe de volume virtual # lv create -L10G -n hades-home virtal //Pour le volume home
Puis nous ajoutons sur le fichier de configuration de notre machine virtuelle Hades.cfg, les lignes :
'phy:/dev/virtual/hades-home,xvdb1,w', 'phy:/dev/virtual/hades-var,xvdb2,w'
au niveau de disk device(s)
Puis, on relance la VM à l'aide d'un "shutdown" afin de prendre en compte ces modifications.
repertoire home
On va lier notre répertoire home au disque hades-home. Cette manipulation n'est pas très complexe car le répertoire home est vide. Pour cela, on modifie le fichier /etc/fstab en ajoutant les lignes :
/dev/xvdb1 /home ext4 defaults 0 2
Puis, on monte tous les systèmes de fichier via la commande :
mount -a
repertoire var
Le répertoire var n'étant pas vide, l'opération est un peu plus délicate. On doit tout d'abord monter /mnt sur notre volume /dev/xvdb2 temporairement :
mount /dev/xvdb2 /mnt
Puis copier le contenu actuel de var sur le répertoire /mnt qui est actuellement monté sur xvdb2
mv /var/* /mnt
Puis on modifie le fichier /etc/fstab pour déterminer le montage permanent à effectuer. On ajoute alors la ligne :
/dev/xvdb2 /var ext4 defaults 0 2
Enfin, on applique les montages :
mount -a
Crack de clé WPA
Pendant qu'un de nous s'occupait de la partie DNS, l'autre s'est intéressé au craquage de la clé WPA des points d'accès. Pour ceci nous avons ciblé le point d'accès cracotte04. Les manipulations, noms d'interfaces, correspondent à l'un de nos ordi personnel.
airmon-ng
Pour pouvoir craquer la clé, il faut une carte sans fil qui peut se mettre en mode moniteur, c'est à dire d'écouter tout le trafic d'un réseau sans fil. Dans le cas de notre ordi l'interface était nommée wlan0. Pour le mettre en mode moniteur on utilise la commande
airmon-ng start wlan0
On vérifie que cela a fonctionné avec l'affichage "mode moniteur activé". La nouvelle interface s'appelle wlan0mon.
airodump-ng wlan0mon
Avec cette commande, cela va répertorier tous les réseaux sans fil dans le secteur, et pleins d'informations utiles à leur sujet. On a donc localisé le réseau que l'on veut craqué: cracotte04. Pour arrêter le processus on appuie sur CTRL-C et on note les informations utiles : bssid et canal.
airodump-ng -c 9 –-bssid 04:DA:D2:9C:50:53 -w /root/Desktop/ wlan0mon
- -c permet de préciser le canal
- --bssid permet de bssid du reseau cible récupéré précedemment
- -w permet de préciser l'emplacement où sera enregistré le paquet capturé
Cela nous mène à cette fenêtre :
Cette commande capture les paquets qui transitent. Cela va collecter les données afin de trouver le Handshake qui sera utilisé pour la suite. Airodump attend qu’un périphérique se connecte ou se reconnecte au réseau, ce qui oblige le routeur à envoyer la poignée de main à quatre voies que nous devons capturer afin de déchiffrer le mot de passe. En pratique, nous avons utilisé un autre outil qui appartient à la suite aircrack appelé aireplay-ng, pour accélérer le processus. Au lieu d’attendre qu’un périphérique se connecte, on force un periphérique à se reconnecter en envoyant des paquets de désauthentification (deauth) au périphérique, lui faisant croire qu’il doit se reconnecter au routeur. Pour que cela marche il faut que quelqu'un d'autre soir connecté au réseau, on surveille cela sur l'airodump-ng.
aireplay-ng –0 2 –a 04:DA:D2:9C:50:53 –c [client bssid] mon0
- -0 précise la death et 2 le nombre de paquet envoyés.
- -a indique le bssid du point d’accès cible.
- -c indique les clients BSSID (listé sous "station" dans l'airodump-ng).
Une fois le handshake récupéré, on a 4 fichiers à l'endroit spécifié dans la commande. A partir de maintenant le mot de passe est quelque part entre l'ordinateur et ces fichiers, nous n'avons plus besoin de la connexion.
Création de la bibliothèque
Pour que aircrack puisse trouver le mot de passe, il doit parcourir un dictionnaire dans lequel on trouve les différentes possibilités. Nous savons dans le cadre de ce TP que le mot de passe est composé uniquement de 8 chiffres. Nous avons donc, à l'aide d'un programme C basique, à générer un fichier texte contenant ces possibilités.
aircrack-ng -a2 -b 04:DA:D2:9C:50:53 -w /root/Desktop/Dictionnary.txt /root/Desktop/*.cap
- a est la méthode utilisée par Aircrack pour casser la poignée de main, 2 = méthode WPA. - w est le chemin vers le dictionnaire.
Il suffit juste d'attendre que la commande trouve le mot de passe. Ce processus prend plusieurs heures. C'est pour cela que nous le laissons tourner sur la Zabeth. Nous reviendrons demain pour récupérer le mot de passe.