Atelier SysRes SE4 2025/2026 E1

De wiki-se.plil.fr
Aller à la navigation Aller à la recherche

CRÉATION MACHINES VIRTUELLES

Il faut d'abord crée un "bridge" sur capbreton pour relier nos 3 machines virtuelles ensemble. Un "bridge" n'a rien de complexe, c'est un commutateur mais virtuel. C'est comme un commutateur physique avec des ports ethernet pour relier des machines ensemble mais il n'existe pas dans le monde physique seulement sur nos ordinateurs et VM. Pour cela, nous créons notre pont sur capbreton le commutateur/routeur dans la E304. Nous le faisons dans ce chemin : /etc/network/interfaces.d/SE42026_pcasimir_ahoudus

Veuillez faire en sorte de ne PAS modifier le fichier le fichier /etc/network/interfaces car c'est le fichier qui permet de configurer la connectivité de capbreton lui-même.

auto pont_Gercourt                                                                                                                                                      
iface pont_Gercourt inet manual                                                                                                                                         
        bridge_ports none                                                                                                                                               
        up ip link set $IFACE up                                                                                                                                        
        down ip link set $IFACE down

Ensuite, nous devons initialiser nos MV de services grâce à l'outil hyperviseur Xen.

Un hyperviseur, c’est le logiciel qui permet de faire tourner plusieurs “ordinateurs virtuels” (VM) sur un seul ordinateur physique.

Au lieu d’avoir 1 machine = 1 OS, tu as 1 machine physique = plusieurs OS (Linux, OpenWRT, Windows…) qui tournent en parallèle, chacun dans sa VM.

Un hyperviseur est “entre” le matériel et les VM, et il s’occupe de partager proprement :

  • CPU : qui a le droit d’exécuter quand (ordonnancement)
  • RAM : qui a droit à quelle mémoire (isolation, allocation)
  • Disques : chaque VM a “son disque” (souvent un fichier .img, LVM, etc.)
  • Réseau : chaque VM a une carte réseau virtuelle, connectée à un switch/bridge virtuel
  • Isolation/Sécurité : une VM ne doit pas pouvoir casser les autres.

Xen, c’est un hyperviseur “bare-metal” très utilisé historiquement en serveur/cloud.

Dans Xen, toutes les VM sont des domains.

  • Dom0 (Domain 0) : la VM “chef” (privilégiée)
    • c’est elle qui a les drivers matériels
    • c’est elle qui crée / détruit / configure les autres VM
    • elle gère souvent le réseau (bridges/VLAN) et le stockage
  • DomU : les VM “normales” (invitées)
    • elles ont des périphériques virtuels
    • elles passent souvent par Dom0 pour accéder au hardware

Petit schéma mental :

         Matériel (CPU/RAM/NIC/Disques)
                    │
                   Xen
                    │
        ┌───────────┴───────────┐
        │                       │
      Dom0                 Dom1, Dom2, Dom3...
 (admin + drivers)      (VM Linux / OpenWRT / etc.)

Il leur faut plusieurs paramètres pour fonctionner selon nos critères.

root@capbreton:~# xen-create-image --hostname=SE4.Merteuil --dhcp --bridge=pont_Gercourt --dir=/usr/local/xen --size=10GB --dist=daedalus --memory=2048M --force
  • xen-create-image : Commande permettant de créer une nouvelle machine virtuelle Xen
  • --hostname=SE4.Merteuil : Spécifie le nom d'hôte de la nouvelle MV créée. Ici, le nom d'hôte sera SE4.Atreus.
  • --dhcp : Indique que la MV obtiendra automatiquement une adresse IP via DHCP. Aucune configuration statique d'adresse IP ne sera nécessaire. Vous devriez quand même configuré votre /etc/network/interface dans votre VM pour qu'elle ait une adresse IPv4 sur votre commutateur virtuel/bridge.
  • --bridge=bifrost : Précise l'utilisation du pont réseau nommé bifrost pour connecter la machine virtuelle au réseau physique ou virtuel existant. Ceci permet une connexion directe de la VM au réseau.
  • --dir=/usr/local/xen : Définit le répertoire dans lequel seront stockées les images disque et les fichiers associés de la MV. Ici, l'image sera placée dans le dossier /usr/local/xen.
  • --size=10GB : Détermine la taille du disque virtuel pour cette MV. Dans cet exemple, le disque fera 10 Go.
  • --dist=daedalus : Indique la distribution du système d'exploitation à utiliser pour la MV. Ici, la distribution choisie s'appelle daedalus pour Debian.
  • --memory=2048M : Détermine la quantité de mémoire vive (RAM) allouée à la MV. Dans cet exemple, la MV aura 2048 Mo (soit 2 Go) de RAM.

Volumes Logiques

Dans notre infra, on ne met pas tout le système d’une VM sur un seul “disque” géant. On sépare certains répertoires dans des volumes logiques (LVM) dédiés, notamment :

  • /home : dossiers utilisateurs (fichiers perso, configs, projets, clés SSH…)
  • /var : données qui bougent beaucoup (logs, cache, bases de données, spool, etc.)


Cette séparation a plusieurs avantages très concrets :

  • Meilleure gestion de l’espace disque : tu peux dimensionner /var et /home indépendamment (et agrandir si besoin).
  • Moins de risques : si /var explose (logs qui partent en vrille, cache énorme…), ça évite de remplir tout le disque système et de “tuer” la VM.
  • Maintenance plus simple : sauvegarde/restauration ciblée (ex : sauvegarder /home sans prendre tout le système).
  • Organisation propre : chaque VM a ses volumes clairement identifiés.

Pour chaque VM, on crée deux volumes logiques de 10 Go :

lvcreate -L 10G -n SE4.<NomDeVM>.home virtual
lvcreate -L 10G -n SE4.<NomDeVM>.var virtual
  • lvcreate : commande qui crée un volume logique
  • -L 10G : taille du volume (ici 10 Go)
  • -n <nom> : nom du volume logique (d’où le SE4.<NomDeVM>.home)
  • virtual : le Volume Group dans lequel on crée le volume

Ces volumes seront ensuite attachés à la VM comme des disques (ou partitions virtuelles), puis formatés et montés dans la VM :

  • le volume .home sera monté sur /home
  • le volume .var sera monté sur /var

Fichier de configuration Xen

0) Éditer le fichier de configuration Xen de la VM (réseau + disques)

Après avoir généré une VM avec xen-create-image, un fichier de configuration est créé pour cette VM (souvent un .cfg).

C’est ce fichier qui dit à Xen :

  • quels disques (images, volumes LVM…) la VM utilise
  • combien de RAM/vCPU
  • et surtout quelles interfaces réseau virtuelles (VIF) elle a, et sur quels bridges elles sont branchées
root        = '/dev/xvda2 ro'
disk        = [
                  'file:/usr/local/xen/domains/SE4.Merteuil/disk.img,xvda2,w',
                  'file:/usr/local/xen/domains/SE4.Merteuil/swap.img,xvda1,w',
		          'phy:/dev/virtual/SE4.Merteuil.home,xvda3,w',
		          'phy:/dev/virtual/SE4.Merteuil.var,xvdb1,w',
              ]
              
#                                                                                                                                                                       
#  Hostname                                                                                                                                                             
#                                                                                                                                                                       
name        = 'SE4.Merteuil'                                                                                                                                            
                                                                                                                                                                        
#                                                                                                                                                                       
#  Networking                                                                                                                                                           
#                                                                                                                                                                       
dhcp        = 'dhcp'                                                                                                                                                    
vif         = [ 'mac=00:16:3E:47:BB:E8,bridge=pont_Gercourt' ,                                                                                                          
                'mac=00:16:3E:47:BB:E7,bridge=SE4' ]

1) Les VIF : cartes réseau virtuelles de la VM

Une VIF (Virtual Interface), c’est tout simplement une carte réseau virtuelle vue par la VM.

Dans la VM, elle apparaîtra comme une interface réseau (genre eth0, eth1, etc., selon l’OS).

Différence avec une machine physique

Sur un PC “réel”, tu es limité :

  • par le nombre de ports Ethernet / cartes réseau dispo physiquement

Dans une VM, pas ce souci :

  • tu peux ajouter autant de VIF que tu veux en théorie
  • en pratique : tu restes limité par la perf + la complexité de ton archi réseau (mais c’est déjà énorme)

2) Ce qu’on veut dans le TP : 2 cartes réseau

Dans le cadre du TP, on te demande 2 VIF :

VIF 1 : réseau interne de ton groupe (bridge du “switch” virtuel)

  • branchée sur le bridge qui relie tes 3 machines (tes VM du groupe)
  • ici : pont_Gercourt

Objectif : que tes VMs communiquent entre elles comme si elles étaient branchées sur le même switch.

VIF 2 : réseau “école / Internet / infra”

  • branchée sur le bridge qui donne l’accès au reste de l’infra + Internet
  • ici : SE4 (bridge officiel du TP)

Objectif : accès Internet + accès au reste de l’infra (routeurs, services, etc.)

Mode “secours” : bridgeStudents

Tant que le bridge SE4 n’est pas encore “brassé” correctement (câblage + routeurs Cisco + etc.), tu peux utiliser :

  • bridgeStudents

Ça te donne déjà :

  • Internet
  • de quoi avancer sur une grosse partie du TP

⚠️ Mais à la fin, pour la note max :

Vous devez faire le brassage / branchement réel des commutateurs en E304 / E306 / E200, et configurer la partie Cisco reliée au bridge SE4.

3) Exemple de section réseau dans le .cfg

# Networking
dhcp = 'dhcp'
vif  = [
  'mac=00:16:3E:47:BB:E8,bridge=pont_Gercourt',
  'mac=00:16:3E:47:BB:E7,bridge=SE4'
]
Comment lire ça ?
  • vif = [...] : liste des cartes réseau virtuelles
  • chaque ligne décrit une VIF
  • mac=... : la MAC address que la VM utilisera (utile pour DHCP, filtrage, repérage)
  • bridge=... : le bridge Xen/Linux sur lequel tu connectes cette VIF

c’est littéralement “sur quel switch virtuel tu branches le câble”

4) Lien avec xen-create-image (ce que tu retrouves dans le cfg)

xen-create-image --hostname=SE4.Merteuil --dhcp --bridge=pont_Gercourt \
  --dir=/usr/local/xen --size=10GB --dist=daedalus --memory=2048M --force

Elle fait plusieurs trucs automatiquement :

  • crée le disque système (disk.img) + swap (swap.img)
  • configure le hostname
  • met une config réseau DHCP
  • et ajoute 1 bridge par défaut (pont_Gercourt)

Mais elle ne connaît pas forcément ta future archi avec /home et /var séparés, ni le second bridge (SE4).

Donc tu complètes à la main dans le .cfg.

5) Ajouter tes volumes logiques /home et /var dans disk = [...]

Dans ton fichier config, tu as une section :

disk = [

'file:/usr/local/xen/domains/SE4.Merteuil/disk.img,xvda2,w',

'file:/usr/local/xen/domains/SE4.Merteuil/swap.img,xvda1,w',

]


Comprendre file: vs phy:

  • file: → disque = fichier image (un .img)
  • phy: → disque = vrai block device côté hôte (ex : volume LVM dans /dev/virtual/...)

Donc pour brancher tes volumes logiques LVM, tu ajoutes :

'phy:/dev/virtual/SE4.Merteuil.home,xvda3,w',
'phy:/dev/virtual/SE4.Merteuil.var,xvdb1,w',

Ce qui donne :

disk = [
  'file:/usr/local/xen/domains/SE4.Merteuil/disk.img,xvda2,w',
  'file:/usr/local/xen/domains/SE4.Merteuil/swap.img,xvda1,w',
  'phy:/dev/virtual/SE4.Merteuil.home,xvda3,w',
  'phy:/dev/virtual/SE4.Merteuil.var,xvdb1,w',
]

6) C’est quoi xvda3 / xvdb1 exactement ?

C’est juste le nom du disque vu par la VM.

  • xvda = “disque A virtuel”
  • xvdb = “disque B virtuel”
  • xvda3 = “partition 3 du disque A” (façon de parler : c’est l’identifiant donné à Xen)

Ce qui compte vraiment

✅ Que chaque “source” (file/phy) ait un identifiant unique côté VM.

Le choix xvda3 vs xvdb1 n’a rien de magique : c’est juste une convention.

Petit conseil pratique (propre et simple)

  • garde tout sur xvda1, xvda2, xvda3, xvda4… (ça évite de te perdre)
  • ou alors fais :
    • xvda... pour OS + swap
    • xvdb pour home
    • xvdc pour var (plus lisible quand tu en as beaucoup)

Les deux se font. L’important, c’est d’être cohérent.

7) Le w à la fin : super important

À la fin de chaque ligne de disque, tu as :

  • w = write (lecture + écriture)
  • r = read-only (lecture seule)

Donc si tu oublies le w sur un volume /home ou /var, tu vas vite te retrouver avec :

  • des erreurs d’écriture
  • ou un système qui refuse de monter le FS correctement Pour des volumes de données, c’est toujours w.

Montage des partitions et fichier "fstab"

Très important : ça se fait dans la VM, pas sur capbreton

Les commandes mkfs, mount, mv sont à exécuter dans la VM (le DomU).

  • Sur capbreton (Dom0 / hôte Xen), ne touche jamais à /var : c’est le cœur des services (logs, state, packages, etc.). Si tu déplaces /var sur le host, tu peux casser l’infra du TP (et potentiellement les autres VMs / services).
  • Sur capbreton, ton job c’est créer les volumes LVM et les attacher à la VM dans le .cfg. Point.

Rappel : c’est quoi /var exactement ?

/var = “variable data”, donc tout ce qui change souvent et peut grossir vite.

Typiquement :

  • /var/log : logs (ça peut exploser si un service spam)
  • /var/lib : données applicatives (ex: bases de données, états de services)
  • /var/cache : caches (apt, etc.)
  • /var/tmp : fichiers temporaires “longue durée”
  • /var/spool : files d’attente (mail, cron, impressions…)

Pourquoi on le met sur un volume dédié : si /var se remplit, tu évites de remplir / et de rendre la VM inutilisable.

mkfs -t ext4 /dev/xvdb1
mount /dev/xvdb1 /mnt
mv /var/* /mnt
umount /mnt
mkfs -t ext4 /dev/xvda3
mount -a

Explication rapide des commandes

  • mkfs -t ext4 /dev/xvdb1 : formatage → crée un système de fichiers ext4 sur le disque. ⚠️ Ça efface ce qu’il y avait dessus.
  • mount <device> <dossier> : “branche” le système de fichiers sur un dossier.
  • umount <dossier> : “débranche”.
  • mount -a : monte tout ce qui est dans /etc/fstab
  • mv : déplace. Sur /var, c’est risqué parce que des fichiers peuvent être utilisés en live.


DÉMARRAGE AUTOMATIQUE DU MONTAGE

Fichier fstab
Fichier fstab

CONFIGURATION RÉSEAU DE NOS VM

Rappel du schéma et du rôle des machines

Dans l’infra, on a deux “mondes” réseau en parallèle :

  • Un réseau IPv4 privé (non routable sur Internet) : utilisé pour l’interconnexion interne et la sortie Internet via NAT.
  • Un réseau IPv6 public : utilisé pour rendre les VM accessibles directement depuis l’extérieur (et accéder à Internet en IPv6 sans NAT).

VM de service (serveurs)

  • IPv4 privé : pour sortir sur Internet via le mandataire (NAT/Masquerade).
  • IPv6 public : pour être joignable directement (pas de NAT).

VM mandataire (gateway)

  • Reliée au réseau privé IPv4 : côté interne
  • Reliée au réseau public : côté infra école + Internet.
  • Fait l’interconnexion (routage + NAT + redirections de ports si besoin).


Configuration réseau de la VM de service

Ton /etc/network/interfaces (service)

Cassage de clé WIFI

WEP

Sur un 1 terminal :

sudo airodump-ng wlan1 --write crackage_pcasimir/pcasimir --bssid 04:DA:D2:9C:50:50 -c4

Il faut laisser tourner le programme pendant un moment pour capturer un maximum d'IVs (environ 50*10³)

Ce que l'on voit :

CH  4 ][ Elapsed: 40 mins ][ 2026-02-10 16:07 ][ paused output

BSSID              PWR RXQ  Beacons    #Data, #/s  CH   MB   ENC CIPHER  AUTH ESSID

04:DA:D2:9C:50:50  -64   0    10771    48468   31   4   54e. WEP  WEP         cracotte01    

BSSID              STATION            PWR    Rate    Lost   Frames  Notes  Probes

04:DA:D2:9C:50:50  40:A5:EF:01:21:80  -73    0 -36e   621    58224  

sur 2ème terminal :

Une fois qu'on a 50*10³ IV on fait :

sudo aircrack-ng -a1 -b 04:DA:D2:9C:50:50 crackage_pcasimir/pcasimir-01.cap -s


Résultat :

  KB    depth   byte(vote)

   0    12   B5(55552) 84(53504) 2B(52992) 2F(52480) A0(52480) BA(52224) 

   1    05   49(66304) E8(55552) 20(55296) 65(55296) 73(55296) 5F(53760) 

   2   412   E1(48640) 0E(48384) 3D(48384) 63(48384) 6C(48384) 9C(48384) 

   3    43   B3(53248) 7B(52992) 95(52992) 31(52736) 12(52224) FF(52224) 

   4    12   21(55552) 17(52480) 26(52224) B5(52224) 16(51968) C0(51712) 

            KEY FOUND! [ FF:FF:FF:FF:FA:BC:02:CB:AE:EE:EE:EE:EE ] 

   Decrypted correctly: 100%

WPA2-PSK

pcasimir@zabeth13:~$ sudo airodump-ng wlan1 --write crackage_pcasimir/airodumpWPA --bssid 44:AD:D9:5F:87:00 -c13

CH 13 ][ Elapsed: 1 hour 44 mins ][ 2026-02-10 18:41 ][ fixed channel wlan1: 4 

BSSID              PWR RXQ  Beacons    #Data, #/s  CH   MB   ENC CIPHER  AUTH ESSID

44:AD:D9:5F:87:00  -58   0    28293      508    0  13   54e. WPA2 CCMP   PSK  kracotte01    

BSSID              STATION            PWR    Rate    Lost   Frames  Notes  Probes
pcasimir@zabeth13:~$ sudo aircrack-ng -a2 -b 44:AD:D9:5F:87:00 -w crackage_pcasimir/dico.txt crackage_pcasimir/airodumpWPA-01.cap

Aircrack-ng 1.7 

     [00:55:43] 66515032/100000000 keys tested (19870.44 k/s) 

     Time left: 28 minutes, 5 seconds                          66.52%

                          KEY FOUND! [ 66689666 ]

     Master Key     : 3C A8 6A 6B 80 C3 36 12 EC D6 36 89 9F E3 F6 BC 

                      D6 B2 24 8A 49 B4 9C 2A A3 6F 3E A0 96 15 8B F5 

     Transient Key  : A0 53 57 7D 4B 67 FB 00 00 00 00 00 00 00 00 00 

                      00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 

                      00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 

                      00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 

     EAPOL HMAC     : 52 DE 19 6D B0 E3 3B 2C 1A DA D3 F2 66 39 F2 DD