TP sysres IMA2a5 2018/2019 G2

De Wiki d'activités IMA

Introduction

Ce projet consiste à réaliser une maquette de réseau permettant de manipuler les protocoles de redondance réseau ainsi que le protocole réseau IPv6.

Création du commutateur logiciel sur Zabeth10

On commence par configurer la Zabeth afin que lorsque l'on connecte un PC sur l'interface eth1 elle commute tous les paquets sur l'interface eth0.

On modifie le fichier /etc/network/interfaces :

    auto lo
    iface lo inet loopback
    
    auto eth0 eth1 bridge
    iface eth0 inet manual
    up ip link set $IFACE up
    
    iface eth1 inet manual
    up ip link set $IFACE up
     
    iface bridge inet dhcp
    bridge_ports eth0 eth1
    bridge_hw LADRESSEETHERNETDELAZABETH
   

On peut voir que le pont est bien configuré à l'aide de la commande :

    brtcl showstp bridge

Les interfaces eth0 et eth1 sont à l'état "forwarding", ce qui signifie que tout fonctionne correctement.

Installation de Devuan sur PC Portable Thon

Cette étape simplissime nous a donné du fil à retordre car lors de l'installation, nous n'arrivions pas à contacter le serveur dhcp et obtenir le proxy de Polytech'Lille. Après une dizaine de tentative d'installation, cela a fini par marcher. Les comptes utilisateurs créés sont ceux habituels.

Machine virtuelle Xen sur Cordouan

Installation

On se connecte en ssh sur cordouan.insecserv.deule.net

Pour créer notre VM Devuan, on lance la commande suivante:

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

Nous avons ensuite modifié le mot de passe root et le fichier PaixDieu.cfg pour ajouter StudentsInfo. C'est un bridge qui nous permet d'avoir accès à internet.

     vif     	= [ 'mac=LABELLEADRESSEMAC, bridge=StudentsInfo' ]

Lancer la machine virtuelle

On teste que l'installation s'est bien déroulée en lançant notre VM une première fois. Voici les commandes utilisées pour lancer notre VM PaixDieu (en se plaçant dans /etc/xen/) :

     xl create PaixDieu.cfg
     xl console PaixDieu

Montage /var et /home sur cordouan

Passons aux choses sérieuses avec le montage des dossiers /var et /home sur Cordouan.

Connectés à Cordouan, on a créé les volumes de 10Go correspondant aux répertoires:

    lvcreate -L10G -n apIMA5-PaixDieu-home virtual
    lvcreate -L10G -n apIMA5-PaixDieu-var virtual

Ainsi que les systèmes de fichier

    mke2fs /dev/virtual/apIMA5-PaixDieu-home
    mke2fs /dev/virtual/apIMA5-PaixDieu-var

On indique à notre VM les répertoires fraichement créés en éditant /etc/xen/PaixDieu.cfg :

    disk    	= [
    [...]         
                       'phy:/dev/virtual/apIMA5-PaixDieu-home,xvdb1,w',
                       'phy:/dev/virtual/apIMA5-PaixDieu-var,xvdb2,w',
                 ]

La commande fdisk -l nous permet de vérifier que les volumes sont bien montés.

On modifie le fichier /etc/fstab de la VM pour 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


Pour le volume /var, nous devons procéder différemment et lançons les commandes suivantes depuis la VM :

    mount /dev/xvdb2 /mnt
    mv /var/* /mnt
    umount /mnt
    mount -a

On vérifie que tout est OK avec df.

Dockers

Docker est un outil permettant la création de containers contenant des services que nous pourrons moduler facilement en choisissant de démarrer ou non ces containers.

Nous avons rencontré un problème pour lancer la commande apt-get update car la liste de clés de notre VM était celle d'une machine Debian et non Devuan. Nous l'avons résolu grâce à la commande apt-get install devuan-keyring.

Pour installer les dockers on lance les commandes suivantes :

     apt-get install apt-transport-https dirmngr
     echo 'deb https://apt.dockerproject.org/repo debian-stretch main' >> /etc/apt/sources.list
     apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys F76221572C52609D
     apt-get update
     apt-get install docker-engine
     service docker restart
     docker pull httpd
     docker pull ventz/bind

La commande docker images nous permet de vérifier que nos images sont correctement installées.

Dans le dossier ~/httpd/ on crée les fichiers index.html et httpd.conf. On les liera par la suite comme point de montage. Ceci nous permet de créer et modifier notre page web à la racine de notre répertoire /root et les modifications se fassent directement dans le container.

On crée un dossier ~/bind/ dans lesquels on met les fichiers suivants :

/etc/bind/named.conf.options

    options {
        directory "/var/cache/bind";
        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;
    };

/etc/bind/named.conf.local

    //
    // Do any local configuration here
    //
    
    // Consider adding the 1918 zone here, if they are not used in your
    // organization
    // include "/etc/bind/zones.rfc1918";
    
    zone "paix-dieu-fdjd-apima5.space" {
        type master;
        file "/etc/bind/paix-dieu-fdjd-apima5.space";
    };


/etc/bind/paix-dieu-fdjd-apima5.space

    $TTL 259200
    
    @ IN SOA dns.paix-dieu-fdjd-apima5.space. admin.paix-dieu-fdjd-apima5.space. (
        10    ; Version
        7200    ; Refresh (2h)
        3600    ; Retry (1h)
        1209600    ; Expire (14j)
        259200    ; Minimum TTL (3j)
     IN NS dns.paix-dieu-fdjd-apima5.space.
     IN NS ns6.gandi.net.
     IN MX 100 dns.paix-dieu-fdjd-apima5.space.
     IN A     193.48.57.162
    
    www    IN A    193.48.57.162
           IN MX   100 dns.paix-dieu-fdjd-apima5.space.
    dns    IN A    193.48.57.162


Lancer les containers

On stoppe d'abord le service apache sur le port 80 service apache2 stop.

    docker run -d --name=apache -v /root/httpd/index.html:/usr/local/apache2/htdocs/index.html \-v /root/httpd/httpd.conf:/usr/local/httpd.conf -p 80:80 httpd
    docker run --name=dns -dit --dns=8.8.8.8 --dns=8.8.4.4 -p 53:53/udp -p 53:53 \
    -v "$PWD"/bind/named.conf.local:/etc/bind/named.conf.local \
    -v "$PWD"/bind/named.conf.options:/etc/bind/named.conf.options \
    -v "$PWD"/bind/paix-dieu-fdjd-apima5.space:/etc/bind/paix-dieu-fdjd-apima5.space ventz/bind

On peut voir que tout fonctionne correctement avec la commande docker ps Depuis la zabeth on peut accéder à notre site via http://193.48.57.162/ et on tombe sur notre page d'accueil.


Mise en place de notre site internet

Réservation d'un nom de domaine

Réserver un nom de domaine est une étape facile et intuitive sur le registrar gandi.net. Nous avons pris le nom de domaine paix-dieu-fdjd-apima5.space étant donné que paix-dieu.space était déjà réservé. Avec du recul, ce n'est pas le nom le plus évident à référencer et à rentrer dans nos configurations. L'avantage des .space est leur coût très faible (1.20€/an)

Configuration HTTP et DNS

Sur Gandi, on ajoute un Glue Record avec l'IP de notre VM. On modifie les DNS et on met dns.paix-dieu-fdjd-apima5.space en première ligne, ns6.gandi.net en seconde. On supprime les lignes 3 et 4. Il faut attendre le temps de propagation avant de vérifier avec ZoneCheck que nos informations sont bien prises en compte.

On peut accéder à notre site via un navigateur en tapant : http://paix-dieu-fdjd-apima5.space

Sécurisation du site

On veut sécuriser notre site pour le passer en HTTPS.

Génération des clés

On exécute la commande suivante pour générer les clés publiques et privées :

    openssl req -nodes -newkey rsa:2048 -sha256 -keyout paix-dieu-fdjd-apima5.key -out paix-dieu-fdjd-apima5.csr 

On copie le contenu de la clé publique sur Gandi pour valider notre certificat SSL. En échange, on doit placer un fichier à un endroit bien spécifique de notre site. On le télécharge sur notre VM et on le relie au docker de la manière suivante:

    docker run -d --name=apache \
    -v /root/httpd/index.html:/usr/local/apache2/htdocs/index.html \
    -v /root/httpd/httpd.conf:/usr/local/httpd.conf \
    -v /root/httpd/375E80633027A52CAB15C27ACB63868E.txt:/usr/local/apache2/htdocs/.well-known/pki-validation/375E80633027A52CAB15C27ACB63868E.txt \
    -p 80:80 \
    httpd

On attend que Gandi valide le certificat SSL, chose réalisée au bout d'une heure.

Configuration HTTPS

On attaque la configuration de la VM pour mettre en place le HTTPS.

On modifie le fichier httpd-ssl.conf :

    <VirtualHost _default_:443>
    
    #   General setup for the virtual host
    DocumentRoot "/usr/local/apache2/htdocs"
    ServerName paix-dieu-fdjd-apima5.space:443
    ServerAdmin fdebruil@polytech-lille.net
    
    #   SSL Engine Switch:
    SSLEngine on
    
    #   Server Certificate:
    SSLCertificateFile "/usr/local/apache2/conf/paix-dieu-fdjd-apima5.space.crt"
    [...]
    
    #   Server Private Key:
    SSLCertificateKeyFile "/usr/local/apache2/conf/paix-dieu-fdjd-apima5.key"
    [...]
    </VirtualHost>

Durant cette étape, nous nous sommes rendus compte que nous ne pouvons pas mapper un fichier qui existe déjà. Nous avions essayé de modifier le httpd.conf en dehors du docker et de le mapper ensuite mais ça ne marchait pas. On rentre donc dans le docker avec la commande docker exec -ti apache bash

On modifie le fichier httpd.conf avec la commande sed suivante :

    sed -i \
      -e 's/^#\(Include .*httpd-ssl.conf\)/\1/' \
      -e 's/^#\(LoadModule .*mod_ssl.so\)/\1/' \
      -e 's/^#\(LoadModule .*mod_socache_shmcb.so\)/\1/' \
      conf/httpd.conf

On relance notre docker avec les fichiers fraichement créés, en supprimant le mappage du httpd.conf et en reliant le port 443 :

   docker run -d --name=apache \
   -v /root/httpd/index.html:/usr/local/apache2/htdocs/index.html \
   -v /root/httpd/375E80633027A52CAB15C27ACB63868E.txt:/usr/local/apache2/htdocs/.well-known/pki-validation/375E80633027A52CAB15C27ACB63868E.txt \
   -v /root/httpd/httpd-ssl.conf:/usr/local/apache2/conf/extra/httpd-ssl.conf \
   -v /root/httpd/paix-dieu-fdjd-apima5.csr:/usr/local/apache2/conf/paix-dieu-fdjd-apima5.csr \
   -v /root/httpd/paix-dieu-fdjd-apima5.key:/usr/local/apache2/conf/paix-dieu-fdjd-apima5.key \
   -v /root/httpd/paix-dieu-fdjd-apima5.space.crt:/usr/local/apache2/conf/paix-dieu-fdjd-apima5.space.crt \
   -p 80:80 \
   -p 443:443 \
   httpd

On peut accéder à notre site en lançant https://paix-dieu-fdjd-apima5.space/

Configuration DNSSEC

On se place dans /etc/bind. On génère la clé asymétrique de signature de clés de zone dans un nouveau répertoire paix-dieu-fdjd-apima5.space.dnssec :

    dnssec-keygen -r /dev/urandom -a RSASHA1 -b 2048 -f KSK -n ZONE paix-dieu-fdjd-apima5.space
 

Ainsi que la clé asymétrique de la zone pour signer les enregistrements :

     dnssec-keygen -r /dev/urandom -a RSASHA1 -b 1024 -n ZONE paix-dieu-fdjd-apima5.space
 

On renomme les deux paires de clés obtenues en :

     paix-dieu-fdjd-apima5.space-ksk.key
     paix-dieu-fdjd-apima5.space-zsk.key
     paix-dieu-fdjd-apima5.space-ksk.private
     paix-dieu-fdjd-apima5.space-zsk.private

On ajoute ensuite les clés dans le fichier de zone (paix-dieu-fdjd-apima5.space) et on incrémente le numéro de version de la zone :

     $include /etc/bind/paix-dieu-fdjd-apima5.space.dnssec/paix-dieu-fdjd-apima5.space-ksk.key
     $include /etc/bind/paix-dieu-fdjd-apima5.space.dnssec/paix-dieu-fdjd-apima5.space-zsk.key

Après on signe le fichier de configuration pour prendre en compte le DNSSEC :

     dnssec-signzone -o paix-dieu-fdjd-apima5.space -k paix-dieu-fdjd-apima5.space.dnssec/paix-dieu-fdjd-apima5.space-ksk paix-dieu-fdjd-apima5.space paix-dieu-fdjd-apima5.space.dnssec/paix-dieu-fdjd-apima5.space-zsk 

Cela nous crée un fichier paix-dieu-fdjd-apima5.space.signed.

On modifie ensuite le fichier named.conf.local pour utiliser la zone signée paix-dieu-fdjd-apima5.space.signed.

     zone "paix-dieu-fdjd-apima5.space" {
        type master;
        file "/etc/bind/paix-dieu-fdjd-apima5.space.signed";
     };

On ajoute également l’option dnssec-enable yes; dans le fichier named.conf.options afin d'activer le DNSSEC.

On communique à gandi, sur la partie DNSSEC la clé publique KSK.

On relance notre docker en mappant le dossier /etc/bind :

    docker run --name=dns -dit --dns=8.8.8.8 --dns=8.8.4.4 -p 53:53/udp -p 53:53 \
    -v /etc/bind/:/etc/bind/ \
    ventz/bind

On peut vérifier que notre configuration est bonne à l'aide du site DNSViz. Après un premier test nous avions des erreurs d'heure car notre VM était dans le futur. On a donc installé un serveur NTP sur notre VM pour la remettre à l'heure.

Après correction, on obtient l'arbre suivant sur DNSViz : Paix-dieu-dnsviz2.png

Notre DNSSEC est correctement configuré.

Configuration du commutateur

Pour notre projet nous avons 2 commutateurs :

  • Un en E304
  • L'autre en E306

Nous sommes en charge de celui en E306. Ce sont deux Catalyst 4006. Chacun doit être relié aux 2 routeurs (un dans chaque salle). Chacun doit avoir un port permettant une connexion à un point d'accès WiFi.

On commence par se connecter au port console du commutateur à l'aide d'un câble série.

On accède à l'interface de configuration du switch grâce à :

     minicom -o -D /dev/ttyUSB0 -b 9600

On peut connaitre l'état du commutateur à l'aide des commandes:

     show interface summary
     show vlan
     show run

Déclaration des VLANs

On déclare 7 VLANs, un pour Xen, un pour interconnexion, et un pour chaque groupe pour le wifi dans minicom de la façon suivante :

     config termi
     vlan 42
     name Xen
     exit (x2 pour quitter)
     write

Supprimer un VLAN (au cas où):

     no vlan 42

Branchements

Les branchements ont été réalisés avec soin par Français, Tarik et Yacine en amont de notre travail de configuration.

Affectation d'un port à un VLAN

Pour voir sur quels ports ils ont branché leurs câbles, on lance la commande

     show interface summary

On aperçoit une étoile devant la ligne si le port est connecté à un autre dispositif.

On peut créer le tableau suivant :

Nom VLAN Prise
Cordouan GigabitEthernet2/2
Interconnexion (Routeur E306) GigabitEthernet2/1
Borne Wifi GigabitEthernet2/3
Routeur E304 (en fibre) GigabitEthernet1/1

On lance la configuration pour Cordouan (Xen) :

     interface GigabitEthernet 2/2
     switchport mode access (rend accessible)
     switchport access vlan 42 (définit quel VLAN a accès au port)
     no shut (pré-sauvegarde la config)
     exit (x2)
     write

Pour le point d'accès on fait un trunk :

     interface GigabitEthernet 2/3
     switchport trunk encapsulation dot1q
     switchport mode trunk
     no shut
     exit
     write

De même pour l'interconnexion des VLANs et la connexion au routeur de la E304.

On vérifie que notre configuration est bonne à l'aide de la commande show int status

Tests

Nous avons modifié le bridge de la VM en remplaçant le StudentsInfo par IMA2a5. Pour réaliser nos tests, on a affecté le port GigabitEthernet 2/7 au VLAN42. On peut ping la machine virtuelle via notre PC Thon connecté en ethernet et vice-versa.

Travail sur le WiFi

Installation du Wifi sur l'ordinateur

L'interface Wifi de la carte réseau de l'ordinateur n'est pas compatible avec notre OS. Nous utilisons alors une clé Wifi Wi-Pi pour avoir une interface WiFi avec l'ordinateur.

Il est nécessaire d'installer les drivers de la clé se trouvant dans le package firmware-ralink.

     apt-get install firmware-ralink

Dès lors que le driver est installé, on peut retrouver notre périphérique Wifi via la commande "iwconfig"

Pour lancer l'interface, utiliser la commande suivante :

     ifconfig interface up

On peut vérifier avec la commande dmesg que l'interface est bien lancée.

Crackage WEP

Installation des package nécessaires pour le crack :

     apt-get install aircrack-ng

Lister les interfaces WiFi disponibles sur l'ordinateur :

     airmon-ng

Choisir l'interface souhaitée pour l'écoute puis la déclarer en mode écoute avec la commande suivante :

     airmon-ng start 'interface'

S'il y a des erreurs, il peut être nécessaire d'arrêter l'interface ou de tuer les processus qui bloquent le passage en mode écoute de l'interface.

Refaire les deux manipulations précédentes jusqu'à ce que l'écoute se lance.

Le nom de l'interface doit changer pour devenir wlan0mon.

Pour vérifier que le passage en mode écoute est bien effectuée, utiliser la commande suivante :

     airodump-ng -i wlan0mon

La commande airodump-ng permet d'écoute tous les réseaux WiFi présents. Afin de sélectionner le réseau ciblé, l'utilisation des commandes suivantes est impérative :

     -c numChan : pour indiquer le canal d'écoute
     -d ESSID : pour indiquer quel réseau écouter en particulier. Attention, le ESSID doit être en héxadécimal
     -i interface : pour préciser quelle interface réseau utiliser, donc ici wlan0mon
     -w cheminFichier : pour indiquer dans quel fichier enregistrer les trames écoutées

La commande totale devient donc :"airodump-ng -i wlan0mon -c 1 -d 04:DA:D2:9C:50:50 -w /root/crack.cap" pour me permettre d'écouter les trames sur le wifi "cracotte01" qui émettait alors sur le canal 1.

En parallèle, il faut lancer aircrack-ng pour cracker la clé du réseaux.

La commande demande juste le chemin jusqu'au fichier où sont sauvegardés les trames écoutées sur le réseau.

Attention, le fichier de sauvegarde devient "crack.cap-01.ivs" donc ma commande complète est  : "aircrack-ng /root/crack.cap-01.ivs"

La clé WEP s'affiche dès lors que aircrack a terminé son travail.

La clé est affichée en hexadécimal.

Crackage WPA2-PSK

Comme pour le crackage WEP, il nous faut dans un premier temps écouter le réseau afin de récupérer les données nécessaire au crackage.

Ici nous devons attendre jusqu'à récupérer le Handshake.On peut le voir s'afficher en haut de l'écran quand on utilise la 'commande airodump-ng'

Une fois le handshake récupéré, on peut lancer le crackage avec la commande aircrack-ng. Mais pour cracker une clé WPA2, il nous faut un dictionnaire des clé possibles.

Pour avoir ce dictionnaire, on utilise crunch qui est un générateur de liste de combinaison. Il faut lui passer en paramètres les informations suivantes :

     - Le nombre de caractères minimum : 8
     - Le nombre de caractères maximum : 8
     - La liste des caractère possible dans les combinaisons : 0123456789

On a alors la commande suivante : crunch 8 8 0123456789 >> dico.txt

Une fois notre dictonnaire généré, on lance la commande de crakage : Aircrack-ng WPA.cap-01.ivs -w dico.txt

Sujet non abordé

La partie sur FreeRadius n'a pas été réalisée.