Cahier 2017 groupe n°7

De Wiki d'activités IMA

Tâches communes

Afin de réaliser ce TP, nous allons créer une machine virtuelle sur le serveur cordouan de l'école.

Installation et configuration de la machine

Installation

La création d'une machine virtuelle se fait grâce à la commande xen. On exécute la commande xen-create-image afin de créer l'image de notre VM

xen-create-image --hostname=IMA5-Ananas --ip=193.48.57.181 --netmask=255.255.255.240 --dir=/usr/local/xen

Une fois l'image créée, on peut créer notre VM grâce à la commande:

 xl create /etc/xen/IMA5-Ananas.cfg 

On se connecte à la VM grâce à la commande:

 xl console IMA5-Ananas 

Et on peut éteindre ou détruire la VM grâce au commande:

xl shutdown IMA5-Ananas

xl destroy IMA5-Ananas 

Configuration

Un fois la VM créée, nous allons modifier son répertoire var et home afin qu'ils soient une partition de l'hôte. Pour cela, on va utiliser la commande lvcreate.

lvcreate -L10G -IMA5-Ananas-home
lvcreate -L10G -IMA5-Ananas-var

On modifie le fichier de configuration de notre VM pour qu'elle prenne en compte ces disques et on la relance.

'phy:/dev/virtual/IMA5-Ananas-home,xvdb1,w',
'phy:/dev/virtual/IMA5-Ananas-var,xvdc1,w'

Nos disques home et var s’appelleront donc xvdb1 et xvdc1.

Dans notre machine nous transformons nos disques en partitions ext4.

mkfs -t ext4 /dev/xvdb1
mkfs -t ext4 /dev/xvdc1

Pour la partition home, nous modifions simplement le fichier /etc/fstab de la VM en y ajoutant la ligne suivante:

 /dev/xvdb1 /home ext4 defaults 0 2 

Pour la partition var, il faut faire attention à ne pas perdre les données existantes. Pour cela, on va monter notre partition et y déplacer le contenu de notre dossier var:

mount /dev/xvdc1 /mnt
mv /var/* /mnt

Une fois ceci effectué, nous pouvons répéter l'opération de la partition home:

 /dev/xvdc1 /var ext4 defaults 0 2 

Service internet

Serveur SSH

Nous souhaitons pouvoir nous connecter grâce à SSH à notre VM (pour ne plus passer par xl console).

Pour cela, on installe ssh sur notre machine:

apt-get install ssh

On modifie par la suite le fichier /etc/ssh/ssh_config pour autoriser la connexion en temps que root:

 PermitRootLogin yes 

Puis on redémarre le service:

 service ssh restart 

Une fois cela fait, on peut se connecter à la machine depuis une machine de l'école grâce à la commande

 ssh 193.48.57.181 -l root 

Serveur DNS

Pour réaliser notre serveur DNS, nous allons acheter un nom de domaine sur le site Gandi. En s'assurant qu'il autorisera l'installation d'un DNSSEC pour la suite du TP. On achète donc le nom de domaine kerval.space.

Sur notre VM, on installe bind9 et apache2:

apt-get install bind9 apache2 

Dans le dossier /var/www on crée un dossier www.kerval.space pour plus tard

mkdir /var/www/www.kerval.space

Une fois ceci fait, nous allons écrire la table DNS db.kerval.space dans le dossier /etc/bind/

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


On modifie le fichier named.conf.options. On note que l'adresse 217.70.177.40 est celle de notre DNS esclave (Gandi).

 
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;
}
 

Une fois ces modifications apportées, on peut redémarrer notre service.

 service bind9 restart 

Afin que le serveur fonctionne, nous devons aussi configurer Gandi pour y renseigner notre DNS

Dans les "glues records":

 
'Nom du serveur' : ns.kerval.space
'IP' : 193.48.57.181 

Les DNS:

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

Sécurisation par certificat SSL

Pour avoir un certificat SSL de Gandi, on génère dans un premier temps un CSR

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

On entre les différentes informations demandées.

Country Name (2 letter code) [AU]:FR
State or Province Name (full name) [Some-State]:Nord
Locality Name (eg, city) []:Lille
Organization Name (eg, company) [Internet Widgits Pty Ltd]:kerval.space
Organizational Unit Name (eg, section) []:kerval.space
Common Name (e.g. server FQDN or YOUR name) []:kerval.space

Une fois notre certificat généré puis validé par Gandi ( très long), on place les fichiers dans les bons dossiers. On note que le fichier GandiStandardSSLCA2.pem est un certificat intermédiaire.

cp kerval.space.crt /etc/ssl/certs/kerval.space.crt
cp kerval.space.key /etc/ssl/private/kerval.space.key  
cp GandiStandardSSLCA2.pem /etc/ssl/certs/GandiStandardSSLCA2.pem

Une fois cela fait, on peut refaire un hachage pour prendre notre certificat en compte.

c_rehash /etc/ssl/certs

On va devoir associer notre service apache2 avec notre nom de serveur. Pour cela on crée un fichier 000-kerval.space-ssl.conf dans notre dossier apache:

touch /etc/apache2/sites-available/000-kerval.space-ssl.conf
#NameVirtualHost *:443
        <VirtualHost 193.48.57.181:443>
                ServerName www.kerval.space
                ServerAlias kerval.space
                DocumentRoot /var/www/www.kerval.space/
                CustomLog /var/log/apache2/secure_acces.log combined

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

On modifie ensuite le fichier ports.conf d'apache pour qu'il puisse écouter le port 443

Listen 80 443

<IfModule ssl_module>
        Listen 443
</IfModule>

il ne reste plus qu'à activer le module SSL d'apache et notre site:

a2enmod ssl
a2ensite 000-kerval.space-ssl.conf
service apache2 reload

Sécurisation par DNSSEC

Pour mettre en place un DNSSEC, on modifie d'abord les options de bind9, dans /etc/bind/named.conf.options:

dnssec-enable yes;

On va générer nos clefs KSK et ZSK grâce aux commandes:

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

Pour faliciter le travail, on renomme les clefs en kerval.space-ksk.key et kerval.space-zsk.key.

Dans notre fichier db.kerval.space, on ajoute les lignes suivantes:

$include /etc/bind/kerval.space.dnssec/kerval.space-ksk.key
$include /etc/bind/kerval.space.dnssec/kerval.space-zsk.key

A noter que le dossier kerval.space.dnssec a été créé avant la génération des clefs.

Coté VM, il ne nous reste plus qu'à signer la zone:

dnssec-signzone -o kerval.space -k kerval.space-ksk ../db.kerval.space kerval.space-zsk

Du coté de Gandi, il faut renseigner les clefs publiques de la KSK et ZSK dans la section "Gérer DNSSEC"

Sécurisation des données

RAID5

Afin de protéger nos données, nous allons installer un systeme raid5 sur notre VM. Pour ce faire, nous allons créer 3 disques virtuels sur cordouan.

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

Puis les ajouter à la configuration de notre VM:

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

Une fois cela fait, on redémare notre VM pour que les nouveaux disques soient pris en compte et on installe mdadm:

apt-get install mdadm

On peut ensuite créer un disque RAID5 nommé md0:

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

on transforme notre disque en partition ext4 et on la monte:

mkfs -t ext4 /dev/md0
mount /dev/md0 /mnt

On crée un fichier sur notre disque et on supprime une partition pour vérifier la reconstitution du fichier par RAID5:

mdadm --set-faulty /dev/md0 /dev/xvdd3
mdadm --remove /dev/md0 /dev/xvdd3

On constate que notre fichier est toujours présent et on ajoute de nouveau la partition:

mdadm -add /dev/md0 /dev/xvdd3

avec la commande: cat /proc/mdstat on peut observer la reconstruction du disque.

Cryptage des données

On souhaite crypter nos données pour les sécuriser. Pour cela on va ajouter un disque xvdd4 à notre VM comme précédemment pour les disques RAIDs.

Une fois monter en partition ext4, on configure la partition:

fdisk /dev/xvdd4
  "d pour supprimer les partitions 1-2-3"
  "n pour ajouter des partitions"
  "w pour enregistrer"

On configure la partition en type Lucks avec un algorithme de hachage SHA256:

cryptsetup luksFormat -c eas -h sha256 /dev/xvdd4

On entre un mot de passe: bandederelou

Puis on vérifie les infos de la partition:

cryptsetup luksDump /dev/xvdd4

On peut ensuite ouvrir la partition, la monter et la démonter:

cryptsetup luksOpen /dev/xvdd4
mkfs ext4 /dev/mapper/crypt
mount -t ext4 /dev/mapper/crypt /mnt/ 
umount /mnt/

Si on démonte la partition, il faut la re-crypter:

cryptsetup luksClose crypt

Tâche spécifique

Présentation

Microsoft propose avec la nouvelle version de son OS Windows 10, une solution Docker permettant de mettre en place des conteneurs Linux sous Windows. Notre but est donc de tester les conteneurs proposés par Windows afin de voir si une application Linux peut être fonctionnelle. Microsoft indique que les conteneurs Linux ne peuvent pas prendre de connexion réseau en charge. Nous allons donc voir si une prise en charge du réseau est possible.

Installation et configuration de Windows

Sur une machine de TP, on installe Windows 10 ( on remplace la version présente de Windows 7).

Une fois installé, il faut ré-installer Grub pour pouvoir continuer d'utiliser Linux.

Afin de pouvoir avoir internet et communiquer avec les autres machines de TP, il faut configurer manuellement l'adresse ip de la machine et ouvrir le pare-feu de Windows.

Configuration internet de windows 10
Parefeu de Win 10

Installation de docker

On se rend sur le site de Docker pour télécharger sa version pour Windows.

Une fois installé, on peut configurer son proxy pour pouvoir télécharger des conteneurs. La configuration Internet de Docker est dupliquée sur ses conteneurs.

Configuration proxy de Docker

lancement d'un conteneur

Docker

La version de Docker pour Windows ne comporte pas d'interface graphique. Pour créer nos conteneurs, on utilise PowerShell.

on peut vérifier la version de docker avec la commande

docker version 
VersionDocker.PNG

On constate donc bien que notre client a un OS Windows et que notre serveur a un OS Linux.

Lancement

Avec la commande "run", docker lance un conteneur de l'application souhaitée. Si l'application n'est pas installée, docker se charge de la télécharger.

docker run -it debian

A noter que l'option "it", permet de lancer l'application et de se connecter au conteneur.

Avec la commande ps on peut voir la liste des conteneurs:

PSDocker.PNG

Avec les commandes start <id> et attach <id>, on démarre un conteneur existant, et on s'y connecte.

ExecDocker.PNG

Conteneur

Une fois dans le conteneur, on peut exécuter la commande "ip a" pour vérifier la prise en compte d'internet.

ConteneurDocker.PNG

Notre conteneur Linux prend en charge une connexion internet, on a la possibilité d'avoir une application Linux fonctionnelle sous Windows.

Cohabitation de Windows et Linux

On a la possibilité de faire cohabiter un serveur Linux et Windows avec Docker. On exécute la commande:

dockerd.exe -H npipe:////./pipe/win_engine --service-name=com.docker.windows --register-service

Une fois cette commande exécutée, si on lance Docker sans l'option -H, on lance un serveur Linux et avec l'option -H on lance un serveur Windows sans interrompre le précédent.