Atelier SysRes SE4 2024/2025 E1

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

Projet Virtualisation Sarah DEPARIS - Machine Moon

L'objectif de ce projet est d'installer et configurer des machines virtuelles destinées à héberger des services sur un environnement Xen

Création des machines virtuelles

Les machines virtuelles sont créées sur le Dom0 capbreton.plil.info.

Pour la création des commutateurs virtuels du réseau routé de la promotion et des réseaux privés on a :

  • modifié le fichier /etc/network/interfaces du Dom0 pour décrire le commutateur du réseau routé.
Commutateur virtuel SE4

  • créé un fichier dans le répertoire /etc/network/interfaces.d du Dom0 pour créer notre pont.
bridge pontKS

Dans la VM cap breton, pour voir les ponts :

Ip l pontKS.png

Ensuite, nous avons pu commencé à créer nos 3 machines virtuelles sur Capbreton en utilisant la commande suivante :

root@capbreton:~# xen-create-image --hostname=SE4.Moon --dhcp --dir=/usr/local/xen --size=10G --dist=daedalus --memory=2G --bridge=pontKS
root@capbreton:~# xen-create-image --hostname=SE4.Solstice --dhcp --bridge=pontKS --dir=/usr/local/xen --size=10GB --dist=daedalus --memory=2048M --force

2 machines de services ( Moon et Apollo ) qui joueront un rôle clé dans l'hébergement des services, et 1 machine mandataire ( Solstice ) qui assurera la gestion du réseau et de l'interconnexion avec l'extérieur,

Architecture VM.png
  • Nom de la machine de service : SE4.Moon
  • Taille du disque : 10G

Configuration de la VM dans : /etc/network/interfaces

auto eth0
iface eth0 inet dhcp


XEN LIST

Affiche des informations sur les machines virtuelles (VM) qui sont actuellement gérées par Xen. Cette commande fournit des détails sur l'état de chaque machine virtuelle, comme : si elle est en cours d'exécution, son nom, son identifiant (ID), et d'autres informations.

root@capbreton:~# xen list
Name                                        ID   Mem VCPUs	State	Time(s)
Domain-0                                     0  3970     4     r-----   83423.2
SE4.Solstice                                39  2048     1     -b----    2560.1
SE4.Apollo                                 118  2048     1     -b----     462.7
SE4.Moon                                   119  2048     1     -b----     452.3

Liste des commandes utiles :

Fonction Commande
listes des VMs allumées xen list
Allumer la VM xen create /etc/xen/SE4.Moon.cfg
Connexion à la VM xen console SE4.Moon
Eteindre la VM xen shutdown SE4.Moon
Configuration du réseau Modification du fichier /etc/network/interfaces


Remarque :

Problème login : Ctrl + AltGr + ] => vi => :q! => reconnexion

Le mot de passe de la VM est dans /var/log/xen-tools/SE4.Moon.log

Pour changer le nom de la VM :

vi /etc/hostname

Configuration de la machine de services Moon

Création et Configuration de Partitions LVM pour le Montage de /var et /home sur la Machine Virtuelle

Création de partitions LVM pour /var et /home

Objectif : Afin de séparer les données utilisateur et applicatives du système principal, nous avons créé deux partitions LVM de 10G chacune, dédiées respectivement à /var et /home. Cette séparation facilite la gestion, la sauvegarde et la récupération des données en cas de problème

De plus, séparer /var et /home permet d’isoler les données utilisateur et applicatives du système principal, facilitant ainsi la gestion, la sauvegarde et la récupération des données en cas de problème.

Nous devons :

  • Modifier la configuration de la machine virtuelle pour monter ces partitions sous /var et /home.
  • Transférer les fichiers de /var avant de modifier le point de montage pour éviter la perte de données.
  • Mettre à jour /etc/fstab pour un montage automatique des partitions au démarrage.

Création des Fichiers de Partition


Depuis le serveur Capbreton, on a créé 2 fichiers de partitions dans /dev/virtual pour chaque machines de services pour Moon SE4.Moon.var et SE4.Moon.home :

root@capbreton:/dev/virtual# ls 
SE4.Apollo.var SE4.Apollo.home SE4.Moon.var SE4.Moon.home

Après la création de nos partitions, nous avons modifié le fichier /etc/xen/SE4.Moon.cfg de la VM sur capbreton pour y ajouter les deux répertoires.

disk = [ 'file:/usr/local/xen/domains/SE4.Moon/disk.img,xvda2,w',
         'file:/usr/local/xen/domains/SE4.Moon/swap.img,xvda1,w', 
         'phy:/dev/virtual/SE4.Moon.home,xvdb,w', 
         'phy:/dev/virtual/SE4.Moon.var,xvdc,w', ]
Création et formatage des partitions
mkfs -t ext4 /dev/xvdb  # Formatage de la partition pour /var 
mkfs -t ext4 /dev/xvdc  # Formatage de la partition pour /home
Préparer les partitions et déplacer les données :
  • Montage temporaire des partitions dans /mnt :

Pour pouvoir déplacer les données, nous avons du monter les nouvelles partitions LVM dans un répertoire temporaire /mnt. On a créé 2 partitions une pour /var et une /home sous les noms xvdb et xvdc dans /dev ,que l'on monte avec  :

mount /dev/xvdb /mnt 
mount /dev/xvdc /mnt
  • Déplacement des fichiers existants
mv /var/* /mnt  # Déplacement des fichiers de /var vers la nouvelle partition

Démonter les partitions temporaires :

Avant de configurer les montages permanents, on démonte les partitions des répertoires temporaires (/mnt)

umount /mnt      # Démontage après transfert des données
Modification du fichier /etc/fstab pour un montage automatique au démarrage :

On modifie le fichier /etc/fstab, qui contient la liste des partitions.

Ajout des nouvelles partitions LVM au fichier /etc/fstab :

  • /dev/xvdb /var ext4 defaults 0 2
  • /dev/xvdc /home ext4 defaults 0 2
# /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/xvdb /var ext4 defaults 0 2
/dev/xvdc /home ext4 defaults 0 2
Monter les partitions définies dans fstab :

Pour monter toutes les partitions définies dans le fichier /etc/fstab  :

mount -a  # Remontage des partitions définies dans fstab

Cette commande monte toutes les partitions qui ne sont pas encore montées et qui sont définies dans /etc/fstab

remet les données dans le fichier déplacer.


Puis, pour appliquer les changement nous avons redémarré la VM :

xen shutdown SE4.Moon
xen create /etc/xen/SE4.Moon.cfg
Vérification des partitions montées

Après avoir configuré le montage automatique et remonté les partitions, nous devons vérifier que les partitions sont correctement montées. Nous avons utilisé la commande df -h pour afficher l'espace disque utilisé et disponible sur les partitions montées.

Cela nous permet de confirmer que les partitions /var et /home sont correctement montées sur les répertoires associés et qu'il n'y a pas de problème d'espace disque.

root@Moon:~# df -h
Filesystem      Size  Used Avail Use% Mounted on
udev            973M     0  973M   0% /dev
tmpfs           199M  108K  199M   1% /run
/dev/xvda2      9.8G  673M  8.6G   8% /
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           500M     0  500M   0% /dev/shm
/dev/xvdb       9.8G  229M  9.1G   3% /var
/dev/xvdc       9.8G   24K  9.3G   1% /home

Résumé des Commandes Utilisées

Étape Commande
Création et formatage des partitions mkfs -t ext4 /dev/xvdb

mkfs -t ext4 /dev/xvdc

Montage temporaire des partitions mount /dev/xvdb /mnt

mount /dev/xvdc /mnt

Déplacement des données mv /var/* /mnt
Démontage après transfert umount /mnt
Ajout dans /etc/fstab Ajout des entrées pour /var et /home
Montage automatique des partitions mount -a
Vérification des partitions montées df -h
Configuration du réseau Modification du fichier /etc/network/interfacespour configurer IPv6 et IPv4

Configuration du Réseau

Tout d'abord nous avons dû modifier /etc/xen/SE4.Moon.cfg pour créer une interface eth1 sur le bridge de la promotion SE4

Dans la catégorie Networking, on retrouve une ligne vif à modifier.

Vif.png

Afin d’assurer une connectivité IPv6 stable et routée pour un accès direct à Internet, ainsi qu’une communication efficace avec la machine mandataire, nous avons modifié le fichier /etc/network/interfaces. De plus, une adresse IPv4 fixe a été attribuée sur le réseau privé afin de garantir une interaction optimale entre les machines de services et leur machine mandataire.

Mise à jour du fichier /etc/network/interfaces

# Interface loopback
auto lo
iface lo inet loopback

# Interface principale (eth0) - IPv4 statique + IPv6 automatique
auto eth0
iface eth0 inet static
    address 172.16.0.3
    netmask 255.255.255.0   # /24
    gateway 172.16.0.1      # @mandataire

iface eth0 inet6 auto  # Attribution automatique d'une IPv6

# Interface secondaire (eth1) - IPv6 automatique uniquement
auto eth1
iface eth1 inet6 auto

(remarque: on retire dhcp car probème avec ifup (erreur dhcp dicscover)) Pour appliquer les changements :

ifdown eth0 && ifup eth0
ifdown eth1 && ifup eth1

Cela désactive et réactive les interfaces sans redémarrer la machine. On peut également redémarrer le service réseau

systemctl restart networking

Pour obtenir les adresses ip route, ipv4, et ipv6 :

ip route show       #172.16.0.1/24
ip -4 addr show     #172.16.0.3/24
ip -6 addr show     #2001:660:4401:60a0:216:3eff:fe6f:f548/64

On peut maintenant ping nos machines entre elles ( Moon et Appollo )

root@Moon:~# ping 172.16.0.2        #@IPv4 de Apollo
PING 172.16.0.2 (172.16.0.2) 56(84) bytes of data.
64 bytes from 172.16.0.2: icmp_seq=1 ttl=64 time=0.132 ms
64 bytes from 172.16.0.2: icmp_seq=2 ttl=64 time=0.318 ms
64 bytes from 172.16.0.2: icmp_seq=3 ttl=64 time=0.369 ms
64 bytes from 172.16.0.2: icmp_seq=4 ttl=64 time=0.356 ms
--- 172.16.0.2 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3077ms
rtt min/avg/max/mdev = 0.132/0.293/0.369/0.095 ms
Installation des services essentiels

Pourquoi ?

  • SSH : Permet l’accès à distance sécurisé à la machine pour l’administration et la maintenance.
  • Apache2 (serveur Web) : Héberge des applications et sites web accessibles aux utilisateurs.
  • Bind (serveur DNS) : Assure la résolution de noms de domaine, essentielle pour le bon fonctionnement des services sur le réseau.

Installation des paquetages sur Moon :

Installations des paquetages.png
apt install -y openssh-server apache2 bind9

Détails des paquetages :

  • openssh-server → Serveur SSH pour permettre l'accès à distance sécurisé.
  • apache2 → Serveur Web Apache.
  • bind9 → Serveur DNS BIND.


Après l'installation :

Vérifiez si les services sont en cours d'exécution :

systemctl status ssh apache2 bind9

Activez et démarrez les services si nécessaire :

systemctl enable --now ssh apache2 bind9

Configuration de la machine mandataire

De la même manière nous avons dû modifier /etc/xen/SE4.Solstice.cfg pour créer une interface eth1 sur le bridge de la promotion SE4

Mise à jour du fichier /etc/network/interfaces
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

#Interface IPv4 priv   pour le r  seau interne (passerelle pour Apollo et M>auto eth0
iface eth0 inet static
        address 172.16.0.1/24

#Interface IPv4 rout  e pour l'acc  s Internet
auto eth1
iface eth1 inet static
        address 193.48.57.166/27
        gateway 193.48.57.161                   #passerelle routeur
#IPv6 automatique
iface eth1 inet6 auto

post-up nft -f /etc/nftables.conf

Pour appliquer les changements :

ifdown eth0 && ifup eth0
ifdown eth1 && ifup eth1

Cela désactive et réactive les interfaces sans redémarrer la machine. On peut également redémarrer le service réseau

systemctl restart networking
root@Solstice:~# ip a

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000

    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

    inet 127.0.0.1/8 scope host lo

       valid_lft forever preferred_lft forever

    inet6 ::1/128 scope host

       valid_lft forever preferred_lft forever

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000

    link/ether 00:16:3e:29:88:0e brd ff:ff:ff:ff:ff:ff

    inet 172.16.0.1/24 brd 172.16.0.255 scope global eth0

       valid_lft forever preferred_lft forever

    inet6 fe80::216:3eff:fe29:880e/64 scope link

       valid_lft forever preferred_lft forever

3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000

    link/ether 00:16:3e:29:88:0f brd ff:ff:ff:ff:ff:ff

    inet 193.48.57.166/27 brd 193.48.57.191 scope global eth1

       valid_lft forever preferred_lft forever

    inet6 2001:660:4401:60a0:216:3eff:fe29:880f/64 scope global dynamic mngtmpaddr

       valid_lft 987sec preferred_lft 887sec

    inet6 fe80::216:3eff:fe29:880f/64 scope link

       valid_lft forever preferred_lft forever


On peut maintenant ping Solstice avec les machines de services :

root@Solstice:~# ping 172.16.0.3
PING 172.16.0.3 (172.16.0.3) 56(84) bytes of data.
64 bytes from 172.16.0.3: icmp_seq=1 ttl=64 time=0.292 ms
64 bytes from 172.16.0.3: icmp_seq=2 ttl=64 time=0.480 ms
--- 172.16.0.3 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1005ms
rtt min/avg/max/mdev = 0.292/0.386/0.480/0.094 ms

Addresses IP

Nom machine services IPv4 privée machine services Nom de domaine Nom machine mandataire IPv4 privée et routée machine mandataire
SE4.Moon 172.16.0.3/24 moonrises.online SE4.Solstice privée (172.16.0.1/24)

routée (193.48.57.166/28)

Routeur en 193.48.57.161/28

Installation des paquetages sur Solstice :

De la même manière que pour Moon et Apollo on installe les paquetages :

apt install -y openssh-server apache2 bind9

Puis après l'installation on vérifie si les services sont en cours d'exécution :

systemctl status ssh apache2 bind9

Activez et démarrez les services si nécessaire :

systemctl enable --now ssh apache2 bind9

Configuration Cisco

Services Internet

Serveur SSH

Pour permettre l’accès SSH aux machines de services via Moon, nous avons mis en place des redirections de port. On a d'abord modifié le fichier d'autorisation ssh de root en modifiant le fichier suivant /etc/ssh/sshd_config :

PermitRootLogin yes

Il faut ensuite redémarrer le serveur ssh :

root@Solstice:/etc/ssh# /etc/init.d/ssh restart
Redirection des Ports sur les Machines de Services avec nftables

Sur Apollo et Moon, on a configuré nftables pour gérer la redirection SSH. On a redirigé le port 2201 vers Apollo et 2202 vers Moon.

nft add table ip nat
nft add chain ip nat PREROUTING { type nat hook prerouting priority 0 \; }
nft add rule ip nat PREROUTING tcp dport 2201 dnat to 172.16.0.2:22                 # @Apollo
nft add rule ip nat PREROUTING tcp dport 2202 dnat to 172.16.0.3:22                 # @Moon
nft add chain ip nat POSTROUTING { type nat hook postrouting priority 100 \; }
nft add rule ip nat POSTROUTING masquerade

Maintenant, on peux se connecter en SSH à Apollo et Moon via Solstice sans problème, même après un reboot des machines.

ssh root@193.48.57.166 -p 2201      # @Apollo
ssh root@193.48.57.166 -p 2202      # @Moon

Mise en Place d’un Serveur DNS

Nous avons configuré un serveur DNS pour gérer les noms de domaine de nos machines virtuelles : apollo-exploration.online et moonrises.online.

La première étape était d'acquérir les noms de domaine pour Apollo et Moon sur Gandi. La seconde étape était d'acquerir les certificats.

Après avoir suivi le tutoriel, nous obtenons deux fichiers : myserver.key (la clé privée) et server.csr (la demande de certificat). Ces fichiers nous permettrons de configurer DNSSEC et sécuriser la zone DNS.

Configuration bind9

Configuration du Serveur DNS Maître et Secondaire

Pour pouvoir accéder aux serveur DNS que l'on va configurer plus tard, nous devons mettre à jour le fichier etc/resolv.conf

root@Moon:~# cat /etc/resolv.conf
moonrises.online
nameserver 172.16.0.3
nameserver 172.16.0.2

search moonrises.online
nameserver 172.16.0.3
nameserver 172.16.0.2

Sur Moon, nous avons configuré les zones DNS dans /etc/bind/named.conf.local :

//include "/etc/bind/zones.rfc1918";

zone "moonrises.online" {
        type master;
        file "/etc/bind/db.moonrises.online";
        key-directory "/etc/bind/keys";
        dnssec-policy "dnspol";
        inline-signing yes;
        allow-transfer{secondaries;}; //on filtre les secondaires
        also-notify{hiddensecondaries;}; // secondaires caches
        notify yes;
};

acl "secondaries" {
        2001:660:4401:60a0:216:3eff:fe3c:33a5;      #Apollo
        2001:660:4401:60a0:216:3eff:fe29:880f;      #Solstice
};

masters "hiddensecondaries" {
        2001:660:4401:60a0:216:3eff:fe29:880f;      #Solstice
};

zone "apollo-exploration.online" {
        type slave;
        file "/etc/bind/backup/db.apollo-exploration.online";
        masters{2001:660:4401:60a0:216:3eff:fe3c:33a5;};    #Apollo
};

La machine Moon est le serveur DNS principal, tandis que Apollo sert de DNS secondaire et récupère la zone depuis Moon.


Puis on créer le fichier de zone pour le domaine : /etc/bind/db.moonrises.online

Après des modifications on a du augmenter le numéro de série dans le fichier /etc/bind/db.moonrises.online

$TTL 200
@ IN SOA ns1.moonrises.online. admin.moonrises.online. (
        3298267246      ;Version
        7200            ;Refresh
        3600            ;Retry
        1209600         ;Expire
        259200 )        ;Minimum TTL

;
        IN      NS      ns1.moonrises.online.
        IN      NS      ns2.apollo-exploration.online.
ns1     IN      AAAA    2001:660:4401:60a0:216:3eff:fe6f:f548
ns1     IN      A       193.48.57.166
matrix  IN      A       195.101.204.154
@       IN      A       193.48.57.166
@       IN      AAAA    2001:660:4401:60a0:216:3eff:fe6f:f548

Pour charger la version du fichier de zone, on tape la commande "named-checkzone moonrises.online /etc/bind/db.moonrises.online " en étant dans le répertoire /etc/bind

root@Moon:/etc/bind# named-checkzone moonrises.online /etc/bind/db.moonrises.online
zone moonrises.online/IN: loaded serial 3298267246
OK

Activation et Tests du serveur DNS

On a redémarré bind9

systemctl restart named
systemctl enable named

On a autorisé les utilisateurs bind à accéder aux fichiers de zone et de config :

chown bind:bind /etc/bind/db.moonrises.online
chmod 644 /etc/bind/zones/db.moonrises.online
chown bind:bind /etc/bind/named.conf.local
chmod 644 /etc/bind/named.conf.local

Puis on a effectué un premier test DNS avec dig :

dig @localhost moonrises.online
dig @localhost apollo-exploration.online
Dig moon.png

Publication du DNS

Afin de rendre le serveur DNS opérationnel et accessible, on fait les configurations necessaire sur le site du registrar Gandi .

Dans l’onglet "Nameserver" de Moon domaine, on ajoute un "Glue Record", qui permet d’associer directement mon nom de domaine à mes propres serveurs DNS. Pour cela, on a rajouté les adresses IPv4 (celle de la machine mandataire) et IPv6 (celles des machines de service).

Ensuite, on a remplacé les Nameservers actuels par ceux de mon propre serveur, afin qu'il devienne le référent pour la résolution des noms de domaine associés. De même sur Apollo.

Le serveur répond correctement aux requêtes sur les deux machines.

Nameserver et Glue records pour Moon.png

Après quelques heures, le temps que la propagation DNS s'effectue, je vérifie la bonne prise en compte de ces changements sur le site DNS Checker. Celui-ci me permet de confirmer que mon serveur DNS est bien propagé (vérifier la disponibilité des enregistrements A et AAAA) à l’échelle mondiale, en affichant les adresses IP correspondantes lors d’une requête sur apollo-exploration.online et moonrises.online.