« Atelier SysRes SE4 2024/2025 E5 » : différence entre les versions

De wiki-se.plil.fr
Aller à la navigation Aller à la recherche
Aucun résumé des modifications
(Annulation des modifications 9282 de Kelbachi (discussion))
Balise : Annulation
Ligne 1 : Ligne 1 :
== <span style="color:#2C3E50; font-size: 22px;">Projet Virtualisation KAOUTAR EL BACHIRI - Machine Apollo 🚀</span> ==
= Projet Virtualisation KAOUTAR EL BACHIRI - Machine Apollo 🚀 =


=== <span style="color:#34495E;">Introduction</span> ===
=== <span style="color:#34495E;">Introduction</span> ===


Dans ce projet de virtualisation, j'ai mis en place une infrastructure comprenant **deux machines de services** et **une machine mandataire**, le tout orchestré avec **Xen**. La machine **Apollo** joue un rôle clé dans l'hébergement des services, tandis que **Solstice** assure la gestion du réseau et l'interconnexion avec l'extérieur.   
Dans ce projet de virtualisation, j'ai mis en place une infrastructure comprenant '''deux machines de services''' et '''une''' '''machine mandataire''', le tout orchestré avec '''Xen'''. La machine '''Apollo''' joue un rôle clé dans l'hébergement des services, tandis que '''Solstice''' assure la gestion du réseau et l'interconnexion avec l'extérieur.   


Si vous souhaitez plonger plus en détail dans la configuration de **Moon**, la seconde machine de services, cliquez sur le lien suivant : 📎 [[Atelier SysRes SE4 2024/2025 E1|Moon]].   
Si vous souhaitez plonger plus en détail dans la configuration de '''Moon''', la seconde machine de services, il vous suffit de cliquant sur le lien suivant : 📎 [[Atelier SysRes SE4 2024/2025 E1|Moon]].   


''Les prochaines sections vous guideront à travers chaque étape de cette mission.'' 🛰️
''Les prochaines sections vous guideront à travers chaque étape de cette mission.'' 🛰️


---
=== Création et Connexion aux Machines Virtuelles ===


=== <span style="color:#34495E;">Création et Connexion aux Machines Virtuelles</span> ===
Dans ce projet, j'ai créé deux machines de services et une machine mandataire à l'aide de l'outil Xen. Les commandes utilisées sont les suivantes :
 
Dans ce projet, j'ai créé deux machines de services et une machine mandataire à l'aide de l'outil **Xen**. Les commandes utilisées sont les suivantes :


<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
Ligne 20 : Ligne 18 :
</syntaxhighlight>
</syntaxhighlight>


Pour démarrer les machines :
Pour démarrer les machines, j'ai utilisé :


<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
Ligne 32 : Ligne 30 :
xen console SE4.Apollo
xen console SE4.Apollo
xen console SE4.Solstice
xen console SE4.Solstice
</syntaxhighlight>
</syntaxhighlight>  


---
<syntaxhighlight lang="bash">
root@capbreton:~# xen list
Name                                        ID  Mem VCPUs State Time(s)
Domain-0                                    0  3970    4    r-----  83423.2
SE4.Zeus                                    15  2048    1    -b----    3778.8
SE4.Pattes                                  16  2048    1    -b----    2954.3
SE4.Vander                                  18  2048    1    -b----    2659.5
SE4.Solstice                                39  2048    1    -b----    2560.1
SE4.Jinx                                    48  2048    1    -b----    1043.3
SE4.jeanluc                                62  2048    1    -b----    728.4
SE4.ElMordjene                              68  2048    1    -b----    868.4
SE4.Poseidon                                82  2048    1    -b----    1334.2
SE4.Gaby                                    89  2048    1    -b----    704.1
SE4.Bree                                    90  2048    1    -b----    547.6
SE4.Desperate                              99  2048    1    -b----    3969.9
SE4.Orion                                  100  2048    1    -b----    906.5
SE4.Vi                                    109  2048    1    -b----    903.6
SE4.Rod                                    110  2048    1    -b----    1339.9
SE4.Rodrigo                                112  2048    1    -b----    2388.2
SE4.Rigo                                  113  2048    1    -b----    1390.1
SE4.Apollo                                118  2048    1    -b----    462.7
SE4.Moon                                  119  2048    1    -b----    452.3
</syntaxhighlight>'''''<u>Liste des commandes utiles :</u>'''''
{| class="wikitable"
! Fonction
! Commande
|-
|'''listes des VMs allumées'''
|<code>xen list</code>
|-
|'''Allumer la VM'''
|<code>xen create /etc/xen/SE4.Apollo.cfg</code>
|-
| '''Connexion à la VM'''
|<code>xen console SE4.Apollo</code>
|-
|'''Eteindre la VM'''
|<code>xen shutdown SE4.Apollo</code>
|}
=== Montage des Partitions /var et /home sur Apollo ===


=== <span style="color:#34495E;">Montage des Partitions /var et /home sur Apollo</span> ===
Pour améliorer la gestion des données, j'ai monté les répertoires <code>/var</code> et <code>/home</code> sur des partitions LVM dédiées.


Pour améliorer la gestion des données, j'ai monté les répertoires **/var** et **/home** sur des partitions LVM dédiées.
==== Création des Fichiers de Partition ====


#### **Création des Fichiers de Partition**
Depuis le serveur Capbreton, j'ai créé les fichiers de partitions dans <code>/dev/virtual</code> :
Depuis le serveur Capbreton, j'ai créé les fichiers de partitions dans **/dev/virtual** :


<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
Ligne 48 : Ligne 84 :
</syntaxhighlight>
</syntaxhighlight>


#### **Modification des Fichiers de Configuration**
==== Modification des Fichiers de Configuration ====
J'ai modifié les fichiers **.cfg** pour attacher les partitions LVM aux machines :
 
J'ai modifié les fichiers <code>.cfg</code> pour attacher les partitions LVM aux machines :


<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
Ligne 62 : Ligne 99 :
Une configuration similaire a été appliquée à [[Atelier SysRes SE4 2024/2025 E1|Moon]].
Une configuration similaire a été appliquée à [[Atelier SysRes SE4 2024/2025 E1|Moon]].


---
==== Formatage et Montage ====
 
Les partitions ont été formatées et montées avec les commandes suivantes :
 
<syntaxhighlight lang="bash">
mkfs -t ext4 /dev/xvdb1
mount /dev/xvdb1 /mnt
mv /var/* /mnt
umount /mnt
mount -a
</syntaxhighlight>
 
Pour <code>/home</code> :
 
<syntaxhighlight lang="bash">
mkfs -t ext4 /dev/xvdb
mount -a
</syntaxhighlight>
 
Enfin, j'ai modifié le fichier <code>/etc/fstab</code> pour un montage automatique au démarrage:
 
<syntaxhighlight lang="bash">
/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
root@Apollo:~# vim /etc/fstab
 
</syntaxhighlight>Après cela pour confirmer le tout, je redemarre la machine :<syntaxhighlight lang="bash">
xen shutdown SE4.Apollo
</syntaxhighlight>


=== <span style="color:#34495E;">Configuration Réseau</span> ===
=== Configuration Réseau ===


Chaque machine a été configurée avec des adresses IPv4 fixes sur un réseau privé et une configuration automatique pour IPv6.
Chaque machine a été configurée avec des adresses IPv4 fixes sur un réseau privé et une configuration automatique pour IPv6.


#### **Machines de Services (Apollo et Moon)**
==== Machines de Services (Apollo et Moon) ====
Exemple de configuration dans **/etc/network/interfaces** pour Apollo :
 
Exemple de configuration dans <code>/etc/network/interfaces</code> pour Apollo :


<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
Ligne 80 : Ligne 148 :
</syntaxhighlight>
</syntaxhighlight>


Moon utilise une configuration similaire avec l’adresse **172.16.0.3**.
[[Atelier SysRes SE4 2024/2025 E1|Moon]] utilise une configuration similaire avec l’adresse <code>172.16.0.3</code>.
 
==== Machine Mandataire (Solstice) ====


#### **Machine Mandataire (Solstice)**
La machine mandataire agit comme passerelle IPv4 pour les machines de services. Voici sa configuration réseau :
Solstice agit comme passerelle IPv4 pour les machines de services :


<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
Ligne 98 : Ligne 167 :
</syntaxhighlight>
</syntaxhighlight>


---
=== Séance Improvisée du 4 Février ===
Avec les personnes présentes lors de cette séance, nous avons configuré le routeur pour y ajouter une option pour le mode OSPF. J'ai donc pu suivre les étapes.
 
==== Configuration des VLANs ====
 
Pendant cette séance, nous avons configuré plusieurs VLANs nécessaires à l'interconnexion des machines et au respect des contraintes du TP :
 
- <code>VLAN 1</code> : Service.
 
- <code>VLAN 50</code> : Machines Xen.
 
- <code>VLAN X</code> : Réseaux privés (1 par étudiant).
 
- <code>VLAN 530</code> : Connexion au SR52 pour l'accès à Internet.
 
Les adresses de réseau utilisées, sont des adresses privées en <code>10.0.0.0</code> que nous avons adapté : <code>10.0.100+Numero.0/24</code> pour chaque machine de service, soit chaque étudiant.
 
==== Configuration SSH ====
 
Nous avons restreint l'accès SSH au routeur en autorisant uniquement les machines du réseau via une access-list. Voici les commandes utilisées :
 
<syntaxhighlight lang="bash">
ip access-list standard 10
10 permit 193.48.57.160 0.0.0.15
20 deny any
 
line vty 0 4
access-class 10 in
password <mot_de_passe_de_promo>
transport input ssh
</syntaxhighlight>
 
La connexion SSH se fait avec :
 
<syntaxhighlight lang="bash">
ssh admin@193.48.57.161 -o KexAlgorithms=diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1 -o HostKeyAlgorithms=ssh-rsa
</syntaxhighlight>Pour tester le ssh nous avons utiliser la commande touch fichier pour créer un fichier sur la machine mandataire depuis la machine d'un autre binôme. Il reste tout de même les redirection de ports a faire pour les machines.
 
==== Configuration du Routeur avec OSPF ====
 
Le protocole OSPF a été configuré pour partager les tables de routage avec le SR52. Voici un extrait de la configuration :
 
<syntaxhighlight lang="bash">
router ospf 1
router-id 10.0.101.1
summary-address 193.48.57.160 255.255.255.240
redistribute static route-map ospf
redistribute connected
network 193.48.57.160 0.0.0.15 area 10
default-information originate
</syntaxhighlight>
 
Les routes OSPF sont bien détectées, comme visible dans les résultats de <code>show ip route</code>.
 
==== Connexion Internet ====
 
Avec OSPF actif, la machine mandataire peut accéder à Internet. Voici le test de ping :
[[Fichier:Image ping apollo et moon.png|centré|vignette|979x979px|Ping sur Apollo et Moon]]
 
==== Redirection de Port et Persistance des Règles ====
Pour permettre l’accès SSH aux machines de services via '''Solstice''', j’ai mis en place des '''redirections de port'''.
J'ai d'abord modifié le fichier d'autorisation ssh de <code>root</code> en modifiant le fichier suivant <code>/etc/ssh/sshd_config</code> :
PermitRootLogin yes
Il faut ensuite redémarrer le serveur ssh :
root@Solstice:/etc/ssh# /etc/init.d/ssh restart
Cependant, j’ai rencontré un problème : les règles nftables sur les machines de services n’étaient pas persistantes, ce qui empêchait l’accès SSH après un redémarrage.
 
====== Redirection des Ports sur Solstice avec iptables ======
À l'origine, j'avais configuré '''iptables''' pour rediriger le trafic SSH vers '''Apollo''' '''et''' '''Moon''', mais en voulant modifier les règles, je n’arrivais plus à appliquer correctement '''nftables''' sur Solstice.
 
La solution était de revenir à iptables pour Solstice. En effet Solstice avait garder par défaut ma configuration erronée mais avec iptables. Cela ne pouvais pas être modifié avec ntftables.
 
<syntaxhighlight lang="bash">
iptables -t nat -A PREROUTING -p tcp --dport 2201 -j DNAT --to-destination 172.16.0.2:22 # Apollo
iptables -t nat -A PREROUTING -p tcp --dport 2202 -j DNAT --to-destination 172.16.0.3:22 # Moon
iptables -t nat -A POSTROUTING -p tcp -d 172.16.0.2 --dport 22 -j MASQUERADE # Apollo
iptables -t nat -A POSTROUTING -p tcp -d 172.16.0.3 --dport 22 -j MASQUERADE # Moon
</syntaxhighlight>Rendre la configuration persistante sur Solstice :
 
1. J'ai installé '''iptables-persistent'''  : 
<syntaxhighlight lang="bash">
apt install iptables-persistent -y
</syntaxhighlight> 
 
2. Puis j'ai sauvegardé les règles pour qu'elles soient appliquées au démarrage : 
<syntaxhighlight lang="bash">
iptables-save > /etc/iptables/rules.v4
</syntaxhighlight>
 
Maintenant, après chaque redémarrage (reboot de la machine), la redirection SSH via Solstice fonctionne bien !


=== <span style="color:#34495E;">Mise en Place d’un Serveur DNS</span> ===
====== Redirection des Ports sur les Machines de Services avec nftables ======
Sur Apollo et Moon, j’ai configuré '''nftables''' pour gérer la redirection SSH. Je redirige le port 2201 vers Apollo et 2202 vers Moon.


J'ai configuré un serveur **BIND9** pour gérer les noms de domaine **apollo-exploration.online** et **moonrises.online**.
Ajout des règles nftables sur les machines de services** :<syntaxhighlight lang="bash">
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
nft add rule ip nat PREROUTING tcp dport 2202 dnat to 172.16.0.3:22
nft add chain ip nat POSTROUTING { type nat hook postrouting priority 100 \; }
nft add rule ip nat POSTROUTING masquerade
</syntaxhighlight>Rendre les règles persistantes sur les machines de services :


#### **Configuration de BIND9**
1. Je sauvegarde la configuration actuelle : 
Installation et vérification de la version :
<syntaxhighlight lang="bash">
nft list ruleset > /etc/nftables.conf
</syntaxhighlight>
 
2. Puis, j'active nftables au démarrage pour appliquer les règles : 
<syntaxhighlight lang="bash">
systemctl enable nftables
systemctl restart nftables
</syntaxhighlight>
 
Avec ces configurations : 
 
- Solstice utilise '''iptables''' pour la redirection des ports vers les machines de services
 
- Apollo et Moon utilisent '''nftables''' avec des règles persistantes
 
Maintenant, je peux me connecter en SSH à Apollo et Moon via Solstice sans problème, même après un reboot des machines.
 
=== Mise en Place d’un Serveur DNS ===
 
J'ai configuré un serveur DNS pour gérer les noms de domaine associés à nos machines virtuelles : '''apollo-exploration.online''' et '''moonrises.online'''.
 
La première chose à faire est de se reconnecter au registrar de domaine [https://www.gandi.net/fr '''Gandi''']. Je y avions déjà au préalable commandé nos noms de domaine pour Apollo et [[Atelier SysRes SE4 2024/2025 E1|Moon]]. Après connexion, je je rendons dans l'onglet '''Domaine''' et je suivons les instructions pour je procurer le certificat pour nos deux machines. Après avoir suivi le tutoriel, je obtenons deux fichiers :   
 
- '''myserver.key''' : la clé privée du domaine   
 
- '''server.csr''' : la demande de signature du certificat 
 
Je utiliserons ces fichiers pour configurer '''DNSSEC''' et sécuriser notre zone DNS.
 
==== Configuration de bind9 ====
 
J'ai installé '''bind9''' et configuré l’interface réseau :


<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
apt install bind9 -y
apt install bind9 -y
named -v
</syntaxhighlight>
</syntaxhighlight>


Ajout de l'interface **eth1** pour gérer l'IPv6 :
j'ai vérifier les version de bind9 afin d'éviter certains problèmes par la suite, et celle ci doit être supérieure a la version 9.11, et c'est bien le cas. Des problèmes liés à la mise en place du DNSSEC aurait pu survenir dans le cas contraire.
 
<syntaxhighlight lang="bash">
root@Apollo:~# named -v
BIND 9.18.33-1~deb12u2-Debian (Extended Support Version) <id:>
 
</syntaxhighlight>
 
Ajout de l'interface '''eth1''' pour gérer l'IPv6 dans `/etc/network/interfaces` :


<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
Ligne 119 : Ligne 324 :
</syntaxhighlight>
</syntaxhighlight>


Redémarrage du service :
Redémarrage du service pour appliquer les modifications en utilisant une des deux commandes suivantes :


<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
systemctl restart networking
systemctl restart networking
service networking restart
</syntaxhighlight>
==== Configuration du Serveur DNS Maître et Secondaire ====
Sur Apollo, j'ai configuré les zones DNS dans `/etc/bind/named.conf.local` :
<syntaxhighlight lang="bash">
zone "apollo-exploration.online" {
type master;
file "/etc/bind/db.apollo-exploration.online";
key-directory "/etc/bind/keys";
        dnssec-policy "dnspol"; # Active DNSSEC avec la politique "dnspol"
        inline-signing yes;
allow-transfer{secondaries;}; # filtrer les secondaires
also-notify{hiddensecondaries;}; # secondaires caches
notify yes;
};
acl "secondaries" {
2001:660:4401:60a0:216:3eff:fe6f:f548; # Adresse IPv6 de Moon (serveur secondaire)
2001:660:4401:60a0:216:3eff:fe29:880f; # Adresse IPv6 de Solstice
};
masters "hiddensecondaries" {
2001:660:4401:60a0:216:3eff:fe29:880f;
};
zone "moonrises.online" {
type slave;
file "/etc/bind/backup/db.moonrises.online";
masters{2001:660:4401:60a0:216:3eff:fe6f:f548;};
};
</syntaxhighlight>
La machine Apollo est le serveur DNS principal, tandis que Moon sert de DNS secondaire et récupère la zone depuis Apollo.
==== Fichier de Zone pour Apollo ====
J'ai créé `/etc/bind/zones/db.apollo-exploration.online` :
Je suis partie d'un exemple puis j'ai adapté en ajoutant les enregistrements A et AAAA.
<syntaxhighlight lang="bash">
$TTL 200
@ IN SOA ns2.apollo-exploration.online. admin.apollo-exploration.online. (
        3298267245      ;Version
        7200            ;Refresh
        3600            ;Retry
        1209600        ;Expire
        259200 )        ;Minimum TTL
;
        IN      NS      ns1.moonrises.online.
        IN      NS      ns2.apollo-exploration.online.
ns2    IN      AAAA    2001:660:4401:60a0:216:3eff:fe3c:33a5
ns2    IN      A      193.48.57.166
@      IN      A      193.48.57.166
@      IN      AAAA    2001:660:4401:60a0:216:3eff:fe3c:33a5
</syntaxhighlight>
Remarque : il est utile d'incrémenter de 1 le numero de Version a chaque restart de named.
J'ai donc ensuite vérifié la syntaxe :
<syntaxhighlight lang="bash">
named-checkzone apollo-exploration.online /etc/bind/db.apollo-exploration.online
</syntaxhighlight>
==== Activation et Tests du Serveur DNS ====
J'ai redémarré '''bind9''' (on peut toujours faire cela soit en utilisant systemctl ou service)  :
<syntaxhighlight lang="bash">
systemctl restart named
systemctl enable named
</syntaxhighlight>
J'ai autorisé les utilisateurs bind à accéder aux fichiers de zone et de config :
chown bind:bind /etc/bind/db.apollo-exploration.online
chmod 644 /etc/bind/zones/db.apollo-exploration.online
chown bind:bind /etc/bind/named.conf.local
chmod 644 /etc/bind/named.conf.local
J'ai effectué un premier test DNS avec '''dig''' :
<syntaxhighlight lang="bash">
dig @localhost apollo-exploration.online
</syntaxhighlight>
Le serveur répond correctement aux requêtes sur les deux machines.
[[Fichier:Image dig.png|centré|vignette|1044x1044px]]
==== Publication du DNS ====
Afin de rendre notre serveur DNS opérationnel et accessible, je me rends sur le site du registrar [https://www.gandi.net/fr '''Gandi'''] pour effectuer les configurations nécessaires.
Dans l’onglet '''"Nameserver"''' de mon domaine, j'ajoute un '''"Glue Record"''', qui permet d’associer directement mon nom de domaine à mes propres serveurs DNS. Pour cela, j’enregistre les adresses '''IPv4''' (celle de la machine mandataire) et '''IPv6''' (celle de la machine de services).
Ensuite, je remplace 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.
[[Fichier:Image ns et glue recrd apollo.png|gauche|vignette|780x780px|Nameserver et Glue records pour Apollo]]
[[Fichier:Image ns et glue rcrd moon.png|vignette|780x780px|Nameserver et Glue records pour Moon]]
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 [https://dnschecker.org/#A/NS%20apollo-exploration.online '''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'''.
[[Fichier:Image apollo dns checker.png|gauche|vignette|763x763px|DNS Checker pour Apollo]]
[[Fichier:Image moon dns check.png|vignette|763x763px|DNS Checker pour Moon]]
<br>
<br>
<br> <br> <br> <br> <br>
<br>
<br>
<br>
<br>
==== Configuration et Activation de DNSSEC ====
[[Fichier:Image keys.png|vignette|793x793px|Clés générées pour le DNSSEC pour Apollo et Moon]]
J'ai mis en place '''DNSSEC''' pour signer les zones DNS.
1️⃣ Génération des Clés DNSSEC :
<syntaxhighlight lang="bash">
mkdir -p /etc/bind/keys
cd /etc/bind/keys
dnssec-keygen -a RSASHA256 -b 2048 -n ZONE apollo-exploration.online
dnssec-keygen -a RSASHA256 -b 1024 -n ZONE -f KSK apollo-exploration.online
</syntaxhighlight>
Deux paires de clés sont générées :     
- ZSK (Zone Signing Key)   
- KSK (Key Signing Key)       
2️⃣ Ajout des Clés DNSSEC à la Zone : 
J'ai modifié `/etc/bind/zones/db.apollo-exploration.online` pour inclure les clé
<syntaxhighlight lang="dns">
$INCLUDE /etc/bind/keys/Kapollo-exploration.online.+013+12345.key
$INCLUDE /etc/bind/keys/Kapollo-exploration.online.+013+67890.key
</syntaxhighlight>
J'ai vérifié le bon fonctionnement avec :
<syntaxhighlight lang="bash">
named-checkzone apollo-exploration.online /etc/bind/db.apollo-exploration.online.signed
</syntaxhighlight>
</syntaxhighlight>


---
==== Test et Publication de DNSSEC ====
J'ajoute alors la suite de ce qui est demandé dans le sujet dans le fichier '/etc/bind/named.conf.options' (dans le .option pour rendre les chose propres) : <syntaxhighlight lang="bash">
root@Apollo:/etc/bind/keys# cat /etc/bind/named.conf.options
options {
directory "/var/cache/bind";
dnssec-validation auto;
 
listen-on-v6 { any; };
allow-query {any;};
recursion yes;
};
 


=== <span style="color:#34495E;">Mise en Place du Serveur Apache (HTTP et HTTPS)</span> ===
dnssec-policy "dnspol" {
        keys {
          ksk key-directory lifetime unlimited algorithm 13;
          zsk key-directory lifetime unlimited algorithm 13;
        };
        nsec3param;
};


J'ai mis en place **Apache2** pour héberger mon site web. L’installation s’est faite en plusieurs étapes :
</syntaxhighlight>


1️⃣ Installation et activation du **HTTP** 
Après tout cela, j'ai redémarré '''bind9''' :
2️⃣ Configuration de la redirection **HTTPS** via la mandataire (**Solstice**)   
 
3️⃣ Ajout du support **HTTPS** sur **Apollo**  
<syntaxhighlight lang="bash">
systemctl restart bind9
</syntaxhighlight>
 
J'ai testé la propagation DNS et celle de DNSSES avec le site [https://dnsviz.net/d/apollo-exploration.online/dnssec/ '''DNSviz''']. Cela permet d’analyser les signatures DNSSEC et de vérifier si la chaîne de validation est correcte: Si tout est bleu, tout est bon.   
[[Fichier:Image dnsviz apollo.png|gauche|vignette|834x834px|DNSviz apollo-exploration.online]]
[[Fichier:Image moon dnsviz.png|vignette|712x712px|DNSviz moonrises.online]] 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br><br>
<br><br>
<br><br>
<br>
 
Les tests ont confirmé que la configuration était fonctionnelle.
 
=== Mise en Place de Fail2Ban sur Apollo ===
 
Pour protéger Apollo contre les attaques brute force sur SSH, j’ai installé et configuré Fail2Ban.
 
==== Installation et Configuration ====
Installation du paquet :
<syntaxhighlight lang="bash"> apt install fail2ban -y </syntaxhighlight>
 
Création du fichier /etc/fail2ban/jail.local avec les règles de bannissement :
<syntaxhighlight lang="ini"> [sshd] enable = true port = ssh filter = sshd maxretry = 5 findtime = 300 bantime = 600 </syntaxhighlight>
 
==== Correction de l’erreur "allowipv6 not defined" ====
Au redémarrage, Fail2Ban affichait un avertissement sur allowipv6. Pour le corriger, j’ai ajouté dans /etc/fail2ban/jail.conf :
<syntaxhighlight lang="ini"> allowipv6 = true </syntaxhighlight>
 
==== Activation de Fail2Ban ====
<syntaxhighlight lang="bash"> service fail2ban restart </syntaxhighlight>
 
Donc maintenant :
 
✅ Fail2Ban est désormais actif et protège SSH en IPv4 et IPv6
 
✅ Le serveur DNS répond correctement aux requêtes   
 
✅ Les enregistrements A et AAAA sont bien configurés   
 
✅ DNSSEC est actif et validé sur DNSViz   
 
✅ La réplication de la zone fonctionne avec Moon 
 
Cette configuration assure une résolution de noms fiable et sécurisée, avec DNSSEC garantissant l’intégrité des enregistrements DNS.
 
Prochaine étape : finaliser l’interconnexion avec Internet et peaufiner la gestion IPv6.
 
=== Mise en Place du Serveur Apache (HTTP et HTTPS) ===
 
Pour rendre accessible mon site web sur '''Apollo''', j’ai mis en place '''Apache2''', en suivant un ordre logique : 
 
1️⃣ Installation et activation du HTTP  
 
2️⃣ Configuration de la redirection HTTPS sur la machine mandataire (Solstice)   
 
3️⃣ Ajout du support HTTPS sur Apollo
 
==== Installation d’Apache et Activation du HTTP ====
 
J’ai commencé par installer '''Apache2''' sur Apollo :  


#### **Installation d’Apache et Activation du HTTP**
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
apt update && apt install apache2 -y
apt update && apt install apache2 -y
</syntaxhighlight>
</syntaxhighlight>


Test en accédant à **http://apollo-exploration.online** → OK ✅
J'entre les commandes suivantes :
a2enmod ssl
a2enmod proxy
a2enmod proxy_http
Puis, apres avoir modifier le fichier /etc/apache2/sites-available/default-ssl.conf, j’ai vérifié que le serveur fonctionnait en HTTP en tapant mon nom de domaines sur mon moteur de recherche. Voicl les modification du fichier default-ssl.conf : 


#### **Redirection HTTPS via Solstice**
<syntaxhighlight lang="bash">
Ajout du proxy inversé dans **/etc/apache2/sites-available/default-ssl.conf** :
SSLEngine on
SSLCertificateFile /etc/apache2/sites-available/apollo-exploration.online.crt
SSLCertificateKeyFile /root/myserver.key
SSLCertificateChainFile /etc/apache2/sites-available/GandiCert.pem
SSLProxyEngine on


</syntaxhighlight>
Tout est fonctionnel en HTTP ! 
==== Mise en Place de la Redirection HTTPS via Solstice ====
Étant donné qu'Apollo ne dispose pas d’IPv4 routée, '''Solstice''' agit en tant que '''mandataire inverse''' pour rediriger le trafic HTTPS vers Apollo.
====== '''Configuration d’Apache sur Solstice''' dans `/etc/apache2/sites-available/default-ssl.conf` : ======
<syntaxhighlight lang="apache">
<syntaxhighlight lang="apache">
<VirtualHost *:80>
    ServerName apollo-exploration.online
    ServerAlias www.apollo-exploration.online
    Redirect permanent / https://apollo-exploration.online/
</VirtualHost>
<VirtualHost *:443>
<VirtualHost *:443>
     ServerName apollo-exploration.online
     ServerName apollo-exploration.online
     SSLProxyEngine on
     SSLProxyEngine on
    ProxyPreserveHost on
     ProxyPass / https://apollo-exploration.online/
     ProxyPass / https://apollo-exploration.online/
     ProxyPassReverse / https://apollo-exploration.online/
     ProxyPassReverse / https://apollo-exploration.online/
    ErrorLog /var/log/apache2/apollo_error.log
    SSLCertificateFile /etc/apache2/sites-available/certifapollo/apollo-exploration.online.crt
    SSLCertificateKeyFile /etc/apache2/sites-available/certifapollo/myserver_apollo.key
    SSLCertificateChainFile /etc/apache2/sites-available/certifapollo/GandiCert.pem
</VirtualHost>
</VirtualHost>
</syntaxhighlight>
</syntaxhighlight>


#### **Activation du HTTPS sur Apollo**
====== '''Activation de la configuration et redémarrage d’Apache sur Solstice''' : ======
<syntaxhighlight lang="bash">
a2ensite apollo-exploration.online.conf
systemctl reload apache2
</syntaxhighlight>
 
À ce stade, HTTPS redirige bien vers Apollo, mais il fallait encore activer HTTPS sur Apollo.
 
==== Activation du HTTPS sur Apollo ====
 
====== '''Installation des modules nécessaires''' : ======
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
a2enmod ssl
a2enmod ssl
Ligne 160 : Ligne 686 :
</syntaxhighlight>
</syntaxhighlight>


Ajout du site HTTPS dans **/etc/apache2/sites-available/default-ssl.conf** :
====== '''Ajout du site HTTPS sur Apollo''' dans `/etc/apache2/sites-available/default-ssl.conf` : ======
 
<syntaxhighlight lang="apache">
<syntaxhighlight lang="apache">
<VirtualHost *:443>
<VirtualHost *:443>
    ServerAdmin webmaster@localhost
ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html
 
    SSLEngine on
DocumentRoot /var/www/html
    SSLCertificateFile /etc/apache2/sites-available/apollo-exploration.online.crt
 
    SSLCertificateKeyFile /root/myserver.key
ErrorLog ${APACHE_LOG_DIR}/error.log
    SSLCertificateChainFile /etc/apache2/sites-available/GandiCert.pem
CustomLog ${APACHE_LOG_DIR}/access.log combined
 
SSLEngine on
 
SSLCertificateFile     /etc/apache2/sites-available/apollo-exploration.online.crt
SSLCertificateKeyFile   /root/myserver.key
 
SSLCertificateChainFile /etc/apache2/sites-available/GandiCert.pem
 
<FilesMatch "\.(?:cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
<Directory /usr/lib/cgi-bin>
SSLOptions +StdEnvVars
</Directory>
 
</VirtualHost>
 
<VirtualHost *:80>
ServerName apollo-exploration.online
ServerAlias www.apollo-exploration.online
Redirect permanent / https://apollo-exploration.online/
</VirtualHost>
</VirtualHost>
</syntaxhighlight>
</syntaxhighlight>


Activation et redémarrage :
====== '''Activation du site HTTPS sur Apollo et redémarrage''' : ======
 
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
a2ensite default-ssl.conf
a2ensite default-ssl.conf
Ligne 180 : Ligne 725 :
</syntaxhighlight>
</syntaxhighlight>


---
==== Résolution d’un Problème Apache (Merci M. Redon !) ====


### **Conclusion**
Lors de la configuration, j’ai eu des difficultés à cause d’un problème de fichier activé. J’avais modifié plusieurs fichiers dans sites-available sans vérifier ceux activés dans sites-enabled. La solution était de reverifier les fichiers default-ssl.conf (ne pas mettre de ~/ dans les chemins pour les fichiers important mais écrire root/) et d’exécuter la commande :  <syntaxhighlight lang="bash">
🔹 **Serveur Apache opérationnel avec redirection HTTPS via Solstice** 
  a2ensite default-ssl.conf
🔹 **Redirections de port fonctionnelles et persistantes** 
  systemctl reload apache2
🔹 **Sécurisation avec Fail2Ban et DNSSEC activé** 
  </syntaxhighlight>
🔹 **Site web disponible et sécurisé en HTTPS** 


---
Finalement, tout est bien redirigé vers HTTPS. [https://apollo-exploration.online/ '''Mon site'''] est maintenant entièrement sécurisé et accessible en HTTPS 🚀.


Tout est fonctionnel, et après plusieurs défis techniques (problèmes de configurations Apache, persistance des règles iptables, DNSSEC...), **Apollo est maintenant pleinement opérationnel !** 🚀
[[Fichier:Screenshot 2025-03-07 at 01-57-19 Mission Apollo - Exploration Spatiale.png|centré|vignette|868x868px|Mon site [https://apollo-exploration.online/ '''La Mission Apollo''']]]

Version du 8 mars 2025 à 22:09

Projet Virtualisation KAOUTAR EL BACHIRI - Machine Apollo 🚀

Introduction

Dans ce projet de virtualisation, j'ai mis en place une infrastructure comprenant deux machines de services et une machine mandataire, le tout orchestré avec Xen. La machine Apollo joue un rôle clé dans l'hébergement des services, tandis que Solstice assure la gestion du réseau et l'interconnexion avec l'extérieur.

Si vous souhaitez plonger plus en détail dans la configuration de Moon, la seconde machine de services, il vous suffit de cliquant sur le lien suivant : 📎 Moon.

Les prochaines sections vous guideront à travers chaque étape de cette mission. 🛰️

Création et Connexion aux Machines Virtuelles

Dans ce projet, j'ai créé deux machines de services et une machine mandataire à l'aide de l'outil Xen. Les commandes utilisées sont les suivantes :

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

Pour démarrer les machines, j'ai utilisé :

xen create /etc/xen/SE4.Apollo.cfg
xen create /etc/xen/SE4.Solstice.cfg

Et pour accéder aux consoles des VMs :

xen console SE4.Apollo
xen console SE4.Solstice
root@capbreton:~# xen list
Name                                        ID   Mem VCPUs	State	Time(s)
Domain-0                                     0  3970     4     r-----   83423.2
SE4.Zeus                                    15  2048     1     -b----    3778.8
SE4.Pattes                                  16  2048     1     -b----    2954.3
SE4.Vander                                  18  2048     1     -b----    2659.5
SE4.Solstice                                39  2048     1     -b----    2560.1
SE4.Jinx                                    48  2048     1     -b----    1043.3
SE4.jeanluc                                 62  2048     1     -b----     728.4
SE4.ElMordjene                              68  2048     1     -b----     868.4
SE4.Poseidon                                82  2048     1     -b----    1334.2
SE4.Gaby                                    89  2048     1     -b----     704.1
SE4.Bree                                    90  2048     1     -b----     547.6
SE4.Desperate                               99  2048     1     -b----    3969.9
SE4.Orion                                  100  2048     1     -b----     906.5
SE4.Vi                                     109  2048     1     -b----     903.6
SE4.Rod                                    110  2048     1     -b----    1339.9
SE4.Rodrigo                                112  2048     1     -b----    2388.2
SE4.Rigo                                   113  2048     1     -b----    1390.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.Apollo.cfg
Connexion à la VM xen console SE4.Apollo
Eteindre la VM xen shutdown SE4.Apollo

Montage des Partitions /var et /home sur Apollo

Pour améliorer la gestion des données, j'ai monté les répertoires /var et /home sur des partitions LVM dédiées.

Création des Fichiers de Partition

Depuis le serveur Capbreton, j'ai créé les fichiers de partitions dans /dev/virtual :

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

Modification des Fichiers de Configuration

J'ai modifié les fichiers .cfg pour attacher les partitions LVM aux machines :

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

Une configuration similaire a été appliquée à Moon.

Formatage et Montage

Les partitions ont été formatées et montées avec les commandes suivantes :

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

Pour /home :

mkfs -t ext4 /dev/xvdb
mount -a

Enfin, j'ai modifié le fichier /etc/fstab pour un montage automatique au démarrage:

/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 
root@Apollo:~# vim /etc/fstab

Après cela pour confirmer le tout, je redemarre la machine :

xen shutdown SE4.Apollo

Configuration Réseau

Chaque machine a été configurée avec des adresses IPv4 fixes sur un réseau privé et une configuration automatique pour IPv6.

Machines de Services (Apollo et Moon)

Exemple de configuration dans /etc/network/interfaces pour Apollo :

auto eth0
iface eth0 inet static
    address 172.16.0.2/24
    gateway 172.16.0.1

iface eth0 inet6 auto

Moon utilise une configuration similaire avec l’adresse 172.16.0.3.

Machine Mandataire (Solstice)

La machine mandataire agit comme passerelle IPv4 pour les machines de services. Voici sa configuration réseau :

auto eth0
iface eth0 inet static
    address 172.16.0.1/24

iface eth0 inet6 auto

auto eth1
iface eth1 inet static
    address 193.48.57.166/27
    gateway 193.48.57.161

Séance Improvisée du 4 Février

Avec les personnes présentes lors de cette séance, nous avons configuré le routeur pour y ajouter une option pour le mode OSPF. J'ai donc pu suivre les étapes.

Configuration des VLANs

Pendant cette séance, nous avons configuré plusieurs VLANs nécessaires à l'interconnexion des machines et au respect des contraintes du TP :

- VLAN 1 : Service.

- VLAN 50 : Machines Xen.

- VLAN X : Réseaux privés (1 par étudiant).

- VLAN 530 : Connexion au SR52 pour l'accès à Internet.

Les adresses de réseau utilisées, sont des adresses privées en 10.0.0.0 que nous avons adapté : 10.0.100+Numero.0/24 pour chaque machine de service, soit chaque étudiant.

Configuration SSH

Nous avons restreint l'accès SSH au routeur en autorisant uniquement les machines du réseau via une access-list. Voici les commandes utilisées :

ip access-list standard 10
10 permit 193.48.57.160 0.0.0.15
20 deny any

line vty 0 4
 access-class 10 in
 password <mot_de_passe_de_promo>
 transport input ssh

La connexion SSH se fait avec :

ssh admin@193.48.57.161 -o KexAlgorithms=diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1 -o HostKeyAlgorithms=ssh-rsa

Pour tester le ssh nous avons utiliser la commande touch fichier pour créer un fichier sur la machine mandataire depuis la machine d'un autre binôme. Il reste tout de même les redirection de ports a faire pour les machines.

Configuration du Routeur avec OSPF

Le protocole OSPF a été configuré pour partager les tables de routage avec le SR52. Voici un extrait de la configuration :

router ospf 1
 router-id 10.0.101.1
 summary-address 193.48.57.160 255.255.255.240
 redistribute static route-map ospf
 redistribute connected
 network 193.48.57.160 0.0.0.15 area 10
 default-information originate

Les routes OSPF sont bien détectées, comme visible dans les résultats de show ip route.

Connexion Internet

Avec OSPF actif, la machine mandataire peut accéder à Internet. Voici le test de ping :

Ping sur Apollo et Moon

Redirection de Port et Persistance des Règles

Pour permettre l’accès SSH aux machines de services via Solstice, j’ai mis en place des redirections de port. J'ai 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

Cependant, j’ai rencontré un problème : les règles nftables sur les machines de services n’étaient pas persistantes, ce qui empêchait l’accès SSH après un redémarrage.

Redirection des Ports sur Solstice avec iptables

À l'origine, j'avais configuré iptables pour rediriger le trafic SSH vers Apollo et Moon, mais en voulant modifier les règles, je n’arrivais plus à appliquer correctement nftables sur Solstice.

La solution était de revenir à iptables pour Solstice. En effet Solstice avait garder par défaut ma configuration erronée mais avec iptables. Cela ne pouvais pas être modifié avec ntftables.

iptables -t nat -A PREROUTING -p tcp --dport 2201 -j DNAT --to-destination 172.16.0.2:22 # Apollo
iptables -t nat -A PREROUTING -p tcp --dport 2202 -j DNAT --to-destination 172.16.0.3:22 # Moon
iptables -t nat -A POSTROUTING -p tcp -d 172.16.0.2 --dport 22 -j MASQUERADE # Apollo
iptables -t nat -A POSTROUTING -p tcp -d 172.16.0.3 --dport 22 -j MASQUERADE # Moon

Rendre la configuration persistante sur Solstice :

1. J'ai installé iptables-persistent  :

apt install iptables-persistent -y

2. Puis j'ai sauvegardé les règles pour qu'elles soient appliquées au démarrage :

iptables-save > /etc/iptables/rules.v4

Maintenant, après chaque redémarrage (reboot de la machine), la redirection SSH via Solstice fonctionne bien !

Redirection des Ports sur les Machines de Services avec nftables

Sur Apollo et Moon, j’ai configuré nftables pour gérer la redirection SSH. Je redirige le port 2201 vers Apollo et 2202 vers Moon.

Ajout des règles nftables sur les machines de services** :

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
nft add rule ip nat PREROUTING tcp dport 2202 dnat to 172.16.0.3:22
nft add chain ip nat POSTROUTING { type nat hook postrouting priority 100 \; }
nft add rule ip nat POSTROUTING masquerade

Rendre les règles persistantes sur les machines de services :

1. Je sauvegarde la configuration actuelle :

nft list ruleset > /etc/nftables.conf

2. Puis, j'active nftables au démarrage pour appliquer les règles :

systemctl enable nftables
systemctl restart nftables

Avec ces configurations :

- Solstice utilise iptables pour la redirection des ports vers les machines de services

- Apollo et Moon utilisent nftables avec des règles persistantes

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

Mise en Place d’un Serveur DNS

J'ai configuré un serveur DNS pour gérer les noms de domaine associés à nos machines virtuelles : apollo-exploration.online et moonrises.online.

La première chose à faire est de se reconnecter au registrar de domaine Gandi. Je y avions déjà au préalable commandé nos noms de domaine pour Apollo et Moon. Après connexion, je je rendons dans l'onglet Domaine et je suivons les instructions pour je procurer le certificat pour nos deux machines. Après avoir suivi le tutoriel, je obtenons deux fichiers :

- myserver.key : la clé privée du domaine

- server.csr : la demande de signature du certificat

Je utiliserons ces fichiers pour configurer DNSSEC et sécuriser notre zone DNS.

Configuration de bind9

J'ai installé bind9 et configuré l’interface réseau :

apt install bind9 -y

j'ai vérifier les version de bind9 afin d'éviter certains problèmes par la suite, et celle ci doit être supérieure a la version 9.11, et c'est bien le cas. Des problèmes liés à la mise en place du DNSSEC aurait pu survenir dans le cas contraire.

root@Apollo:~# named -v
BIND 9.18.33-1~deb12u2-Debian (Extended Support Version) <id:>

Ajout de l'interface eth1 pour gérer l'IPv6 dans `/etc/network/interfaces` :

auto eth1
iface eth1 inet6 auto

Redémarrage du service pour appliquer les modifications en utilisant une des deux commandes suivantes :

systemctl restart networking
service networking restart

Configuration du Serveur DNS Maître et Secondaire

Sur Apollo, j'ai configuré les zones DNS dans `/etc/bind/named.conf.local` :

zone "apollo-exploration.online" {
	type master;
	file "/etc/bind/db.apollo-exploration.online";
	key-directory "/etc/bind/keys";
        dnssec-policy "dnspol"; # Active DNSSEC avec la politique "dnspol"
        inline-signing yes;
	allow-transfer{secondaries;}; # filtrer les secondaires
	also-notify{hiddensecondaries;}; # secondaires caches
	notify yes;
};

acl "secondaries" {
	2001:660:4401:60a0:216:3eff:fe6f:f548; # Adresse IPv6 de Moon (serveur secondaire)
	2001:660:4401:60a0:216:3eff:fe29:880f; # Adresse IPv6 de Solstice 
};

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

zone "moonrises.online" {
	type slave;
	file "/etc/bind/backup/db.moonrises.online"; 
	masters{2001:660:4401:60a0:216:3eff:fe6f:f548;}; 
};

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

Fichier de Zone pour Apollo

J'ai créé `/etc/bind/zones/db.apollo-exploration.online` :

Je suis partie d'un exemple puis j'ai adapté en ajoutant les enregistrements A et AAAA.

$TTL 200
@ IN SOA ns2.apollo-exploration.online. admin.apollo-exploration.online. (
        3298267245      ;Version
        7200            ;Refresh
        3600            ;Retry
        1209600         ;Expire
        259200 )        ;Minimum TTL

;
        IN      NS      ns1.moonrises.online.
        IN      NS      ns2.apollo-exploration.online.
ns2     IN      AAAA    2001:660:4401:60a0:216:3eff:fe3c:33a5 
ns2     IN      A       193.48.57.166
@       IN      A       193.48.57.166
@       IN      AAAA    2001:660:4401:60a0:216:3eff:fe3c:33a5

Remarque : il est utile d'incrémenter de 1 le numero de Version a chaque restart de named.

J'ai donc ensuite vérifié la syntaxe :

named-checkzone apollo-exploration.online /etc/bind/db.apollo-exploration.online

Activation et Tests du Serveur DNS

J'ai redémarré bind9 (on peut toujours faire cela soit en utilisant systemctl ou service)  :

systemctl restart named
systemctl enable named

J'ai autorisé les utilisateurs bind à accéder aux fichiers de zone et de config :

chown bind:bind /etc/bind/db.apollo-exploration.online
chmod 644 /etc/bind/zones/db.apollo-exploration.online
chown bind:bind /etc/bind/named.conf.local
chmod 644 /etc/bind/named.conf.local

J'ai effectué un premier test DNS avec dig :

dig @localhost apollo-exploration.online

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

Image dig.png

Publication du DNS

Afin de rendre notre serveur DNS opérationnel et accessible, je me rends sur le site du registrar Gandi pour effectuer les configurations nécessaires.

Dans l’onglet "Nameserver" de mon domaine, j'ajoute un "Glue Record", qui permet d’associer directement mon nom de domaine à mes propres serveurs DNS. Pour cela, j’enregistre les adresses IPv4 (celle de la machine mandataire) et IPv6 (celle de la machine de services).

Ensuite, je remplace 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.

Nameserver et Glue records pour Apollo
Nameserver et Glue records pour Moon










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.

DNS Checker pour Apollo
DNS Checker pour Moon




















Configuration et Activation de DNSSEC

Clés générées pour le DNSSEC pour Apollo et Moon

J'ai mis en place DNSSEC pour signer les zones DNS.


1️⃣ Génération des Clés DNSSEC :

mkdir -p /etc/bind/keys
cd /etc/bind/keys
dnssec-keygen -a RSASHA256 -b 2048 -n ZONE apollo-exploration.online
dnssec-keygen -a RSASHA256 -b 1024 -n ZONE -f KSK apollo-exploration.online

Deux paires de clés sont générées :

- ZSK (Zone Signing Key)

- KSK (Key Signing Key)

2️⃣ Ajout des Clés DNSSEC à la Zone :

J'ai modifié `/etc/bind/zones/db.apollo-exploration.online` pour inclure les clé

$INCLUDE /etc/bind/keys/Kapollo-exploration.online.+013+12345.key
$INCLUDE /etc/bind/keys/Kapollo-exploration.online.+013+67890.key


J'ai vérifié le bon fonctionnement avec :

named-checkzone apollo-exploration.online /etc/bind/db.apollo-exploration.online.signed

Test et Publication de DNSSEC

J'ajoute alors la suite de ce qui est demandé dans le sujet dans le fichier '/etc/bind/named.conf.options' (dans le .option pour rendre les chose propres) :

root@Apollo:/etc/bind/keys# cat /etc/bind/named.conf.options 
options {
	directory "/var/cache/bind";
	dnssec-validation auto;

	listen-on-v6 { any; };
	allow-query {any;};
	recursion yes;
};


dnssec-policy "dnspol" {
        keys {
           ksk key-directory lifetime unlimited algorithm 13;
           zsk key-directory lifetime unlimited algorithm 13;
        };
        nsec3param;
};

Après tout cela, j'ai redémarré bind9 :

systemctl restart bind9

J'ai testé la propagation DNS et celle de DNSSES avec le site DNSviz. Cela permet d’analyser les signatures DNSSEC et de vérifier si la chaîne de validation est correcte: Si tout est bleu, tout est bon.

DNSviz apollo-exploration.online
DNSviz moonrises.online






















Les tests ont confirmé que la configuration était fonctionnelle.

Mise en Place de Fail2Ban sur Apollo

Pour protéger Apollo contre les attaques brute force sur SSH, j’ai installé et configuré Fail2Ban.

Installation et Configuration

Installation du paquet :

 apt install fail2ban -y

Création du fichier /etc/fail2ban/jail.local avec les règles de bannissement :

 [sshd] enable = true port = ssh filter = sshd maxretry = 5 findtime = 300 bantime = 600

Correction de l’erreur "allowipv6 not defined"

Au redémarrage, Fail2Ban affichait un avertissement sur allowipv6. Pour le corriger, j’ai ajouté dans /etc/fail2ban/jail.conf :

 allowipv6 = true

Activation de Fail2Ban

 service fail2ban restart

Donc maintenant :

✅ Fail2Ban est désormais actif et protège SSH en IPv4 et IPv6

✅ Le serveur DNS répond correctement aux requêtes

✅ Les enregistrements A et AAAA sont bien configurés

✅ DNSSEC est actif et validé sur DNSViz

✅ La réplication de la zone fonctionne avec Moon

Cette configuration assure une résolution de noms fiable et sécurisée, avec DNSSEC garantissant l’intégrité des enregistrements DNS.

Prochaine étape : finaliser l’interconnexion avec Internet et peaufiner la gestion IPv6.

Mise en Place du Serveur Apache (HTTP et HTTPS)

Pour rendre accessible mon site web sur Apollo, j’ai mis en place Apache2, en suivant un ordre logique :

1️⃣ Installation et activation du HTTP

2️⃣ Configuration de la redirection HTTPS sur la machine mandataire (Solstice)

3️⃣ Ajout du support HTTPS sur Apollo

Installation d’Apache et Activation du HTTP

J’ai commencé par installer Apache2 sur Apollo :

apt update && apt install apache2 -y

J'entre les commandes suivantes :

a2enmod ssl
a2enmod proxy
a2enmod proxy_http

Puis, apres avoir modifier le fichier /etc/apache2/sites-available/default-ssl.conf, j’ai vérifié que le serveur fonctionnait en HTTP en tapant mon nom de domaines sur mon moteur de recherche. Voicl les modification du fichier default-ssl.conf :

SSLEngine on
SSLCertificateFile	/etc/apache2/sites-available/apollo-exploration.online.crt
SSLCertificateKeyFile /root/myserver.key
SSLCertificateChainFile /etc/apache2/sites-available/GandiCert.pem
SSLProxyEngine on

Tout est fonctionnel en HTTP !

Mise en Place de la Redirection HTTPS via Solstice

Étant donné qu'Apollo ne dispose pas d’IPv4 routée, Solstice agit en tant que mandataire inverse pour rediriger le trafic HTTPS vers Apollo.

Configuration d’Apache sur Solstice dans `/etc/apache2/sites-available/default-ssl.conf` :
<VirtualHost *:80>
    ServerName apollo-exploration.online
    ServerAlias www.apollo-exploration.online
    Redirect permanent / https://apollo-exploration.online/
</VirtualHost>

<VirtualHost *:443>
    ServerName apollo-exploration.online

    SSLProxyEngine on
    ProxyPreserveHost on

    ProxyPass / https://apollo-exploration.online/
    ProxyPassReverse / https://apollo-exploration.online/

    ErrorLog /var/log/apache2/apollo_error.log

    SSLCertificateFile /etc/apache2/sites-available/certifapollo/apollo-exploration.online.crt
    SSLCertificateKeyFile /etc/apache2/sites-available/certifapollo/myserver_apollo.key
    SSLCertificateChainFile /etc/apache2/sites-available/certifapollo/GandiCert.pem
</VirtualHost>
Activation de la configuration et redémarrage d’Apache sur Solstice :
a2ensite apollo-exploration.online.conf
systemctl reload apache2

À ce stade, HTTPS redirige bien vers Apollo, mais il fallait encore activer HTTPS sur Apollo.

Activation du HTTPS sur Apollo

Installation des modules nécessaires :
a2enmod ssl
systemctl restart apache2
Ajout du site HTTPS sur Apollo dans `/etc/apache2/sites-available/default-ssl.conf` :
<VirtualHost *:443>
	ServerAdmin webmaster@localhost

	DocumentRoot /var/www/html

	ErrorLog ${APACHE_LOG_DIR}/error.log
	CustomLog ${APACHE_LOG_DIR}/access.log combined

	SSLEngine on

	SSLCertificateFile      /etc/apache2/sites-available/apollo-exploration.online.crt
	SSLCertificateKeyFile   /root/myserver.key

	SSLCertificateChainFile /etc/apache2/sites-available/GandiCert.pem

	<FilesMatch "\.(?:cgi|shtml|phtml|php)$">
		SSLOptions +StdEnvVars
	</FilesMatch>
	<Directory /usr/lib/cgi-bin>
		SSLOptions +StdEnvVars
	</Directory>

</VirtualHost>

<VirtualHost *:80>
	ServerName apollo-exploration.online
	ServerAlias www.apollo-exploration.online
	Redirect permanent / https://apollo-exploration.online/
</VirtualHost>
Activation du site HTTPS sur Apollo et redémarrage :
a2ensite default-ssl.conf
systemctl reload apache2

Résolution d’un Problème Apache (Merci M. Redon !)

Lors de la configuration, j’ai eu des difficultés à cause d’un problème de fichier activé. J’avais modifié plusieurs fichiers dans sites-available sans vérifier ceux activés dans sites-enabled. La solution était de reverifier les fichiers default-ssl.conf (ne pas mettre de ~/ dans les chemins pour les fichiers important mais écrire root/) et d’exécuter la commande :

  a2ensite default-ssl.conf
  systemctl reload apache2

Finalement, tout est bien redirigé vers HTTPS. Mon site est maintenant entièrement sécurisé et accessible en HTTPS 🚀.