Atelier SysRes SE4 2024/2025 E3

De wiki-se.plil.fr
Révision datée du 13 avril 2025 à 09:53 par Jwacquet (discussion | contributions) (→‎Conclusion)
(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)
Aller à la navigation Aller à la recherche

Conteneur

Pour débuter ce TP, nous devons faire un conteneur sous Linux.

Tout d'abord, il faut créer un système de fichier isolé avec la commande mkfs sur un fichier vide mais contenant dnas 10Go de mémoire avec la commande dd.

Puis on peut utiliser la commande mount pour monter le système de fichier dans un fichier vide ( /mount ) et enfin à y installer un système de fichier Linux avec debootstrap.

Maintenant que le conteneur est crée, nous allons pouvoir le démarrer en tant que processus isolé avec unshare.

Unshare possède plusieurs options dont certaines contrôlent les différents types d'isolation ( tables des auxiliaires, PID, tables de routage, ... ).

Maintenant que le conteneur est allumé, on va pouvoir réaliser une mascarade pour accéder à internet.

Il faut d'abord créer des interfaces Ethernet liées et en envoyer une dans le conteneur et y configurer l'autre en tant que Gateway.

Il faut aussi accepter le conteneur pour la maquarade via iptables ou nftables.

Et maintenant le conteneur peut accéder Internet.

Virtualisation

Création des VM

Pour créer les VM, on utilise xen :

xen-create-image --hostname=SE4.jeanluc --dir=/usr/local/xen --dist=daedalus --size=10GB --memory=1024M --bridge=norman --dhcp 
#Pour créer un image avec laquelle, on pourra lancer une VM, il faut bien évidemment créer le bridge avant de faire la commande

xen-create /etc/xen/SE4.jeanluc.cfg 
#Pour démarrer un VM ( ici SE4.jeanluc )

xen list
#Pour voir les VM démarrées

xen console SE4.jeanluc 
#Pour se connecter à une console

xen shut SE4.jeanluc 
#Pour éteindre la VM

Création de la passerelle

Avant de créer les VMs, il faut créer une passerelle ou bridge en patois. Pour cela, on modifie le fichiers /etc/network/interfaces Mais étant donné que nous sommes sur l'hyperviser, nous allons plutôt créer un fichier à notre nom dans /etc/network/interfaces.d/ Dans ce fichier, il faut écrire :

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

Configuration des machines de services

Ajout des partitions

On ajoute dans le /etc/xen/<VM>.cfg les partitions home et var.

Contenu de SE4.jeanluc.cfg

On modifie ensuite le /etc/fstab sur la VM.

contenu de /etc/fstab sur SE4.jeanluc

On effectue les instructions suivantes :

mkfs -t ext4 /dev/<Partition associée ( ici xvda3 et xvdb1  )>
[mount /dev/<Partition associée> /tmp  #ce qui est entre crochet est pour le /var
mv /var/* /tmp
umount /tmp]
mount -a

Après redémarrage de la VM, on vérifie l'ajout des partitions avec lsblk.

lsblk

Accès Internet

Pour pouvoir avoir accès à Internet en IPV6, on a rajouté, à la configuration de la VM, un 2ème VIF :

Ajoute du 2ème VIF

Et il faut aussi ajouter une deuxième interface, eth1, configuré en IPV6 :

Interfaces de jeanluc et ping IPv6 vers google

Maintenant, on peut ping en IPv6 www.google.com.

IPV6

Grâce à Kévan TOURON, nous pouvons maintenant accéder à Internet en IPV6. Il a fait la configuration Cisco.

Machine Mandataire

Interfaces

On effectue les mêmes manipulations que pour les machines de service.

auto eth0
iface eth0 inet static 
address 193.168.42.42/24
 
auto eth1
iface eth1 inet6 auto
iface eth1 inet static 
address 193.48.57.168/28
gateway 193.48.57.161

Redirection de Port et Masquarade

Pour pouvoir autoriser les autres machines du VLAN50 à se connecter via ssh sur notre machine mandataire, nous avons décommenter la ligne "#PermitRootLogin prohibit-password" et remplacer "prohibit-password" par "yes".

Connexion ssh à une autre machine mandataire

Pour la redirection de port, on a fait :

nft add table ip NAT
nft add chain NAT PREROUTING { type nat hook prerouting priority 0\; }
nft add rule NAT PREROUTING  tcp dport 2201 dnat to  192.168.42.41:22 #redirection de requete reçu sur le port 2201 vers le port 22 de SE4.jeanluc
nft add rule NAT PREROUTING  tcp dport 2202 dnat to  192.168.42.69:22 #redirection de requete reçu sur le port 2202 vers le port 22 de SE4.ElMordjene

DNS et page WEB

DNS

J'ai acheté, via les fonds d'un célèbre mécène, le nom de domaine jeanluc.site sur le site : https://gandi.net

J'ai ensuite crée des fichiers de zone après avoir installé le paquetage bind9.

Contenu de mon fichier de zone

Puis ajouter mon DNS au fichier named.conf ( ici j'ai modifié le fichier named.conf.local qui est inclus dans named.conf ).

Contenu du fichier named.conf.local

Sur la machine mandataire, il faut aussi rajouter dans le named.conf.local l'ipv6 de la machine de service dans les acl en secondaire pour que la machine mandataire gère les connexions IPv4 et les redirigent vers la machine de service.

Pour vérifier les fichiers named.conf et les fichiers de zone, on peut utiliser respectivement :

named-checkzone jeanluc.zone /etc/bind/jeanluc.site/jeanluc.zone

named-checkconf  /etc/bind/named.conf

Maintenant que les fichiers sont corrects, on peut ajouter le DNS dans le fichier /etc/resolv.conf

search jeanluc.site
nameserver 192.168.42.41 #l'ip de ma VM comme nameserver principal
nameserver 192.168.42.69 #l'ip de la VM de mon binôme comme nameserver secondaire

Une fois cela de fait, nous pouvons relancer le service :

service named restart

Si le service ne restart pas, il faut aller chercher le problème dans les logs et le résoudre, sinon on peut retourner sur https://gandi.net pour ajouter le Glue Record de mon DNS.

Glue Record sur https://gandi.net

Après cela, on peut voir la propagation du DNS avec DNS Checker.

Propagation de mon DNS sur https://dnschecker.org/

Apache2

Maintenant que le DNS est en place, on va pouvoir ajouter une page web via apache2.

Tout d'abord, il faut installer apache2 sur les machines mandataire et de service. Ensuite il faut récupérer le certificat signé par https://gandi.net, il y a un fichier .crt, un fichier .pem et un fichier .key a récupérer.

Il faut maintenant créé une paire de clé asymétrique via openssl.

openssl req -sha256 -nodes -newkey rsa:2048 -keyout myserver.key -out myserver.csr

Cette commande a été trouvé sur le site : https://www.sylvaincoudeville.fr/2020/06/generer-une-paire-de-cles-et-une-csr-avec-openssl/.

Il faut aussi communiquer ces clés à https://gandi.net.

Une fois cela fait, j'ai créé un fichier sur la machine mandataire et de service dans le dossier /etc/apache2/sites-available. Ce fichier sert à sécuriser ma page web avec les certificats récupéré sur gandi, et à mettre en place les proxy et reverse proxy.

Sur la machine de service :

fichier de conf apache2 sur la machine de service


Sur la mandataire :

Fichier de conf de apache2 sur la mandataire

J'ai fait exactement la même chose dans le dossier /etc/apache2/sites-enabled car je n'ai pas compris la différence entre les dossier.

Il ne faut pas oublié d'activité certains modules apache2 et de redémarrer le service apache2 :

a2enmod proxy
a2enmod proxy_http
a2ensite /etc/apache2/sites-enabled/jeanluc.site.conf
a2ensite /etc/apache2/sites-available/jeanluc.site.conf

service apache2 restart #pour redémarrer apache2

Par manque de créativité, je n'ai presque pas modifié le fichier index.html. J'ai retiré le titre de la page pour le index.html de la machine mandataire et je l'ai remplacé par "Robotech.monster = NUL".

Voici ma page web en http.

Je pense que c'est la page de la mandataire car la page de ma machine de service contient la mention "Robotech.monster = NUL" en titre.

Il doit y avoir un problème avec la redirection du site vers le site de la machine mandataire néanmoins on peut voir que le CNAME fonctionne.

Résultat de dig :

DNSSEC

Pour le DNSSEC, le but est d'avoir un site en https, pour cela, il faut que le site soit sécurisé et donc qu'il soit certifié par une autorité de certification.

key-directory "/etc/bind/keys";
dnssec-policy "dnspol";
inline-signing yes;

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

Et sur https://gandi.net, j'ai communiqué les 2 clés générés par la commande openssl et activé le DNSSEC.

Voici l'état de mon DNSSEC selon https://dnsviz.net/ et selon https://dnsviz.net/.

Lien vers les pages d'où proviennent les captures d'écran : https://dnsviz.net/d/jeanluc.site/dnssec/ & https://dnssec-debugger.verisignlabs.com/jeanluc.site

Etat de mon DNS sur https://dnsviz.net/

C'est assez explicite, ça ne marche pas. J'ai dû oublié d'inclure les clés dans un fichier ou je l'ai mal fait, et par manque de temps ( et/ou de courage ), je n'ai pas corrigé le problème.

Malgré tout, on peut accéder à ma page web en https car mon binôme, lui, a réussi à créer un DNSSEC correct.

Voici ma page web en https.

Cette capture d'écran a été réalisé par Pierre qui lui arrive à accéder à ma page en https.

Résultat de dig pour l'https :

Conclusion

J'ai réalisé dans gloabalement les tâches demandés jusqu'à la partie SE4 IdO sécurité système/réseau#Sécurisation de serveur DNS par DNSSEC.

J'ai installé fail2ban pour la partie suivante mais sans intérêt puisque mon DNSSEC ne fonctionne pas.