Cahier 2017 groupe n°6

De Wiki de Projets IMA
Révision datée du 22 novembre 2017 à 11:20 par Adorian (discussion | contributions) (Sécurisation et cryptage des données)

Tâche spécifique

Présentation de la tâche

Définition d'un DNSSEC

Un serveur DNS sert à obtenir l'adresse IP correspondant à un nom de domaine (URL dans le cas d'un site Web). L'adresse IP est indispensable à notre navigateur car sans elle, il est incapable de contacter le serveur web responsable du site visité.

Le DNSSEC permet de sécuriser les données envoyées par le DNS. Il a été invité afin de protéger le DNS d'attaques. Le DNSSEC appose une "signature" aux données afin de les certifier auprès de l'utilisateur.

Objectif

L'objectif de cette tâche secondaire est de réaliser des test approfondis sur le DNSSEC de la plateforme. Dans un premier temps, il s'agit de l'installer en salle serveur. Dans un second temps, il s'agit d'étudier le bon fonctionnement du DNSSEC (les clefs changent-elles correctement chaque semaine ?)

Installation du matériel

Tâches communes

Installation de la machine virtuelle

Création

Les machines virtuelles que nous installons sont sur le serveur cordouan que nous accédons via SSH. La création des machines virtuelles (VMs) s'effectue grâce à la commande "xen". Ainsi, depuis cordouan, nous lançons la commande xen-create-image en prenant soin d'y ajoutant les paramètres importants. Il est à noter que nous changerons l'adresse IP initiale car lors de la première séance nous avions travaillé sur le réseau insecure qui n'est pas notre réseau définitif.

xen-create-image --hostname=papaye --ip=172.26.79.101 --netmask=255.255.255.224 --gateway=172.26.79.254 --dir=/usr/local/xen

Une fois la VM créée, il est possible de la démarrer de la manière suivante :

 xl create /etc/xen/IMA5-Papaye/cfg 

Ensuite, nous lançons la console de cette manière :

 xl console IMA5-Papaye 
Puis, pour sortir de cette dernière, nous faisons :
 ctrl + alt gr + ] 
Enfin, pour éteindre la machine virtuelle :
 xl shutdown IMA5-Papaye 
Et pour détruire la VM :
 xl destroy IMA5-Papaye 

Configuration

Maintenant, nous devons faire en sorte que les répertoires var et home de notre VM soient sur des partitions de l'hôte. Pour cela, nous utilisons la commande lvcreate.

Il est à noter que pour le répertoire home, la manipulation est un peu plus simple que pour le répertoire var. Tout d'abord, nous faisons appel à lvcreate de la manière suivante, depuis cordouan :

lvcreate -L10G -IMA5-Papaye-home
lvcreate -L10G -IMA5-Papaye-var

(Il est possible de visualiser notre home grâce à la commande lsblk qui affiche tous les périphériques bloc.

Ensuite, nous ajoutons les disques dans le fichier de configuration de cordouan, dans /etc/xen/IMA5-Papaye. Nous appelons le disque home, xvda3 et le disque var, xvda4.

Puis, nous transformons nos disque en partitions ext4 :

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

HOME

Pour la partition home, il suffit de modifier le fichier /etc/fstab de la VM et d'y ajouter la ligne suivante pour que la partition soit montée au démarrage :

 /dev/xvda3 /home ext4 defaults 0 2 

Le "0" indique que nous sauvegardons jamais et le "2" est propre à la sécurité de la partition.

Ainsi, un simple
 mount -a 
suffit à monter à la partition. (Il est possible de la vérifier grâce à la commande df)

VAR

Pour la partition var, c'est un peu plus compliqué car il faut monter la partition dans un /mnt temporaire avant de la déplacer. Nous effectuons donc les instructions suivantes :

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

Enfin, nous modifions le fichier /etc/fstab de la même manière que pour la partition home :

 /dev/xvda4 /var ext4 defaults 0 2 

Serveur SSH

Dans un premier temps, nous devons changer l'adresse IP de notre machine virtuelle ainsi que son masque dans /etc/config. Notre adresse IP est 193.48.57.178. Et notre masque est 255.255.255.240. Puis, nous avons modifié le fichier /etc/xen/IMA5-Papaye. En effet, nous remplaçons l'id par IMA5sc (pour la première séance, nous utilisions insecure). De plus, nous rajoutons la route par défaut, le gateway : 193.49.57.177 dans le fichier /etc/config.

Il est nécessaire d'installer ssh sur notre machine virtuelle :

apt-get install ssh

De plus, il est important de modifier le fichier /etc/ssh/sshd_config en changeant la ligne suivante :

 PermitRootLogin Prohibited 

par

 PermitRootLogin yes 

Grâce à cela, nous pourrons nous connecter en root sur la machine en ssh.

Nous redémarrons le service :

 service ssh restart 

Serveur DNS

Dans un premier temps, nous avons acheté notre nom de domaine sur Gandi en prenant soin que ce dernier autorise l'installation d'un DNSSEC. Nous avons donc pris le domaine papaye.space.

Puis, nous avons installé bind9 et apache2 :
apt-get install bind9 apache2 
. Nous avons d'ailleurs ajouté au fichier /etc/default/bind9 la ligne suivante :
 OPTIONS="-4 -u bind" 

Ensuite, nous créons le dossier pour la page web qui sera vide pour le moment :

 mkdir /var/www/www.papaye.space 

Dans un second temps, nous créons la table de DNS ou le fichier de zone : dns.papaye.space, en voici le contenu :

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

Ensuite, nous configurons le fichier named.conf.local :

 zone "papaye.space" {
        type master;
        file "/etc/bind/dns.papaye.space";
};
 

Ainsi que le fichier named.conf.options (217.70.177.40/32 étant l'adresse IP de Gandi, notre DNS esclave :

 
options {
        directory "var/cache/bind"
        dnssec-validation auto;
        auth-nxdomain no;
        allow-transfer {"allowed_to_transfer";}
        listen-on-v6 {any;}
}
acl "allowed_to_transfer" {
        217.70.177.40/32;
}
 

Enfin, nous redémarrons notre service bind9 :

 service bind9 restart 

Les configurations depuis notre machine virtuelle sont terminées mais nous avons dû également effectuer un réglage depuis Gandi afin de renseigner nos DNS. Pour les "glues records",

 
'Nom du serveur' : dns.papaye.space
'IP' : 193.48.57.178 

Pour les DNS,

 
'DNS1' : dns.papaye.space
'DNS2' : ns6.gandi.net 

Sécurisation du site web via un certificat

L'objectif de cette partie est d'obtenir un certificat pour notre site web. Le certificat SSL généré par Gandi s'obtient de la manière suivante :

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

Afin de valider notre certificat par Gandi, nous avons dû ajouter une ligne de code à notre fiche de zone (dns.papaye.space), qui était donné par le site.

Une fois le certificat validé par Gandi, un petit cadenas noir est visualisable à côté de notre nom de domaine. De plus, nous pouvons recopier les fichiers de certification générés par Gandi dans le dossier SSL.

cp certificat.crt /etc/ssl/certs/papaye.space.crt
cp serveur.key /etc/ssl/private/papaye.space.key
cp GandiStandardSSLCA.pem /etc/ssl/certs/GandiStandardSSLCA.pem

Nous faisons un hashage de notre structure afin que notre certificat soit prend en compte :

 c_rehash /etc/ssl/certs 

Puis, nous créons le fichier 000-papaye.space-ssl.conf dans /etc/apache2/sites-available/ pour associer apache2 à notre nom de serveur :

#NameVirtualHost *:443
        <VirtualHost 193.48.57.178:443>
                ServerName www.papaye.space
                ServerAlias papaye.space
                DocumentRoot /var/www/www.papaye.space/
                CustomLog /var/log/apache2/secure_acces.log combined

                SSLEngine on
                SSLCertificateFile /etc/ssl/certs/papaye.space.crt
                SSLCertificateKeyFile /etc/ssl/private/papaye.space.key
                SSLCertificateChainFile /etc/ssl/certs/GandiStandardSSLCA.pem
                SSLVerifyClient None
        </VirtualHost>
        <Directory /var/www/www.papaye.space>
                Require all granted
        </Directory>
ServerName "papaye.space"

Ensuite, nous modifions le fichier ports.conf du serveur Apache afin qu'il écoute le port 443 (SSL):

Listen 80 443

<IfModule ssl_module>
        Listen 443
</IfModule>

Enfin, nous activons le module SSL d'Apache et activons notre site avec notre certificat :

a2enmod ssl 
a2ensite 000-piscinemorte.net-ssl.conf
service apache2 reload

Sécurisation du DNS via un DNSSEC

Dans un premier temps, nous devons activer le DNSSEC en ajoutant l'option dans le fichier /etc/bind/named.conf.options :

 dnssec-enable yes; 

Ensuite, nous créons le répertoire dans lequel nous allons créer nos clef :

mkdir papaye.space.dnssec
cd papaye.space.dnssec

Dans un second temps, nous générons nos clefs KSK et ZSK de la manière suivante :

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

Nous devons inclure ces clefs dans notre fichier de zone (dns.papaye.space) (la 14842 étant la ksk et l'autre la zsk):

$include /etc/bind/papaye.space.dnssec/Kpapaye.space.+005+14842.key
$include /etc/bind/papaye.space.dnssec/Kpapaye.space.+005+62520.key

Enfin, nous signons la zone :

 dnssec-signzone -o papaye.space-k Kpapaye.space.+005+14842 ../dns.papaye.space Kpapaye.space.+005+62520 

Pour finir, nous saisissons dans Gandi la clé publique de la KSK et de la ZSK en allant dans l'onglet "générer DNSSEC". Nous vérifions la sécurisation grâce à la commande :

 dig DNSKEY papaye.space @localhost 

Nous remarquons bien la présence de DNSKEY qui nous certifie la sécurisation de notre DNS.

Sécurisation et cryptage des données

Sécurisation via RAID5

Depuis cordouan, nous créons 3 disque disques virtuels avec lvcreate :

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

Nous rajoutons ces disques à la configuration de notre machine virtuelle. Toujours depuis cordouan, dans /etc/xen/Papaye.cfg, nous ajoutons :

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

Depuis notre machine virtuelle cette fois, nous installons mdadm :

apt-get install mdadm 

Nous créons le disque RAID5 md0 :

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

Nous installons le système de fichier ext4 dessus :

 mkfs -t ext4 /dev/md0 

Nous sauvegardons le tout et montons le disque :

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

Enfin nous effectuons un petit test afin de noter la reconstruction de notre disque. Nous supprimons une des partitions et observons qu'il est bien manquant dans la configuration :

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

Nous montons le disque à nouveau et pouvons noter la reconstruction du disque :

mount /dev/md0 /mnt
root@Papaye:/mnt# ls
lost+found  test.txt

Nous remettons la partition : mdadm --add /dev/md0 /dev/xvdd2

Et on observe la reconstruction grâce à cat /proc/mdstat.


Cryptage des données

Dans cette partie, nous allons voir comment crypter des données sur un disque virtuel. De la même manière que pour la partie précédente, nous créons un disque virtuel via la commande :

lvcreate -L 1G -n /dev/virtual/papaye-cryptage

Nous rajoutons ce disque à la configuration de notre machine virtuelle. Depuis cordouan, dans /etc/xen/Papaye.cfg, nous ajoutons :

'phy:/dev/virtual/papaye-cryptage,xvdd4, w',

Nous configurons le disque en type Luks :

cryptsetup luksFormat /dev/xvdd4

La phrase secrète est : pasglop, glopglop ou michel.

Nous pouvons vérifier les informations via cette commande :

cryptsetup luksDump /dev/xvdd4

Ainsi, nous obtenons les informations suivantes :

LUKS header information for /dev/xvdd4

Version:       	1
Cipher name:   	aes
Cipher mode:   	xts-plain64
Hash spec:     	sha256
Payload offset:	4096
MK bits:       	256
MK digest:     	25 40 d5 6d b9 ff c0 d3 d8 cd fb e8 80 41 eb a8 f3 13 58 30
MK salt:       	a1 9e 1a 6d 40 59 46 86 14 9e 2a de 66 86 6b e0
39 79 44 db ac 5f 01 a2 cb 9f b8 46 40 4c 3c 53
MK iterations: 	242250
UUID:          	2e9af817-8eb1-4478-a095-048645e8983d

Key Slot 0: ENABLED
Iterations:         	1924810
Salt:               	f6 28 22 be 14 d9 78 3e 83 d2 f7 cb af bf 1f 52
88 8f bf bf 83 e2 28 65 1d f1 d3 fe 16 6c b8 e0
Key material offset:	8
AF stripes:            	4000
Key Slot 1: DISABLED
Key Slot 2: DISABLED
Key Slot 3: DISABLED
Key Slot 4: DISABLED
Key Slot 5: DISABLED
Key Slot 6: DISABLED
Key Slot 7: DISABLED

Nous ouvrons notre partition cryptée avec :

cryptsetup luksOpen /dev/xvdd4

Puis, nous saisissons la phrase secrète.

Nous ajoutons des fichiers :

mkfs.ext3 /dev/mapper/kadoc

Ensuite, nous créons un dossier contenant un fichier contenant une simple phrase. Pour écrire dedans il faut monter notre partition. Montage :

mount -t ext3 /dev/mapper/kadoc /mnt/ 

Démontage :

umount /mnt/ 

Nous encryptons à nouveau la partition avec la commande suivante :

cryptsetup luksClose kadoc 

Enfin, nous vérifions avec GParted que notre partition n'est plus accessible sans mot de passe :

gparted /dev/xvdd4

La commande nous renvoie :

root@IMA5-Papaye:/# gparted /dev/xvdd4
Created symlink /run/systemd/system/-.mount -> /dev/null.
Created symlink /run/systemd/system/home.mount -> /dev/null.
Created symlink /run/systemd/system/tmp.mount -> /dev/null.
Created symlink /run/systemd/system/var.mount -> /dev/null.
[ 1051.732565] systemd[1]: apt-daily.timer: Adding 2h 21min 20.971598s random time.
[ 1051.733189] systemd[1]: apt-daily-upgrade.timer: Adding 46min 37.363850s random time.

(gpartedbin:3635): Gtk-WARNING **: cannot open display:
Removed /run/systemd/system/-.mount.
Removed /run/systemd/system/home.mount.
Removed /run/systemd/system/tmp.mount.
Removed /run/systemd/system/var.mount.
[ 1051.853426] systemd[1]: apt-daily.timer: Adding 6h 49min 20.775084s random time.
[ 1051.854034] systemd[1]: apt-daily-upgrade.timer: Adding 47min 6.121251s random time.
root@IMA

Configuration des bornes Wifi