TP sysres IMA2a5 2019/2020 G5 : Différence entre versions

De Wiki d'activités IMA
(Les tests d'intrusion)
(Configuration du serveur SSH)
 
(34 révisions intermédiaires par 2 utilisateurs non affichées)
Ligne 2 : Ligne 2 :
 
GROUPE 5 : Adrien MONFILLIETTE & Quentin VERNE
 
GROUPE 5 : Adrien MONFILLIETTE & Quentin VERNE
 
--------------------------------
 
--------------------------------
 +
==Introduction==
 +
Dans le cadre du cours de système & réseau, nous avons eu la possibilité de créer une maquette réseau entre les différents binômes de la promotion. Pour cela, un numéro de groupe a été donné à chaque binôme : nous sommes le groupe n°5.
 +
Afin de réaliser cette maquette réseau, nous avons du installer une machine virtuelle (VM) sur un serveur commun puis réaliser les différentes étapes du TP afin que les VM puisse communiquer entre elle.
 +
L'objectif de ce Wiki est de présenter ces différentes étapes que nous avons réalisé.
  
 +
'''Remarque : '''La mise en place de la maquette réseau à nécessité, d'une part une configuration des machines, et d'autres part une configuration des routeurs et commutateurs afin d'obtenir une redondance réseau. Pour la partie hardware, se sont Quentin.W et Maxime.H qui s'en sont chargé, je vous renvoie donc vers leurs Wiki pour les explications.
  
==Création de la VM==
+
==Mise en place de la machine virtuelle avec Xen==
 +
===Création de la VM===
 +
Dans un premier temps, il faut donc créer la VM sur le serveur commun.
 
Tout d'abord, on se connecte en ssh sur le serveur CORDOUAN.
 
Tout d'abord, on se connecte en ssh sur le serveur CORDOUAN.
  
 
       pifou@zabeth10:~$ ssh root@cordouan.insecserv.deule.net
 
       pifou@zabeth10:~$ ssh root@cordouan.insecserv.deule.net
  
On veut créer une machine virtuel grace à XEN. . Pour cela, on utilise la commande suivante en précisant le hostname qui correspond à notre groupe.  
+
On veut créer une machine virtuel grâce à XEN. Pour cela, on utilise la commande suivante en précisant le hostname qui correspond à notre groupe.  
  
xen-create-image --hostname='''ima2a5-nofun''' --dhcp --dir=/usr/local/xen --dist=ascii --apt-proxy=http://proxy.polytech-lille.fr:3128 --mirror=http://fr.deb.devuan.org/merged/ --force
+
      xen-create-image --hostname='''ima2a5-nofun''' --dhcp --dir=/usr/local/xen --dist=ascii --apt-proxy=http://proxy.polytech-lille.fr:3128 --mirror=http://fr.deb.devuan.org/merged/ --force
  
Avant de lancer pour la première fois la VM, il faut modifier le fichier de configuration de la VM afin de lui donner accès au bridge réseau et lui ajouter les disques virtuels de stockage.
+
===Configuration de la VM===
On ouvre le fichier.
+
Avant de lancer pour la première fois la VM, il faut modifier son fichier de configuration afin de lui donner accès au bridge réseau (qui permettra à toutes les VM de communiquer entre elle) et lui ajouter les disques virtuels de stockage.
  
 +
Dans un premier temps, on crée les partitions /var et /home:
 +
      root@cordouan:~#lvcreate -L10G -n ima2a5-nofun-var virtual
 +
      root@cordouan:~#lvcreate -L10G -n ima2a5-nofun-home virtual
 +
 +
Puis, on les fait pointer vers notre système de fichier:
 +
      mke2fs /dev/virtual/ima2a5-nofun-var
 +
      mke2fs /dev/virtual/ima2a5-nofun-home
 +
 +
Une fois ces disques virtuels créén, on peut les installer sur la VM en ouvrant le fichier de configuration de la VM avec la commande suivant:
 
       nano /etc/xen/ima2a5-nofun.cfg
 
       nano /etc/xen/ima2a5-nofun.cfg
  
Voir fichier de configuration ci-dessous :
+
Voir fichier de configuration ci-dessous (on ajoute le bridge ainsi que les disques):
  
 
       #
 
       #
Ligne 64 : Ligne 80 :
  
  
 +
===Lancement de la VM===
 +
Une fois le fichier de configuration modifié, on lance la VM avec la commande suivante :
  
On lance la VM avec la commande suivante :
+
      xl create ima2a5-nofun.cfg
  
      xl create ima2a5-nofun.cfg
+
'''Remarque : '''Pour arréter la VM, on utilise la commande:
 +
      xl shutdown ima2a5-nofun
  
Lors de la creation de la VM, un ficher .log a été généré dans /var/log/xen-tools/ima2a5-nofun.log. On y trouve tout en bas le mot de passe du user 'root' pour la première connection.
+
Lors de la création de la VM, un ficher .log a été généré dans le répertoire '''/var/log/xen-tools/ima2a5-nofun.log'''. On y trouve tout en bas le mot de passe du user 'root' pour la première connexion.  
Installation Summary :
 
  
 +
      Installation Summary :
 
       Hostname        :  ima2a5-nofun
 
       Hostname        :  ima2a5-nofun
 
       Distribution    :  ascii
 
       Distribution    :  ascii
Ligne 82 : Ligne 101 :
 
       '''Root Password  :  u55fREsaBSw6FefPjLekV8W'''
 
       '''Root Password  :  u55fREsaBSw6FefPjLekV8W'''
  
On se connecte avec ces identifiants puis on change le mot de passe en 'pasglop' avec la commande '''passwd'''
+
Le mot de passe peut ensuite être modifier avec la commande '''passwd''' par le mot de passe des sessions Zabeth.
 +
 
 +
===Configuration de l'adresse IP de la VM===
 +
Une fois sur le VM, on peut configurer l'adresse IP de la VMen statique : '''193.48.57.165''' dans le répertoire /etc/network/interfaces.
 +
 
 +
Pour la suite du TP, nous allons voir besoin de plusieurs utilitaire sur notre machine virtuelle:
 +
  Pour la création du serveur Apache : '''apache2'''
 +
  Pour la gestion du raid5 : '''mdadm'''
 +
  Pour la gestion du serveur DNS et DNSSEC : '''bind9'''
 +
 
 +
===Configuration du RAID5===
 +
Le RAID5 est une configuration de disque de stockage qui permet une redondance et une intégrité des données en cas de panne sur l'un des disques.
 +
Dans un premier temps on créé 3 nouveaux disques de stockages virtuels qu'on configurera ensuite en RAID5.
 +
      lvcreate -L1G -n ima2a5-nofun-disk1 virtual
 +
      lvcreate -L1G -n ima2a5-nofun-disk2 virtual
 +
      lvcreate -L1G -n ima2a5-nofun-disk3 virtual
 +
 
 +
On peut les ajouter dans le fichier '''/etc/xen/ima2a5-nofun.cfg''' comme pour les disques /var et /home.
 +
 
 +
Avec l'utilitaire '''mdamd''', on réalise le RAID5 entre les 3 disques :
 +
      mdadm --create /dev/md0 --level=5  --raid-devices=3 /dev/xvdb3 /dev/xvdb4 /dev/xvdb5
 +
      mdadm --monitor --daemonise /dev/md0
 +
      mkfs.ext4 /dev/md0
 +
 
 +
On créait un nouveau fichier '''mkdir /media/disk-raid''' pour y monter notre volume de stockage.
 +
 
 +
On modifie ensuite le fichier '''/etc/fstab''' en y ajoutant cette ligne pour déclarer notre nouveau volume de stockage:
 +
        /dev/md0 /media/disk-raid ext4 defaults 0 1
 +
 
 +
===Configuration du serveur SSH===
 +
 
 +
Pour pouvoir accèder à notre VM à distance sans devoir utiliser xl console, nous devons configurer SSH.
 +
 
 +
Il faut d'abord installer le paquet SSH
 +
 
 +
apt install openssh-server
 +
 
 +
Puis nous modifions le fichier de configuration /etc/ssh/sshd_config en modifiant les lignes suivantes:
 +
 
 +
permitRootLogin yes
 +
 
 +
passwordAuthentification yes
 +
 
 +
On redémarre le service pour prendre en compte les changements :
 +
 
 +
service ssh restart
 +
 
 +
==Le site WEB==
 +
Une fois la machine virtuelle créé, il faut m’intentant qu'elle puisse héberger un site WEB !! (d'où l’installation d'Apache).
 +
Nous avons donc acheté un nom de domaine sur le site Gandi.net et nous avons acheter le nom de domaine suivant : '''ima2a-nofun.site'''  [https://www.ima2a5-nofun.site VOIR ICI]
 +
===Configuration du serveur Apache en HTTP===
 +
Dans un premier temps, on configure notre serveur en HTTP.
 +
Avec l’installation d'Apache, un répertoire c'est créé et permet de configurer les sites qu'Apache héberge.
 +
      /etc/apache2/sites-available
 +
On peut donc ouvrir le fichier de configuration de notre site:ima2a5-nofun.site.conf
 +
 
 +
<VirtualHost *:80>
 +
      ServerName ima2a5-nofun.site
 +
      ServerAlias www.ima2a5-nofun.site
 +
      DocumentRoot "/var/www/ima2a5-nofun"
 +
      <Directory "/var/www/ima2a5-nofun">
 +
              Options +FollowSymLinks
 +
              AllowOverride all
 +
              Require all granted
 +
      </Directory>
 +
      ErrorLog /var/log/apache2/error.ima2a5-nofun.site.log
 +
      CustomLog /var/log/apache2/access.ima2a5-nofun.site.com.log combined
 +
  </VirtualHost>
 +
 
 +
A présent, il faut recharger le serveur pour que les modifications soient prises en compte.
 +
      a2ensite ima2a5-nofun.site
 +
      service apache2 reload
 +
 
 +
===Site sécurisé en HTTPS===
 +
Pour pouvoir passer son site en HTTPS, il faut obtenir un certificat. On utilise la commande :
 +
  openssl req -nodes -newkey rsa:2048 -sha256 -keyout ima2a5-nofun.key -out ima2a5-nofun.csr
 +
 
 +
On nous propose ensuite une série de question :
 +
 
 +
Country Name (2 letter code) [AU]:FR
 +
    State or Province Name (full name) [Some-State]:Nord
 +
    Locality Name (eg, city) []:Lille
 +
    Organization Name (eg, company) [Internet Widgits Pty Ltd]:Polytech Lille
 +
    Organizational Unit Name (eg, section) []:IMA2A5
 +
    Common Name (e.g. server FQDN or YOUR name) []:ima2a5-nofun.site
 +
    Email Address []:adrien.monfilliette@polytech-lille.net
 +
   
 +
    Please enter the following 'extra' attributes
 +
    to be sent with your certificate request
 +
    A challenge password []:pasglop
 +
    Optionnal informations : NA
 +
 
 +
Nous obtenons alors notre clé publique dans le fichier ima2a5-nofun.csr. Nous la communiquons ensuite à Gandi afin qu'il puisse valider et générer un certificat. Une fois validé un certificat .csr et un certificat .pem sont disponibles sur le site de Gandi.
 +
 
 +
Maintenant que nous avons notre certificat est généré nous pouvons nous occuper de la configuration D'Apache.
 +
 
 +
Tout d'abord il faut activer le module qui gère le protocole SSL :
 +
 
 +
  a2enmode ssl
 +
 
 +
Ensuite on modifie notre fichier de configuration serveur pour écouter sur le port 443 et rediriger les connexions sur le port 80 vers le port 443, ainsi on oblige la connexion sécurisée en https
 +
 
 +
 
 +
    <VirtualHost *:80>
 +
      ServerName ima2a5-nofun.site
 +
      ServerAlias www.ima2a5-nofun.site
 +
      DocumentRoot "/var/www/ima2a5-nofun"
 +
      Redirect permanent / https://ima2a5-nofun.site
 +
    </VirtualHost>
 +
 
 +
<VirtualHost *:443>
 +
  #  General setup for the virtual host
 +
    DocumentRoot "/var/www/ima2a5-nofun"
 +
    ServerAlias www.ima2a5-nofun.site
 +
    ServerName www.ima2a5-nofun.site                                                                                                                                                                                                         
 +
    ServerAdmin amonfill@polytech-lille.net                                                                                                                                                                                                  ErrorLog "/usr/local/apache2/logs/error_log"                                                                                                                                                                                                TransferLog "/usr/local/apache2/logs/access_log"                                                                                                                                                                                          # Activation du SSL                                                                                                                                                                                                                                SSLEngine On
 +
   
 +
    SSLProtocol All -SSLv3 -SSLv2
 +
    SSLHonorCipherOrder on
 +
   
 +
    SSLCertificateFile "/etc/apache2/certificate/ima2a5-nofun.cer"
 +
    SSLCACertificateFile "/etc/apache2/certificate/ima2a5-nofun.pem"
 +
    SSLCertificateKeyFile "/etc/apache2/certificate/ima2a5-nofun.key"   
 +
    </VirtualHost>
 +
 
 +
On redémarre le serveur pour appliquer les changements
 +
 
 +
  service apache2 restart
 +
 
 +
On vérifie que notre serveur écoute bien sur les deux ports 80 et 443 :
 +
  apache2ctl -S
 +
 
 +
  *:80                  www.ima2a5-nofun.site (/etc/apache2/sites-enabled/ima2a5-nofun.site.conf:1)
 +
  *:443                  www.ima2a5-nofun.site (/etc/apache2/sites-enabled/ima2a5-nofun.site.conf:8)
 +
 
 +
==Configuration du DNS==
 +
Le DNS permet le lien entre une adresse IP et un nom de domaine. Ainsi, pour accéder à notre site, nous n'aurons plus besion d'indiquer l'adresse IP mais '''ima2a5-nofun.site'''
 +
 
 +
On retourne dans un premier temps sur Gandi dans l'onglet Glue Records puis cliquer sur ADD. On peut choisir ici le nom de notre DNS :
 +
      name : dns.ima2a5-nofun.site
 +
      ip adresse(s) : 193.48.57.165
 +
 
 +
Il faut ensuite attendre un certain temps avant que cela fonctionne sur Internet.
 +
 
 +
 
 +
Pour gérer notre serveur DNS nous utilisons bind9, celà rends la configuration assez simple nous avons seulement quelques fichiers à modifier.
 +
 
 +
On modifie le fichier named.conf.options qui permet de gérer les options de configuration de notre DNS  :
 +
 
 +
    options {
 +
   
 +
        // forwarders {
 +
        //    0.0.0.0;
 +
        // };
 +
        // dnssec-validation auto;
 +
        auth-nxdomain no;    # conform to RFC1035
 +
        listen-on-v6 { any; };
 +
        allow-transfer { "allowed_to_transfer"; };
 +
    };
 +
   
 +
    acl "allowed_to_transfer" {
 +
        217.70.177.40/32; // adresse IP de dns6.gandi.net
 +
    };
 +
 
 +
 
 +
Dans le fichier named.conf.local on déclare les zones associées au domaine:
 +
 
 +
    zone "ima2a5-nofun.site" {
 +
        type master;
 +
        file "/etc/bind/ima2a5-nofun.site";
 +
    };
 +
 
 +
 
 +
Enfin, il faut créer le fichier de configuration /etc/bind/ima2a5-nofun.site :
 +
 
 +
  ;
 +
  ; BIND data file for local loopback interface
 +
  ;
 +
  $TTL    604800
 +
  @      IN      SOA    ns.ima2a5-nofun.site. root@ima2a5-nofun.site. (
 +
                          21112019        ; Serial
 +
                          604800        ; Refresh
 +
                            86400        ; Retry
 +
                          2419200        ; Expire
 +
                          604800 )      ; Negative Cache TTL
 +
  ;
 +
  @      IN      NS      ns.ima2a5-nofun.site. 
 +
  @      IN      NS      ns6.gandi.net.
 +
  dns    IN      A      193.48.57.165
 +
  www    IN      A      193.48.57.165
 +
 
 +
 
 +
===Mise en place du DNSSEC===
 +
 
 +
Tout d'abord nous devons générer deux paires de clées
 +
 
 +
dnssec-keygen -r /dev/urandom -a RSASHA1 -b 2048 -f KSK -n ZONE ima2a5-nofun.site
 +
dnssec-keygen -r /dev/urandom -a RSASHA1 -b 1024 -n ZONE ima2a5-nofun.site
 +
 
 +
Nous modifions ensuite notre fichier de configuration pour inclure les deux .key précédemment crées
 +
 
 +
  ;
 +
  ; BIND data file for local loopback interface
 +
  ;
 +
  $TTL    604800
 +
  $include /etc/bind/ima2a5-nofun.site.dnssec/ima2a5-nofun.site-ksk.key
 +
  $include /etc/bind/ima2a5-nofun.site.dnssec/ima2a5-nofun.site-zsk.key
 +
  @      IN      SOA    ns.ima2a5-nofun.site. root@ima2a5-nofun.site. (
 +
                          21112019        ; Serial
 +
                          604800        ; Refresh
 +
                            86400        ; Retry
 +
                          2419200        ; Expire
 +
                          604800 )      ; Negative Cache TTL
 +
  ;
 +
  @      IN      NS      ns.ima2a5-nofun.site. 
 +
  @      IN      NS      ns6.gandi.net.
 +
  dns    IN      A      193.48.57.165
 +
  www    IN      A      193.48.57.165
 +
 
 +
Nous signons maintenant le document avec la commande :
 +
 
 +
    dnssec-signzone -o ima2a5-nofun.site -k ima2a5-nofun.site.dnssec/ima2a5-nofun.site-ksk ima2a5-nofun.site ima2a5-nofun.site.dnssec/ima2a5-nofun.site-zsk
 +
 
 +
On modifie notre fichier de zone pour utiliser le fichier signé générer par la signature :
 +
 
 +
  zone "ima2a5-nofun.site" {
 +
        type master;
 +
        file "/etc/bind/ima2a5-nofun.site.signed";
 +
    };
 +
 
 +
On modifie ensuit le fichier .options :
 +
 
 +
  options {
 +
  dnssec-validation auto;
 +
  dnssec-enable yes;
 +
  dnssec-lookaside auto;
 +
 
 +
   
 +
        // forwarders {
 +
        //    0.0.0.0;
 +
        // };
 +
        // dnssec-validation auto;
 +
        auth-nxdomain no;    # conform to RFC1035
 +
        listen-on-v6 { any; };
 +
        allow-transfer { "allowed_to_transfer"; };
 +
    };
 +
   
 +
    acl "allowed_to_transfer" {
 +
        217.70.177.40/32; // adresse IP de dns6.gandi.net
 +
    };
 +
 
 +
 
 +
 
  
 
==Les tests d'intrusion==
 
==Les tests d'intrusion==
 
L'objectif de cette partie est de comprendre comment cracker une clef de chiffrement WiFi.
 
L'objectif de cette partie est de comprendre comment cracker une clef de chiffrement WiFi.
 
Pour cela, nous avons une RaspBerry qui envoit des paquets en WiFi avec, d'un coté un encodage avec une clef WEP et de l'autre une clef WPA-SPK.
 
Pour cela, nous avons une RaspBerry qui envoit des paquets en WiFi avec, d'un coté un encodage avec une clef WEP et de l'autre une clef WPA-SPK.
Pour notre groupe, voici le nom de nos points d'accès (désigné par leurs adresses MAC):
+
Pour notre groupe, voici le nom de nos points d'accès (désigné par leurs adresses MAC), nous verrons plus tard comment les obtenir :
  
 
       04:DA:D2:9C:50:54 => Adresse mac de cracotte05 (pour la clef WEP)
 
       04:DA:D2:9C:50:54 => Adresse mac de cracotte05 (pour la clef WEP)
Ligne 93 : Ligne 364 :
  
 
Nous devons donc déchiffrer ces deux clefs.
 
Nous devons donc déchiffrer ces deux clefs.
 +
 +
  
 
===Configuration du petit PC===
 
===Configuration du petit PC===
Ligne 115 : Ligne 388 :
 
       ifup eth0
 
       ifup eth0
  
Parametrage du proxy :
+
Paramétrage du proxy pour pouvoir installer aircrack :
 
       export http_proxy=http://proxy.polytech-lille.fr:3128
 
       export http_proxy=http://proxy.polytech-lille.fr:3128
  
Ligne 183 : Ligne 456 :
 
[[Fichier:aircrack wpa 1.png|600px|center|frameless|Clef troouvée !!!]]
 
[[Fichier:aircrack wpa 1.png|600px|center|frameless|Clef troouvée !!!]]
  
==Configuration du commutateur catalyst 4600==
 
 
une fois connecté avec  minicom, le commutateur est en état "rommon" on fait donc "boot" pour le redemmarer.
 
 
 
Configurationde la vm sur cordouan
 
brctl show pour retrouver le nom du bridge
 
 
Fichier de configuratiion : ima2a5-nofun.cfg
 
 
on ouvre avec:  root@cordouan:~# nano /etc/xen/ima2a5-nofun.cfg
 
 
xen permet de creer la machine virtuelle
 
 
 
 
Axel & Bastien
 
COMMUTATEUR
 
 
----
 
 
== Introduction ==
 
Ce TP 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 avons à installer une machine virtuelle Xen avec l'OS '''Devian''' ainsi qu'implanter un auto-commutateur et un point d'accès. Nous effectuerons pas la suite des tests d'intrusion sur ces points d'accès afin de voir la vulnérabilité des différents protocoles de clé (WEP / WPA-PSK).
 
------------------------------------------------------------
 
|                                                          |
 
|  POUR CORRIGER ==> [http://coreff.space coreff.space]  |
 
|                                                          |
 
------------------------------------------------------------
 
 
 
[[Fichier:Coreff-logo.jpg | 600px | center]]
 
 
== Installation des systèmes d'exploitation ==
 
=== Configuration de l'accès internet sur la Zabeth08 ===
 
L’accès internet ne fonctionnait pas car l’utilitaire ''bridge-utils'' n’était pas installé, on a donc modifié le '''/etc/network/interfaces''' pour se connecter au serveur DHCP et avoir un accès internet temporaire et télécharger les paquets de cet utilitaire.
 
Une fois ces paquets installés la connexion de pont a pu être réalisée, on a donc essayé de se connecter de nouveau, mais la connexion ne fonctionnait toujours pas. On a donc modifié le fichier '''/etc/dhcp/dhclient.conf''' pour ajouter un ''timeout'' et un ''retry'' de 180.
 
 
Voici ces fichiers:
 
 
      '''/etc/network/interfaces'''
 
     
 
      ''# This file describes the network interfaces available on your system''
 
      ''# and how to activate them. For more information, see interfaces(5).''
 
     
 
      source /etc/network/interfaces.d/*
 
     
 
      '''# The loopback network interface'''
 
      auto lo
 
      iface lo inet loopback
 
     
 
      '''# The primary network interface (IPv4)'''
 
      auto eth0
 
      iface eth0 inet manual
 
      up ip link set dev $IFACE up
 
     
 
      '''# A secondary network interface (IPv4)'''
 
      auto eth1
 
      iface eth1 inet manual
 
      up ip link set dev $IFACE up
 
     
 
      '''# Bridge'''
 
      auto bridge
 
      iface bridge inet dhcp
 
      bridge_ports eth0 eth1
 
      bridge_hw 00:22:4d:7a:f0:70
 
 
      '''/etc/dhcp/dhclient.conf'''
 
      # Configuration file for /sbin/dhclient.
 
      #
 
      # This is a sample configuration file for dhclient. See dhclient.conf's
 
      #    man page for more information about the syntax of this file
 
      #    and a more comprehensive list of the parameters understood by
 
      #    dhclient.
 
      #
 
      # Normally, if the DHCP server provides reasonable information and does
 
      #    not leave anything out (like the domain name, for example), then
 
      #    few changes must be made to this file, if any.
 
      #
 
     
 
      option rfc3442-classless-static-routes code 121 = array of unsigned integer 8;
 
     
 
      send host-name = gethostname();
 
      request subnet-mask, broadcast-address, time-offset, routers,
 
          domain-name, domain-name-servers, domain-search, host-name,
 
          dhcp6.name-servers, dhcp6.domain-search, dhcp6.fqdn, dhcp6.sntp-servers,
 
          netbios-name-servers, netbios-scope, interface-mtu,
 
          rfc3442-classless-static-routes, ntp-servers;
 
     
 
      #send dhcp-client-identifier 1:0:a0:24:ab:fb:9c;
 
      #send dhcp-lease-time 3600;
 
      #supersede domain-name "fugue.com home.vix.com";
 
      #prepend domain-name-servers 127.0.0.1;
 
      #require subnet-mask, domain-name-servers;
 
      '''timeout 180;'''
 
      '''retry 180;'''
 
      #reboot 10;
 
      #select-timeout 5;
 
      #initial-interval 2;
 
      #script "/sbin/dhclient-script";
 
      #media "-link0 -link1 -link2", "link0 link1";
 
      #reject 192.33.137.209;
 
     
 
      #alias {
 
      #  interface "eth0";
 
      #  fixed-address 192.5.5.213;
 
      #  option subnet-mask 255.255.255.255;
 
      #}
 
     
 
      #lease {
 
      #  interface "eth0";
 
      #  fixed-address 192.33.137.200;
 
      #  medium "link0 link1";
 
      #  option host-name "andare.swiftmedia.com";
 
      #  option subnet-mask 255.255.255.0;
 
      #  option broadcast-address 192.33.137.255;
 
      #  option routers 192.33.137.250;
 
      #  option domain-name-servers 127.0.0.1;
 
      #  renew 2 2000/1/12 00:00:01;
 
      #  rebind 2 2000/1/12 00:00:01;
 
      #  expire 2 2000/1/12 00:00:01;
 
      #}
 
 
=== Installation de Devuan sur le PC portable ===
 
Avec la clé usb de boot on a installé l’OS Devuan sur le pc portable “brochet”
 
 
<blockquote><u>Nom d’utilisateur :</u><blockquote>superbrochet / root</blockquote></blockquote>
 
 
<blockquote><u>Mot de passe :</u><blockquote>glopglop</blockquote></blockquote>
 
 
;Problèmes rencontrés:
 
:* Le proxy de polytech n'a pas été défini lors de l'installation —> Ajout de http:/proxy proxy.polytech-lile.fr:3128 OK
 
:*le miroir devuan ne s’est pas configuré. On l’a donc ajouté
 
      '''/etc/apt/sources.list'''
 
      deb http://fr.deb.devuan.org/merged/ ascii main non-free contrib
 
      deb-src http://fr.deb.devuan.org/merged/ ascii main non-free contrib
 
      deb http://auto-mirror.devuan.org/merged ascii-security main non-free contrib
 
      deb-src http://auto-mirror.devuan.org/merged ascii-security main non-free contrib
 
 
=== Installation de la machine virtuelle avec Xen ===
 
==== Installation de la VM ====
 
Nous avons ouvert une connection Secure Shell (SSH) sur cordouan : <code>cordouan.insecserv.deule.net</code>
 
 
Nous avons ensuite créé la machine virtuelle grâce à la commande suivante :
 
      xen-create-image --hostname=coreff --dhcp --dir=/usr/local/xen --dist=ascii
 
      --apt-proxy=http://proxy.polytech-lille.fr:3128 --mirror=http://fr.deb.devuan.org/merged/ --force
 
 
On a ensuite modifié le fichier de configuration de la machine virtuelle de la façon suivante:
 
      '''/etc/xen/coreff.cfg
 
      '''# Configuration file for the Xen instance coreff, created
 
      '''# by xen-tools 4.7 on Fri Sep 28 16:56:02 2018.
 
      '''#
 
     
 
      '''#
 
      '''#  Kernel + memory size
 
      '''#
 
      kernel  = '/boot/vmlinuz-4.14.0-3-amd64'
 
      extra  = 'elevator=noop'
 
      ramdisk = '/boot/initrd.img-4.14.0-3-amd64'
 
     
 
      vcpus  = '1'
 
      memory  = '256'
 
     
 
      '''#
 
      '''#  Disk device(s).
 
      '''#
 
      root    = '/dev/xvda2 ro'
 
      disk    = [
 
                    'file:/usr/local/xen/domains/coreff/disk.img,xvda2,w',
 
                    'file:/usr/local/xen/domains/coreff/swap.img,xvda1,w',
 
                ]
 
     
 
      '''#
 
      '''#  Physical volumes
 
      '''#
 
     
 
     
 
      '''#
 
      '''#  Hostname
 
      '''#
 
      name    = 'coreff'
 
     
 
      '''#
 
      '''#  Networking
 
      '''#
 
      dhcp    = 'dhcp'
 
      <s>vif    = [ 'mac=00:16:3E:8B:FC:65' ]</s>
 
      vif    = [ 'mac=00:16:3E:8B:FC:65, '''bridge=bridgeIMA2a5''' ' ]
 
     
 
      '''#
 
      '''#  Behaviour
 
      '''#
 
      on_poweroff = 'destroy'
 
      on_reboot  = 'restart'
 
      on_crash = 'restart'
 
 
Puis <code>xl create coreff.cfg</code> pour parser la configuration de la VM.
 
Et <code>xl console coreff</code> dans un autre terminal pour lancer la machine virtuelle.
 
<pre style="color: red">On a modifié le mot de passe root de la VM : glopglop!</pre>
 
 
==== Montage du /var et du /home dans cordouan ====
 
En SSH sur cordouan, on a créé les volumes logiques de 10Go correspondant à ces deux répertoires:
 
      lvcreate -L10G -n apIMA5-coreff-home virtual
 
      lvcreate -L10G -n apIMA5-coreff-var virtual
 
Nous avons ensuite créé le système de fichier sur ces volumes :
 
      mke2fs /dev/virtual/apIMA5-coreff-home
 
      mke2fs /dev/virtual/apIMA5-coreff-var
 
Et modifier une nouvelle fois le fichier de configuration de notre machine virtuelle afin de lui indiquer que les répertoires correspondent à des points de montages physique:
 
      '''/etc/xen/coreff.cfg'''
 
      [...]
 
      '''#
 
      '''#  Disk device(s).
 
      '''#
 
      root    = '/dev/xvda2 ro'
 
      disk    = [
 
                    'file:/usr/local/xen/domains/coreff/disk.img,xvda2,w',
 
                    'file:/usr/local/xen/domains/coreff/swap.img,xvda1,w',             
 
                        'phy:/dev/virtual/apIMA5-coreff-home,xvdb1,w',
 
                        'phy:/dev/virtual/apIMA5-coreff-var,xvdb2,w',
 
                  ]
 
      [...]
 
 
On vérifie sur Coreff que tout à fonctionner :
 
      root@coreff:~# fdisk -l
 
      Disk /dev/xvda2: 4 GiB, 4294967296 bytes, 8388608 sectors
 
      Units: sectors of 1 * 512 = 512 bytes
 
      Sector size (logical/physical): 512 bytes / 512 bytes
 
      I/O size (minimum/optimal): 512 bytes / 512 bytes
 
     
 
      Disk /dev/xvda1: 512 MiB, 536870912 bytes, 1048576 sectors
 
      Units: sectors of 1 * 512 = 512 bytes
 
      Sector size (logical/physical): 512 bytes / 512 bytes
 
      I/O size (minimum/optimal): 512 bytes / 512 bytes
 
     
 
      Disk /dev/xvdb1: 10 GiB, 10737418240 bytes, 20971520 sectors
 
      Units: sectors of 1 * 512 = 512 bytes
 
      Sector size (logical/physical): 512 bytes / 512 bytes
 
      I/O size (minimum/optimal): 512 bytes / 512 bytes
 
     
 
      Disk /dev/xvdb2: 10 GiB, 10737418240 bytes, 20971520 sectors
 
      Units: sectors of 1 * 512 = 512 bytes
 
      Sector size (logical/physical): 512 bytes / 512 bytes
 
      I/O size (minimum/optimal): 512 bytes / 512 bytes
 
 
Les volumes ont bien été créés ! ♥
 
 
On modifie le ''fstab'' de la VM pour indiquer au système d'exploitation que ces volumes sont à monter automatiquement au démarrage:
 
      '''# /etc/fstab: static file system information.
 
      '''#
 
      '''# <file system> <mount point> <type> <options> <dump> <pass>
 
      proc        /proc proc defaults 0 0
 
      devpts /dev/pts devpts rw,noexec,nosuid,gid=5,mode=620 0 0
 
      /dev/xvda1 none swap sw 0 0
 
      /dev/xvda2 / ext4 noatime,nodiratime,errors=remount-ro 0 1
 
      '''/dev/xvdb1 /home ext4 defaults 0 2
 
      '''/dev/xvdb2 /var ext4 defaults 0 2
 
 
Petite vérification : On a bien un /home vide (mis à part le lost+found)
 
      root@coreff:~# ls /home
 
      lost+found
 
 
Notre répertoire <code>/var</code> n'étant pas vide, on ne peut pas procéder de la même maniere. Commençonc par monter le xvdb2 dans le répertoire de montage temporaire <code>/mnt</code>:
 
      root@coreff:~# mount /dev/xvdb2 /mnt
 
On déplace ensuite tout les fichiers du <code>/var</code> dans le <code>/mnt</code>
 
<pre style="color: red">!! ATTENTION !! Cette opération est très critique car à ce moment là, le système n'a plus de /var</pre>
 
      root@coreff:~# mv /var/* /mnt
 
On démonte ensuite le <code>/mnt</code>, puis on remonte le tout :
 
      root@coreff:~# umount /mnt
 
      root@coreff:~# mount -a
 
On vérifie que toutes ces opération se sont bien passées :
 
      root@coreff:~# df
 
      '''Filesystem 1K-blocks Used Available Use% Mounted on
 
      udev 75004 0 75004 0% /dev
 
      tmpfs          23824 76 23748 1% /run
 
      /dev/xvda2  4062912 459920 3376896 12% /
 
      tmpfs          5120 0  5120 0% /run/lock
 
      tmpfs        152500  0 152500 0% /run/shm
 
      /dev/xvdb1  10321208 23028  9773892 1% /home
 
      /dev/xvdb2  10321208 71076  9725844 1% /var
 
Tout est OK, passons à l'installation des paquetages.
 
 
==== Installation de Docker et création des containers ====
 
Pour faciliter l'installation des différents paquetages, il nous est proposé d'utiliser l'outil '''Docker'''.
 
Docker est un outil permettant la création de containers contenant des services que nous pourrons moduler facilement en choisissant de démarrer ou non ces containers.
 
Passons à l'installation :
 
 
===== Installation de Docker-Engine =====
 
 
[[Fichier:docker.png |center]]
 
 
;Prérequis :
 
:Pour l'installation de '''Docker-Engine''' il nous faut premièrement installer les paquets ''apt-transport-https'' et ''dirmngr''
 
      apt-get install apt-transport-https dirmngr
 
Il nous faut ensuite rajouter le miroir pour pouvoir télécharger Docker-Engine :
 
      echo 'deb https://apt.dockerproject.org/repo debian-stretch main' >> /etc/apt/sources.list
 
;Gestion des trousseaux de clés :
 
: Lorsque l'on ajoute des [https://doc.ubuntu-fr.org/ppa dépots ppa] à notre distribution et pour éviter l'erreur <<GPG "NO_PUBKEY">> il faut passer par la commande apt-key. apt-key gère les clés dont se sert apt pour authentifier les paquets. Les paquets authentifiés par ces clés seront réputés fiables.
 
: Cependant, le port HKP (11371/tcp) est filtré par un pare-feu, il faut donc passer en http:
 
      apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys F76221572C52609D
 
     
 
      Executing: /tmp/apt-key-gpghome.t2eVBZUjfM/gpg.1.sh --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys F76221572C52609D
 
      gpg: key F76221572C52609D: public key "Docker Release Tool (releasedocker)
 
      <docker@docker.com>" imported
 
      gpg: Total number processed: 1
 
      gpg:              imported: 1
 
 
Faisons une mise à jour : <code>apt-get update</code>
 
;Installation de Docker-Engine :
 
: Après avoir installé Docker-Engine (<code>apt-get install docker-engine</code>) il nous faut renseigner le proxy de Polytech' dans docker : dans le fichier /etc/default/docker on a rajouter
 
      export http_proxy="http://proxy.polytech-lille.fr:3128/"
 
On redémarre le service et le tour est joué : <code>service docker restart</code>
 
 
===== Installation des containers =====
 
Premièrement nous avons essayé de créer les containers "à la main" mais cette méthode est lourde et chronophage. Nous avons donc opté pour le téléchargement de containers sur la plateforme open-source de Docker. Ces containers sont stables et largement utilisés au travers du monde. (https://hub.docker.com/)
 
 
===== httpd =====
 
httpd est le programme du serveur HTTP d'Apache. Il a été conçu pour fonctionner sous forme de processus démon indépendant. Lorsqu'il est utilisé ainsi, il va créer un jeu de processus enfants ou de threads qui traiteront les requêtes.
 
;Téléchargement
 
      docker pull httpd
 
;Vérification
 
      root@coreff:/# docker images
 
      '''REPOSITORY          TAG                IMAGE ID            CREATED            SIZE
 
      httpd              latest              dabb52744997        9 days ago          178MB
 
;Lancement du container
 
      docker run -dit --name=apache -v "$PWD"/httpd/htdocs/index.html:/usr/local/apache2/htdocs/index.html \
 
      -v "$PWD"/httpd/conf/httpd.conf:/usr/local/apache2/conf/httpd.conf -p 80:80 httpd
 
:Nous lançons le container httpd avec les options suivantes :
 
::'''-d''' Afin de lancer le container en mode détaché
 
::'''-i''' Afin de garder l'entrée standart STDIN ouverte même si le container est en mode détache
 
::'''-t''' Afin d'allouer un pseudo-tty
 
::'''--name apache''' Afin d'attribuer un nom à ce container. Ceci rend la tâche plus simple quand il s'agit d'appeler le container plutôt que l'utiliser son UUID qui se matérialise sous la forme d'une clé en SHA-256
 
::'''-v''' Afin de lier un point de montage. Ici nous lions <code>$PWD</code> qui correspond à notre répertoire '''/root/''' au répertoire /usr/local/apache2/htdocs/ du container. Ceci nous permet de créer et modifier notre page web à la racine de notre répertoire /root et que les modifications se fassent directement dans le container, il en est de même pour le fichier de config httpd.conf.
 
::'''-p''' Afin de mapper les ports d'écoute de la machine virtuelle et du docker. Ici nous mappons les ports http (80).
 
 
===== bind9 =====
 
'''bind''' est un logiciel open source qui permet de publier nos informations DNS (Domain Name System) sur Internet et de résoudre les requêtes DNS des utilisateurs. Le nom BIND signifie «Berkeley Internet Name Domain». Le service DNS (Domain Name System) est un service TCP/IP permettant la correspondance entre un nom de domaine qualifié (FQDN : Fully Qualified Domain Name) et une adresse IP.
 
;Téléchargement
 
      docker pull ventz/bind
 
;Vérification
 
      root@coreff:~# docker images
 
      '''REPOSITORY          TAG                IMAGE ID            CREATED            SIZE
 
      httpd              latest              dabb52744997        10 days ago        178MB
 
      ventz/bind          latest              c54ade396204        4 weeks ago        11.7MB
 
Nous avons modifié les fichiers de configuration suivant:
 
;/etc/bind/named.conf.options
 
      root@coreff:~/Bind# cat named.conf.options
 
      options {
 
          directory "/var/cache/bind";
 
     
 
          // If there is a firewall between you and nameservers you want
 
          // to talk to, you may need to fix the firewall to allow multiple
 
          // ports to talk.  See http://www.kb.cert.org/vuls/id/800113
 
     
 
          // If your ISP provided one or more IP addresses for stable
 
          // nameservers, you probably want to use them as forwarders. 
 
          // Uncomment the following block, and insert the addresses replacing
 
          // the all-0's placeholder.
 
     
 
          // forwarders {
 
          //    0.0.0.0;
 
          // };
 
     
 
          //========================================================================
 
          // If BIND logs error messages about the root key being expired,
 
          // you will need to update your keys.  See https://www.isc.org/bind-keys
 
          //========================================================================
 
          dnssec-validation auto;
 
     
 
          auth-nxdomain no;    # conform to RFC1035
 
          listen-on-v6 { any; };
 
          '''allow-transfer { "allowed_to_transfer"; };
 
      };
 
     
 
      '''acl "allowed_to_transfer" {
 
          '''217.70.177.40/32;
 
      '''};
 
Ici <code> 217.70.177.40</code> correspond à l'adresse du ns6.gandi.net
 
 
;/etc/bind/named.conf.local
 
:C'est dans ce ficher que se trouvent nos déclarations de zones DNS. Il faut ajouter une zone par site internet que nous hégergeons.
 
      root@coreff:~/Bind# cat named.conf.local
 
      //
 
      // Do any local configuration here
 
      //
 
     
 
      // Consider adding the 1918 zone here, if they are not used in your
 
      // organization
 
      // include "/etc/bind/zones.rfc1918";
 
     
 
      '''zone "coreff.space" {
 
      '''    type master;
 
      '''    file "/etc/bind/coreff.space";
 
      '''};
 
;/etc/bind/coreff.space
 
      root@coreff:~/Bind# cat coreff.space
 
      $TTL 259200
 
     
 
      @ IN SOA dns.coreff.space. admin.coreff.space. (
 
          10      ; Version
 
          7200    ; Refresh (2h)
 
          3600    ; Retry (1h)
 
          1209600 ; Expire (14j)
 
          7200    ; Minimum TTL (2h)
 
      IN NS dns.coreff.space.
 
      IN NS ns6.gandi.net.
 
      IN MX 100 dns.coreff.space.
 
      IN A    193.48.57.161
 
     
 
      www    IN A    193.48.57.161
 
            IN MX    100 dns.coreff.space.
 
      dns    IN A    193.48.57.161
 
::'''Explications'''
 
::IN Signifie internet, c’est à dire que la zone après le IN est destinée à internet
 
::SOA Signifie Star Of Authority, indiquant le serveur de nom faisant autorité c’est à dire votre DNS principal.
 
::dns.coreff.space. est le DNS principal de notre domaine
 
::admin.coreff.space. est une adresse email (non-valide ici mais il n'y a pas d'utilité spéciale)
 
::IN NS est utilisé pour définir quels serveurs répondent pour cette zone.
 
::IN MX est utilisé pour définir vers quel serveur de la zone un email à destination du domaine doit être envoyé, et avec quelle priorité.
 
:: IN A est utilisé pour faire correspondre une adresse IP a une machine
 
:: 193.48.57.161 est l'adresse IP de notre machine virtuelle coreff
 
;Problème rencontré:
 
:Il était impossible de lancer des commandes dans le container avec la commande <code>docker exec</code>. Il nous a fallu du temps pour comprendre que le container executait juste une configuration et se fermait automatiquement après. Pour palier à ce problème, nous avons fait comme pour ''http'', c'est à dire lier les montages des fichiers de configuration ci-dessus.
 
;Lancement du container
 
      docker run --name=dns -dit --dns=8.8.8.8 --dns=8.8.4.4 -p 53:53/udp -p 53:53 \
 
      -v "$PWD"/Bind/named.conf.local:/etc/bind/named.conf.local \
 
      -v "$PWD"/Bind/named.conf.options:/etc/bind/named.conf.options \
 
      -v "$PWD"/Bind/coreff.space:/etc/bind/coreff.space
 
 
Maintenant il faut que nous notre réseau soit totalement configuré. Cela passe par la configuration des routeurs (travail de 2 autres groupes) et la configuration des commutateurs. Une fois cela fait et quand nous aurons acheter un nom de domaine, nous serons en mesure d’accéder à notre site internet.
 
 
== Architecture réseau ==
 
=== Synoptique ===
 
L'architecture qui nous est proposé de réalisé est une architecture en étoile. Cette architecture présente l'avantage d'être résistante aux défauts car, si un commutateur ou un routeur venait à tomber en panne, l'autre pourrait alors reprendre la main et limiter la durée d'interruption du trafic. Ci dessous, un synoptique de l'architecture que nous réaliserons :
 
[[Fichier:ArchiIMA.png | center]]
 
 
 
 
 
Notre travail est de configurer correctement le commutateur encadré ci dessus. Il s'agit, comme l'autre, d'un Catalyst 4006 :
 
[[Fichier:Catalyst.jpeg | center]]
 
  
 +
==Sécurisation wifi par WPA2-EAP==
  
=== Configuration du commutateur Catalyst 4006 ===
+
===Configuration de la borne wifi===
Pour configurer ce commutateur, nous nous sommes connectés sur son port console via un cable série et nous avons utilisé l'utilitaire minicom. Minicom est un programme de contrôle de modem et d'émulation de terminal pour les OS de type UNIX.
 
      minicom -o -D /dev/ttyUSB0 -b 9600
 
:Nous lançons minicom avec les options suivantes :
 
::'''-o''' Afin que minicom ignore le code d'initialisation. Cette option est pratique dans le cas ou nous quittons une session minicom dans le but de la relançer plus tard.
 
::'''-D''' Afin de préciser le périphérique. Ici le cable série est relié à notre PC via USB, nous renseignons donc l'interface correspondante : /dev/ttyUSB0
 
::'''-b''' Afin de préciser le baud rate, 9600 ici.
 
  
Nous sommes maintenant connectés au commutateur. Nous pouvons connaître sa configuration actuelle au moyen des commandes suivantes :
 
      show int summary
 
      show vlan
 
      show run
 
Cela nous donne 3 niveaux de visualisation de l'état des VLANS du commutateur.
 
  
==== Raccordements ====
+
On configure la borne wifi pour créer notre réseau sans fil
Le travail de raccordement à été réalisé par le groupe 4, nous sommes donc partis du principe que le travail avait été bien fait, nous ne nous en sommes pas souciés.
+
Création du serveur radius
  
==== Configuration des VLANs ====
+
radius-server host 193.48.57.165 auth-port 1812 acct-port 1813 key glopglop
  
Notre commutateur est relié :
+
Définir le groupe de serveur AAA
* au serveur Cordouan
 
* au routeur dans la salle 304
 
* au routeur dans la salle 306
 
* au point d'accès wifi
 
* l'interconnexion
 
* 2 ports supplémentaires de test
 
  
 +
aaa group server radius radius_ima2a5-nofun
  
Nous avons créé 7 VLANs  : un pour chaque groupe + un pour l'interconnexion + un pour Xen.
+
Association du groupe de serveur et du serveur de la VM
{| class="wikitable"
 
!Nom VLAN !! Prise !! VLAN
 
|-
 
|Cordouan
 
|GigabitEthernet3/2
 
|VLAN 42
 
|-
 
|Interconnexion (Routeur E304)
 
|GigabitEthernet2/1
 
|trunk
 
|-
 
|Borne Wifi
 
|GigabitEthernet2/3
 
|trunk
 
|-
 
|Routeur E306 (en fibre)
 
|GigabitEthernet3/1
 
|trunk
 
|-
 
|Port test 1
 
|FastEthernet3/3
 
|VLAN 42
 
|-
 
|Port test 2
 
|FastEthernet3/4
 
|VLAN 42
 
|-
 
|}
 
  
Pour la configuration des ports qui ne sont pas en trunk nous les avons appliqué la configuration suivante :
+
server 193.48.57.165 auth-port 1812 acct-port 1813
      interface GigabitEthernet 2/2
 
      switchport mode access
 
      switchport access vlan 42
 
      no shut
 
      exit (x2)
 
      exit
 
      write
 
  
Explications:
+
Définition du login et du groupe de serveur
:'''interface GigabitEthernet 3/2''' nous sélectionnons simplement l'interface sur laquelle nous allons opérer des modifications.
 
:'''switchport mode access''' nous permet de rendre cette interface accessible.
 
:'''switchport access vlan 42''' nous permet de définir à quel VLAN sera associé cette interface.
 
:'''no shut''' Nous permet de garder cette interface active.
 
  
Pour ceux qui necessitaient d'être en trunk nous avons appliqué la configuration suivante :
+
aaa authentication login eap_ima2a5-nofun group radius_ima2a5-nofun
      interface GigabitEthernet 2/3
 
      switchport trunk encapsulation dot1q
 
      switchport mode trunk
 
      no shut
 
      exit
 
      exit
 
      write
 
  
Explications:
+
Définition du SSID
:'''switchport trunk encapsulation dot1q''' nous permet d’insérer l’identifiant du VLAN sur la trame. Toute trame se propageant sur plusieurs switchs/routeur conservera toujours l’information de son appartenance à son VLAN. Et le switch de destination saura avec quels ports la trame peut être commutée. Cela vient de la norme 802.1q d'où l'encapsulation "dot1q"
 
:'''switchport mode trunk''' nous permet de passer l'interface en mode trunk.
 
  
Nous vérifions la configuration grace à <code>sh int status</code> :
+
dot11 ssid SSID_ima2a5-nofun
      '''Port      Name              Status      Vlan      Duplex Speed Type'''
+
  vlan 6
      [...]
+
authentication open eap eap_ima2a5-nofun
      Gi2/1                        notconnect  1            auto  auto 10/100/1000-TX
+
authentication network-eap eap_ima2a5-nofun
      [...]
+
authentication key-management wpa
      Gi2/3                        connected    trunk      a-full a-1000 10/100/1000-TX
 
      [...]
 
      Gi3/1                        notconnect  1            full  1000 1000BaseSX
 
      Gi3/2                        connected    42          full  1000 1000BaseSX
 
      Fa3/3                        notconnect  42          auto  auto 10/100BaseTX
 
      Fa3/4                        notconnect  42          auto  auto 10/100BaseTX
 
      [...]
 
  
Des tests de ping ont été faits depuis notre Vm et sur les ports pour vérifier la configuration, tout s'est bien passé.
+
Configuration du Vlan
  
== Services internet ==
+
interface Dot11Radio0
===Achat et configuration du nom de domaine sur GANDI===
+
encryption vlan 6 mode ciphers aes-ccm tkip
==== Achat ====
+
ssid SSID_ima2a5-nofun
Nous devons réaliser un site web sécurisé.
 
Pour commencer nous avons donc acheter un nom de domaine via le registrar GANDI.
 
Notre nom de domaine est donc '''coreff.space'''
 
==== Configuration ====
 
Pour commencer nous avons dû ajouter un "'''glue record'''" qui est un enregistrement collé (pas très français) et permet d'associer un nom d'hôte avec une adresse IP au registre.
 
[[Fichier:Glue_reccord.png|700px|center]]
 
  
Une fois cela fait, nous avons pû configurer les serveurs ne noms sur GANDI:
+
Création d'une sous interface
Nous avions 3 DNS proposé par défaut, on les a supprimés et mit en 1ère position notre dns : '''dns.coreff.space''' et en 2ème position '''ns6.gandi.net''' le DNS que nous avons configré avec bind.
 
[[Fichier:DNSG1.png|1000px|center|]]
 
  
Nous avons attendu un peu de temps afin que les informations de route soient propagés sur internet.
+
interface dot11Radio0.2
Nous avons vérifié avec l'utilitaire en ligne DNSLOOKUP :
+
encapsulation dot1Q 2
[[ Fichier:dnslookup.png |1200px|center|]]
+
bridge-group 6
  
Tout s'est bien passé. Vérifions avec ZoneCheck :
+
interface gigabite0.2
[[ Fichier:zonecheck.png |1200px|center|]]
+
encapsulation dot1Q 2
 +
bridge-group 6
  
Tout s'est bien passé. Nous pouvons accéder à notre site internet depuis n'importe où en tapant notre adresse '''coreff.space''' dans un navigateur !
+
Ajout SSID dans l'interface Dot11Radio0
  
 +
interface Dot11Radio0
 +
dot11 ssid SSID_ima2a5-nofun
  
=== Sécurisation de notre site ===
+
Rendre visible le SSID
Bon, avoir un site accessible c'est bien, mais avoir un site sécurisé c'est mieux ! Commençons par passer notre site en HTTPS
 
==== Certificats SSL ====
 
SSL est un acronyme pour « Secure Sockets Layer » (que l’on pourrait traduire par couche de contacts sécurisée). Un certificat SSL est un fichier qui est installé sur un serveur Web qui permet (entre autre) :
 
*l’authentification du serveur par une Autorité de Certification (Gandi/Comodo)
 
*une transmission sécurisée et l’intégrité des données échangées entre le visiteur du site internet et le serveur.
 
Pour cela nous avons besoin de 2 clés :
 
*La clé privée (le fichier .key) qui doit rester secrète.
 
*La clé publique qui est fournie par ce qu’on appelle une CSR (Certificate Signing Request,Demande de signature de certificat) qui est une série de caractères contenant les informations de la dite clé publique. Cette CSR (fichier .csr) est créé pendant le processus de création de votre certificat sur Gandi. Les clés publiques n’ont pas besoin d’être conservé au secret, en fait elles sont prévues pour être partagées publiquement.
 
  
===== Génération des clés =====
+
interface Dot11Radio0
Afin de générer la CSR nous avons exécuté la commande suivante dans un terminal :
+
mbssid
      openssl req -nodes -newkey rsa:2048 -sha256 -keyout coreff.key -out coreff.csr
+
dot11 ssid SSID_ima2a5-nofun
Explications :
+
mbssid guest-mode
:'''OpenSSL''' est une boîte à outils de chiffrement.
 
:'''req'' afin de gérer les CSR.
 
:'''-nodes''' afin de ne pas chiffrer la clé privée
 
:'''-newkey rsa:2048''' afin de créer une nouvelle demande de certificat et une nouvelle clé privée. rsa:2048 génère une clé RSA de 2048 bits.
 
:'''sha256''' permet de chiffrer la clé publique en sha-256.
 
:'''-keyout coreff.key''' permet de sauvegarder la clé privée.
 
:'''-out coreff.csr''' permet de sauvegarder la clé publique.
 
  
Dès lors une série de questions nous est posée :
+
On écrit les modifications en mémoire puis on redémarre la borne
      Country Name (2 letter code) [AU]:'''FR'''
 
      State or Province Name (full name) [Some-State]:'''Nord'''
 
      Locality Name (eg, city) []:'''Lille'''
 
      Organization Name (eg, company) [Internet Widgits Pty Ltd]:'''Polytech Lille'''
 
      Organizational Unit Name (eg, section) []:'''IMA'''
 
      Common Name (e.g. server FQDN or YOUR name) []:'''coreff.space'''
 
      Email Address []:'''axel.ovelacq@outlook.fr'''
 
     
 
      Please enter the following 'extra' attributes
 
      to be sent with your certificate request
 
      A challenge password []:'''glopglop!'''
 
  
Une fois que nous avons répondu à ces questions, nous sommes en possession des 2 clés. Nous copions le contenu de la CSR dans GANDI. Afin de valider et nous fournir notre certificat, GANDI nous demande de placer un fichier texte dans un répertoire sur notre site. Ce que nous avons fait en mappant ce fichier texte à l'endroit indiqué par GANDI :
+
exit
      docker run -d --name=apache -v /root/httpd/htdocs/index.html:/usr/local/apache2/htdocs/index.html \
+
write
      -v /root/httpd/conf/httpd.conf:/usr/local/httpd.conf \
+
  reload
      '''-v /root/httpd/6B58A62617066D87990829CA2017CD59.txt:/usr/local/apache2/htdocs/.well-known/pki-validation/6B58A62617066D87990829CA2017CD59.txt''' \
 
      -p 80:80 \
 
      httpd
 
Dès lors GANDI va valider le contrôle du domaine. Ce qu va mettre un peu de temps.
 
  
===== Configuration HTTPS =====
+
===Création du serveur Freeradius===
Nous pouvons profiter de ce temps pour préparer notre site au protocole HTTPS. Pour cela il nous faut :
 
*Modifier le fichier httpd.conf
 
::Nous devons charger le module mod_ssl.so
 
::Nous devons inclure le fichier de configuration conf/extra/httpd-ssl.conf prenant en charge les certificats SSL
 
::Tout ceci peut être réalisé simplement grace à une commande '''sed''' :
 
      sed -i \
 
      -e 's/^#\(Include .*httpd-ssl.conf\)/\1/' \
 
      -e 's/^#\(LoadModule .*mod_ssl.so\)/\1/' \
 
      httpd.conf
 
  
*Modifier le fichier de configuration '''httpd-ssl.conf''' que nous venons d'inclure
+
Dans notre machine virtuelle, nous installons le paquet freeradius via la commande suivante:
      <VirtualHost _default_:443>
 
     
 
      #  General setup for the virtual host
 
      DocumentRoot "/usr/local/apache2/htdocs"
 
      ServerName '''coreff.space:443'''
 
      ServerAdmin '''axel.ovelacq@outlook.fr'''
 
      ErrorLog "/usr/local/apache2/logs/error_log"
 
      TransferLog "/usr/local/apache2/logs/access_log"
 
     
 
      #  SSL Engine Switch:
 
      SSLEngine on
 
     
 
      #  Server Certificate:
 
      SSLCertificateFile '''"/usr/local/apache2/conf/coreff.csr"'''
 
      [...]
 
     
 
      #  Server Private Key:
 
      SSLCertificateKeyFile '''"/usr/local/apache2/conf/coreff.key"'''
 
      [...]
 
      </VirtualHost>
 
*Attendre le certificat de gandi et relancer le container en mappant les nouveaux fichiers de configuration et en mappant le port https (443)
 
      docker run -d --name=apache \
 
      -v /root/httpd/htdocs/index.html:/usr/local/apache2/htdocs/index.html \
 
      -v /root/httpd/conf/httpd.conf:/usr/local/httpd.conf \
 
      -v /root/httpd/6B58A62617066D87990829CA2017CD59.txt:/usr/local/apache2/htdocs/.well-known/pki-validation/6B58A62617066D87990829CA2017CD59.txt \
 
      -v /root/httpd/httpd-ssl.conf:/usr/local/apache2/conf/extra/httpd-ssl.conf \
 
      -v /root/httpd/coreff.csr:/usr/local/apache2/conf/coreff.csr \
 
      -v /root/httpd/coreff.key:/usr/local/apache2/conf/coreff.key \
 
      -p 80:80 \
 
      -p 443:443 \
 
      httpd
 
  
==== Sécurisation par DNSSEC ====
+
apt-get install freeradius
===== Explications et intérêts =====
 
Des vulnérabilités ont été découvertes dans le système DNS : elles permettent à un pirate d’intercepter le processus de recherche d’une personne ou d’un site dans l’Internet et d’utiliser leur nom. L’objectif de l’attaque est de prendre le contrôle de la session et, par exemple, d’envoyer l’internaute vers le site Web frauduleux du pirate afin de récupérer le compte et le mot de passe.
 
  
Le système DNS traduit les noms de domaine que les personnes peuvent facilement retenir, en chiffres que les ordinateurs utilisent pour chercher la destination, un peu comme un annuaire téléphonique sert à trouver un numéro de téléphone. Cela se fait par étapes. Le premier endroit où le système DNS « regarde » est le premier niveau du service d’annuaire, ou « zone racine ». En prenant par exemple www.google.com, l'ordinateur « demande » à l’annuaire de la zone racine (ou premier niveau) où trouver les renseignements relatifs à « .com ». Une fois la réponse obtenue, il demande au service d’annuaire « .com », identifié par la racine, où trouver les renseignements sur .google.com (le second niveau). Enfin, il demande au service d'annuaire google.com, identifié par « .com », l’adresse de www.google.com (le troisième niveau). À la fin de ce processus presque instantané, votre ordinateur reçoit l’adresse complète. Chaque service d’annuaire est géré par une entité différente : google.com par Google, « .com » par VeriSign Corporation (et les autres domaines de premier niveau par d’autres organismes), et la zone racine par l’ICANN.
+
Puis nous le configurons pour notre utilisation :
  
Suite aux vulnérabilités découvertes qui ont fortement réduit le temps nécessaire à un pirate pour détourner à son profit une étape du processus de consultation DNS, la seule solution viable pour combler cette faille fut de déployer de bout en bout le protocole de sécurité dénommé '''extensions de sécurité des noms de domaine ou DNSSEC'''.
+
On ajout la ligne suivante sur le fichier /etc/freeradius/3.0/users:
  
La technologie DNSSEC a été développée, entre autres choses, afin de se protéger de telles attaques. Elle permet d’apposer une « signature » numérique aux données et garantit ainsi à l’utilisateur la validité de ces données. Afin d’éliminer cette vulnérabilité de l’Internet, il faut déployer DNSSEC à chaque étape de consultation, de la consultation de la zone racine à celle du nom de domaine final, comme www.icann.org. La signature de la racine, c.-à-d. le déploiement de DNSSEC au niveau de la zone racine, est une étape nécessaire du processus global. Il est important de noter que cette technologie ne chiffre pas les informations ; elle ne fait qu’attester de la validité de l’adresse du site qui est consulté.
+
pifou Cleartext-Password :="glopglop"
  
===== Mise en place du DNSSEC =====
+
On modifie le fichier /etc/freeradius/3.0/mods-enabled/eap comme suit:
Tout d'abord il faut générer 2 paires de clés : la clé publique sera transmise à GANDI et nous garderons la clé publique dans notre Docker bind :
 
      dnssec-keygen -r /dev/urandom -a RSASHA1 -b 2048 -f KSK -n ZONE coreff.space
 
      dnssec-keygen -r /dev/urandom -a RSASHA1 -b 1024 -n ZONE coreff.space
 
Ce qui nous génère 2 paires de clés avec des noms infâmes, Nous les renomons donc en
 
      coreff.space-ksk.key
 
      coreff.space-zsk.key
 
      coreff.space-ksk.private
 
      coreff.space-zsk.private
 
  
Il nous faut ensuite ajouter nos clés privées dans notre fichier de zone sur le docker (coreff.space). Ce sont ces clés qui permettrons de vérifier la provenance des données que nous recevrons.
+
eap{
      $include /etc/bind/coreff.space.dnssec/coreff.space-ksk.key
+
    default_eap_type = peap
      $include /etc/bind/coreff.space.dnssec/coreff.space-zsk.key
+
}
  
Il nous faut ensuite incrémenter le numéro de version sur notre fichier de zone :
+
On modifie le fichier /etc/freeradius/3.0/mods-enabled/mschap :
      root@coreff:/etc/bind# cat coreff.space     
+
use_mppe = yes
      $TTL 259200
+
require_encryption = yes
     
+
require_strong = yes
      '''$include /etc/bind/coreff.space.dnssec/coreff.space-ksk.key'''
+
with_ntdomain_hack = yes
      '''$include /etc/bind/coreff.space.dnssec/coreff.space-zsk.key'''
 
     
 
      @ IN SOA dns.coreff.space. admin.coreff.space. (
 
              '''42       ; Version'''
 
              7200 ; Refresh (2h)
 
              3600 ; Retry (1h)
 
              1209600 ; Expire (14j)
 
              7200 ; Minimum TTL (2j)
 
              )
 
      IN NS dns.coreff.space.
 
      IN NS ns6.gandi.net.
 
      IN MX 100 dns.coreff.space.
 
      IN A 193.48.57.161
 
     
 
      www IN A 193.48.57.161
 
        IN MX 100 dns.coreff.space.
 
      dns IN A 193.48.57.161
 
  
Pour que nos modification soient prise en compte nos devons donc signer notre fichier de configuration:
+
On configure la borne comme client du serveur radius via le fichier /etc/freeradius/3.0/clients.conf comme suit:
      dnssec-signzone -o coreff.space -k coreff.space.dnssec/coreff.space-ksk coreff.space coreff.space.dnssec/coreff.space-zsk
+
client access-point {                              
Ce qui nous génère notre fichier signé : <code>coreff.space.signed</code>
+
      ipaddr          = 10.60.0.100                # IP de la borne
On modifie ensuite le fichier named.conf.local afin qu'il prennes en compte ce fichier :
+
      secret          = glopglop                    # mot de passe
      root@coreff:/etc/bind# cat named.conf.local
+
}
     
 
      include "/etc/bind/zones.rfc1918";
 
      zone "coreff.space" {
 
            type master;
 
            '''file "/etc/bind/coreff.space.signed";'''
 
      };
 
On modifie également notre fichier named.conf.options afin d'activer le DNSSEC
 
      root@coreff:/etc/bind# cat named.conf.options
 
      options {
 
              directory "/var/cache/bind";
 
              dnssec-validation auto;
 
              '''dnssec-enable yes;'''
 
              auth-nxdomain no;    # conform to RFC1035
 
              listen-on-v6 { any; };
 
              allow-transfer { "allowed_to_transfer"; };
 
      };
 
     
 
      acl "allowed_to_transfer" {
 
      217.70.177.40/32;
 
      };
 
  
Il nous donc ensuite communiquer les clés publiques à GANDI
+
On arrête puis on relance le serveur en mode debug (-X) pour voir les tentatives de connexions:
Ce qui inous a donné du fil a retordre...
 
Notre clé publique ressemble à :
 
      root@coreff:/etc/bind/coreff.space.dnssec# cat coreff.space-ksk.key
 
      ; This is a key-signing key, keyid 65146, for coreff.space.
 
      ; Created: 20181130134606 (Fri Nov 30 13:46:06 2018)
 
      ; Publish: 20181130134606 (Fri Nov 30 13:46:06 2018)
 
      ; Activate: 20181130134606 (Fri Nov 30 13:46:06 2018)
 
      coreff.space. IN DNSKEY 257 3 5 AwEAAa+8/Mi6+NoWzDJAwu+1xKWkQszZSIMM9I/XY9Nv2u2LXeMhghXp 0ptQWFgTyg/Yc6PEZrfcJgdKuGfNN4XvEh9olZVGBgiC2lGQTSzRChLQ fBj8b10DJuEyOAAbzW7iPbfiKIRe9wEe+R08OyqJAOHhB4tGzbC3nsFs
 
      AgeyN1kZSOycEaQto7Nd9EPhFf3uGEahFYrqSHZfk4IYQRNVFGvsxYQG 1s3K1uvJ2Z7rCxlmogYen5HljO9A67cBtb/fTNzjQWo7B3iFiOgmwpW1 mnMZVe6FY4ipc/D9bJR0gJlXrh5uCnSh0CzNRJ3iwZEHHGvmhLr0oFxf FhbnvJcii9c=
 
Et il ne faut communiquer à GANDI '''uniquement''' la partie commençany par AwEAAa+8/Mi......
 
Une fois chose faite, nous redémarrons notre docker bind et nous pouvons vérifier que tout à fonctionné grace à [http://dnsviz.net/d/coreff.space/dnssec/ DNSviz], un utilitaire en ligne permettant de visualiser le tout.
 
  
[[ Fichier:DNSSECcoreff.png |800px|center|]]
+
service freeradius stop
 +
freeradius -X
  
Notre Site est désormais correctement configuré et sécurisé ! ♥
+
==Exercice annexe : Cryptage de données==
 +
Un petit exercice annexe consiste à réussir à encoder une clef USB afin qu'elle soit vérouillé par un mot de passe. Pour cela, on a besoin de l'utilitaire '''cryptsetup'''
 +
      apt install cryptsetup
  
== Tests d'intrusion ==
+
Dans un premier temps, après avoir inséré la clef dans le PC, on recherche les périphériques présent sur le pc avec la commande :
 +
      lsblk
  
===Recuperation de la clef WEP===
+
On regarde ensuite le nom de disque qui lui a été donné par le poste, dans notre cas, c'est '''sdb'''
  
Airodump-ng permet d'écouter les réseaux wifi et d'enregistrer les paquets dans un fichier de capture. Tout d'abord, installer le paquetage suivant, puis activer le mode moniteur de la carte wifi:
+
On utilise la commande suivant pour gérer les partitions du disk :
 +
      fdisk /dev/sdb
  
    apt-get install aircrack-ng
+
'''Remarque : '''On différenciera bien le nom du disque ('''sdb''') et le nom de la partition ('''sdb1'''). 
    airmon-ng start wlx40a5ef0f68ce
 
  
Une fois installé, nous allons scanner l'ensemble des reseaux wifi disponible, nous avons le choix parmis x bornes
+
Une fois dans la clef grâce à la commande fdisk, on peut créer une partition.
  
    airodump-ng --encrypt wep wlx40a5ef0f68ce
+
Pour nettoyer la clef, on supprime les partitions présentes en tapant '''d''' (si plusieurs partions on nous demande laquelle supprimer). Ensuite, on réalise cette suite de commande pour créer la partition.
  
[[Fichier:Wifiscan.png|500px|center]]
+
- Pour créer la partition, 'n'
 +
- Partition primaire 'p'
 +
- 1 partition
 +
- Creation au début du secteur
  
Avec la "cracotte09"  nous recupérons le BSSID et le canal (ch). l'objectif suivant est d'écouter les data qui circulent sur cracotte09, on se place dans un repertoire.
+
[[Fichier:Cryptage clefUSB.png|600px|center|frameless|Création de la partition]]
  
    airodump-ng -w out -c 1 --bssid 04:DA:D2:9C:50:58 wlx40a5ef0f68ce
+
On enregistre le smodifications avec 'w' et puis ça quitte l'interface.
 +
En refaisant, '''lsblk''' on peut voir qu'une partition '''sdb1''' a été crée mais pour l'instant elle n'est pas encrypté.
  
Sur un deuxieme terminal dans le même repertoire, nous allons lire le ''fichier out-01.cap'' afin de déchiffrer la clef WEP. l'opération peut durer plusieurs minutes.
+
On passe au cryptage de la partition:
  
    aircrack-ng out-01.pcap
+
On crypte la partion sdb1 (la seule présente) avec la commande suivante:
 +
      cryptsetup luksFormat -c aes -h sha256 /dev/sdb1
  
[[Fichier:cracotte06.png|500px|center]]
+
On nous demande ensuite le mot de passe souhaité.
  
===Recuperation de la clef WPA2-PSK===
+
'''Remarque : '''Pour la decrypter, il faut également que l'outil '''crypsetup''' soit sur la machine.
 +
On ouvre la partition et on lui donne enfin le nom que l'on souhaite.
  
 +
      cryptsetup open --type luks /dev/sdb1 '''clef_ima2a_G5'''
  
Nous devons maintenant  s'armer d'un fichier dictionnaire contenant les caractères souhaité.
+
On formate en ext4 de la partition ( à faire une seule fois !!!)
Copier le dictionnaire dans le dossier où se trouve le fichier de capture.
+
      mkfs.ext4 /dev/mapper/clef_ima2a_G5
  
'''Creation du dictionnaire :'''
+
Puis on monte la partition dans un répertoire crée préalablement :
 +
      mount -t ext4 /dev/mapper/clef_ima2a_G5 /mnt/clef
  
Installer le paquetage crunch
+
Ainsi, lorsque la clef est inséré, le répertoire "clef" devient la partition de la clef
dans le repertoire, creer le fichier.txt contenant toutes les combinaisons possible d'une succesion de 8 chiffres (nombre minimum de caractères en WPA)
+
on va dans clef et on crée un fichier, on sort ensuite de clef.
  
    crunch 8 8 0123456789 >> Dico.txt
+
On démonte la partition du répertoire :
+
      umount /mnt/clef
'''Sur le terminal'''
 
On choisit la borne puis on lance l'écoute/ecriture des trames. Seul le handshake est nécessaire
 
Ensuite lancer la commande suivante pour lancer le crack :  
 
    aircrack-ng nom_fichier.cap -w dico.txt
 
  
Il ne reste plus qu'à attendre le résultat (cela peux durer .. très .. très .. longtemps...)
+
Pour finir, on ferme le volume chiffré avec la commande :
 +
      cryptsetup close --type luks clef_ima2a_G5
  
[[Fichier:AircrackBRAB.jpg | 800px | center]]
+
La clef est à présent crypté avec le mot de passe choisi.

Version actuelle datée du 8 décembre 2019 à 23:23


GROUPE 5 : Adrien MONFILLIETTE & Quentin VERNE


Introduction

Dans le cadre du cours de système & réseau, nous avons eu la possibilité de créer une maquette réseau entre les différents binômes de la promotion. Pour cela, un numéro de groupe a été donné à chaque binôme : nous sommes le groupe n°5. Afin de réaliser cette maquette réseau, nous avons du installer une machine virtuelle (VM) sur un serveur commun puis réaliser les différentes étapes du TP afin que les VM puisse communiquer entre elle. L'objectif de ce Wiki est de présenter ces différentes étapes que nous avons réalisé.

Remarque : La mise en place de la maquette réseau à nécessité, d'une part une configuration des machines, et d'autres part une configuration des routeurs et commutateurs afin d'obtenir une redondance réseau. Pour la partie hardware, se sont Quentin.W et Maxime.H qui s'en sont chargé, je vous renvoie donc vers leurs Wiki pour les explications.

Mise en place de la machine virtuelle avec Xen

Création de la VM

Dans un premier temps, il faut donc créer la VM sur le serveur commun. Tout d'abord, on se connecte en ssh sur le serveur CORDOUAN.

     pifou@zabeth10:~$ ssh root@cordouan.insecserv.deule.net

On veut créer une machine virtuel grâce à XEN. Pour cela, on utilise la commande suivante en précisant le hostname qui correspond à notre groupe.

      xen-create-image --hostname=ima2a5-nofun --dhcp --dir=/usr/local/xen --dist=ascii --apt-proxy=http://proxy.polytech-lille.fr:3128 --mirror=http://fr.deb.devuan.org/merged/ --force

Configuration de la VM

Avant de lancer pour la première fois la VM, il faut modifier son fichier de configuration afin de lui donner accès au bridge réseau (qui permettra à toutes les VM de communiquer entre elle) et lui ajouter les disques virtuels de stockage.

Dans un premier temps, on crée les partitions /var et /home:

      root@cordouan:~#lvcreate -L10G -n ima2a5-nofun-var virtual
      root@cordouan:~#lvcreate -L10G -n ima2a5-nofun-home virtual

Puis, on les fait pointer vers notre système de fichier:

      mke2fs /dev/virtual/ima2a5-nofun-var
      mke2fs /dev/virtual/ima2a5-nofun-home

Une fois ces disques virtuels créén, on peut les installer sur la VM en ouvrant le fichier de configuration de la VM avec la commande suivant:

     nano /etc/xen/ima2a5-nofun.cfg

Voir fichier de configuration ci-dessous (on ajoute le bridge ainsi que les disques):

     #
     # Configuration file for the Xen instance ima2a5-nofun, created
     # by xen-tools 4.7 on Wed Nov 13 08:06:12 2019.
     #
     #
     #  Kernel + memory size
     #
     kernel      = '/boot/vmlinuz-4.9.0-6-amd64'
     extra       = 'elevator=noop'
     ramdisk     = '/boot/initrd.img-4.9.0-6-amd64'
     vcpus       = '1'
     memory      = '256'
     #
     #  Disk device(s).
     #
     root        = '/dev/xvda2 ro'
     disk        = [
                       'file:/usr/local/xen/domains/ima2a5-nofun/disk.img,xvda2,w',
                       'file:/usr/local/xen/domains/ima2a5-nofun/swap.img,xvda1,w',
     #Ajout des disques de la VM 
                       'phy:/dev/virtual/ima2a5-nofun-home,xvdb1,w','
                       'phy:/dev/virtual/ima2a5-nofun-var,xvdb2,w','
                   ]
     #
     #  Physical volumes
     #
     #
     #  Hostname
     #
     name        = 'ima2a5-nofun'
     #
     #  Networking
     #
     dhcp        = 'dhcp'
     #Ajout du bridge
     vif         = [ 'mac=00:16:3E:C2:61:EB, bridge=IMA2a5 ' ]
     #
     #  Behaviour
     #
     on_poweroff = 'destroy'
     on_reboot   = 'restart'
     on_crash    = 'restart'


Lancement de la VM

Une fois le fichier de configuration modifié, on lance la VM avec la commande suivante :

      xl create ima2a5-nofun.cfg

Remarque : Pour arréter la VM, on utilise la commande:

      xl shutdown ima2a5-nofun

Lors de la création de la VM, un ficher .log a été généré dans le répertoire /var/log/xen-tools/ima2a5-nofun.log. On y trouve tout en bas le mot de passe du user 'root' pour la première connexion.

     Installation Summary :
     Hostname        :  ima2a5-nofun
     Distribution    :  ascii
     MAC Address     :  00:16:3E:C2:61:EB
     IP Address(es)  :  dynamic
     SSH Fingerprint :  SHA256:8HBjFBlcJ9qkmPAEGFlB59wCtE0Yj01dncHllqlQSa4 (DSA)
     SSH Fingerprint :  SHA256:1+oCeyrlSge+rsbzjJJDwVoyM/FE/oocazFZvSsT4rI (ECDSA)
     SSH Fingerprint :  SHA256:fLWNFie+QrBnqelNRshZJONiN1gCeegQvkVYgoyZXWo (ED25519)
     SSH Fingerprint :  SHA256:RjWVyV1LigFD//diAHUAdmd3tgMXPaClVaTkIgwJGNY (RSA)
     Root Password   :  u55fREsaBSw6FefPjLekV8W

Le mot de passe peut ensuite être modifier avec la commande passwd par le mot de passe des sessions Zabeth.

Configuration de l'adresse IP de la VM

Une fois sur le VM, on peut configurer l'adresse IP de la VMen statique : 193.48.57.165 dans le répertoire /etc/network/interfaces.

Pour la suite du TP, nous allons voir besoin de plusieurs utilitaire sur notre machine virtuelle:

  Pour la création du serveur Apache : apache2
  Pour la gestion du raid5 : mdadm
  Pour la gestion du serveur DNS et DNSSEC : bind9

Configuration du RAID5

Le RAID5 est une configuration de disque de stockage qui permet une redondance et une intégrité des données en cas de panne sur l'un des disques. Dans un premier temps on créé 3 nouveaux disques de stockages virtuels qu'on configurera ensuite en RAID5.

      lvcreate -L1G -n ima2a5-nofun-disk1 virtual
      lvcreate -L1G -n ima2a5-nofun-disk2 virtual
      lvcreate -L1G -n ima2a5-nofun-disk3 virtual

On peut les ajouter dans le fichier /etc/xen/ima2a5-nofun.cfg comme pour les disques /var et /home.

Avec l'utilitaire mdamd, on réalise le RAID5 entre les 3 disques :

      mdadm --create /dev/md0 --level=5  --raid-devices=3 /dev/xvdb3 /dev/xvdb4 /dev/xvdb5
      mdadm --monitor --daemonise /dev/md0
      mkfs.ext4 /dev/md0

On créait un nouveau fichier mkdir /media/disk-raid pour y monter notre volume de stockage.

On modifie ensuite le fichier /etc/fstab en y ajoutant cette ligne pour déclarer notre nouveau volume de stockage:

        /dev/md0 	/media/disk-raid	ext4	defaults 	0	1

Configuration du serveur SSH

Pour pouvoir accèder à notre VM à distance sans devoir utiliser xl console, nous devons configurer SSH.

Il faut d'abord installer le paquet SSH

apt install openssh-server

Puis nous modifions le fichier de configuration /etc/ssh/sshd_config en modifiant les lignes suivantes:

permitRootLogin yes
passwordAuthentification yes

On redémarre le service pour prendre en compte les changements :

service ssh restart

Le site WEB

Une fois la machine virtuelle créé, il faut m’intentant qu'elle puisse héberger un site WEB !! (d'où l’installation d'Apache). Nous avons donc acheté un nom de domaine sur le site Gandi.net et nous avons acheter le nom de domaine suivant : ima2a-nofun.site VOIR ICI

Configuration du serveur Apache en HTTP

Dans un premier temps, on configure notre serveur en HTTP. Avec l’installation d'Apache, un répertoire c'est créé et permet de configurer les sites qu'Apache héberge.

     /etc/apache2/sites-available

On peut donc ouvrir le fichier de configuration de notre site:ima2a5-nofun.site.conf

<VirtualHost *:80>
     ServerName ima2a5-nofun.site
     ServerAlias www.ima2a5-nofun.site
     DocumentRoot "/var/www/ima2a5-nofun"
     <Directory "/var/www/ima2a5-nofun">
             Options +FollowSymLinks
             AllowOverride all
             Require all granted
     </Directory>
     ErrorLog /var/log/apache2/error.ima2a5-nofun.site.log
     CustomLog /var/log/apache2/access.ima2a5-nofun.site.com.log combined
 </VirtualHost>

A présent, il faut recharger le serveur pour que les modifications soient prises en compte.

      a2ensite ima2a5-nofun.site
      service apache2 reload

Site sécurisé en HTTPS

Pour pouvoir passer son site en HTTPS, il faut obtenir un certificat. On utilise la commande :

 openssl req -nodes -newkey rsa:2048 -sha256 -keyout ima2a5-nofun.key -out ima2a5-nofun.csr

On nous propose ensuite une série de question :

Country Name (2 letter code) [AU]:FR
    State or Province Name (full name) [Some-State]:Nord
    Locality Name (eg, city) []:Lille
    Organization Name (eg, company) [Internet Widgits Pty Ltd]:Polytech Lille
    Organizational Unit Name (eg, section) []:IMA2A5
    Common Name (e.g. server FQDN or YOUR name) []:ima2a5-nofun.site
    Email Address []:adrien.monfilliette@polytech-lille.net
    
    Please enter the following 'extra' attributes
    to be sent with your certificate request
    A challenge password []:pasglop
    Optionnal informations : NA

Nous obtenons alors notre clé publique dans le fichier ima2a5-nofun.csr. Nous la communiquons ensuite à Gandi afin qu'il puisse valider et générer un certificat. Une fois validé un certificat .csr et un certificat .pem sont disponibles sur le site de Gandi.

Maintenant que nous avons notre certificat est généré nous pouvons nous occuper de la configuration D'Apache.

Tout d'abord il faut activer le module qui gère le protocole SSL :

 a2enmode ssl

Ensuite on modifie notre fichier de configuration serveur pour écouter sur le port 443 et rediriger les connexions sur le port 80 vers le port 443, ainsi on oblige la connexion sécurisée en https


    <VirtualHost *:80>
     ServerName ima2a5-nofun.site
     ServerAlias www.ima2a5-nofun.site
     DocumentRoot "/var/www/ima2a5-nofun"
     Redirect permanent / https://ima2a5-nofun.site
    </VirtualHost>
<VirtualHost *:443>
 #   General setup for the virtual host
    DocumentRoot "/var/www/ima2a5-nofun"
    ServerAlias www.ima2a5-nofun.site
    ServerName www.ima2a5-nofun.site                                                                                                                                                                                                          
    ServerAdmin amonfill@polytech-lille.net                                                                                                                                                                                                  ErrorLog "/usr/local/apache2/logs/error_log"                                                                                                                                                                                                 TransferLog "/usr/local/apache2/logs/access_log"                                                                                                                                                                                          # Activation du SSL                                                                                                                                                                                                                                SSLEngine On
   
   SSLProtocol All -SSLv3 -SSLv2
   SSLHonorCipherOrder on
   
   SSLCertificateFile "/etc/apache2/certificate/ima2a5-nofun.cer"
   SSLCACertificateFile "/etc/apache2/certificate/ima2a5-nofun.pem"
   SSLCertificateKeyFile "/etc/apache2/certificate/ima2a5-nofun.key"    
   </VirtualHost>

On redémarre le serveur pour appliquer les changements

 service apache2 restart

On vérifie que notre serveur écoute bien sur les deux ports 80 et 443 :

  apache2ctl -S
  *:80                   www.ima2a5-nofun.site (/etc/apache2/sites-enabled/ima2a5-nofun.site.conf:1)
  *:443                  www.ima2a5-nofun.site (/etc/apache2/sites-enabled/ima2a5-nofun.site.conf:8)

Configuration du DNS

Le DNS permet le lien entre une adresse IP et un nom de domaine. Ainsi, pour accéder à notre site, nous n'aurons plus besion d'indiquer l'adresse IP mais ima2a5-nofun.site

On retourne dans un premier temps sur Gandi dans l'onglet Glue Records puis cliquer sur ADD. On peut choisir ici le nom de notre DNS :

      name : dns.ima2a5-nofun.site
      ip adresse(s) : 193.48.57.165

Il faut ensuite attendre un certain temps avant que cela fonctionne sur Internet.


Pour gérer notre serveur DNS nous utilisons bind9, celà rends la configuration assez simple nous avons seulement quelques fichiers à modifier.

On modifie le fichier named.conf.options qui permet de gérer les options de configuration de notre DNS  :

   options {
   
       // forwarders {
       //     0.0.0.0;
       // };
       // dnssec-validation auto;
       auth-nxdomain no;    # conform to RFC1035
       listen-on-v6 { any; };
       allow-transfer { "allowed_to_transfer"; };
   };
   
   acl "allowed_to_transfer" {
       217.70.177.40/32; // adresse IP de dns6.gandi.net
   };


Dans le fichier named.conf.local on déclare les zones associées au domaine:

   zone "ima2a5-nofun.site" {
       type master;
       file "/etc/bind/ima2a5-nofun.site";
   };


Enfin, il faut créer le fichier de configuration /etc/bind/ima2a5-nofun.site :

 ;
 ; BIND data file for local loopback interface
 ;
 $TTL    604800
 @       IN      SOA     ns.ima2a5-nofun.site. root@ima2a5-nofun.site. (
                         21112019        ; Serial
                          604800         ; Refresh
                           86400         ; Retry
                         2419200         ; Expire
                          604800 )       ; Negative Cache TTL
 ;
 @       IN      NS      ns.ima2a5-nofun.site.   
 @       IN      NS      ns6.gandi.net.
 dns     IN      A       193.48.57.165 
 www     IN      A       193.48.57.165 


Mise en place du DNSSEC

Tout d'abord nous devons générer deux paires de clées

dnssec-keygen -r /dev/urandom -a RSASHA1 -b 2048 -f KSK -n ZONE ima2a5-nofun.site
dnssec-keygen -r /dev/urandom -a RSASHA1 -b 1024 -n ZONE ima2a5-nofun.site

Nous modifions ensuite notre fichier de configuration pour inclure les deux .key précédemment crées

 ;
 ; BIND data file for local loopback interface
 ;
 $TTL    604800
 $include /etc/bind/ima2a5-nofun.site.dnssec/ima2a5-nofun.site-ksk.key
 $include /etc/bind/ima2a5-nofun.site.dnssec/ima2a5-nofun.site-zsk.key
 @       IN      SOA     ns.ima2a5-nofun.site. root@ima2a5-nofun.site. (
                         21112019        ; Serial
                          604800         ; Refresh
                           86400         ; Retry
                         2419200         ; Expire
                          604800 )       ; Negative Cache TTL
 ;
 @       IN      NS      ns.ima2a5-nofun.site.   
 @       IN      NS      ns6.gandi.net.
 dns     IN      A       193.48.57.165 
 www     IN      A       193.48.57.165 

Nous signons maintenant le document avec la commande :

   dnssec-signzone -o ima2a5-nofun.site -k ima2a5-nofun.site.dnssec/ima2a5-nofun.site-ksk ima2a5-nofun.site ima2a5-nofun.site.dnssec/ima2a5-nofun.site-zsk

On modifie notre fichier de zone pour utiliser le fichier signé générer par la signature :

 zone "ima2a5-nofun.site" {
       type master;
       file "/etc/bind/ima2a5-nofun.site.signed";
   };

On modifie ensuit le fichier .options :

 options {
  dnssec-validation auto;
  dnssec-enable yes;
  dnssec-lookaside auto;


       // forwarders {
       //     0.0.0.0;
       // };
       // dnssec-validation auto;
       auth-nxdomain no;    # conform to RFC1035
       listen-on-v6 { any; };
       allow-transfer { "allowed_to_transfer"; };
   };
   
   acl "allowed_to_transfer" {
       217.70.177.40/32; // adresse IP de dns6.gandi.net
   };



Les tests d'intrusion

L'objectif de cette partie est de comprendre comment cracker une clef de chiffrement WiFi. Pour cela, nous avons une RaspBerry qui envoit des paquets en WiFi avec, d'un coté un encodage avec une clef WEP et de l'autre une clef WPA-SPK. Pour notre groupe, voici le nom de nos points d'accès (désigné par leurs adresses MAC), nous verrons plus tard comment les obtenir :

      04:DA:D2:9C:50:54 => Adresse mac de cracotte05 (pour la clef WEP)
      04:DA:D2:9C:50:5C => Adresse mac de kracotte05 (pour la clef WAP-SPK)

Nous devons donc déchiffrer ces deux clefs.


Configuration du petit PC

Pour cette partie, nous utilisons le petit pc bleu. Premièrement, il faut activer la carte réseau afin de receptionner les trames venant de notre raspberry avec une clef Wi-Pi. Dans un premier temps, il faut télécharger l'outil "aircrack-ng". Pour cela, il faut d'abord configurer le PC pour avoir Internet.

Configuration de la carte réseau dans le fichier /etc/network/interfaces :

   #The loopback network interfaces
   auto lo
   iface lo inet loopback
   #Port Ethernet
   auto eth0
   iface eth0 inet static
        address 172.26.145.202
        netmask 255.255.255.0
        gateway 172.26.145.254

On actualise la carte réseau :

      ifdown eth0
      ifup eth0

Paramétrage du proxy pour pouvoir installer aircrack :

      export http_proxy=http://proxy.polytech-lille.fr:3128

Et voilà, le PC a maintenant accès à Internet et on peut installer aircrack-ng :

      apt-get install aircrack-ng

On peut passer au piratage !!

Décodage clef WEP

Pour capter les trames venant de la Raspberry, on utilise une clef Wi-Pi. On l'a détecte avec la commande suivante :

      airmon-ng

On peut voir le doggle apparaite avec un nom compliqué, on le demmare avec la commande

      airmon-ng start wlx40a5ef0590b2

Ensuite, si on refait airmon-ng, on peut voir que le nom est plus simple, pour nous, c'est wlan1mon et c'est ce nom que l'on va ensuite utiliser.

Afin de voir les différents équipements détecté par notre clef Wifi, on tape la commande suivante :

      airodump-ng --encrypt wep wlan1mon

On obtient une liste comme suit :

Liste

On voit quue le BSSID est 04:DA:D2:9C:50:54. On stock les trames captées dans un fichier avec la commande :

      airodump-ng -w out -c 2 --bssid 04:DA:9C:50:54 wlan1mon

On voit alors une fenêtre qui montre que les trames sortantes de cracotte05 sont analysées.

Liste

Cette commande va créer plusieurs fichiers dont un .cap, qui est le fichier qui nous interesse. Le notre s'appelle out-01.out (car nous n'avons pas donnée de nom spécial au fichier). On commence donc a lire les trames et en parrallèle, dans un autre terminal, on lance Aircrack avec la commande suivante :

      aircrack-ng out-01.cap

Et là, une nouvelle fenêtre s'ouvre avec l'utilitaire Aircrack et commence à analyser les trames. Et au bout d'un certain temps, la clef est trouvé !!!


Liste


Remarque : Lorsque l'outil capte 25000 trames, il a 50% de chance de trouver la clef. Lorsqu'il en a 50000, les chances montent à 90% !!

Décodage clef WAP-PSK

Pour le mot de passe WPA-PSK, on utilise un algorithme de force brute (réalisé par aircrack) L'idée de ce crack est de créer un dictionnaire de possiblilité pour le not de passe et de la comparer avec un fichier (.cap) créer à partir des trames receptionnées.

Création du .cap avec la commande

      airodump-ng -c 2 --bssid 04:DA:D2:9C:50:5C -w out wlan1mon


Création d'un dictionnaire de possiblilité pour la clef à trouver

      crunch 8 8 0123456789 >> dico1.txt

On lance ensuite l'utilitaire Aircrack avec la commande suivante


      aircrack-ng handshake-01.cap -w dico1.txt

Ensuite, on voit une interface Aircraft qui passe en revu notre dictionnaire ( donc de 00000000 à 99999999), et au bout d'un moment...

Clef troouvée !!!


Sécurisation wifi par WPA2-EAP

Configuration de la borne wifi

On configure la borne wifi pour créer notre réseau sans fil Création du serveur radius

radius-server host 193.48.57.165 auth-port 1812 acct-port 1813 key glopglop

Définir le groupe de serveur AAA

aaa group server radius radius_ima2a5-nofun

Association du groupe de serveur et du serveur de la VM

server 193.48.57.165 auth-port 1812 acct-port 1813

Définition du login et du groupe de serveur

aaa authentication login eap_ima2a5-nofun group radius_ima2a5-nofun

Définition du SSID

dot11 ssid SSID_ima2a5-nofun
vlan 6
authentication open eap eap_ima2a5-nofun
authentication network-eap eap_ima2a5-nofun
authentication key-management wpa

Configuration du Vlan

interface Dot11Radio0
encryption vlan 6 mode ciphers aes-ccm tkip
ssid SSID_ima2a5-nofun

Création d'une sous interface

interface dot11Radio0.2
encapsulation dot1Q 2
bridge-group 6
interface gigabite0.2
encapsulation dot1Q 2
bridge-group 6

Ajout SSID dans l'interface Dot11Radio0

interface Dot11Radio0
dot11 ssid SSID_ima2a5-nofun

Rendre visible le SSID

interface Dot11Radio0
mbssid
dot11 ssid SSID_ima2a5-nofun
mbssid guest-mode 

On écrit les modifications en mémoire puis on redémarre la borne

exit
write
reload

Création du serveur Freeradius

Dans notre machine virtuelle, nous installons le paquet freeradius via la commande suivante:

apt-get install freeradius

Puis nous le configurons pour notre utilisation :

On ajout la ligne suivante sur le fichier /etc/freeradius/3.0/users:

pifou Cleartext-Password :="glopglop"

On modifie le fichier /etc/freeradius/3.0/mods-enabled/eap comme suit:

eap{
   default_eap_type = peap
}

On modifie le fichier /etc/freeradius/3.0/mods-enabled/mschap :

use_mppe = yes
require_encryption = yes
require_strong = yes
with_ntdomain_hack = yes

On configure la borne comme client du serveur radius via le fichier /etc/freeradius/3.0/clients.conf comme suit:

client access-point {                                
      ipaddr          = 10.60.0.100                 # IP de la borne
      secret          = glopglop                    # mot de passe
}

On arrête puis on relance le serveur en mode debug (-X) pour voir les tentatives de connexions:

service freeradius stop
freeradius -X

Exercice annexe : Cryptage de données

Un petit exercice annexe consiste à réussir à encoder une clef USB afin qu'elle soit vérouillé par un mot de passe. Pour cela, on a besoin de l'utilitaire cryptsetup

      apt install cryptsetup

Dans un premier temps, après avoir inséré la clef dans le PC, on recherche les périphériques présent sur le pc avec la commande :

      lsblk

On regarde ensuite le nom de disque qui lui a été donné par le poste, dans notre cas, c'est sdb

On utilise la commande suivant pour gérer les partitions du disk :

      fdisk /dev/sdb

Remarque : On différenciera bien le nom du disque (sdb) et le nom de la partition (sdb1).

Une fois dans la clef grâce à la commande fdisk, on peut créer une partition.

Pour nettoyer la clef, on supprime les partitions présentes en tapant d (si plusieurs partions on nous demande laquelle supprimer). Ensuite, on réalise cette suite de commande pour créer la partition.

- Pour créer la partition, 'n'
- Partition primaire 'p'
- 1 partition
- Creation au début du secteur 
Création de la partition

On enregistre le smodifications avec 'w' et puis ça quitte l'interface. En refaisant, lsblk on peut voir qu'une partition sdb1 a été crée mais pour l'instant elle n'est pas encrypté.

On passe au cryptage de la partition:

On crypte la partion sdb1 (la seule présente) avec la commande suivante:

      cryptsetup luksFormat -c aes -h sha256 /dev/sdb1

On nous demande ensuite le mot de passe souhaité.

Remarque : Pour la decrypter, il faut également que l'outil crypsetup soit sur la machine. On ouvre la partition et on lui donne enfin le nom que l'on souhaite.

      cryptsetup open --type luks /dev/sdb1 clef_ima2a_G5

On formate en ext4 de la partition ( à faire une seule fois !!!)

      mkfs.ext4 /dev/mapper/clef_ima2a_G5

Puis on monte la partition dans un répertoire crée préalablement :

      mount -t ext4 /dev/mapper/clef_ima2a_G5 /mnt/clef

Ainsi, lorsque la clef est inséré, le répertoire "clef" devient la partition de la clef on va dans clef et on crée un fichier, on sort ensuite de clef.

On démonte la partition du répertoire :

      umount /mnt/clef

Pour finir, on ferme le volume chiffré avec la commande :

      cryptsetup close --type luks clef_ima2a_G5

La clef est à présent crypté avec le mot de passe choisi.