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

De Wiki d'activités IMA
 
(121 révisions intermédiaires par 2 utilisateurs non affichées)
Ligne 1 : Ligne 1 :
 +
Membres du groupe:
 +
* '''Malick SECK'''
 +
* '''Gael WATBLED'''
 +
  
 
== Descriptif du projet ==
 
== Descriptif du projet ==
 +
 +
L'objectif du projet consiste à réaliser une maquette réseau pour la manipulation des protocoles de redondance réseau ainsi que le protocole IPv6.
 +
Pour cela, il nous faut d'abord installer une machine virtuelle Xen. Suite à cela, on mettra en place un réseau ainsi qu'un site web sécurisé.
 +
Ce projet nous permettra de mettre en pratique les notions vues en cours qui sont, entre autres:
 +
* installation d'une machine virtuelle
 +
* découpage et paramétrage réseau
 +
* réservation de nom de domaine avec un registrar
 +
* installation et configuration d'un serveur DNS sécurisé
 +
* installation et configuration d'un serveur web sécurisé
 +
* cassage de clés WEP et WPA-PSK avec l'utilitaire AirCrack
 +
 
Le groupe est constitué de :
 
Le groupe est constitué de :
 +
* Malick SECK
 +
* Gael WATBLED
 +
 +
== Architecture réseau ==
 +
 +
Afin d'avoir un réseau redondant, nous utilisons deux routeurs, deux commutateurs et deux points d'accés Wi-Fi.
 +
Les points d’accès sont connectés chacun à un commutateur, les routeurs sont connectés sur les deux commutateurs et chaque commutateur est connecté au réseau d’interconnexion avec l’école.
 +
Enfin, le serveur de virtualisation est connecté aux deux commutateurs.
 +
L'architecture globale est représentée sur la figure suivante:
 +
 +
Nous utilisons par ailleurs le réseau IPv4 routé <code>193.48.57.160/27 </code> que nous avons découpé en deux sous-réseaux en réservant une plage aux étudiants en IMA5 classique.
 +
 +
De plus, nous disposons d'un sous-réseau privé pour la connexion du client Wi-Fi.
 +
Le tableau ci-dessous détaille les infos concernant le découpage réseau pour notre groupe (groupe 4).
  
*Malick SECK
 
*Gael WATBLED
 
  
== Découpage du réseau ==
 
  
 
{| class="wikitable" style="text-align: center;width: 35%;margin: auto;"
 
{| class="wikitable" style="text-align: center;width: 35%;margin: auto;"
Ligne 14 : Ligne 40 :
 
|style="width: 60%"|4
 
|style="width: 60%"|4
 
|-
 
|-
! scope="row" style="width: 40%"|Réseau IP V4
+
! scope="row" style="width: 40%"|Réseau VLAN
 
|style="width: 60%"|10.60.4.0/24  
 
|style="width: 60%"|10.60.4.0/24  
 
|-
 
|-
Ligne 26 : Ligne 52 :
 
|-
 
|-
  
 +
! scope="row" style="width: 40%"|Adresse du Routeur 1
 +
|style="width: 60%"|193.48.57.173/28
 +
|-
 +
 +
! scope="row" style="width: 40%"|Adresse du Routeur 2
 +
|style="width: 60%"|193.48.57.174/28
 +
|-
 +
 +
! scope="row" style="width: 40%"|Adresse du Routeur virtuel
 +
|style="width: 60%"|193.48.57.172/28
 +
|-
 
! scope="row" style="width: 40%"|Nom du PC
 
! scope="row" style="width: 40%"|Nom du PC
 
|style="width: 60%"|Morue
 
|style="width: 60%"|Morue
Ligne 36 : Ligne 73 :
  
  
 +
== Machine virtuelle Xen ==
 +
=== Installation  ===
 +
Afin d'installer la machine virtuelle, nous nous connectons d'abord au serveur cordouan en ssh via la commande:code
 +
<code>ssh root@cordouan.insecserv.deule.net</code> (mot de passe= glopglop).
 +
 +
Puis nous lançons la commande <code>xen-create-image --hostname=ima2a5-wateck  --dhcp --dir=/usr/local/xen --dist= ascii –apt-proxy=http://proxy.polytech-lille.fr/3128 –force</code>.
 +
xen-create-image est un scriptvqui permet de créer facilement une instance Xen avec une image qui aura 2 volumes (1 image Logical Volumes et 1 image system root disk).
 +
Le script en question prendra les arguments suivants:
 +
 +
{| class="wikitable" style="text-align: center;width: 85%;margin: auto;"
 +
! ARGUMENT !! SIGNIFICATION
 +
|-
 +
! scope="row" style="width: 40%"|--hostname
 +
|style="width: 60%"| pour spécifier le nom de la machine
 +
|-
 +
! scope="row" style="width: 40%"|--dhcp
 +
|style="width: 60%"| pour permettre au client (guest) d'être configuré via dhcp
 +
|-
 +
! scope="row" style="width: 40%"|--dir
 +
|style="width: 60%"|pour spécifier le répertoire où les disques virtuels doivent être créés
 +
|-
 +
! scope="row" style="width: 40%"|--dist
 +
|style="width: 60%"|pour spécifier la distribution que l'on souhaite installer
 +
|-
 +
! scope="row" style="width: 40%"|-force
 +
|style="width: 60%"|pour autoriser l'écrasement des images existantes ou la suppression des volumes logiques LVM qui dépendent de la nouvelle instanciation
 +
|-
 +
|}
 +
 +
Puis nous lançons la commande <code>tail -f /var/log/xen-tools/ima2a5-wateck.log </code> pour voir sur un autre terminal si l’installation se fait correctement et pour voir l'état d'avancement en continue
 +
 +
Par la suite, nous modifions le fichier de configuration de la machine virtuelle pour faire en sorte que les répertoires <code>var</code> et <code>home</code> de la machine virtuelle soient sur des partitions LVM de l’hôte.
 +
Pour cela, nous modifions le fichier <code>/etc/xen/ima2a5-wateck.cfg</code> pour mettre nom du bridge (déja configuré) en IMA2a5 comme spécifié lorsque l'on utilise la commande <code>brctl show</code> afin de permettre à notre VM de se connecter à internet.
 +
Nous avons aussi pris le soin de modifier le mot de passe de la machine via la commande <code>Passwd</code> en "gloplop", le login étant "root"
 +
 +
Le fichier de configuration est comme suit:
 +
''
 +
 +
 +
    [...]
 +
    #
 +
    #  Disk device(s).
 +
    #
 +
    root    = '/dev/xvda2 ro'
 +
    disk    = [
 +
                  'file:/usr/local/xen/domains/ ima2a5-wateck /disk.img,xvda2,w',
 +
                  'file:/usr/local/xen/domains/ ima2a5-wateck /swap.img,xvda1,w',             
 +
                        'phy:/dev/virtual/ ima2a5-wateck -home,xvdb1,w',
 +
                        'phy:/dev/virtual/ ima2a5-wateck -var,xvdb2,w',
 +
                  ]
 +
    [...]
 +
''
 +
 +
 +
    #
 +
    # Configuration file for the Xen instance ima2a5-wateck, created
 +
    # by xen-tools 4.7 on Fri Nov  8 07:59:07 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-wateck/disk.img,xvda2,w',
 +
                      'file:/usr/local/xen/domains/ima2a5-wateck/swap.img,xvda1,w',
 +
              'phy:/dev/virtual/ima2a5-wateck-home,xvdb1,w',
 +
                      'phy:/dev/virtual/ima2a5-wateck-var,xvdb2,w',
 +
      'phy:/dev/virtual/ima2a5-wateck-d1,xvdb3,w',
 +
      'phy:/dev/virtual/ima2a5-wateck-d2,xvdb4,w',
 +
      'phy:/dev/virtual/ima2a5-wateck-d3,xvdb5,w',                 
 +
                  ]
 +
    #
 +
    #  Physical volumes
 +
    #
 +
    #
 +
    #  Hostname
 +
    #
 +
    name        = 'ima2a5-wateck'
 +
   
 +
    #
 +
    #  Networking
 +
    #
 +
    dhcp        = 'dhcp'
 +
    vif        = [ 'mac=00:16:3E:05:CB:E5, bridge=IMA2a5' ]
 +
         
 +
    #
 +
    #  Behaviour
 +
    #
 +
    on_poweroff = 'destroy'
 +
    on_reboot  = 'restart'
 +
    on_crash    = 'restart'
 +
 +
''
 +
 +
 +
Nous parsons notre machine via son fichier de configuration avec la commande  <code>xl create /etc/xen/ima2a5-watech.cfg</code> avant de lancer cette dernière avec  <code>xl console /etc/xen/ima2a5</code> (nous passons par xl console pour le moment car le serveur SSH n'est pas encore configuré)
 +
 +
=== Montage de Var et Home dans cordouan ===
 +
Nous avons créé des volumes logiques de 10Go pour les répertoires var et home comme suit:
 +
*<code>lvcreate -L10G -n ima2a5-wateck -home virtual</code>
 +
*<code>lvcreate -L10G -n ima2a5-wateck-var virtual</code>
 +
 +
=== Création du système de fichiers ===
 +
Nous formatons ainsi chaque partions pour avoir des volumes logiques (système de fichier)
 +
*<code>mke2fs /dev/virtual/ ima2a5-wateck -home</code>
 +
*<code>mke2fs /dev/virtual/ ima2a5-wateck -var</code>
 +
 +
 +
Enfin nous vérifions que le montage des volumes a bien fonctionné grâce à  <code>fdisk -l</code>
 +
 +
Le résultat obtenu est:
 +
    root@ima2a5-wateck:~# 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
 +
 +
Ce qui montre que nos volumes ont été bel et biens crées
 +
 +
Nous avons aussi modifié le fichier <code>/etc/fstab</code> comme suit afin que les volumes soient pris en compte à chaque démarrage de la VM :
 +
 +
    /dev/xvdb1 /home ext4 defaults 0 2
 +
    /dev/xvdb2 /var ext4 defaults 0 2
 +
 +
 +
 +
=== Utilisation de RAID5 pour le stockage de donnée ===
 +
RAID5 est un système permettant de garantir l'intégrité des données en cas de problème majeur (par exemple un problème matériel sur un disque dur). Afin d'éviter de perdre des données, le système RAID5 propose répartir les données sur plusieurs partition. En cas de problème sur l'une des partitions, il est possible de récupérer les données perdues sur cette dernière à partir des autres partitions toujours intactes. La partie qui suit explique comment nous avons mis en place ce système. Cependant nous n'avons fait que le créer et il n'est pas utilisé (pour des raisons de simplicité pour la réalisation des autres tâches du projet).
 +
 +
A partir de Cordouan, nous avons créé trois partitions LVM de 1Go :
 +
 +
    lvcreate -L1G -n ima2a5-wateck-d1 virtual
 +
    lvcreate -L1G -n ima2a5-wateck-d2 virtual
 +
    lvcreate -L1G -n ima2a5-wateck-d3 virtual
 +
 +
Puis nous avons créé les systèmes de fichiers pour chacune des partitions nouvellement créées.
 +
 +
    mke2fs /dev/virtual/ima2a5-wateck-d1
 +
    mke2fs /dev/virtual/ima2a5-wateck-d2
 +
    mke2fs /dev/virtual/ima2a5-wateck-d3
 +
 +
 +
Ensuite nous avons modifié le fichier de configuration de la VM (/etc/xen/ima2a5-wateck.cfg) en ajoutant ces partitions.
 +
Dans la définiton de la VM , ajouter :
 +
    [...]
 +
    #
 +
    #  Disk device(s).
 +
    #
 +
    root    = '/dev/xvda2 ro'
 +
    disk    = [
 +
                  'file:/usr/local/xen/domains/ ima2a5-wateck /disk.img,xvda2,w',
 +
                  'file:/usr/local/xen/domains/ ima2a5-wateck /swap.img,xvda1,w',             
 +
                        'phy:/dev/virtual/ ima2a5-wateck -home,xvdb1,w',
 +
                        'phy:/dev/virtual/ ima2a5-wateck -var,xvdb2,w',
 +
                        'phy:/dev/virtual/ ima2a5-wateck-d1,xvdb3,w',
 +
                        'phy:/dev/virtual/ ima2a5-wateck-d1,xvdb4,w',
 +
                        'phy:/dev/virtual/ ima2a5-wateck-d1,xvdb5,w',
 +
                  ]
 +
    [...]
 +
 +
Pour que les partitions soient montées au démarrage de la VM il faut aussi modifier le fichier /etc/fstab :
 +
 +
    [...]
 +
    # /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
 +
    /dev/md0 /media/raid ext4 defaults 0 1  # Ligne à rajouter
 +
    [...]
 +
 +
Il faut ensuite redémarrer la machine pour que les modifications soient prises en compte et pour monter
 +
 +
    xl shutdown ima2a5-wateck
 +
 +
    xlcreate ima2a5-wateck.cfg
 +
 +
On se reconnecte à la machine en SSH, puis on crée un RAID5 logiciel avec les trois partitions obtenues avec paquetage <code>mdadm</code>.
 +
 +
    apt-get install mdadm
 +
    mdadm –create/dev/md0 –level=5 –raid-devices=3 /dev/xvdb3 /dev/xvdb4 /dev/xvdb5
 +
 +
    kfs.ext4 /dev/md0
 +
    kdir /media/raid
 +
 +
Et voilà notre système RAID5 operationnel.
 +
 +
== Mise en place du serveur web ==
 +
 +
=== Installation du serveur web Apache2 ===
 +
Pour mettre en place notre serveur web nous avons utilisé la solution la plus répandue à savoir un serveur apache2. Il est produit par la Apache Software Foundation.
 +
 +
Pour cela, nous avons d'abord installé les paquets apache2.
 +
 +
*<code>Apt-get install apache 2</code>
 +
 +
Puis nous lançons le serveur.
 +
 +
*<code>Service apache2 start</code>
 +
 +
 +
== Configuration du serveur SSH ==
 +
 +
Afin que notre machine virtuelle intégrant notre serveur puisse être accessible à distance, nous devons y configurer un serveur SSH.
 +
 +
Puis nous modifions le fichier de configuration <code>/etc/ssh/sshd_config</code> en modifiant les lignes suivantes:
 +
 +
<code>permitRootLogin yes</code>
 +
 +
<code>passwordAuthentification  yes </code>
 +
 +
A partir de là nous n'aurons plus besoin d'accéder à notre VM via xl cosole car nous passerons par SSH.
 +
Nous lançons donc le service SSH avec <code>service ssh start</code>.
 +
 +
Cependant, nous nous sommes rendus compte plus tard qu'il aurait été plus judicieux d'utiliser la connexion pas clé publique + passphrase  en passant par <code>ssh-keygen -t rsa -b 1024</code> par exemple, car plus sécuritaire.
 +
 +
En effet <code>permitRootLogin yes</code> donne les privilèges root dès qu'on se connecte, ce qui n'est pas idéal.
 +
 +
== Configuration du serveur apache2 ==
 +
Nous avons du configurer ce serveur afin qu'il réponde à nos attente. Nous devons commencer par créer un fichier <code>.conf</code> que nous avons nommé <code>ima2a5-wateck.site.con</code>.
 +
 +
  [...]
 +
    <VirtualHost *:80>
 +
      ServerName ima2a5-wateck.site
 +
      ServerAlias www.ima2a5-wateck.site
 +
      DocumentRoot "/var/www/ima2a5-wateck"
 +
      <Directory "/var/www/ima2a5-wateck">
 +
              Options +FollowSymLinks
 +
              AllowOverride all
 +
              Require all granted
 +
      </Directory>
 +
      ErrorLog /var/log/apache2/error.ima2a5-wateck.site.log
 +
      CustomLog /var/log/apache2/access.ima2a5-wateck.site.com.log combined
 +
    </VirtualHost>
 +
  [...]
 +
Ce fichier sera modifié par la suite lorsque nous sécuriserons le serveur web (https). Une fois ce fichier configuré nous pouvons lancer le serveur.
  
=== Nom de domaine ===
+
    a2ensite ima2a5-wateck.site
Pour la réalisation de ce TP, nous avons dû acheter un nom de domaine via le site [https://www.gandi.net/fr Gandi.net] . On retiendra que notre nom de domaine est : [https://www.ima2a5-wateck.site].
 
  
=== Paramétrage du DNS avec Gandi.net ===
+
    service apache2 reload
  
==== DNS ====
+
Le site est maintenant en ligne et il est possible de le consulter en tapant l'adresse <code>193.48.57.164</code>. Pour modifier la page web il suffit simplement de modifier le fichier <code>index.html</code>.
A faire
 
  
=== Configuration du Certificat SSL ===
+
== Sécurisation du serveur web (Protocole https) ==
Le SSL (Secure Socket Layer) / TLS (Transport Layer Security) est le protocole de sécurité le plus répandu qui créé un canal sécurisé entre deux machines communiquant sur Internet ou un réseau interne. Dans notre société centrée sur un Internet vulnérable, le SSL est généralement utilisé lorsqu'un navigateur doit se connecter de manière sécurisée à un serveur web.
 
  
==== Génération du certificat ====
+
=== Certificat SSL ===
 +
Le SSL (Secure Socket Layer) / TLS (Transport Layer Security) est le protocole de sécurité le plus répandu qui créé un canal sécurisé entre deux machines communiquant sur Internet ou un réseau interne. Le protocole SSL est généralement utilisé lorsqu'un navigateur doit se connecter de manière sécurisée à un serveur web.
  
La première étape pour générer un certificat est de concevoir un jeu de 2 clefs qui sont un '''.key''' et un '''.csr'''
+
Tout d'abord, comme souvent pour les protocoles sécurisés (utiliser un processus de chiffremment), nous devons généner une paire de clefs <code>.key</code> et <code>.csr</code>. Pour cela on utilise la commande suivante :  
Pour obtenir ces deux fichiers, nous utilisons l'utilitaire '''OpenSSL'''.
 
      openssl req -nodes -newkey rsa:2048 -sha256 -keyout ima2a5-wateck.key -out ima2a5-wateck.csr
 
  
 +
      openssl req -nodes -newkey rsa:2048 -sha256 -keyout ima2a5-wateck.key -out ima2a5-wateck.csr
  
 +
Nous avons donc généré un jeu de 2 clefs privée et publique.
  
  
Ligne 77 : Ligne 379 :
 
|}
 
|}
  
 +
A la suite de la commande <code>openssl</code>, nous répondons à quelques questions afin de générer et d'obtenir le csr:
  
 
       Country Name (2 letter code) [AU]:'''FR'''
 
       Country Name (2 letter code) [AU]:'''FR'''
Ligne 91 : Ligne 394 :
 
       Optionnal informations :
 
       Optionnal informations :
  
 +
Notre clé publique est donc contenue dans le fichier <code>ima2a5-wateck.csr</code>. Ensuite cette clé publique doit être communiqué à notre registrar "Gandi" afin qu'il puisse valider ou non l'authenticité de notre site.
 +
Gandi peut utiliser plusieurs méthode pour certifier notre site. Nous avons choisi la méthode par "fichier". Pour cela nous devons fournir à Gandi un fichier temporaire et attendre qu'il soit validé. Une fois valider un certificat <code>.csr</code> et un certificat <code>.pem</code> sont générés.
 +
 +
Le protocole http écoute par défaut sur le port 80. Jusqu'ici notre serveur web écoutait donc sur son port 80 pour déceler d'éventuelles tentatives de connexion de la part des clients. Le protocole sécurisé https écoute lui sur le prot 443. Nous avons donc autorisé le serveur à écouter sur le 443 en plus du port 80 et effectué une redirection afin que les clients voulant se conecter via le protocole http soit automatiquement redirigé sur le port 443 afin d'utiliser le protocole https et donc de sécuriser la connexion.
 +
 +
=== Activation du module SSL ===
 +
Tout d'abord nous devons activer le module SSL sur notre serveur Apache2, en créant un lien symbolique via a2en :
 +
 +
    sudo a2enmod ssl
 +
 +
Puis il faut relancer le serveur avec la commande :
 +
 +
    service apache2 restart
 +
 +
=== Modification du VirtualHost ===
 +
 +
Maintenant il est temps de modifier le VirtualHost Apache que nous avions configuré pour fonctionner en http. La nouvelle version donne quelque chose comme cela :
 +
 +
    <VirtualHost *:80>
 +
        ServerName ima2a5-wateck.site
 +
        ServerAlias www.ima2a5-wateck.site
 +
        # Redirection 301  vers le site en HTTPS
 +
        Redirect permanent / https://www.ima2a5-wateck.site/
 +
    </VirtualHost>
 +
    <VirtualHost *:443>
 +
    #  General setup for the virtual host
 +
        DocumentRoot "/var/www/ima2a5-wateck"
 +
        ServerName ima2a5-wateck.site
 +
        ServerAdmin gael.watbled@polytech-lille.net
 +
        ErrorLog "/etc/apache2/logs/error_log"
 +
        TransferLog "/etc/apache2/logs/access_log"
 +
      # Activation du SSL
 +
        SSLEngine On
 +
        # Activation de tous les protocoles s  curis  s (TLS v1.0, v1.1 et TLS v1.2) touut en d  sactivant les protocoles non s  curis  s (SSL v2, SSL v3)
 +
        SSLProtocol All -SSLv3 -SSLv2
 +
        # Le navigateur devra choisir une m  thode de chiffrement en respectant l'ordre indiqu  e dans SSLCipherSuite
 +
        SSLHonorCipherOrder on
 +
 +
    # Chemin vers le certificat SSL de votre nom de domaine
 +
      SSLCertificateFile "/etc/apache2/certificate/ima2a5-wateck.crt"
 +
      SSLCACertificateFile "/etc/apache2/certificate/ima2a5-wateck.pem"
 +
    # Chemin vers la cl  e priv  e du certificat SSL de votre nom de domaine
 +
      SSLCertificateKeyFile "/etc/apache2/certificate/ima2a5-wateck.key"
 +
    </VirtualHost>
 +
 +
Comme nous l'avons décrit précemment la première partie du fichier de configuration des Hôtes virtuels permet la redirection du port 80 vers le port 443. Ce qui change par rapport à la première version est l'activation du protocole SSL ainsi que la description des chemins pour accèder aux diférents certificats ou clés.
 +
 +
    root@ima2a5-wateck:/etc/apache2/certificate# ls -l
 +
    total 16
 +
    -rw-r--r-- 1 root root 2155 Nov 28 08:25 ima2a5-wateck.crt
 +
    -rw-r--r-- 1 root root 1148 Nov 28 08:12 ima2a5-wateck.csr
 +
    -rw-r--r-- 1 root root 1705 Nov 28 08:09 ima2a5-wateck.key
 +
    -rw-r--r-- 1 root root 2111 Nov 28 08:14 ima2a5-wateck.pem
 +
 +
Comme d'habitude il faut maintenant relancer le service afin que les modifications soient effectives :
 +
 +
    a2dissite ima2a5-wateck.site
 +
    a2ensite ima2a5-wateck.site
 +
    service apache2 restart
 +
 +
Notre serveur web est maintenant sécurisé via le protocole https.
 +
 +
== Mise en place du serveur DNS ==
 +
 +
=== Installation de Bind9 ===
 +
Un serveur DNS (Domain Name System) permet la correspondance entre un nom de domaine et une adresse IP. Ainsi, grâce à DNS, il n'est pas nécessaire de se souvenir des adresses IP. Pour installer notre propre serveur DNS nous avons utilisé Bind9.
 +
 +
Nous commençons tout d'abord par installer bind9 via la commande suivante : <code>apt-get install bind9</code>
 +
 +
==== Création et configuration de la zone principale ====
 +
 +
La zone principale permet de faire pointer un nom de domaine pleinement qualifié (FQDN) sur une adresse IP.
 +
 +
Nous avons tout d'abord modifié le fichier <code>/etc/bind/named.conf.local</code> qui contient la configuration locale du serveur DNS et nous y avons déclaré les zones associées au domaine ainsi qu'un fichier de description de la zone.
 +
Puis nous avons créé le fichier de description/configuration lui-même que nous avons appelé <code>db.ima2a5-wateck.site</code>.
 +
 +
    [...]
 +
    ; BIND data file for ima2a5-wateck.site
 +
    ;
 +
    $TTL 14400
 +
    @      IN      SOA    ns1.ima2a5-wateck.site. host.ima2a5-wateck.site. (
 +
                        201006601 ; Serial
 +
                        7200 ; Refresh
 +
                        120 ; Retry
 +
                        2419200 ; Expire
 +
                        604800) ; Default TTL
 +
    ;
 +
    @      IN      NS      ns1.ima2a5-wateck.site.
 +
    @      IN      NS      ns6.gandi.net.
 +
    ns1    IN      A      193.48.57.164
 +
    www    IN      A      193.48.57.164
 +
    [...]
 +
 +
==== Définitions des hôtes ====
 +
 +
Une fois la zone principale configurée, nous renseignons dans sa description les noms des différentes machines pour lesquels on souhaite résoudre le nom. Pour cela nous modifions les fichiers de configuration <code>named.conf.local</code> :
 +
 +
    zone "ima2a5-wateck.site" {
 +
    type master;
 +
    file "/etc/bind/zones/db.ima2a5-wateck.site.signed";
 +
    };
 +
 +
Et <code>named.conf.options</code> :
 +
 +
    options {
 +
    // forwarders {
 +
        //    0.0.0.0;
 +
        // };
 +
        //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; // adresse IP du ns6.gandi.net
 +
    };
 +
 +
Après avoir enregistré les modifications dans les fichiers précédemment évoqués, nous redémarrons le service bind9 grâce à la commande <code>service bind9 restart</code>.
 +
Le service bind9 doit être redémarré à chaque modification, pour qu’elle soit prise en compte.
 +
 +
=== Réservation du nom de domaine ===
 +
 +
Grâce au registrar gandi.net, nous avons réservé le nom de domaine <code>ima2a5-wateck.site</code>. L'extension <code>.site</code> est une option trés interessante à cause du prix relativement faible (1€/an)
 +
 +
[[File:mygandi.png|700px|link=]]
 +
 +
=== Configuration du nameserver===
 +
 +
Les serveurs de noms permettent d'accéder à un réseau ou du contenu sur internet depuis un nom de domaine.
 +
Le nameserver utilisé est spécifié dans notre fichier de configuration pour bind9.
 +
La figure suivante montre le choix de nos narmeservers via gandi:
 +
 +
[[File:Wiki.png|700px|link=]]
 +
 +
=== Enregistrement Glue Records ===
 +
Il faut créer un enregistrement Glue records lorsque le serveur de noms fait référence au nom de domaine. Si vous souhaitez mettre en place plusieurs serveurs de noms, faisant référence au nom de domaine, il faudra créer pour chacun un enregistrement glue record.
 +
AInsi nous utilisons les enregistrements Glue records fournis par gandi pour associer un hostname (nom de serveur ou DNS) à l'adresse IP de notre machine.
 +
NB:Les modifications seront effectives entre 12 et 24 heures.
 +
La figure suivante motre l'enregistrement glue records que nous avons effectué:
 +
 +
[[File:glue_record.png|700px|link=]]
 +
 +
Après avoir réalisé ces étapes et attendu que le registrar effectue les modifications, le site est enfin accessible via le nom <code>ima2a5-wateck.site</code>.
 +
 +
== Sécurisation du serveur DNS avec DNSSEC ==
 +
 +
=== Modification des fichiers de configuration ===
 +
 +
Dans le fichier named.conf.options nous commencons par ajouter l’option <code>dnssec-enable yes;</code>.
 +
 +
Nous avons ensuite créer un répertoire spécifique qui abritera les clés nécéssaires au fonctionnement de DNSSEC :
 +
 +
<code>mkdir ima2a5-wateck.site.dnssec</code>
 +
 +
Ensuite il nous a fallu générer les clés privées et publiques grâce aux commandes suivantes :
 +
 +
<code>dnssec-keygen -a RSASHA1 -b 2048 -f KSK -n ZONE ima2a5-wateck.site -r /dev/urandom</code>
 +
 +
<code>dnssec-keygen -a RSASHA1 -b 1024 -n ZONE ima2a5-wateck.site -r /dev/urandom</code>
 +
 
 +
Nous avons renommé les deux paires de clefs obtenues en utilisant le nom de la zone comme préfixe puis en suffixant d’abord par la destination de la clef (-ksk pour la KSK ou -zsk pour la ZSK). Voilà le résultat :
 +
 +
    -rw-r--r-- 1 root bind  179 Nov 29 10:12 dsset-ima2a5-wateck.site.
 +
    -rw-r--r-- 1 root bind  619 Nov 29 09:40 ima2a5-wateck.site-ksk.key
 +
    -rw------- 1 root bind 1774 Nov 29 09:40 ima2a5-wateck.site-ksk.private
 +
    -rw-r--r-- 1 root bind  445 Nov 29 09:41 ima2a5-wateck.site-zsk.key
 +
    -rw------- 1 root bind 1010 Nov 29 09:41 ima2a5-wateck.site-zsk.private
 +
 +
Il nous a ensuite fallu inclure les clefs <code>ksk.key</code> et <code>zsk.key</code> dans notre fichier de zone et incrémenter sa version (SERIAL) :
  
''' Contenu du CSR'''
+
    ; BIND data file for ima2a5-wateck.site
      -----BEGIN CERTIFICATE REQUEST-----
+
    ;
 +
    $TTL 14400
 +
    $include /etc/bind/ima2a5-wateck.site.dnssec/ima2a5-wateck.site-ksk.key
 +
    $include /etc/bind/ima2a5-wateck.site.dnssec/ima2a5-wateck.site-zsk.key
 +
    @      IN      SOA    ns1.ima2a5-wateck.site. host.ima2a5-wateck.site. (
 +
                        201006602 ; Serial
 +
                        7200 ; Refresh
 +
                        120 ; Retry
 +
                        2419200 ; Expire
 +
                        604800) ; Default TTL
 +
    ;
 +
    @      IN      NS      ns1.ima2a5-wateck.site.
 +
    @      IN      NS      ns6.gandi.net.
 +
    ns1    IN      A      193.48.57.164
 +
    www    IN      A      193.48.57.164
 
    
 
    
      -----END CERTIFICATE REQUEST-----
+
Nous avons ensuite signé la zone avec la commande :
  
==== Paramétrage du certificat ====
+
<code>dnssec-signzone -o ima2a5-wateck.site  -k ima2a5-wateck.site -ksk ../zones/db.ima2a5-wateck.site ima2a5-wateck.site-zsk</code>
 +
 
 +
Puis modifié le fichier <code>named.conf.local</code> pour utiliser la zone signée de suffixe .signed ainsi que le fichier <code>named.conf.options</code> :
  
== Machine virtuelle Xen ==
+
    options {
=== Cahier des charges ===
+
    // forwarders {
Comme indiqué dans le sujet, nous allons créer une machine virtuelle via l'utilitaire [https://wiki.xenproject.org/wiki/Xen_Project_4.11_Man_Pages Xen] Linux sur le '''dom0 cordouan.insecserv.deule.net''' via la commande '''ssh''' et le compte administrateur usuel.Sur notre machine virtuelle nous créerons par la suite un compte pifou et un compte root identique au Zabeth.
+
            //     0.0.0.0;
 +
            // };
 +
            //dnssec-validation auto;
 +
            dnssec-enable yes;
 +
            auth-nxdomain no;    # conform to RFC1035
 +
            listen-on-v6 { any; };
 +
            allow-transfer { "allowed_to_transfer"; };
 +
        };
  
      Installation Summary
+
        acl "allowed_to_transfer" {
      ---------------------
+
            217.70.177.40/32; // adresse IP du ns6.gandi.net
      Hostname        :  ima2a5-wateck
+
     };
      Distribution    :  ascii
 
      MAC Address     :  xxxxxxxxxxx
 
      IP Address(es)  :  dynamic
 
      SSH Fingerprint :  SHA256:xxxxxxx (DSA)
 
      SSH Fingerprint :  SHA256:xxxxxxx (ECDSA)
 
      SSH Fingerprint :  SHA256:xxxxxxx (ED25519)
 
      SSH Fingerprint :  SHA256:xxxxxxx (RSA)
 
      Root Password  :  sZzrYYPFZEwxsfmFghddGW5
 
  
=== La commande xen-create-image ===
+
Enfin nous avons redémarré bind9 avec :  
Après s'être connecté, il faut maintenant     
 
      xen-create-image --hostname=ima2a5-wateck --dhcp --dir=/usr/local/xen --dist=ascii --apt_proxy=http://proxy.polytech-lille.fr:3128 --mirror=http://fr.deb.devuan.org/merged/ --force
 
L'installation se lance alors :
 
  
      root@cordouan:~# xen-create-image --hostname=ima2a5-wateck --dhcp --dir=/usr/local/xen --dist=ascii --apt_proxy=http://proxy.polytech-lille.fr:3128 --mirror=http://fr.deb.devuan.org/merged/ --force
+
<code>service bind9 restart</code>
      Use of uninitialized value within %DIST in pattern match (m//) at /usr/bin/xen-create-image line 1803.
 
     
 
      General Information
 
      --------------------
 
      Hostname      :  ima2a5-wateck
 
      Distribution  :  ascii
 
      Mirror        :  http://fr.deb.devuan.org/merged/
 
      Partitions    :  swap            512M  (swap)
 
                        /              4G    (ext4)
 
      Image type    :  sparse
 
      Memory size    :  256M
 
      Kernel path    :  /boot/vmlinuz-4.9.0-6-amd64
 
      Initrd path    :  /boot/initrd.img-4.9.0-6-amd64
 
     
 
      Networking Information
 
      ----------------------
 
      IP Address    : DHCP [MAC: xxxxxxx]
 
     
 
     
 
      Creating partition image: /usr/local/xen/domains/ima2a5-wateck/swap.img
 
      Done
 
     
 
      Creating swap on /usr/local/xen/domains/ima2a5-wateck/swap.img
 
      Done
 
     
 
      Creating partition image: /usr/local/xen/domains/ima2a5-wateck/disk.img
 
      Done
 
     
 
      Creating ext4 filesystem on /usr/local/xen/domains/ima2a5-wateck/disk.img
 
      Done
 
      Installation method: debootstrap
 
  
L'installation peut sembler bloquer sur cette dernière ligne mais il est possible de voir ce qui se passe en arrière plan via un second terminal en SSH et la commande SSH
+
La dernière étape consiste à communiquer à Gandi notre clé publique KSK afin d'activer DNSSEC.
      tail -f /var/xen-tools/ima2a5-wateck.log
 
  
=== Ajout du bridge à ima2a5-wateck.cfg ===
+
=== Transmission de la clé publique à Gandi ===
Dans un premier lieu, on regarde l'existence du brige sur l'hote distant via :
 
      brctl show
 
Ce qui nous retourne :
 
      bridge name bridge id STP enabled interfaces
 
      IMA2a5 8000.000af75e3dc0 no eth1
 
      eth2
 
      if3.0
 
      IMA5sc 8000.000af75e3dc2 no eth3
 
      eth5
 
      Insecure 8000.c81f66c22b83 no vlan6
 
      L3MRIT 8000.000af763ae2d no eth4
 
      StudentsInfo 8000.c81f66c22b83 no vlan50
 
On voit bien l'existence du bridge '''IMA2a5''', il faut donc l'ajouter à notre .cfg qui est le fichier de configuration de la VM ('''/etc/xen/ima2a5-wateck.cfg''')
 
et on modifie la ligne commençant par '''vif =''' et on ajoute le bridge de la manière suivante :
 
      vif = ['MAC:xxxxx,bridge = IMA2a5']
 
Après avoir modifié ce fichier, il faut le parser : xl create /etc/xen/ima2a5-wateck.cfg
 
Une erreur '''NUMA placement failed, performance might be affected''' peut apparaître mais elle indique juste que xen n'arrive pas à disposer les VM comme il veut sur les procs, mais cela n'impactera que les performances nous passons outre ce problème.
 
  
=== Démarrer la VM et accès console ===
+
[[File:clef.png|700px|link=]]
On lance alors la commande pour démarrer la machine virtuelle:
 
      xl console ima2a5-wateck
 
'''La machine virtuelle est maintenant allumée !'''
 
  
il demande alors le login (root) et le mdp (longue chaine précédemment générée). Après nous être logué,on change le mot de passe qui devient le même que le mot de passe du root de '''corduan''' ou d'une zabeth.
 
  
=== Montage des répertoires /var et /home ===
 
==== Creation des disques logique ====
 
Il faut d'abord créer les partitions logique via :
 
    lvcreate -L10G -n ima2a5-wateck-home virtual
 
    lvcreate -L10G -n ima2a5-wateck-var virtual
 
Il est possible qu'il affiche l'avertissement suivant : '''WARNING: ext2 signature detected on /dev/virtual/ima2a5-wateck-home at offset 1080. Wipe it? [y/n]'''
 
repondre alors oui(y).
 
Il est possible de verifier que votre partition a bien été crée via la commande :
 
      lvdisplay
 
On obtient alors dans la liste de toutes les partitions, nous deux partitions précedemment créées
 
      --- Logical volume ---
 
      LV Path                '''/dev/virtual/ima2a5-wateck-home'''
 
      LV Name                ima2a5-wateck-home
 
      VG Name                virtual
 
      LV UUID                mhJqFx-zO1m-PlOU-Zmeu-8NGx-7UUO-c2g9dP
 
      LV Write Access        read/write
 
      LV Creation host, time cordouan, 2019-11-08 08:47:26 +0000
 
      LV Status              available
 
      # open                0
 
      LV Size                10.00 GiB
 
      Current LE            2560
 
      Segments              1
 
      Allocation            inherit
 
      Read ahead sectors    auto
 
      - currently set to    256
 
      Block device          254:3
 
    --- Logical volume ---
 
    LV Path                '''/dev/virtual/ima2a5-wateck-var'''
 
    LV Name                ima2a5-wateck-var
 
    VG Name                virtual
 
    LV UUID                9Bnl6S-6CE5-CtO2-hD8f-RidD-sps5-b1mrWg
 
    LV Write Access        read/write
 
    LV Creation host, time cordouan, 2019-11-08 08:50:57 +0000
 
    LV Status              available
 
    # open                0
 
    LV Size                10.00 GiB
 
    Current LE            2560
 
    Segments              1
 
    Allocation            inherit
 
    Read ahead sectors    auto
 
    - currently set to    256
 
    Block device          254:4
 
Il faut maintenant faire pointer le système de fichier sur nos deux nouveaux repertoires pour finir la création :
 
    mke2fs /dev/virtual/ima2a5-wateck-home
 
    mke2fs /dev/virtual/ima2a5-wateck-var
 
Nos deux disques sont maintenant prêt, il ne reste plus qu'a les connecter avec la VM. Pour cela, il faut modifier le '''.cfg''' de nouveau.
 
  
==== Modification du fichier de configuration ====
+
== Configuration Internet de la machine eeePC Morue ==
Retournons donc dans le fichier '''/etc/xen/ima2a5-wateck.cfg''' et dans la section disk modifier tel que :
 
  
    disk    = [
+
Avant d'effectuer des installations nous devons tout d'abord connecté le PC à internet. Pour cela nous avons modifié le fichier <code>/etc/network/interfaces</code>.  
                  'file:/usr/local/xen/domains/ima2a5-wateck/disk.img,xvda2,w',
 
                  'file:/usr/local/xen/domains/ima2a5-wateck/swap.img,xvda1,w',             
 
                        'phy:/dev/virtual/ima2a5-wateck-home,xvdb1,w',
 
                        'phy:/dev/virtual/ima2a5-wateck-var,xvdb2,w',
 
                  ]
 
  
Pour prendre effet il faut redémarrer la VM à l'aide des commandes
+
On modifie le ficher /etc/network.interfaces, comme suit:
    xl destroy ima2a5-wateck
+
      auto lo
    xl create /etc/xen/ima2a5-wateck.cfg
+
      iface lo inet loopback
==== Configuration pour forcer le montage à chaque démarrage de la VM ====
+
     
Il faut ensuite aller dans la VM dans '''/etc/fstab''' et ajouter
+
      auto enp4s0
    /dev/xvdb1 /home ext4 defaults 0 2
+
        address 172.26.145.75
    #/dev/xvdb2 /var ext4 defaults 0 2
+
        netmask 255.255.255.0
 +
        gateway 172.26.145.254
  
Ces deux lignes permettent d'assurer que les 2 disques /var et /home soient pris en compte au démarrage de la VM.('''ATTENTION POUR LE MOMENT BIEN LAISSER # DEVANT LA 2eme LIGNE''')
+
Puis nous effectuons une mise à jour des paquets via <code>apt-get update</code>.
Relancer la machine comme précédemment expliqué et testé que le /home fonctionne.
 
Pour le /var c'est un peu plus compliqué comme manipulation et il faut faire EXTREMENT attention , une fausse manipulation peut tuer la machine.
 
    mount /dev/xvdb2 /mnt
 
    rm -rf /mnt/lock
 
    rm -rf /mnt/log
 
    rm -rf /mnt/run
 
    mv /var/* /mnt
 
    vi /etc/fstab
 
Maintenant decommentez la deuxième ligne que vous aviez ajouté précedemment. Puis il faut lancer la commande :
 
    umount /mnt   
 
    mount -a
 
A l'aide de la commande '''fdisk -l''' depuis la VM, on peut verifier que nos quatres disques sont bien montés.De même avec '''df''' on obtient bien dans la liste les lignes :
 
      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
 
La machine est donc prête, on peut passer à l'installation des paquetages linux nécessaires
 
=== Mise en place de l'adresse statique ===
 
Précedemment nous avions mis l'adresse en DHCP or il est demandé
 
=== Paquetage Linux ===
 
Pour commencer, on va tout d'abord mettre le système à jour via :
 
    sudo apt-get update
 
== Client Wifi - ordinateur Requin ==
 
=== Description ===
 
Notre Client Wi-fi est un ordinateur portable fourni par Monsieur Redon. Il ne nécessite pas nécessairement de configuration. Cependant, la clef Wi-Fi fournie avec elle doit être paramétrée (la datasheet peut se trouver à l'adresse suivant ; [https://www.farnell.com/datasheets/1669935.pdf Datasheet]). De plus, il faut installer les paquetages nécessaire pour craquer la clef Wep et la clef WPA
 
  
 +
== Cassage de clé WEP ==
 
=== Installation du paquetage AirCrack-ng ===
 
=== Installation du paquetage AirCrack-ng ===
Pour installer [https://doc.ubuntu-fr.org/aircrack-ng AirCrack] (utilitaire qui permet de casser les clefs WEP et WPA), il suffit de taper la commande :
+
 
 +
Avant de procéder à l'installation, nous mettons d'abords à jour les paquets via la commande :
 +
 
 +
    apt-get update
 +
 
 +
Enfin, pour espionner le réseau, nous pouvons installer l'utilitaire Aircrack-ng avec la commande :
 +
 
 
     apt-get install aircrack-ng
 
     apt-get install aircrack-ng
'''Note:''' il faut auparavant configurer le réseau pour se connecter à internet.
 
  
 
=== Utilisation de AirCrack ===
 
=== Utilisation de AirCrack ===
Après avoir branché la clef WiFi, on se sert de '''airmon-ng''' qui est un utilitaire qui espionne le réseau et permet d'obtenir les types d'interfaces communicantes/espionnable.
+
Après avoir branché la clé usb permettant de se connecter en wifi aux réseaux mis à disposition, nous commençons par lister les interfaces WiFi disponibles sur l'ordinateur :
  airmon-ng
+
<code>airmon-ng </code>
Pour tenter de s'y connecter en tant qu'espion, il faut alors taper (nous le tapons ici avec wlan0mon):
+
 
  airmong-ng start NOMRESEAUESPIONNABLE
+
A ce niveau, nous choisissons l'interface que l'on souhaite écouter  :
Puis, pour observer et découvrir les canaux associés au réseau et leurs SSID,il faut taper:
+
<code>airmong-ng start wlan0mon </code>
  airodump-ng --encrypt wep NOMRESEAUESPIONNABLE
+
 
Puis à l'aide d'un second terminal, on peut stocker les informations volées dans un .txt :
+
Sachant que la commande airodump-ng permet d'écouter tous les réseaux WiFi présents, nous sélectionnons le réseau ciblé et son type de cryptage avec la commande suivante :
  Airodump-ng FICHIER.txt -c 2 --bssid ADDRESSBSSID NOMRESEAUESPIONNABLE
+
 
Ce qui donne dans notre cas :  
+
<code>airodump-ng --encrypt wep wlan0mon </code>
  airmon-ng
+
 
  airmong-ng start wlan0mon
+
Ainsi, nous récupérons les données contenues dans les trames échangées et les stockons dans un fichier spécifique.
  airodump-ng --encrypt wep wlan0mon  
+
 
  Airodump-ng -w reseau_1.txt -c 2 --bssid 04:DA:D2:50:50 wlan0mon
+
<code>Airodump-ng -w crack1.txt -c 2 --bssid [@MAC] wlan0mon </code>
 +
 
 +
L'explication des arguments de la commande utilisée est la suivante:
 +
*-c: pour indiquer le canal d'écoute (canal 2 dans notre cas car tous les réseaux Cracotte y sont)
 +
*-bssid: pour préciser le nom du réseau en question
 +
*-w: pour indiquer le fichier de sauvegarde des trames écoutées
 +
 
 +
A ce niveau, nous disposons des éléments à analyser pour décrypter la clé WEP, mais pour des raisons de ressources matérielles, nous les utilisons avec une autre machine plus puissante via
 +
 
 +
<code>aircrack-ng -b [@MAC] crack1*.cap </code>
 +
 
 +
 
 +
 
 +
== Cassage de clé WPA-PSK par force brute==
 +
 
 +
Pour cette partie, nous utilisons le même utilitaire que pour cracker la clé WEP.
 +
 
 +
Ainsi nous listons les interfaces Wi-Fi avec la commande <code> airmon-ng</code> afin de repérer le réseau Wi-Fi à cracker.
 +
 
 +
Ensuite on écoute l'interface
 +
airmon-ng start [nom_de_l_interface]
 +
 
 +
Lorsque l'utilitaire airodump nous indique si des trames WPA sont capturées avec la commande <code>airodump-ng --encrypt wpa wlan0mon</code>,  nous lançons aircrack-ng pour tenter de craquer la clef WPA en s'aidant d'un dictionnaire. D'où l'utilisation de l'expression "cassage par force brute", impliquant que l'on doit se rapprocher au maximum du point d'accès.
 +
 +
A ce niveau, va intervenir l'utilitaire crunch qui va tout simplement créer un dictionnaire de toutes les clés de 8 chiffres car  on sait d'avance que la clef WPA est un nombre sur 8 chiffres.
 +
La commande pour cela est la suivante:
 +
crunch 8 8 0123456789 >> dictionnaire_wpa.txt
 +
 
 +
Puis nous lançons aircrack-ng
 +
aircrack-ng [fichier.cap] -w dictionnaire_wpa.txt
 +
 
 +
== Sécurisation d'une clé USB avec cryptsetup ==
 +
 
 +
Nous avons commencé par installer l'utilitaire cryptsetup :
 +
 
 +
<code>apt-get install cryptsetup</code>
 +
 
 +
<code>apt-get install lvm2</code>
 +
 
 +
On commence par lister les disques détectés par l'ordinateur et visualiser les partitions avec <code>lsblk</code>.
 +
Nous avons constaté que l'unique partition de la clé USB à savoir sda était vide
 +
 +
 
 +
La commande <code>fdisk /dev/sda</code> permet ensuite de rentrer dans la partition
 +
 
 +
<code>n</code> pour créer une partition
 +
 
 +
<code>p</code>
 +
 
 +
<code>d</code> delete
 +
 
 +
Nous sécurisons la partition (clef-WATECK) en utilisant l’utilitaire cryptsetup
 +
 
 +
<code>cryptsetup luksFormat -c aes -h sha256 /dev/sda1</code> pour encrypter la partition au format luks puis définir un mot de passe
 +
 
 +
<code>cryptsetup open --type luks /dev/sda1 clef-WATECK </code> pour l'ouvrir
 +
 
 +
 
 +
Nous un système de fichier au dessus de la partition sécurisée
 +
 
 +
<code>mkfs.ext4 /dev/mapper/clef-WATECK</code>
 +
On le monte (dans un repertoire sur le poste) .
 +
 
 +
<code>mount -t ext4 /dev/mapper/clef-WATECK /mnt/clef</code>
 +
 
 +
<code>touch test.txt<.code>
 +
 
 +
<code>umount /mnt/clef</code>
 +
 
 +
<code>cryptsetup close --type luks clef_WATECK</code> pour fermer le volume chiffré
 +
 
 +
== Sécurisation réseau filaire par EAP-TLS ==
 +
 
 +
Dans cette partie, nous nous sommes beaucoup inspiré des travaux de nos collègues.
 +
 
 +
=== Configuration du serveur FreeRadius ===
 +
 
 +
Depuis notre machine virtuelle, nous installons freeradius via la commande suivante:
 +
 
 +
apt-get install freeradius
 +
 
 +
Puis nous modifierons les fichiers de configuration comme suit:
 +
* rajouter la ligne suivante sur le fichier <code>/etc/freeradius/3.0/users</code>:
 +
 
 +
wateck Cleartext-Password := "glopglop"
 +
 
 +
* modifier le fichier <code>/etc/freeradius/3.0/mods-enabled/eap</code> comme suit:
 +
 
 +
eap{
 +
    default_eap_type = peap
 +
}
 +
 
 +
* modifier le fichier <code>/etc/freeradius/3.0//mods-enabled/mschap</code> comme suit:
 +
 
 +
use_mppe = yes
 +
require_encryption = yes
 +
require_strong = yes
 +
 
 +
[...]
 +
 
 +
with_ntdomain_hack = yes
 +
 
 +
 
 +
* configurer la borne comme client du serveur radius via le fichier <code> /etc/freeradius/3.0/clients.conf </code> comme suit:
 +
 
 +
client access-point {                                # nom de notre borne
 +
        ipaddr          = 10.60.0.100                # @IP de la nborne
 +
        secret          = glopglop                    # mot de passe
 +
}
 +
 
 +
Tout est OK jusque là, nous devrons arrêter puis relancer le serveur:
 +
  service freeradius stop
 +
  freeradius -X
 +
 
 +
 
 +
 
 +
=== Sécurisation du réseau ===
 +
Etape initiale:
 +
apt purge brltty
 +
 
 +
 
 +
* Nous accédons à la borne Wi-Fi via minicom en s'assurant de bien mettre <code>/dev/ttyUSB0</code> ,<code>9600 bauds</code> et<code>pas de contrôle de flux</code>:
 +
 
 +
minicom -os
 +
 
 +
 
 +
 
 +
* Autoriser l'accès avec les privilèges maximum  et entamer la configuration
 +
 
 +
enable 
 +
Password = "Cisco"
 +
 
 +
[...]
 +
 
 +
config term
 +
 
 +
 
 +
 
 +
 
 +
* On met la commande suivante pour vérifier l'identité de l'utilisateur (<code>authentication</code>) , pouvoir limiter l'accès à certaines fonctionnalités (<code>authorization</code>) et pouvoir enregistrer les actions de l'utilisateur (<code>accounting</code>) :
 +
 
 +
aaa new-model
 +
 
 +
 
 +
* On crée un server radius pour notre groupe 4, avec glopglop comme secret word :
 +
 
 +
radius-server host 193.48.57.164 auth-port 1812 acct-port 1813 key glopglop   
 +
 
 +
 
 +
* Définition du nom du serveur associé à notre groupe :
 +
 
 +
aaa group server radius radius_groupe4               
 +
 
 +
 
 +
* Association du serveur de notre groupe à la machine virtuelle:
 +
 
 +
server 193.48.57.164 auth-port 1812 acct-port 1813
 +
 
 +
 
 +
* Définition du login de l'utilisateur :
 +
 
 +
aaa authentication login wateck group radius_groupe4 
 +
 
 +
 
 +
* Notre configurons notre BSSID protégé en WPA2-EAP :
 +
 +
dot11 ssid reseau_wateck                               
 +
vlan 4
 +
authentication open eap wateck
 +
authentication network-eap wateck
 +
authentication key-management wpa
 +
 
 +
 
 +
* Configuration des VLAN :
 +
 
 +
interface Dot11Radio0                               
 +
encryption vlan vlan4 mode ciphers aes-ccm tkip   
 +
ssid reseau_wateck
 +
 
 +
 
 +
* Création d'une sous-interface dot11Radio0 pour notre groupe :
 +
 +
interface dot11Radio0.4
 +
encapsulation dot1Q 4
 +
 
 +
 
 +
* Création d'une sous-interface gigabite pour notre groupe :
 +
 
 +
interface gigabite0.4                   
 +
encapsulation dot1Q 4
 +
bridge-group 4
 +
 
 +
 
 +
* Ajout de notre BSSID à l'interface Dot11Radio0
 +
 
 +
interface Dot11Radio0                               
 +
dot11 ssid reseau_wateck                                 
 +
 
 +
[...]
 +
 
 +
 
 +
interface Dot11Radio0                             
 +
mbssid                                               
 +
dot11 ssid reseau_wateck                             
 +
mbssid guest-mode                                    # pour rendre notre réseau visible
 +
 
 +
 
 +
Puis on quitte via <code>exit</code> sans oublier de faire un  <code>write</code> sinon on perd tout ce qu'on a fait jusque ici
 +
 
 +
Puis on tape <code>reload</code>
 +
 
 +
* Attribution d'une adresse IP à la borne
 +
enable
 +
conf t
 +
int bvi1
 +
ip address 10.60.0.100 255.255.255.0
 +
 
 +
 
 +
 
 +
<code>reseau_wateck</code>
 +
 
 +
 
 +
 
 +
* Pour pinger le routeur, on tape <code> ping 10.60.0.254 </code>
 +
 
 +
* Pour pinger la VM, on doit d'abord configurer la passerelle:
  
Commence alors le craquage de la clef Wifi en Wep. On estime qu'il faut capturer plus ou moins 5 000 datas pour approximer 50% de chance de craquer la clef. '''Cela prends un certain temps'''
+
enable
 +
conf t
 +
ip route 0.0.0.0 0.0.0.0 10.60.0.253
 +
 +
Puis <code>ping 193.48.57.164 </code>

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

Membres du groupe:

  • Malick SECK
  • Gael WATBLED


Descriptif du projet

L'objectif du projet consiste à réaliser une maquette réseau pour la manipulation des protocoles de redondance réseau ainsi que le protocole IPv6. Pour cela, il nous faut d'abord installer une machine virtuelle Xen. Suite à cela, on mettra en place un réseau ainsi qu'un site web sécurisé. Ce projet nous permettra de mettre en pratique les notions vues en cours qui sont, entre autres:

  • installation d'une machine virtuelle
  • découpage et paramétrage réseau
  • réservation de nom de domaine avec un registrar
  • installation et configuration d'un serveur DNS sécurisé
  • installation et configuration d'un serveur web sécurisé
  • cassage de clés WEP et WPA-PSK avec l'utilitaire AirCrack

Le groupe est constitué de :

  • Malick SECK
  • Gael WATBLED

Architecture réseau

Afin d'avoir un réseau redondant, nous utilisons deux routeurs, deux commutateurs et deux points d'accés Wi-Fi. Les points d’accès sont connectés chacun à un commutateur, les routeurs sont connectés sur les deux commutateurs et chaque commutateur est connecté au réseau d’interconnexion avec l’école. Enfin, le serveur de virtualisation est connecté aux deux commutateurs. L'architecture globale est représentée sur la figure suivante:

Nous utilisons par ailleurs le réseau IPv4 routé 193.48.57.160/27 que nous avons découpé en deux sous-réseaux en réservant une plage aux étudiants en IMA5 classique.

De plus, nous disposons d'un sous-réseau privé pour la connexion du client Wi-Fi. Le tableau ci-dessous détaille les infos concernant le découpage réseau pour notre groupe (groupe 4).


Description Détails
ID VLAN 4
Réseau VLAN 10.60.4.0/24
Adresse IPv4 193.48.57.164/28
Adresse de broadcast 193.48.57.175/28
Adresse du Routeur 1 193.48.57.173/28
Adresse du Routeur 2 193.48.57.174/28
Adresse du Routeur virtuel 193.48.57.172/28
Nom du PC Morue
Poste de travail Zabeth08


Machine virtuelle Xen

Installation

Afin d'installer la machine virtuelle, nous nous connectons d'abord au serveur cordouan en ssh via la commande:code ssh root@cordouan.insecserv.deule.net (mot de passe= glopglop).

Puis nous lançons la commande xen-create-image --hostname=ima2a5-wateck --dhcp --dir=/usr/local/xen --dist= ascii –apt-proxy=http://proxy.polytech-lille.fr/3128 –force. xen-create-image est un scriptvqui permet de créer facilement une instance Xen avec une image qui aura 2 volumes (1 image Logical Volumes et 1 image system root disk). Le script en question prendra les arguments suivants:

ARGUMENT SIGNIFICATION
--hostname pour spécifier le nom de la machine
--dhcp pour permettre au client (guest) d'être configuré via dhcp
--dir pour spécifier le répertoire où les disques virtuels doivent être créés
--dist pour spécifier la distribution que l'on souhaite installer
-force pour autoriser l'écrasement des images existantes ou la suppression des volumes logiques LVM qui dépendent de la nouvelle instanciation

Puis nous lançons la commande tail -f /var/log/xen-tools/ima2a5-wateck.log pour voir sur un autre terminal si l’installation se fait correctement et pour voir l'état d'avancement en continue

Par la suite, nous modifions le fichier de configuration de la machine virtuelle pour faire en sorte que les répertoires var et home de la machine virtuelle soient sur des partitions LVM de l’hôte. Pour cela, nous modifions le fichier /etc/xen/ima2a5-wateck.cfg pour mettre nom du bridge (déja configuré) en IMA2a5 comme spécifié lorsque l'on utilise la commande brctl show afin de permettre à notre VM de se connecter à internet. Nous avons aussi pris le soin de modifier le mot de passe de la machine via la commande Passwd en "gloplop", le login étant "root"

Le fichier de configuration est comme suit:


    [...]
    #
    #  Disk device(s).
    #
    root    	= '/dev/xvda2 ro'
    disk    	= [
                  	'file:/usr/local/xen/domains/ ima2a5-wateck /disk.img,xvda2,w',
                  	'file:/usr/local/xen/domains/ ima2a5-wateck /swap.img,xvda1,w',               
                       'phy:/dev/virtual/ ima2a5-wateck -home,xvdb1,w',
                       'phy:/dev/virtual/ ima2a5-wateck -var,xvdb2,w',
                 ]
    [...]


    #
    # Configuration file for the Xen instance ima2a5-wateck, created
    # by xen-tools 4.7 on Fri Nov  8 07:59:07 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-wateck/disk.img,xvda2,w',
                      'file:/usr/local/xen/domains/ima2a5-wateck/swap.img,xvda1,w',

'phy:/dev/virtual/ima2a5-wateck-home,xvdb1,w',

                      'phy:/dev/virtual/ima2a5-wateck-var,xvdb2,w',

'phy:/dev/virtual/ima2a5-wateck-d1,xvdb3,w', 'phy:/dev/virtual/ima2a5-wateck-d2,xvdb4,w', 'phy:/dev/virtual/ima2a5-wateck-d3,xvdb5,w',

                  ]
    #
    #  Physical volumes
    #
    #
    #  Hostname
    #
    name        = 'ima2a5-wateck'
    
    #
    #  Networking
    #
    dhcp        = 'dhcp'
    vif         = [ 'mac=00:16:3E:05:CB:E5, bridge=IMA2a5' ]
         
    #
    #  Behaviour
    #
    on_poweroff = 'destroy'
    on_reboot   = 'restart'
    on_crash    = 'restart'


Nous parsons notre machine via son fichier de configuration avec la commande xl create /etc/xen/ima2a5-watech.cfg avant de lancer cette dernière avec xl console /etc/xen/ima2a5 (nous passons par xl console pour le moment car le serveur SSH n'est pas encore configuré)

Montage de Var et Home dans cordouan

Nous avons créé des volumes logiques de 10Go pour les répertoires var et home comme suit:

  • lvcreate -L10G -n ima2a5-wateck -home virtual
  • lvcreate -L10G -n ima2a5-wateck-var virtual

Création du système de fichiers

Nous formatons ainsi chaque partions pour avoir des volumes logiques (système de fichier)

  • mke2fs /dev/virtual/ ima2a5-wateck -home
  • mke2fs /dev/virtual/ ima2a5-wateck -var


Enfin nous vérifions que le montage des volumes a bien fonctionné grâce à fdisk -l

Le résultat obtenu est:

    root@ima2a5-wateck:~# 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

Ce qui montre que nos volumes ont été bel et biens crées

Nous avons aussi modifié le fichier /etc/fstab comme suit afin que les volumes soient pris en compte à chaque démarrage de la VM :

    /dev/xvdb1		/home		ext4		defaults				0		2
    /dev/xvdb2		/var		ext4		defaults				0		2


Utilisation de RAID5 pour le stockage de donnée

RAID5 est un système permettant de garantir l'intégrité des données en cas de problème majeur (par exemple un problème matériel sur un disque dur). Afin d'éviter de perdre des données, le système RAID5 propose répartir les données sur plusieurs partition. En cas de problème sur l'une des partitions, il est possible de récupérer les données perdues sur cette dernière à partir des autres partitions toujours intactes. La partie qui suit explique comment nous avons mis en place ce système. Cependant nous n'avons fait que le créer et il n'est pas utilisé (pour des raisons de simplicité pour la réalisation des autres tâches du projet).

A partir de Cordouan, nous avons créé trois partitions LVM de 1Go :

    lvcreate -L1G -n ima2a5-wateck-d1 virtual
    lvcreate -L1G -n ima2a5-wateck-d2 virtual
    lvcreate -L1G -n ima2a5-wateck-d3 virtual

Puis nous avons créé les systèmes de fichiers pour chacune des partitions nouvellement créées.

    mke2fs /dev/virtual/ima2a5-wateck-d1
    mke2fs /dev/virtual/ima2a5-wateck-d2
    mke2fs /dev/virtual/ima2a5-wateck-d3


Ensuite nous avons modifié le fichier de configuration de la VM (/etc/xen/ima2a5-wateck.cfg) en ajoutant ces partitions. Dans la définiton de la VM , ajouter :

    [...]
    #
    #  Disk device(s).
    #
    root    	= '/dev/xvda2 ro'
    disk    	= [
                  	'file:/usr/local/xen/domains/ ima2a5-wateck /disk.img,xvda2,w',
                  	'file:/usr/local/xen/domains/ ima2a5-wateck /swap.img,xvda1,w',               
                       'phy:/dev/virtual/ ima2a5-wateck -home,xvdb1,w',
                       'phy:/dev/virtual/ ima2a5-wateck -var,xvdb2,w',
                       'phy:/dev/virtual/ ima2a5-wateck-d1,xvdb3,w',
                       'phy:/dev/virtual/ ima2a5-wateck-d1,xvdb4,w',
                       'phy:/dev/virtual/ ima2a5-wateck-d1,xvdb5,w',
                 ]
    [...]

Pour que les partitions soient montées au démarrage de la VM il faut aussi modifier le fichier /etc/fstab :

    [...]
    # /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 
    /dev/md0 /media/raid ext4 defaults 0 1   # Ligne à rajouter
    [...]

Il faut ensuite redémarrer la machine pour que les modifications soient prises en compte et pour monter

    xl shutdown ima2a5-wateck
    xlcreate ima2a5-wateck.cfg

On se reconnecte à la machine en SSH, puis on crée un RAID5 logiciel avec les trois partitions obtenues avec paquetage mdadm.

    apt-get install mdadm
    mdadm –create/dev/md0 –level=5 –raid-devices=3 /dev/xvdb3 /dev/xvdb4 /dev/xvdb5
    kfs.ext4 /dev/md0
    kdir /media/raid

Et voilà notre système RAID5 operationnel.

Mise en place du serveur web

Installation du serveur web Apache2

Pour mettre en place notre serveur web nous avons utilisé la solution la plus répandue à savoir un serveur apache2. Il est produit par la Apache Software Foundation.

Pour cela, nous avons d'abord installé les paquets apache2.

  • Apt-get install apache 2

Puis nous lançons le serveur.

  • Service apache2 start


Configuration du serveur SSH

Afin que notre machine virtuelle intégrant notre serveur puisse être accessible à distance, nous devons y configurer un serveur SSH.

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

permitRootLogin yes

passwordAuthentification yes

A partir de là nous n'aurons plus besoin d'accéder à notre VM via xl cosole car nous passerons par SSH. Nous lançons donc le service SSH avec service ssh start.

Cependant, nous nous sommes rendus compte plus tard qu'il aurait été plus judicieux d'utiliser la connexion pas clé publique + passphrase en passant par ssh-keygen -t rsa -b 1024 par exemple, car plus sécuritaire.

En effet permitRootLogin yes donne les privilèges root dès qu'on se connecte, ce qui n'est pas idéal.

Configuration du serveur apache2

Nous avons du configurer ce serveur afin qu'il réponde à nos attente. Nous devons commencer par créer un fichier .conf que nous avons nommé ima2a5-wateck.site.con.

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

Ce fichier sera modifié par la suite lorsque nous sécuriserons le serveur web (https). Une fois ce fichier configuré nous pouvons lancer le serveur.

   a2ensite ima2a5-wateck.site
   service apache2 reload

Le site est maintenant en ligne et il est possible de le consulter en tapant l'adresse 193.48.57.164. Pour modifier la page web il suffit simplement de modifier le fichier index.html.

Sécurisation du serveur web (Protocole https)

Certificat SSL

Le SSL (Secure Socket Layer) / TLS (Transport Layer Security) est le protocole de sécurité le plus répandu qui créé un canal sécurisé entre deux machines communiquant sur Internet ou un réseau interne. Le protocole SSL est généralement utilisé lorsqu'un navigateur doit se connecter de manière sécurisée à un serveur web.

Tout d'abord, comme souvent pour les protocoles sécurisés (utiliser un processus de chiffremment), nous devons généner une paire de clefs .key et .csr. Pour cela on utilise la commande suivante :

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

Nous avons donc généré un jeu de 2 clefs privée et publique.


Argument explication
req Gestion X.509 Certificate Signing Request (CSR).
-nodes Pas de chiffrage sur la clef privée (option arbitraire no des)
-newkey rsa:2048 demande de Génération d'une paire de clef RSA de 2048 bits et d'une demande de certificat.
-keyout ima2a5-wateck.key spécification du nom de notre .key
-out ima2a5-wateck.csr spécification du nom de notre demande de certificat .csr

A la suite de la commande openssl, nous répondons à quelques questions afin de générer et d'obtenir le csr:

     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-wateck.site
     Email Address []:gael.watbled@polytech-lille.net
     
     Please enter the following 'extra' attributes
     to be sent with your certificate request
     A challenge password []:glopglop!
     Optionnal informations :

Notre clé publique est donc contenue dans le fichier ima2a5-wateck.csr. Ensuite cette clé publique doit être communiqué à notre registrar "Gandi" afin qu'il puisse valider ou non l'authenticité de notre site. Gandi peut utiliser plusieurs méthode pour certifier notre site. Nous avons choisi la méthode par "fichier". Pour cela nous devons fournir à Gandi un fichier temporaire et attendre qu'il soit validé. Une fois valider un certificat .csr et un certificat .pem sont générés.

Le protocole http écoute par défaut sur le port 80. Jusqu'ici notre serveur web écoutait donc sur son port 80 pour déceler d'éventuelles tentatives de connexion de la part des clients. Le protocole sécurisé https écoute lui sur le prot 443. Nous avons donc autorisé le serveur à écouter sur le 443 en plus du port 80 et effectué une redirection afin que les clients voulant se conecter via le protocole http soit automatiquement redirigé sur le port 443 afin d'utiliser le protocole https et donc de sécuriser la connexion.

Activation du module SSL

Tout d'abord nous devons activer le module SSL sur notre serveur Apache2, en créant un lien symbolique via a2en :

   sudo a2enmod ssl

Puis il faut relancer le serveur avec la commande :

   service apache2 restart

Modification du VirtualHost

Maintenant il est temps de modifier le VirtualHost Apache que nous avions configuré pour fonctionner en http. La nouvelle version donne quelque chose comme cela :

   <VirtualHost *:80>
       ServerName ima2a5-wateck.site
       ServerAlias www.ima2a5-wateck.site
       # Redirection 301  vers le site en HTTPS
       Redirect permanent / https://www.ima2a5-wateck.site/
   </VirtualHost>
   <VirtualHost *:443>
    #   General setup for the virtual host
        DocumentRoot "/var/www/ima2a5-wateck"
        ServerName ima2a5-wateck.site
        ServerAdmin gael.watbled@polytech-lille.net
        ErrorLog "/etc/apache2/logs/error_log"
        TransferLog "/etc/apache2/logs/access_log"
     # Activation du SSL
        SSLEngine On
       # Activation de tous les protocoles s  curis  s (TLS v1.0, v1.1 et TLS v1.2) touut en d  sactivant les protocoles non s  curis  s (SSL v2, SSL v3)
       SSLProtocol All -SSLv3 -SSLv2
       # Le navigateur devra choisir une m  thode de chiffrement en respectant l'ordre indiqu  e dans SSLCipherSuite
       SSLHonorCipherOrder on
    # Chemin vers le certificat SSL de votre nom de domaine
      SSLCertificateFile "/etc/apache2/certificate/ima2a5-wateck.crt"
      SSLCACertificateFile "/etc/apache2/certificate/ima2a5-wateck.pem"
    # Chemin vers la cl  e priv  e du certificat SSL de votre nom de domaine
      SSLCertificateKeyFile "/etc/apache2/certificate/ima2a5-wateck.key"
    </VirtualHost>

Comme nous l'avons décrit précemment la première partie du fichier de configuration des Hôtes virtuels permet la redirection du port 80 vers le port 443. Ce qui change par rapport à la première version est l'activation du protocole SSL ainsi que la description des chemins pour accèder aux diférents certificats ou clés.

   root@ima2a5-wateck:/etc/apache2/certificate# ls -l
   total 16
   -rw-r--r-- 1 root root 2155 Nov 28 08:25 ima2a5-wateck.crt
   -rw-r--r-- 1 root root 1148 Nov 28 08:12 ima2a5-wateck.csr
   -rw-r--r-- 1 root root 1705 Nov 28 08:09 ima2a5-wateck.key
   -rw-r--r-- 1 root root 2111 Nov 28 08:14 ima2a5-wateck.pem

Comme d'habitude il faut maintenant relancer le service afin que les modifications soient effectives :

    a2dissite ima2a5-wateck.site
    a2ensite ima2a5-wateck.site
    service apache2 restart

Notre serveur web est maintenant sécurisé via le protocole https.

Mise en place du serveur DNS

Installation de Bind9

Un serveur DNS (Domain Name System) permet la correspondance entre un nom de domaine et une adresse IP. Ainsi, grâce à DNS, il n'est pas nécessaire de se souvenir des adresses IP. Pour installer notre propre serveur DNS nous avons utilisé Bind9.

Nous commençons tout d'abord par installer bind9 via la commande suivante : apt-get install bind9

Création et configuration de la zone principale

La zone principale permet de faire pointer un nom de domaine pleinement qualifié (FQDN) sur une adresse IP.

Nous avons tout d'abord modifié le fichier /etc/bind/named.conf.local qui contient la configuration locale du serveur DNS et nous y avons déclaré les zones associées au domaine ainsi qu'un fichier de description de la zone. Puis nous avons créé le fichier de description/configuration lui-même que nous avons appelé db.ima2a5-wateck.site.

   [...]
   ; BIND data file for ima2a5-wateck.site
   ;
   $TTL 14400
   @       IN      SOA     ns1.ima2a5-wateck.site. host.ima2a5-wateck.site. (
                       201006601 ; Serial
                       7200 ; Refresh
                       120 ; Retry
                       2419200 ; Expire
                       604800) ; Default TTL
   ;
   @       IN      NS      ns1.ima2a5-wateck.site.
   @       IN      NS      ns6.gandi.net.
   ns1     IN      A       193.48.57.164
   www     IN      A       193.48.57.164
   [...]

Définitions des hôtes

Une fois la zone principale configurée, nous renseignons dans sa description les noms des différentes machines pour lesquels on souhaite résoudre le nom. Pour cela nous modifions les fichiers de configuration named.conf.local :

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

Et named.conf.options :

   options {
   // forwarders {
       //     0.0.0.0;
       // };
       //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; // adresse IP du ns6.gandi.net
   };

Après avoir enregistré les modifications dans les fichiers précédemment évoqués, nous redémarrons le service bind9 grâce à la commande service bind9 restart. Le service bind9 doit être redémarré à chaque modification, pour qu’elle soit prise en compte.

Réservation du nom de domaine

Grâce au registrar gandi.net, nous avons réservé le nom de domaine ima2a5-wateck.site. L'extension .site est une option trés interessante à cause du prix relativement faible (1€/an)

Mygandi.png

Configuration du nameserver

Les serveurs de noms permettent d'accéder à un réseau ou du contenu sur internet depuis un nom de domaine. Le nameserver utilisé est spécifié dans notre fichier de configuration pour bind9. La figure suivante montre le choix de nos narmeservers via gandi:

Wiki.png

Enregistrement Glue Records

Il faut créer un enregistrement Glue records lorsque le serveur de noms fait référence au nom de domaine. Si vous souhaitez mettre en place plusieurs serveurs de noms, faisant référence au nom de domaine, il faudra créer pour chacun un enregistrement glue record. AInsi nous utilisons les enregistrements Glue records fournis par gandi pour associer un hostname (nom de serveur ou DNS) à l'adresse IP de notre machine. NB:Les modifications seront effectives entre 12 et 24 heures. La figure suivante motre l'enregistrement glue records que nous avons effectué:

Glue record.png

Après avoir réalisé ces étapes et attendu que le registrar effectue les modifications, le site est enfin accessible via le nom ima2a5-wateck.site.

Sécurisation du serveur DNS avec DNSSEC

Modification des fichiers de configuration

Dans le fichier named.conf.options nous commencons par ajouter l’option dnssec-enable yes;.

Nous avons ensuite créer un répertoire spécifique qui abritera les clés nécéssaires au fonctionnement de DNSSEC :

mkdir ima2a5-wateck.site.dnssec

Ensuite il nous a fallu générer les clés privées et publiques grâce aux commandes suivantes :

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

dnssec-keygen -a RSASHA1 -b 1024 -n ZONE ima2a5-wateck.site -r /dev/urandom

Nous avons renommé les deux paires de clefs obtenues en utilisant le nom de la zone comme préfixe puis en suffixant d’abord par la destination de la clef (-ksk pour la KSK ou -zsk pour la ZSK). Voilà le résultat :

   -rw-r--r-- 1 root bind  179 Nov 29 10:12 dsset-ima2a5-wateck.site.
   -rw-r--r-- 1 root bind  619 Nov 29 09:40 ima2a5-wateck.site-ksk.key
   -rw------- 1 root bind 1774 Nov 29 09:40 ima2a5-wateck.site-ksk.private
   -rw-r--r-- 1 root bind  445 Nov 29 09:41 ima2a5-wateck.site-zsk.key
   -rw------- 1 root bind 1010 Nov 29 09:41 ima2a5-wateck.site-zsk.private

Il nous a ensuite fallu inclure les clefs ksk.key et zsk.key dans notre fichier de zone et incrémenter sa version (SERIAL) :

   ; BIND data file for ima2a5-wateck.site
   ;
   $TTL 14400
   $include /etc/bind/ima2a5-wateck.site.dnssec/ima2a5-wateck.site-ksk.key
   $include /etc/bind/ima2a5-wateck.site.dnssec/ima2a5-wateck.site-zsk.key
   @       IN      SOA     ns1.ima2a5-wateck.site. host.ima2a5-wateck.site. (
                       201006602 ; Serial
                       7200 ; Refresh
                       120 ; Retry
                       2419200 ; Expire
                       604800) ; Default TTL
   ;
   @       IN      NS      ns1.ima2a5-wateck.site.
   @       IN      NS      ns6.gandi.net.
   ns1     IN      A       193.48.57.164
   www     IN      A       193.48.57.164
 

Nous avons ensuite signé la zone avec la commande :

dnssec-signzone -o ima2a5-wateck.site -k ima2a5-wateck.site -ksk ../zones/db.ima2a5-wateck.site ima2a5-wateck.site-zsk

Puis modifié le fichier named.conf.local pour utiliser la zone signée de suffixe .signed ainsi que le fichier named.conf.options :

   options {
   // forwarders {
           //     0.0.0.0;
           // };
           //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; // adresse IP du ns6.gandi.net
   };

Enfin nous avons redémarré bind9 avec :

service bind9 restart

La dernière étape consiste à communiquer à Gandi notre clé publique KSK afin d'activer DNSSEC.

Transmission de la clé publique à Gandi

Clef.png


Configuration Internet de la machine eeePC Morue

Avant d'effectuer des installations nous devons tout d'abord connecté le PC à internet. Pour cela nous avons modifié le fichier /etc/network/interfaces.

On modifie le ficher /etc/network.interfaces, comme suit:

     auto lo
     iface lo inet loopback
     
     auto enp4s0
        address 172.26.145.75
        netmask 255.255.255.0
        gateway 172.26.145.254

Puis nous effectuons une mise à jour des paquets via apt-get update.

Cassage de clé WEP

Installation du paquetage AirCrack-ng

Avant de procéder à l'installation, nous mettons d'abords à jour les paquets via la commande :

    apt-get update

Enfin, pour espionner le réseau, nous pouvons installer l'utilitaire Aircrack-ng avec la commande :

   apt-get install aircrack-ng

Utilisation de AirCrack

Après avoir branché la clé usb permettant de se connecter en wifi aux réseaux mis à disposition, nous commençons par lister les interfaces WiFi disponibles sur l'ordinateur : airmon-ng

A ce niveau, nous choisissons l'interface que l'on souhaite écouter  : airmong-ng start wlan0mon

Sachant que la commande airodump-ng permet d'écouter tous les réseaux WiFi présents, nous sélectionnons le réseau ciblé et son type de cryptage avec la commande suivante :

airodump-ng --encrypt wep wlan0mon

Ainsi, nous récupérons les données contenues dans les trames échangées et les stockons dans un fichier spécifique.

Airodump-ng -w crack1.txt -c 2 --bssid [@MAC] wlan0mon

L'explication des arguments de la commande utilisée est la suivante:

  • -c: pour indiquer le canal d'écoute (canal 2 dans notre cas car tous les réseaux Cracotte y sont)
  • -bssid: pour préciser le nom du réseau en question
  • -w: pour indiquer le fichier de sauvegarde des trames écoutées

A ce niveau, nous disposons des éléments à analyser pour décrypter la clé WEP, mais pour des raisons de ressources matérielles, nous les utilisons avec une autre machine plus puissante via

aircrack-ng -b [@MAC] crack1*.cap


Cassage de clé WPA-PSK par force brute

Pour cette partie, nous utilisons le même utilitaire que pour cracker la clé WEP.

Ainsi nous listons les interfaces Wi-Fi avec la commande airmon-ng afin de repérer le réseau Wi-Fi à cracker.

Ensuite on écoute l'interface

airmon-ng start [nom_de_l_interface]

Lorsque l'utilitaire airodump nous indique si des trames WPA sont capturées avec la commande airodump-ng --encrypt wpa wlan0mon, nous lançons aircrack-ng pour tenter de craquer la clef WPA en s'aidant d'un dictionnaire. D'où l'utilisation de l'expression "cassage par force brute", impliquant que l'on doit se rapprocher au maximum du point d'accès.

A ce niveau, va intervenir l'utilitaire crunch qui va tout simplement créer un dictionnaire de toutes les clés de 8 chiffres car on sait d'avance que la clef WPA est un nombre sur 8 chiffres. La commande pour cela est la suivante:

crunch 8 8 0123456789 >> dictionnaire_wpa.txt

Puis nous lançons aircrack-ng

aircrack-ng [fichier.cap] -w dictionnaire_wpa.txt

Sécurisation d'une clé USB avec cryptsetup

Nous avons commencé par installer l'utilitaire cryptsetup :

apt-get install cryptsetup

apt-get install lvm2

On commence par lister les disques détectés par l'ordinateur et visualiser les partitions avec lsblk. Nous avons constaté que l'unique partition de la clé USB à savoir sda était vide


La commande fdisk /dev/sda permet ensuite de rentrer dans la partition

n pour créer une partition

p

d delete

Nous sécurisons la partition (clef-WATECK) en utilisant l’utilitaire cryptsetup

cryptsetup luksFormat -c aes -h sha256 /dev/sda1 pour encrypter la partition au format luks puis définir un mot de passe

cryptsetup open --type luks /dev/sda1 clef-WATECK pour l'ouvrir


Nous un système de fichier au dessus de la partition sécurisée

mkfs.ext4 /dev/mapper/clef-WATECK On le monte (dans un repertoire sur le poste) .

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

touch test.txt<.code>

<code>umount /mnt/clef

cryptsetup close --type luks clef_WATECK pour fermer le volume chiffré

Sécurisation réseau filaire par EAP-TLS

Dans cette partie, nous nous sommes beaucoup inspiré des travaux de nos collègues.

Configuration du serveur FreeRadius

Depuis notre machine virtuelle, nous installons freeradius via la commande suivante:

apt-get install freeradius

Puis nous modifierons les fichiers de configuration comme suit:

  • rajouter la ligne suivante sur le fichier /etc/freeradius/3.0/users:
wateck Cleartext-Password := "glopglop"
  • modifier le fichier /etc/freeradius/3.0/mods-enabled/eap comme suit:
eap{
    default_eap_type = peap
}
  • modifier le fichier /etc/freeradius/3.0//mods-enabled/mschap comme suit:
use_mppe = yes
require_encryption = yes
require_strong = yes
[...]
with_ntdomain_hack = yes


  • configurer la borne comme client du serveur radius via le fichier /etc/freeradius/3.0/clients.conf comme suit:
client access-point {                                # nom de notre borne 
       ipaddr          = 10.60.0.100                 # @IP de la nborne
       secret          = glopglop                    # mot de passe
}

Tout est OK jusque là, nous devrons arrêter puis relancer le serveur:

 service freeradius stop
 freeradius -X


Sécurisation du réseau

Etape initiale:

apt purge brltty


  • Nous accédons à la borne Wi-Fi via minicom en s'assurant de bien mettre /dev/ttyUSB0 ,9600 bauds etpas de contrôle de flux:
minicom -os


  • Autoriser l'accès avec les privilèges maximum et entamer la configuration
enable   
Password = "Cisco"
[...]
config term



  • On met la commande suivante pour vérifier l'identité de l'utilisateur (authentication) , pouvoir limiter l'accès à certaines fonctionnalités (authorization) et pouvoir enregistrer les actions de l'utilisateur (accounting) :
aaa new-model


  • On crée un server radius pour notre groupe 4, avec glopglop comme secret word :
radius-server host 193.48.57.164 auth-port 1812 acct-port 1813 key glopglop    


  • Définition du nom du serveur associé à notre groupe :
aaa group server radius radius_groupe4                 


  • Association du serveur de notre groupe à la machine virtuelle:
server 193.48.57.164 auth-port 1812 acct-port 1813


  • Définition du login de l'utilisateur :
aaa authentication login wateck group radius_groupe4  


  • Notre configurons notre BSSID protégé en WPA2-EAP :
dot11 ssid reseau_wateck                                
vlan 4
authentication open eap wateck
authentication network-eap wateck 
authentication key-management wpa


  • Configuration des VLAN :
interface Dot11Radio0                                 
encryption vlan vlan4 mode ciphers aes-ccm tkip    
ssid reseau_wateck 


  • Création d'une sous-interface dot11Radio0 pour notre groupe :
interface dot11Radio0.4
encapsulation dot1Q 4


  • Création d'une sous-interface gigabite pour notre groupe :
interface gigabite0.4                     
encapsulation dot1Q 4
bridge-group 4


  • Ajout de notre BSSID à l'interface Dot11Radio0
interface Dot11Radio0                                 
dot11 ssid reseau_wateck                                   
[...]


interface Dot11Radio0                               
mbssid                                                
dot11 ssid reseau_wateck                               
mbssid guest-mode                                    # pour rendre notre réseau visible


Puis on quitte via exit sans oublier de faire un write sinon on perd tout ce qu'on a fait jusque ici

Puis on tape reload

  • Attribution d'une adresse IP à la borne
enable 
conf t
int bvi1 
ip address 10.60.0.100 255.255.255.0


reseau_wateck


  • Pour pinger le routeur, on tape ping 10.60.0.254
  • Pour pinger la VM, on doit d'abord configurer la passerelle:
enable
conf t
ip route 0.0.0.0 0.0.0.0 10.60.0.253

Puis ping 193.48.57.164