TP sysres IMA5sc 2018/2019 G6
Sommaire
- 1 Séance 1
- 1.1 Création du dd virtuel
- 1.2 Formattage du disc
- 1.3 Création des points d'ancrage dans /tmp
- 1.4 Montage du disk
- 1.5 Accès au dépôt distant de debian
- 1.6 Création du système de fichier sur fs1
- 1.7 Pour simplifier l'acces
- 1.8 Démontage du disk
- 1.9 Copier-coller du disk.im en disk1.img disk2.img disk3.img
- 1.10 Isolation des conteneurs (aussi au niveau réseau)
- 1.11 Création d'un commutateur virtuel
- 1.12 Création des 3 interfaces reseaux et de l'interface proxy inverse
- 1.13 Récupération des PID
- 1.14 Liaison des vif sur les conteneurs
- 1.15 Démarrage des interfaces et du pontpont
- 1.16 Ajout des IPs des conteneurs
- 2 Séance 2
- 3 Docker
- 4 Séance 3 & 4 : PrA
- 5 Séance 5
Séance 1
Création du dd virtuel
dd if=/dev/zero of=disk.img bs=1024k count=10240
Formattage du disc
mkfs disk.img
Création des points d'ancrage dans /tmp
cd /tmp mkdir fs1 mkdir fs2 mkdir fs3
Montage du disk
mount -o loop disk.img /tmp/fs1
Accès au dépôt distant de debian
export http_proxy="http://proxy.polytech-lille.fr:3128"
Création du système de fichier sur fs1
deboostrap --include apache2,nano,vim stable /tmp/fs1
Pour simplifier l'acces
echo "proc /proc proc defaults 0 0" >> etc/fstab
Démontage du disk
umount /tmp/fs1
Copier-coller du disk.im en disk1.img disk2.img disk3.img
On monte les 3 disques sur les /tmp/fs respectifs :
mount -o loop disk1.img /tmp/fs1 mount -o loop disk2.img /tmp/fs2 mount -o loop disk3.img /tmp/fs3
Isolation des conteneurs (aussi au niveau réseau)
unshare -n -u -p -f -m chroot /tmp/fs1 /bin/sh -c "mount /proc ; /bin/bash" unshare -n -u -p -f -m chroot /tmp/fs2 /bin/sh -c "mount /proc ; /bin/bash" unshare -n -u -p -f -m chroot /tmp/fs3 /bin/sh -c "mount /proc ; /bin/bash"
Création d'un commutateur virtuel
ip link add pontpont type bridge
Création des 3 interfaces reseaux et de l'interface proxy inverse
ip link add vif1 type veth peer name eth0@vif1 ip link add vif2 type veth peer name eth0@vif2 ip link add vif3 type veth peer name eth0@vif3 ip link add vif4 type veth peer name eth1@vif4
ip link set vif1 master pontpont ip link set vif2 master pontpont ip link set vif3 master pontpont ip link set vif4 master bridge
Récupération des PID
Sur la Zabeth (hors conteneur) :
ps aux | grep unshare
root 20224 0.0 0.0 5828 700 pts/1 S 07:08 0:00 unshare -n -u -p -f -m chroot /tmp/fs1 /bin/sh -c mount /proc ; /bin/bash root 20286 0.0 0.0 5828 608 pts/2 S 07:10 0:00 unshare -n -u -p -f -m chroot /tmp/fs2 /bin/sh -c mount /proc ; /bin/bash root 20317 0.0 0.0 5828 608 pts/3 S 07:11 0:00 unshare -n -u -p -f -m chroot /tmp/fs3 /bin/sh -c mount /proc ; /bin/bash root 20693 0.0 0.0 12784 956 pts/0 S+ 07:15 0:00 grep unshare
Les PIDs correspondent à la première colonne (20224, 20286 et 20317)
Liaison des vif sur les conteneurs
ip link set eth0@vif1 netns /proc/[PID processus unshare 1]/ns/net name eth0 ip link set eth0@vif2 netns /proc/[PID processus unshare 2]/ns/net name eth0 ip link set eth0@vif3 netns /proc/[PID processus unshare 3]/ns/net name eth0 ip link set eth1@vif4 netns /proc/[PID processus unshare 1]/ns/net name eth1
Démarrage des interfaces et du pontpont
ip link set vif1 up ip link set vif2 up ip link set vif3 up ip link set vif4 up ip address add dev pontpont 192.168.0.1/24
Ajout des IPs des conteneurs
Conteneur 1
ip address add dev eth0 192.168.0.101/24 ip address add dev eth1 172.26.145.111/24
Conteneur 2
ip address add dev eth0 192.168.0.102/24
Conteneur 3
ip address add dev eth0 192.168.0.103/24
Sur chaque conteneur on redémarre ensuite l'interface eth0 :
ip link set eth0 down ip link set eth0 up
Sur le conteneur 1, on redémarre aussi l'interface eth1 :
ip link set eth1 down ip link set eth1 up
Séance 2
Réservation de sous domaines sur Gandi.net
Champ A : feutriergosse.plil.space (A correspond à l'IPv4 et AAAA correspond à l'IPv6)
Ce sous-domaine est lié à l'IP 172.26.145.111 (ip du mandataire inverse)
On ajoute aussi 2 alias :
CNAME : feutriergosse1.plil.space CNAME : feutriergosse2.plil.space
Configuration d'Apache2
Le conteneur 1 sert de mandataire inverse et redirige :
- les requêtes de feutriergosse1.plil.space vers le conteneur 2 d'IP 192.168.0.102
- les requêtes de feutriergosse2.plil.space vers le conteneur 3 d'IP 192.168.0.103
Configuration du fichier /etc/apache2/sites-available/000-default
<VirtualHost *:80> ServerName feutriergosse1.plil.space ServerAdmin webmaster@feutriergosse1.plil.space ProxyPass / http://192.168.0.102/ ProxyPassReverse / http://192.168.0.102/ ProxyRequests Off ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost> <VirtualHost *:80> ServerName feutriergosse2.plil.space ServerAdmin webmaster@feutriergosse2.plil.space ProxyPass / http://192.168.0.103/ ProxyPassReverse / http://192.168.0.103/ ProxyRequests Off ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost>
- service apache2 restart sur chaque conteneur
10h15 => Serveurs Web unshare OK
Docker
Tout d'abord il faut remettre Docker à ses paramètres d'origines :
nano /etc/default/docker
on commente la ligne avec iptable=false
iptables-save service docker restart docker run -i -t debian /bin/bash
Dans le conteneur :
export http_proxy="http://proxy.polytech-lille.fr:3128" export https_proxy="https://proxy.polytech-lille.fr:3128" apt-get update apt-get install nano apt-get install apache2
Hors du conteneur :
docker ps docker commit [ID du conteneur] apache2(c'est le nom choisi pour l'image)
on quitte le conteneur (on peut le tuer)
docker network create pontpont
docker run -i -t apache2 --net=pontpont docker run -i -t apache2 --net=pontpont docker run -i -t apache2 --net=pontpont -p80:80
10h20 Serveurs Web (docker) OK
Séance 3 & 4 : PrA
Prise de photo de la baie existante et schématisation des câblage
Pour nous assurer d'être en mesure de remettre la baie en état à la fin, nous avons commencé par prendre des photos de l'ancienne baie, et nous avons schématisé les branchements des IMA2A5.
Démontage de l'ancienne baie
Nous avons ensuite démonté la baie, conteneurs par conteneurs. Pour cela nous avons d'abord enlevé toutes les cartes du conteneur à retirer en prenant soin de conserver leur ordre. Nous avons profité de l'occasion pour les aspirer.
Nous avons retiré d'abord les élements du haut de la baie pour éviter que celle-ci bascule (sauf le bloc de multiprise qui permettait de maintenir la structure solidaire).
Nous avons ensuite récupéré les écrous des anciens rails qui permettent de visser les conteneurs.
Installation de la nouvelle baie
Avant de déplacer la nouvelle baie à l'emplacement de l'ancienne, nous avons retiré la porte arrière pour faciliter l'accès aux câbles une fois la baie installée (nous avons aussi retiré les éléments décoratifs en plastique, et les plaques métalliques de la porte arrière).
Nous avons ensuite déplacé la baie à l'emplacement de l'ancienne puis retiré la plaque du côté droit de la baie pour faciliter l'installation des différents éléments.
Nous avons ensuite réinstallé les différents conteneurs, en commençant par marquer l'emplacement des écrous au crayon gris. Après chaque conteneurs placé, nous avons remis toutes les plaques dans le même ordre. Grace au schéma réalisé avant le démontage, nous avons pu recâbler la baie.
Nous avons pris soin d'attacher les fibres optiques pour éviter qu'elles ne s'abîment et qu'elles restent accessibles.
Création d'une VM sur Cordouan
Chaque groupe doit créer une machine virtuelle sur le serveur Cordouan en utilisant Xen.
Pour cela nous utilisons la commande : xen-create-image
Nous y ajoutons les paramètres suivants :
- nom de notre machine : --hostname=poseidon
- son adresse IP : --ip=193.48.57.182
- l’adresse du routeur
- le répertoire où les disques virtuels doivent être créés : --dir=/usr/local/xen
On créé la machine avec la commande :
xen-create-image --hostname=poseidon --ip=193.48.57.182 --dir=/usr/local/xen
vi /etc/xen/poseidon.cfg
pour modifier le bridge en "IMA5sc"
xl create poseidon.cfg
Créer une instance de la VM
xl console poseidon
Connexion à la VM, avec le login root, mot de passe fourni a la fin de l'installation
passwd
Changer le mot de passe
ip route add default via 193.48.57.190 dev eth0 onlink
cd etc/ssh/ vi sshd_config
On décommente : PermitRootLogin yes
Séance 5
Remarques
Suite à la mise en route du deuxième routeur, notre VM n'avait plus accès au réseau (local et internet) Nous avions en fait oublié de préciser le netmask et la gateway :
# The loopback network interface auto lo iface lo inet loopback # The primary network interface auto eth0 iface eth0 inet static address 193.48.57.182 netmask 255.255.255.240 gateway 10.60.13.254
On avons également désinstallé docker-ce car nous n'en avons pas besoin dans la suite de projet.
Enfin nous avons reboot
notre VM.
Ajout et configuration d'un serveur DNS sur la VM
Pour commencer nous avons installé les packages bind9
et apache2
puis nous avons fait l'aquisition du nom de domaine neptune-poseidon.space
sur le site gandi.net
qui nous servira tout au long du TP.
Dans le dossier de configuration de bind9 à l'emplacement /etc/bind
, on créé le fichier de zone db.neptune-poseidon.space
et on ajoute :
@ IN SOA ns.neptune-poseidon.space. root.neptune-poseidon.space ( 2 ; Serial 604800 ; Refresh 86400 ; Retry 2419200 ; Expire 604800 ) ; Negative Cache TTL ; IN NS ns.neptune-poseidon.space. // dns principal IN NS ns6.gandi.net. // dns secondaire : pas obligatoire @ IN A 193.48.57.182 // permet d'accéder au site sans le "www." ns IN A 193.48.57.182 // permet d'accéder au site avec le "http/https" www IN A 193.48.57.182 // permet d'accéder au site avec le "www."
Dans le fichier named.conf.local
:
zone "neptune-poseidon.space" { type master; file "/etc/bind/db.neptune-poseidon.space"; allow-transfer{217.70.177.40;}; };
Dans le fichier named.conf.options
:
options { directory "/var/cache/bind"; //............// dnssec-enable yes; dnssec-validation auto; listen-on-v6 { any; }; allow-recursion { localhost; }; };
Ensuite on se rend sur le site gandi.net
puis dans "Domains"
:
- Dans
Glue Record
, on ajoute :- namespace : neptune-poseidon.space
- l'adresse IP de notre VM : 193.48.57.182
- Dans
Nameservers
on ajoute le DNS principal et secondaire :- DNS1 : ns.neptune-poseidon.space
- DNS2 : ns6.gandi.net
Ajout du certificat SSL
Premièrement, nous créons un CSR :
openssl req -nodes -newkey rsa:2048 -sha1 -keyout neptune-poseidon.space.key -out neptune-poseidon.space.csr
Nous remplissons ensuite les informations territoriales utiles à la génération du CSR.
Ensuite sur gandi.net
dans "SSL Certificates"
on achète le certificat (bien qu'il soit indiqué comme coutant 12€, lors de l'encaissement il devient gratuit)
Pour la vérification, on choisit la méthode de vérification par copie de fichier, on télécharge le fichier de vérification sur notre VM dans :
/var/www/html/.well-known/pki-validation
Sur Gandi.net -> SSL Certificates -> Overview : On télécharge le certificat intérmédiaire de Gandi et le certificat de notre domaine. On récupère également la clef privée créé précédemment. On a donc :
GandiStandardSSLCA2.pem neptune-poseidon.space.crt neptune-poseidon.space.key
On place ces trois fichiers dans le dossier ssl
Ensuite on ajoute ces fichiers dans une nouvelle configuration dans /etc/apache2/sites-available : 000-neptune-poseidon.space-ssl.conf
<VirtualHost 193.48.57.182:443> ServerName www.neptune-poseidon.space ServerAlias neptune-poseidon.space DocumentRoot /var/www/html/ CustomLog /var/log/apache2/secure_acces.log combined SSLEngine on SSLCertificateFile /etc/ssl/neptune-poseidon.space.crt SSLCertificateKeyFile /etc/ssl/neptune-poseidon.space.key SSLCertificateChainFile /etc/ssl/GandiStandardSSLCA2.pem SSLVerifyClient None </VirtualHost>
Dans ce même fichier on ajotue une redirection pour être toujours connecté en https :
--------------------------- <VirtualHost 193.48.57.182:80> ServerName www.neptune-poseidon.space ServerAlias neptune-poseidon.space Redirect / https://neptune-poseidon.space </VirtualHost>
On active le module ssl :
a2enmod ssl
On active notre configuration ssl :
a2ensite 000-neptune-poseidon.space-ssl.conf
On relance le service apache2 :
service apache2 restart
Ajout du DNSSEC
Pour activer le DNSSEC, on commence par ajouter dans le fichier /etc/bind/named.conf.options
: dnssec-enable yes;
options { directory "/var/cache/bind"; //............// dnssec-enable yes; dnssec-validation auto; listen-on-v6 { any; }; allow-recursion { localhost; }; };
On génère ensuite des clefs KSK et ZSK avec l'algorithme RSA/SHA-1 (il sera important de spécifié le même à gandi.net:
dnssec-keygen -a RSASHA1 -b 2048 -f KSK -r /dev/urandom -n ZONE neptune-poseidon.space dnssec-keygen -a RSASHA1 -b 1024 -r /dev/urandom -n ZONE neptune-poseidon.space
Après avoir renommé les 2 clefs on les ajoute au fichier /etc/bind/db.neptune-poseidon.space
par le biais de $include
$include /etc/bind/neptune-poseidon.space.dnssec/neptune-poseidon.space_ksk.key $include /etc/bind/neptune-poseidon.dnssec/neptune-poseidon.space_zsk.key
Attention : les $include ...
doivent être placé en dessous de la ligne $TTL 604800
Grace aux clefs générées on peut maintenant signer la zone :
dnssec-signzone -o neptune-poseidon.space -k neptune-poseidon.space_ksk ../db.neptune-poseidon.space neptune-poseidon.space_zsk
Ensuite, dans le fichier named.conf.local
on doit remplacer le fichier db.neptune-poseidon.space
par ce même fichier mais signé (db.neptune-poseidon.space.signed
) grâce à la commande précédente.
Puis on restart le service bind9 :
service bind9 restart
Sur gandi.net
on active le DNSSEC et on entre les 2 clefs générées précedement.
Pour vérifier le bon fonctionnement du DNSSEC (et du DNS en général), on utilise le site : http://dnsviz.net ainsi que son DNSSEC Debugger
Création des partitions
Afin d'optimiser la gestion de l'espace disque on créé 2 disques durs virtuels sur Cordouan
lvcreate -L10G -n poseidon-home virtual lvcreate -L10G -n poseidon-var virtual
On ajoute ensuite les disques dans le fichier de configuration de la VM, dans notre cas /etc/xen/poseidon.cfg
.
disk = [ 'file:/usr/local/xen/domains/poseidon/disk.img,xvda2,w', 'file:/usr/local/xen/domains/poseidon/swap.img,xvda1,w', 'phy:/dev/virtual/poseidon-home,xvdb1,w', 'phy:/dev/virtual/poseidon-var,xvdc1,w' ]
Ensuite, de nouveau sur la VM, on créé les sytèmes de fichiers :
mkfs -t ext4 /dev/xvdb1 mkfs -t ext4 /dev/xvdc1
Dans /etc/fstab
on ajoute :
/dev/xvdb1 /home ext4 defaults 0 2
On monte le disque avec la commande de montage :
mount -a
Pour ne pas perdre le contenu de notre /var
, on le monte temporairement sur /mnt
, et on copie ensuite le contenu de /var
sur /mnt
:
mount /dev/xvdc1 /mnt mv /var/* /mnt
Dans le fichier /etc/fstab
on ajoute :
/dev/xvdc1 /var ext4 defaults 0 2
enfin on démonte le /mnt
avec la commande de démontage :
umount /mnt
Cassage de mot de passe WPA-PSK par force brute
On installe la suite aircrack-ng :
apt-get install aircrack-ng
Ensuite avec ip a
pour regarder les interfaces wifi
On créé une interface qui écoute sur le wifi :
airmon-ng start wlx40a5ef012180
Puis on démarre l'écoute sans filtre :
airodump-ng wlan0mon
On repère l'ESSID de cracotte06 et on note son BSSID et son channel (CH).
airodump-ng --bssid 04:DA:D2:9C:50:55 wlan0mon --channel 9 --write resultcrack // nom du fichier de sortie
On crée un fichier qui va servir de dictionnaire à aircrack. Pour cela on créé un fichier c qui va afficher toutes les valeurs d'une boucle qui s'incrémente de 0 à 99999999. On exécute ce programme et on redirige la sortie vers un fichier. Ce fichier contient donc tous les nombres de 0 à 99999999 avec un nombre par ligne.
Enfin on lance le craquage avec :
aircrack-ng resultcrack-01.cap -w dico.txt
- resultcrack-01.cap : c'est le fichier récupérér précédemment par airodump-ng avec le canal 9 et le bssid précisé
- dico.txt : c'est le dictionnaire créé grâce au petit fichier c que nous avons implémenté
Lors de l'exécution de la commande, un affichage nous permet de voir combien d'heures il reste, quel pourcentage a été effectué ainsi que la clef qu'il est entrain d'essayer. Après plusieurs heures, on trouve enfin la clef :