TP sysres IMA5sc 2018/2019 G4

De Wiki d'activités IMA
Révision datée du 26 novembre 2018 à 17:32 par Aunterei (discussion | contributions) (Configuration des commutateurs)

Présentation du Sujet

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 fini, il faut répéter l'opération deux fois : 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 que 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 ensuit 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. Pour l'interface eth1 cependant 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 command route add default via 172.26.145.254 dev eth1.

Séance 2 : création de conteneurs "à a main" et avec Docker + mise en place du mandataire inverse (19/11/2018)

Nous avons du dans un premier temps refaire ce que nous avions fait lors de la séance précédente. Nous arrivions pas pas à ping les différents conteneurs. 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 de


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 chaque conteneur). 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 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. Ainsi 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 instal 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 : Decouverte 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 4 vlans différents :

  • un vlan regroupant les routeurs qui sera associé à deux ports du commutateurs pour relier les deux routeurs. -> vlan
  • 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
  • un vlan pour relier les points d'accès associé à un seul port du commutateur. -> vlan

Les vlans ............ regroupant les routeurs ainsi que les points d'accès seront 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 :


PRA.png



Configuration des commutateurs

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

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 des routeurs) :

>config terminal
>vlan 9
>name routeurs
>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 (exemple du VLAN routeurs):

Création de la machine virtuelle

Pour la création de la machine virtuelle, on se connecte via la commande :

ssh root@corduan.insecserv.deule.net // Avec les identifiants habituels.