TP sysres IMA5sc 2018/2019 G6

De Wiki d'activités IMA

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 :

RAID

On commence par créer 3 partitions :

lvcreate -L10G -n poseidon-part1 virtual
lvcreate -L10G -n poseidon-part2 virtual
lvcreate -L10G -n poseidon-part3 virtual

On complète ensuite le fichier /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'
		'phy:/dev/virtual/poseidon-part1,xvdd1,w'
		'phy:/dev/virtual/poseidon-part2,xvde1,w'
		'phy:/dev/virtual/poseidon-part3,xvdf1,w'
	 ]
-----------------

Grâce à cette ajout, on indique que les partitions créés seront reliés aux disques xvdd1, xvde1, et xvdf1 de la VM.

Ensuite, on crée le raid5, qui sera quant à lui sur /dev/md0 :

mdadm --create /dev/md0 --level=5 --assume-clean --raid-devices=3 /dev/xvdd1 /dev/xvde1 /dev/xvdf1

Avec mkfs, on formate ensuite md0 pour créer un sytème de fichier au format ext4 :

mkfs -t ext4 /dev/md0

On créé un point de montage et on monte la partition :

mkdir /mnt_raid5
mount /dev/md0 /mnt_raid5

Dans cet état, le raid disparait lorsqu'on redemarre le serveur. On automatise donc :

On automatise la création du raid :

mdadm --monitor --daemonise /dev/md0

Ensuite; on automatise le montage de la partition en ajoutant au fichier /etc/fstab :

/dev/md0 /mnt_raid5/ ext4 defaults 0 1

On vérifie la configuration de notre RAID avec la commande suivante :

mdadm --detail /dev/md0

Freeradius

On installe freeradius :

apt-get install freeradius

Ensuite dans /etc/freeradius/3.0/users: poseidon Cleartext-Password := "glopglop"

Puis on se rend dans /etc/freeradius/3.0/mods-enabled :

---------
eap{
---------
default_eap_type = peap
--------
}
--------

Ensuite dans le fichier /etc/freeradius/mods-enabled/mschap, on décommente et on change :

use_mppe = yes
require_encryption = yes
require_strong = yes

On ajoute la ligne :

with_ntdomain_hack = yes