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

De Wiki d'activités IMA
(On passe le site en HTTPS)
(Configuration du serveur SSH)
 
(11 révisions intermédiaires par 2 utilisateurs non affichées)
Ligne 110 : Ligne 110 :
 
   Pour la gestion du raid5 : '''mdadm'''
 
   Pour la gestion du raid5 : '''mdadm'''
 
   Pour la gestion du serveur DNS et DNSSEC : '''bind9'''
 
   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==
 
==Le site WEB==
Ligne 137 : Ligne 174 :
 
       service apache2 reload
 
       service apache2 reload
  
===On passe le site en HTTPS===
+
===Site sécurisé en HTTPS===
 
Pour pouvoir passer son site en HTTPS, il faut obtenir un certificat. On utilise la commande :
 
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
 
   openssl req -nodes -newkey rsa:2048 -sha256 -keyout ima2a5-nofun.key -out ima2a5-nofun.csr
Ligne 156 : Ligne 193 :
 
     Optionnal informations : NA
 
     Optionnal informations : NA
  
Une fois HTTPS correctement configuré, on peut voir que lorsque l'on se connecte sur notre site, un petit cadenas est apparue !!!
+
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==
 
==Configuration du DNS==
Ligne 167 : Ligne 245 :
 
Il faut ensuite attendre un certain temps avant que cela fonctionne sur Internet.
 
Il faut ensuite attendre un certain temps avant que cela fonctionne sur Internet.
  
==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.
+
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;
  
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
+
        // forwarders {
      mdadm --monitor --daemonise /dev/md0
+
        //     0.0.0.0;
      mkfs.ext4 /dev/md0
+
        // };
 +
        // 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
 +
    };
  
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
 
  
  
Ligne 289 : Ligne 457 :
  
  
 +
==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==
 
==Exercice annexe : Cryptage de données==

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.