TP sysres IMA5sc 2018/2019 G8

De Wiki d'activités IMA
Révision datée du 17 décembre 2018 à 15:39 par Rtoin (discussion | contributions) (Sécurisation via RAID5)

TP GIS

Conteneurs à la main

Création des espaces disques

dd if=/dev/zero of=diskTPconteneur bs=1024k count=10240
mkfs diskTPconteneur
mkdir /tmp/fs1
mkdir /tmp/fs2
mkdir /tmp/fs3
mount -o loop diskTPconteneur /tmp/fs1
debootstrap --include apache2,nano  stable /tmp/fs1
echo "proc /proc proc defaults 0 0" >> /tmp/fs1/etc/fstab
umount /tmp/fs1
cp diskTPconteneur ./diskTPconteneur2
cp diskTPconteneur ./diskTPconteneur3
mv diskTPconteneur ./diskTPconteneur1
mount -o loop diskTPconteneur1 /tmp/fs1
mount -o loop diskTPconteneur2 /tmp/fs2
mount -o loop diskTPconteneur3 /tmp/fs3
df -h

Dans 3 terminaux différents:

unshare -p -f -m -n -u chroot /tmp/fs1/ /bin/sh -c "mount /proc ; /bin/bash"
unshare -p -f -m -n -u chroot /tmp/fs2/ /bin/sh -c "mount /proc ; /bin/bash"
unshare -p -f -m -n -u chroot /tmp/fs3/ /bin/sh -c "mount /proc ; /bin/bash"

Création du commutateur

ip link add commTPconteneur type bridge
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
ps aux | grep unshare
ip link set eth0@vif1 netns /proc/13812/ns/net name eth0
ip link set eth0@vif2 netns /proc/13860/ns/net name eth0
ip link set eth0@vif3 netns /proc/13883/ns/net name eth0
ip link set eth1@vif4 netns /proc/13812/ns/net name eth1
ip link set vif1 master commTPconteneur
ip link set vif2 master commTPconteneur
ip link set vif3 master commTPconteneur
ip link set vif4 master bridge
brctl show
nsenter -t 13812 -n ip address add dev eth0 192.168.0.101/24
nsenter -t 13860 -n ip address add dev eth0 192.168.0.102/24
nsenter -t 13883 -n ip address add dev eth0 192.168.0.103/24
nsenter -t 13812 -n ip address add dev eth1 172.26.145.100/24

Pour le mandataire inverse

ip route add default via 172.26.145.254
ip link set vif1 up
ip link set vif2 up
ip link set vif3 up
ip link set vif4 up
ip link set commTPconteneur up

Dans chaque terminal faisant tourner un conteneur:

ip link set eth0 up

Création des DNS sur Gandi

name:grandPote | type: A | adresse: 172.26.145.100
name: ptitPote1 | type: CNAME | hostname: grandPote
name: ptitPote2 | type: CNAME | hostname: grandPote
a2enmod proxy proxy_http
apache2 restart

Modification de /etc/apache2/site-enabled

<VirtualHost *:80>
       ServerName ptitPote1.plil.space
       ServerAdmin webmaster@localhost
       ErrorLog ${APACHE_LOG_DIR}/error.log
       CustomLog ${APACHE_LOG_DIR}/access.log combined
       ProxyPass / http://192.168.0.102/
       ProxyPassReverse / http://192.168.0.102/
       ProxyRequests Off
</VirtualHost>
<VirtualHost *:80>
       ServerName ptitPote2.plil.space
       ServerAdmin webmaster@localhost
       ErrorLog ${APACHE_LOG_DIR}/error.log
       CustomLog ${APACHE_LOG_DIR}/access.log combined
       ProxyPass / http://192.168.0.103/
       ProxyPassReverse / http://192.168.0.103/
       ProxyRequests Off
</VirtualHost>

Modification des fichiers /var/www/html/index.html dans les conteneurs

/var/www/html# echo "Serveur ptitPote1" > index.html
/var/www/html# echo "Serveur ptitPote2" > index.html

10h11 => Serveurs Web OK avec unshare

Conteneurs avec Docker

docker run -i -t debian /bin/bash
export http_proxy="http://proxy.polytech-lille.fr:3128/"
apt-get update
apt-get nano
apt-get apache2
docker commit fae2449c3b9a
docker network create octopus
docker run -i --net=octopus -t ba94e9aada65
docker run -i --net=octopus -t ba94e9aada65
service apache2 stop
docker run -i --net=octopus -p 80:80 -t ba94e9aada65
name:Alibaba | type: A | adresse: 172.26.145.35
name: Voleur1 | type: CNAME | hostname: grandPote
name: Voleur2 | type: CNAME | hostname: grandPote

Modification de /etc/apache2/site-enabled

<VirtualHost *:80>
      ServerName Voleur1.plil.space
      ServerAdmin webmaster@localhost
      ErrorLog ${APACHE_LOG_DIR}/error.log
      CustomLog ${APACHE_LOG_DIR}/access.log combined
      ProxyPass / http://172.20.0.2/
      ProxyPassReverse / http://172.20.0.2/
      ProxyRequests Off
</VirtualHost>
<VirtualHost *:80>
ServerName Voleur2.plil.space
      ServerAdmin webmaster@localhost
      ErrorLog ${APACHE_LOG_DIR}/error.log
      CustomLog ${APACHE_LOG_DIR}/access.log combined
      ProxyPass / http://172.20.0.3/
      ProxyPassReverse / http://172.20.0.3/
      ProxyRequests Off
</VirtualHost>

10h20 Serveurs Web (docker) OK

TP PrA

Déménagement des serveurs Chassiron et Cordouan

Deux rails sont à disposition:

  • 1* Dell ReadyRail, taille 2U, type B4, mode Static
  • 1* Dell ReadyRail, taille 2U, type B6, mode Sliding

D'après la documentation fournie par Dell, les serveurs PowerEdge R520 (modèle des serveurs Chassiron et Cordouan) sont compatibles avec les rails de type B4, B6 et B13.

Les serveurs seront fixés à mi-hauteur de la baie afin de pouvoir placer un PC dessus.

Pour Chassiron:

  • rail de type B4 occupant 1'unité, fixé à l'unité 22
  • le serveur occupera donc les unités 21 et 22

Pour Cordouan:

  • rail de type B6 occupant 2 unités, fixé aux unités 19 et 20
  • le serveur occupera donc les unités 19 et 20

Pour l'alimentation:

  • fixation à l'unité 1 afin d'être sécurisé en cas d'inondation
  • fixation à l'arrière de la baie afin de faciliter l'alimentation du PC

Partie commune: installation d'une machine virtuelle sur Cordouan

Création de la machine virtuelle

Connexion en ssh sur Cordouan

ssh root@cordouan.insecserv.deule.net

Création de la machine virtuelle à l'aide de xen en utilisant l'adresse IP qui nous a été attribuée. La gateway est fournie dans le sujet du TP

xen-create-image --hostname=nyx --ip=193.48.57.184 --netmask=255.255.255.240 --gateway=193.48.57.160 --dir=/usr/local/xen

Mot de passe root: zhWEcNfwANbzCr5fk2mJHg6

Modification du fichier /etc/xen/nyx.cfg pour permettre à la machine virtuelle de se lancer correctement

#Networking
vif + bridge=StudentsInfo

Accès à la console:

xl console nyx

Sortie de la console:

ctrl + alt gr + ]

Extinction de la machine:

xl shutdown nyx

Création des partitions système

Nous allons créer des partitions sur l'hôte pour héberger /home et /var

lvcreate -L10G -n nyx-home virtual
lvcreate -L10G -n nyx-var virtual

Modification du fichier /etc/xen/nyx.cfg pour ajouter les disques

(+)
disk        = [
                 'phy:/dev/virtual/nyx-home,xvda3,w',
                 'phy:/dev/virtual/nyx-var,xvda4,w',
              ]

Après redémarrage de la VM, nous créeons les systèmes de fichiers sur les volumes:

mkfs -t ext4 /dev/xvda3
mkfs -t ext4 /dev/xvda4

Utiliser la commande fdisk -l nous a permi de constater que les volumes étaient bien montés

Home

Afin de s'assurer que la partition home soit montée au démarrage de la VM, nous modifions le fichier /etc/fstab de celle-ci:

(+)
/dev/xvda3 /home ext4 defaults 0 2

Nous pouvons ensuite simplement monter la partition

mount -a

Var

La partition var est d'abord montée dans un répertoire temporaire /mnt:

mount /dev/xvda4 /mnt
mv /var/* /mnt

La partition est ensuite rajoutée dans le fichier /etc/fstab:

/dev/xvda4 /var ext4 defaults 0 2

Serveur SSH

Nous installons le client ssh puis modifions le fichier /etc/ssh/ssh_conf afin de pouvoir se connecter en root

Serveur DNS

apt-get install apache2 bind9

Nous réservons notre nom de domaine sur Gandi: www.nyxplil.space

Nous commençons par créer le dossier pour la page web:

mkdir /var/www/www.nyxplil.space

Nous créons ensuite le fichier dns.nyxplil.space avec le contenu suivant:

;
; BIND data file for local loopback interface
;
$TTL    604800
@       IN      SOA     ns.nyxplil.space. root.nyxplil.space (
                             2         ; Serial
                        604800         ; Refresh
                         86400         ; Retry
                       2419200         ; Expire
                        604800 )       ; Negative Cache TTL
;
       IN      NS      ns.nyxplil.space.
ns      IN      A       193.48.57.184
www     IN      A       193.48.57.184 ;

Nous configurons ensuite le fichier named.conf.local afin d'autoriser le transfert de paquet vers le DNS esclave

zone "nyxplil.space" {
       type master;
       file "/etc/bind/dns.nyxplil.space";
       allow-transfer {217.70.177.40;};
};
service bind9 restart

Enfin, il nous reste quelques réglages à faire depuis Gandi. Pour les "glue records":

nom du serveur : ns.nyxplil.space
ip : 193.48.57.184

Pour les DNS:

'DNS1' : ns.nyxplil.space
'DNS2' : ns6.gandi.net

mkdir nyxplil.space.dnssec cd nyxplil.space.dnssec

dnssec-keygen -a RSASHA1 -b 2048 -f KSK -r /dev/urandom -n ZONE nyxplil.space
dnssec-keygen -a RSASHA1 -b 1024 -r /dev/urandom -n ZONE nyxplil.space


$include /etc/bind/nyxplil.space.dnssec/nyxplil.space-ksk.key
$include /etc/bind/nyxplil.space.dnssec/nyxplil.space-zsk.key
root@nyx_rsa:/etc/bind/nyxplil.space.dnssec# dnssec-signzone -o nyxplil.space -k nyxplil.space-ksk ../dns.nyxplil.space nyxplil.space-zsk

Verifying the zone using the following algorithms: RSASHA1. Zone fully signed: Algorithm: RSASHA1: KSKs: 1 active, 0 stand-by, 0 revoked

                   ZSKs: 1 active, 0 stand-by, 0 revoked

../dns.nyxplil.space.signed

Certificat SSL

Création d'un SSR

openssl req -nodes -newkey rsa:2048 -sha1 -keyout nyxplil.space.key -out nyxplil.space.csr

Achat d'un certificat sur Gandi et vérification par fichier à ajouter dans:

/var/www/html/.well-known/pki-validation

On télécharge ensuite le certificat intermédiaire de Gandi et le certificat de notre domaine et on ajoute en plus notre clef privée créé précédemment, le tout placés dans le dossier:

GandiStandardSSLCA2.pem
nyxplil.space.crt
nyxplil.space.key

On ajoute une nouvelle configuration dans /etc/apache2/sites-available/000-nyxplil.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>

On rajoute également dans ce fichier une redirection pour être toujours connecté en https:

     <VirtualHost 193.48.57.182:80>
              ServerName www.nyxplil.space
              ServerAlias nyxplil.space
              Redirect / https://nyxplil.space
      </VirtualHost>

On utilise enfin les commandes suivantes pour activer notre module ssl et notre configuration ssl

a2enmod ssl
a2ensite 000-nyxplil.space-ssl.conf
service apache2 restart

Sécurisation via RAID5

Création de 3 volumes sur Cordouan

lvcreate -L 1G -n /dev/virtual/nyx-raid1
lvcreate -L 1G -n /dev/virtual/nyx-raid2
lvcreate -L 1G -n /dev/virtual/nyx-raid3

On ajoute dans /etc/xen/nyx.cfg

'phy:/dev/virtual/nyx-raid1, xvdd1, w',
'phy:/dev/virtual/nyx-raid2, xvdd2, w',
'phy:/dev/virtual/nyx-raid3, xvdd3, w',

reboot de la machine sur cordouan

Installation de mdadm

apt-get install mdadm

on crée le disque RAID5

 mdadm --create /dev/md0 --level=5 --assume-clean --raid-devices=3 /dev/xvdd1 /dev/xvdd2 /dev/xvdd3 

On installe un système de fichier dessus

 mkfs -t ext4 /dev/md0 

On monte le disque:

mdadm --detail --scan >> /etc/mdadm/mdadm.conf
mount /dev/md0 /mnt

Test de reconstruction:

Nous commençons par ajouter un fichier test.txt au dossier /mnt

Nous supprimons ensuite l'une des partitions, ici la partition xvdd2

mdadm --set-faulty /dev/md0 /dev/xvdd2
mdadm --remove /dev/md0 /dev/xvdd2
cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] 
md0 : active raid5 xvdd3[2] xvdd1[0]
     2093056 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/2] [U_U]

Nous avons pu à ce moment vérifier l'intégrité du fuchier test.txt: aucune donnée n'était perdue. Nous lançons alors la reconstruction de la partition précédemment supprimée:

cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] 
md0 : active raid5 xvdd2[3] xvdd3[2] xvdd1[0]
     2093056 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/2] [U_U]
     [====>................]  recovery = 22.1% (232344/1046528) finish=0.5min speed=25816K/sec
cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] 
md0 : active raid5 xvdd2[3] xvdd3[2] xvdd1[0]
     2093056 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU]
unused devices: <none>

Cassage de mot de passe WPA-PSK par force brute

Nous allons essayer se casser le mot de passe de notre point d'accès Cracotte8. Pour cela nous allons utiliser le paquetage aircrack-ng. On va dans un premier temps récupérer le WPA handshake provenant de notre point d'accès en paramétrant notre interface wifi pour qu'elle écoute les données envoyées par Cracotte8:

ip link set down wlp3s0
airmon-ng start wlp3s0

On récupère l'adresse du point d'accès:

airodump_ng mon1

On écoute pour recevoir le handshake qu'on sauvegarde:

airodump-ng mon1 --channel 9 --bssid 04:DA:D2:9C:50:57 --write capture

Une fois le fichier .cap récupéré on le transfert sur une machine tutur pour utiliser un brute force par dictionnaire. On suppose que la clé est composé de 8 chiffres donc on crée un fichier texte comportant tous les nombres de 00000000 à 99999999 qu'on utilise ensuite pour le cassage de la clé:

aircrack-ng capture03.cap -w dico.txt

Craquage cle.png