TP sysres IMA2a5 2019/2020 G4 : Différence entre versions
(→Cryptage de données) |
|||
(66 révisions intermédiaires par 2 utilisateurs non affichées) | |||
Ligne 1 : | Ligne 1 : | ||
+ | Membres du groupe: | ||
+ | * '''Malick SECK''' | ||
+ | * '''Gael WATBLED''' | ||
+ | |||
== Descriptif du projet == | == Descriptif du projet == | ||
Ligne 5 : | Ligne 9 : | ||
Pour cela, il nous faut d'abord installer une machine virtuelle Xen. Suite à cela, on mettra en place un réseau ainsi qu'un site web sécurisé. | Pour cela, il nous faut d'abord installer une machine virtuelle Xen. Suite à cela, on mettra en place un réseau ainsi qu'un site web sécurisé. | ||
Ce projet nous permettra de mettre en pratique les notions vues en cours qui sont, entre autres: | Ce projet nous permettra de mettre en pratique les notions vues en cours qui sont, entre autres: | ||
− | * installation d'une machine virtuelle | + | * installation d'une machine virtuelle |
* découpage et paramétrage réseau | * découpage et paramétrage réseau | ||
− | * réservation de nom de domaine avec | + | * réservation de nom de domaine avec un registrar |
− | * | + | * installation et configuration d'un serveur DNS sécurisé |
+ | * installation et configuration d'un serveur web sécurisé | ||
* cassage de clés WEP et WPA-PSK avec l'utilitaire AirCrack | * cassage de clés WEP et WPA-PSK avec l'utilitaire AirCrack | ||
− | |||
Le groupe est constitué de : | Le groupe est constitué de : | ||
− | *Malick SECK | + | * Malick SECK |
− | *Gael WATBLED | + | * Gael WATBLED |
== Architecture réseau == | == Architecture réseau == | ||
Ligne 98 : | Ligne 102 : | ||
|} | |} | ||
− | Puis nous lançons la commande <code>tail -f /var/log/xen-tools/ima2a5-wateck.log </code> pour voir sur un autre terminal si l’installation se fait correctement et pour voir l'état d'avancement | + | Puis nous lançons la commande <code>tail -f /var/log/xen-tools/ima2a5-wateck.log </code> pour voir sur un autre terminal si l’installation se fait correctement et pour voir l'état d'avancement en continue |
Par la suite, nous modifions le fichier de configuration de la machine virtuelle pour faire en sorte que les répertoires <code>var</code> et <code>home</code> de la machine virtuelle soient sur des partitions LVM de l’hôte. | Par la suite, nous modifions le fichier de configuration de la machine virtuelle pour faire en sorte que les répertoires <code>var</code> et <code>home</code> de la machine virtuelle soient sur des partitions LVM de l’hôte. | ||
Ligne 106 : | Ligne 110 : | ||
Le fichier de configuration est comme suit: | Le fichier de configuration est comme suit: | ||
'' | '' | ||
− | + | ||
[...] | [...] | ||
Ligne 121 : | Ligne 125 : | ||
[...] | [...] | ||
'' | '' | ||
− | |||
− | Nous parsons notre machine via son fichier de configuration avec la commande <code>xl create /etc/xen/ima2a5-watech.cfg</code> avant de lancer cette dernière avec <code>xl console /etc/xen/ima2a5</code> | + | |
+ | # | ||
+ | # Configuration file for the Xen instance ima2a5-wateck, created | ||
+ | # by xen-tools 4.7 on Fri Nov 8 07:59:07 2019. | ||
+ | # | ||
+ | |||
+ | # | ||
+ | # Kernel + memory size | ||
+ | # | ||
+ | kernel = '/boot/vmlinuz-4.9.0-6-amd64' | ||
+ | extra = 'elevator=noop' | ||
+ | ramdisk = '/boot/initrd.img-4.9.0-6-amd64' | ||
+ | |||
+ | vcpus = '1' | ||
+ | memory = '256' | ||
+ | |||
+ | |||
+ | # | ||
+ | # Disk device(s). | ||
+ | # | ||
+ | root = '/dev/xvda2 ro' | ||
+ | disk = [ | ||
+ | 'file:/usr/local/xen/domains/ima2a5-wateck/disk.img,xvda2,w', | ||
+ | 'file:/usr/local/xen/domains/ima2a5-wateck/swap.img,xvda1,w', | ||
+ | 'phy:/dev/virtual/ima2a5-wateck-home,xvdb1,w', | ||
+ | 'phy:/dev/virtual/ima2a5-wateck-var,xvdb2,w', | ||
+ | 'phy:/dev/virtual/ima2a5-wateck-d1,xvdb3,w', | ||
+ | 'phy:/dev/virtual/ima2a5-wateck-d2,xvdb4,w', | ||
+ | 'phy:/dev/virtual/ima2a5-wateck-d3,xvdb5,w', | ||
+ | ] | ||
+ | # | ||
+ | # Physical volumes | ||
+ | # | ||
+ | # | ||
+ | # Hostname | ||
+ | # | ||
+ | name = 'ima2a5-wateck' | ||
+ | |||
+ | # | ||
+ | # Networking | ||
+ | # | ||
+ | dhcp = 'dhcp' | ||
+ | vif = [ 'mac=00:16:3E:05:CB:E5, bridge=IMA2a5' ] | ||
+ | |||
+ | # | ||
+ | # Behaviour | ||
+ | # | ||
+ | on_poweroff = 'destroy' | ||
+ | on_reboot = 'restart' | ||
+ | on_crash = 'restart' | ||
+ | |||
+ | '' | ||
+ | |||
+ | |||
+ | Nous parsons notre machine via son fichier de configuration avec la commande <code>xl create /etc/xen/ima2a5-watech.cfg</code> avant de lancer cette dernière avec <code>xl console /etc/xen/ima2a5</code> (nous passons par xl console pour le moment car le serveur SSH n'est pas encore configuré) | ||
=== Montage de Var et Home dans cordouan === | === Montage de Var et Home dans cordouan === | ||
Ligne 169 : | Ligne 226 : | ||
− | === | + | === Utilisation de RAID5 pour le stockage de donnée === |
− | + | RAID5 est un système permettant de garantir l'intégrité des données en cas de problème majeur (par exemple un problème matériel sur un disque dur). Afin d'éviter de perdre des données, le système RAID5 propose répartir les données sur plusieurs partition. En cas de problème sur l'une des partitions, il est possible de récupérer les données perdues sur cette dernière à partir des autres partitions toujours intactes. La partie qui suit explique comment nous avons mis en place ce système. Cependant nous n'avons fait que le créer et il n'est pas utilisé (pour des raisons de simplicité pour la réalisation des autres tâches du projet). | |
A partir de Cordouan, nous avons créé trois partitions LVM de 1Go : | A partir de Cordouan, nous avons créé trois partitions LVM de 1Go : | ||
Ligne 178 : | Ligne 235 : | ||
lvcreate -L1G -n ima2a5-wateck-d3 virtual | lvcreate -L1G -n ima2a5-wateck-d3 virtual | ||
− | Puis | + | Puis nous avons créé les systèmes de fichiers pour chacune des partitions nouvellement créées. |
mke2fs /dev/virtual/ima2a5-wateck-d1 | mke2fs /dev/virtual/ima2a5-wateck-d1 | ||
Ligne 218 : | Ligne 275 : | ||
[...] | [...] | ||
− | Il faut ensuite redémarrer la machine pour que les modifications soient prises en compte et pour monter | + | Il faut ensuite redémarrer la machine pour que les modifications soient prises en compte et pour monter |
+ | |||
xl shutdown ima2a5-wateck | xl shutdown ima2a5-wateck | ||
xlcreate ima2a5-wateck.cfg | xlcreate ima2a5-wateck.cfg | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
On se reconnecte à la machine en SSH, puis on crée un RAID5 logiciel avec les trois partitions obtenues avec paquetage <code>mdadm</code>. | On se reconnecte à la machine en SSH, puis on crée un RAID5 logiciel avec les trois partitions obtenues avec paquetage <code>mdadm</code>. | ||
Ligne 238 : | Ligne 289 : | ||
kdir /media/raid | kdir /media/raid | ||
− | == Mise en place | + | Et voilà notre système RAID5 operationnel. |
− | === Installation | + | |
− | + | == Mise en place du serveur web == | |
− | Pour la | + | |
+ | === Installation du serveur web Apache2 === | ||
+ | Pour mettre en place notre serveur web nous avons utilisé la solution la plus répandue à savoir un serveur apache2. Il est produit par la Apache Software Foundation. | ||
+ | |||
+ | Pour cela, nous avons d'abord installé les paquets apache2. | ||
+ | |||
*<code>Apt-get install apache 2</code> | *<code>Apt-get install apache 2</code> | ||
− | Puis nous lançons le serveur | + | |
+ | Puis nous lançons le serveur. | ||
+ | |||
*<code>Service apache2 start</code> | *<code>Service apache2 start</code> | ||
− | |||
− | |||
+ | == Configuration du serveur SSH == | ||
− | + | Afin que notre machine virtuelle intégrant notre serveur puisse être accessible à distance, nous devons y configurer un serveur SSH. | |
− | + | Puis nous modifions le fichier de configuration <code>/etc/ssh/sshd_config</code> en modifiant les lignes suivantes: | |
− | + | <code>permitRootLogin yes</code> | |
− | |||
+ | <code>passwordAuthentification yes </code> | ||
+ | A partir de là nous n'aurons plus besoin d'accéder à notre VM via xl cosole car nous passerons par SSH. | ||
+ | Nous lançons donc le service SSH avec <code>service ssh start</code>. | ||
− | + | Cependant, nous nous sommes rendus compte plus tard qu'il aurait été plus judicieux d'utiliser la connexion pas clé publique + passphrase en passant par <code>ssh-keygen -t rsa -b 1024</code> par exemple, car plus sécuritaire. | |
− | |||
− | '' | + | En effet <code>permitRootLogin yes</code> donne les privilèges root dès qu'on se connecte, ce qui n'est pas idéal. |
− | |||
− | + | == Configuration du serveur apache2 == | |
− | + | Nous avons du configurer ce serveur afin qu'il réponde à nos attente. Nous devons commencer par créer un fichier <code>.conf</code> que nous avons nommé <code>ima2a5-wateck.site.con</code>. | |
− | + | [...] | |
− | + | <VirtualHost *:80> | |
− | + | ServerName ima2a5-wateck.site | |
+ | ServerAlias www.ima2a5-wateck.site | ||
+ | DocumentRoot "/var/www/ima2a5-wateck" | ||
+ | <Directory "/var/www/ima2a5-wateck"> | ||
+ | Options +FollowSymLinks | ||
+ | AllowOverride all | ||
+ | Require all granted | ||
+ | </Directory> | ||
+ | ErrorLog /var/log/apache2/error.ima2a5-wateck.site.log | ||
+ | CustomLog /var/log/apache2/access.ima2a5-wateck.site.com.log combined | ||
+ | </VirtualHost> | ||
+ | [...] | ||
+ | Ce fichier sera modifié par la suite lorsque nous sécuriserons le serveur web (https). Une fois ce fichier configuré nous pouvons lancer le serveur. | ||
− | + | a2ensite ima2a5-wateck.site | |
− | + | service apache2 reload | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | Le site est maintenant en ligne et il est possible de le consulter en tapant l'adresse <code>193.48.57.164</code>. Pour modifier la page web il suffit simplement de modifier le fichier <code>index.html</code>. | |
− | |||
− | |||
− | |||
− | |||
− | + | == Sécurisation du serveur web (Protocole https) == | |
=== Certificat SSL === | === Certificat SSL === | ||
− | Le SSL (Secure Socket Layer) / TLS (Transport Layer Security) est le protocole de sécurité le plus répandu qui créé un canal sécurisé entre deux machines communiquant sur Internet ou un réseau interne. | + | Le SSL (Secure Socket Layer) / TLS (Transport Layer Security) est le protocole de sécurité le plus répandu qui créé un canal sécurisé entre deux machines communiquant sur Internet ou un réseau interne. Le protocole SSL est généralement utilisé lorsqu'un navigateur doit se connecter de manière sécurisée à un serveur web. |
+ | |||
+ | Tout d'abord, comme souvent pour les protocoles sécurisés (utiliser un processus de chiffremment), nous devons généner une paire de clefs <code>.key</code> et <code>.csr</code>. Pour cela on utilise la commande suivante : | ||
− | |||
openssl req -nodes -newkey rsa:2048 -sha256 -keyout ima2a5-wateck.key -out ima2a5-wateck.csr | openssl req -nodes -newkey rsa:2048 -sha256 -keyout ima2a5-wateck.key -out ima2a5-wateck.csr | ||
− | + | Nous avons donc généré un jeu de 2 clefs privée et publique. | |
Ligne 333 : | Ligne 394 : | ||
Optionnal informations : | Optionnal informations : | ||
+ | Notre clé publique est donc contenue dans le fichier <code>ima2a5-wateck.csr</code>. Ensuite cette clé publique doit être communiqué à notre registrar "Gandi" afin qu'il puisse valider ou non l'authenticité de notre site. | ||
+ | Gandi peut utiliser plusieurs méthode pour certifier notre site. Nous avons choisi la méthode par "fichier". Pour cela nous devons fournir à Gandi un fichier temporaire et attendre qu'il soit validé. Une fois valider un certificat <code>.csr</code> et un certificat <code>.pem</code> sont générés. | ||
+ | |||
+ | Le protocole http écoute par défaut sur le port 80. Jusqu'ici notre serveur web écoutait donc sur son port 80 pour déceler d'éventuelles tentatives de connexion de la part des clients. Le protocole sécurisé https écoute lui sur le prot 443. Nous avons donc autorisé le serveur à écouter sur le 443 en plus du port 80 et effectué une redirection afin que les clients voulant se conecter via le protocole http soit automatiquement redirigé sur le port 443 afin d'utiliser le protocole https et donc de sécuriser la connexion. | ||
+ | |||
+ | === Activation du module SSL === | ||
+ | Tout d'abord nous devons activer le module SSL sur notre serveur Apache2, en créant un lien symbolique via a2en : | ||
+ | |||
+ | sudo a2enmod ssl | ||
+ | |||
+ | Puis il faut relancer le serveur avec la commande : | ||
+ | |||
+ | service apache2 restart | ||
+ | |||
+ | === Modification du VirtualHost === | ||
+ | |||
+ | Maintenant il est temps de modifier le VirtualHost Apache que nous avions configuré pour fonctionner en http. La nouvelle version donne quelque chose comme cela : | ||
+ | |||
+ | <VirtualHost *:80> | ||
+ | ServerName ima2a5-wateck.site | ||
+ | ServerAlias www.ima2a5-wateck.site | ||
+ | # Redirection 301 vers le site en HTTPS | ||
+ | Redirect permanent / https://www.ima2a5-wateck.site/ | ||
+ | </VirtualHost> | ||
+ | <VirtualHost *:443> | ||
+ | # General setup for the virtual host | ||
+ | DocumentRoot "/var/www/ima2a5-wateck" | ||
+ | ServerName ima2a5-wateck.site | ||
+ | ServerAdmin gael.watbled@polytech-lille.net | ||
+ | ErrorLog "/etc/apache2/logs/error_log" | ||
+ | TransferLog "/etc/apache2/logs/access_log" | ||
+ | # Activation du SSL | ||
+ | SSLEngine On | ||
+ | # Activation de tous les protocoles s curis s (TLS v1.0, v1.1 et TLS v1.2) touut en d sactivant les protocoles non s curis s (SSL v2, SSL v3) | ||
+ | SSLProtocol All -SSLv3 -SSLv2 | ||
+ | # Le navigateur devra choisir une m thode de chiffrement en respectant l'ordre indiqu e dans SSLCipherSuite | ||
+ | SSLHonorCipherOrder on | ||
+ | |||
+ | # Chemin vers le certificat SSL de votre nom de domaine | ||
+ | SSLCertificateFile "/etc/apache2/certificate/ima2a5-wateck.crt" | ||
+ | SSLCACertificateFile "/etc/apache2/certificate/ima2a5-wateck.pem" | ||
+ | # Chemin vers la cl e priv e du certificat SSL de votre nom de domaine | ||
+ | SSLCertificateKeyFile "/etc/apache2/certificate/ima2a5-wateck.key" | ||
+ | </VirtualHost> | ||
+ | |||
+ | Comme nous l'avons décrit précemment la première partie du fichier de configuration des Hôtes virtuels permet la redirection du port 80 vers le port 443. Ce qui change par rapport à la première version est l'activation du protocole SSL ainsi que la description des chemins pour accèder aux diférents certificats ou clés. | ||
+ | |||
+ | root@ima2a5-wateck:/etc/apache2/certificate# ls -l | ||
+ | total 16 | ||
+ | -rw-r--r-- 1 root root 2155 Nov 28 08:25 ima2a5-wateck.crt | ||
+ | -rw-r--r-- 1 root root 1148 Nov 28 08:12 ima2a5-wateck.csr | ||
+ | -rw-r--r-- 1 root root 1705 Nov 28 08:09 ima2a5-wateck.key | ||
+ | -rw-r--r-- 1 root root 2111 Nov 28 08:14 ima2a5-wateck.pem | ||
+ | |||
+ | Comme d'habitude il faut maintenant relancer le service afin que les modifications soient effectives : | ||
+ | |||
+ | a2dissite ima2a5-wateck.site | ||
+ | a2ensite ima2a5-wateck.site | ||
+ | service apache2 restart | ||
+ | |||
+ | Notre serveur web est maintenant sécurisé via le protocole https. | ||
+ | |||
+ | == Mise en place du serveur DNS == | ||
+ | |||
+ | === Installation de Bind9 === | ||
+ | Un serveur DNS (Domain Name System) permet la correspondance entre un nom de domaine et une adresse IP. Ainsi, grâce à DNS, il n'est pas nécessaire de se souvenir des adresses IP. Pour installer notre propre serveur DNS nous avons utilisé Bind9. | ||
+ | |||
+ | Nous commençons tout d'abord par installer bind9 via la commande suivante : <code>apt-get install bind9</code> | ||
+ | |||
+ | ==== Création et configuration de la zone principale ==== | ||
+ | |||
+ | La zone principale permet de faire pointer un nom de domaine pleinement qualifié (FQDN) sur une adresse IP. | ||
+ | |||
+ | Nous avons tout d'abord modifié le fichier <code>/etc/bind/named.conf.local</code> qui contient la configuration locale du serveur DNS et nous y avons déclaré les zones associées au domaine ainsi qu'un fichier de description de la zone. | ||
+ | Puis nous avons créé le fichier de description/configuration lui-même que nous avons appelé <code>db.ima2a5-wateck.site</code>. | ||
+ | |||
+ | [...] | ||
+ | ; BIND data file for ima2a5-wateck.site | ||
+ | ; | ||
+ | $TTL 14400 | ||
+ | @ IN SOA ns1.ima2a5-wateck.site. host.ima2a5-wateck.site. ( | ||
+ | 201006601 ; Serial | ||
+ | 7200 ; Refresh | ||
+ | 120 ; Retry | ||
+ | 2419200 ; Expire | ||
+ | 604800) ; Default TTL | ||
+ | ; | ||
+ | @ IN NS ns1.ima2a5-wateck.site. | ||
+ | @ IN NS ns6.gandi.net. | ||
+ | ns1 IN A 193.48.57.164 | ||
+ | www IN A 193.48.57.164 | ||
+ | [...] | ||
+ | |||
+ | ==== Définitions des hôtes ==== | ||
+ | |||
+ | Une fois la zone principale configurée, nous renseignons dans sa description les noms des différentes machines pour lesquels on souhaite résoudre le nom. Pour cela nous modifions les fichiers de configuration <code>named.conf.local</code> : | ||
+ | |||
+ | zone "ima2a5-wateck.site" { | ||
+ | type master; | ||
+ | file "/etc/bind/zones/db.ima2a5-wateck.site.signed"; | ||
+ | }; | ||
+ | Et <code>named.conf.options</code> : | ||
− | + | options { | |
− | + | // forwarders { | |
+ | // 0.0.0.0; | ||
+ | // }; | ||
+ | //dnssec-validation auto; | ||
+ | dnssec-enable yes; | ||
+ | auth-nxdomain no; # conform to RFC1035 | ||
+ | listen-on-v6 { any; }; | ||
+ | allow-transfer { "allowed_to_transfer"; }; | ||
+ | }; | ||
− | '' | + | acl "allowed_to_transfer" { |
− | + | 217.70.177.40/32; // adresse IP du ns6.gandi.net | |
+ | }; | ||
+ | |||
+ | Après avoir enregistré les modifications dans les fichiers précédemment évoqués, nous redémarrons le service bind9 grâce à la commande <code>service bind9 restart</code>. | ||
+ | Le service bind9 doit être redémarré à chaque modification, pour qu’elle soit prise en compte. | ||
+ | |||
+ | === Réservation du nom de domaine === | ||
+ | |||
+ | Grâce au registrar gandi.net, nous avons réservé le nom de domaine <code>ima2a5-wateck.site</code>. L'extension <code>.site</code> est une option trés interessante à cause du prix relativement faible (1€/an) | ||
+ | |||
+ | [[File:mygandi.png|700px|link=]] | ||
+ | |||
+ | === Configuration du nameserver=== | ||
+ | |||
+ | Les serveurs de noms permettent d'accéder à un réseau ou du contenu sur internet depuis un nom de domaine. | ||
+ | Le nameserver utilisé est spécifié dans notre fichier de configuration pour bind9. | ||
+ | La figure suivante montre le choix de nos narmeservers via gandi: | ||
+ | |||
+ | [[File:Wiki.png|700px|link=]] | ||
+ | |||
+ | === Enregistrement Glue Records === | ||
+ | Il faut créer un enregistrement Glue records lorsque le serveur de noms fait référence au nom de domaine. Si vous souhaitez mettre en place plusieurs serveurs de noms, faisant référence au nom de domaine, il faudra créer pour chacun un enregistrement glue record. | ||
+ | AInsi nous utilisons les enregistrements Glue records fournis par gandi pour associer un hostname (nom de serveur ou DNS) à l'adresse IP de notre machine. | ||
+ | NB:Les modifications seront effectives entre 12 et 24 heures. | ||
+ | La figure suivante motre l'enregistrement glue records que nous avons effectué: | ||
+ | |||
+ | [[File:glue_record.png|700px|link=]] | ||
+ | |||
+ | Après avoir réalisé ces étapes et attendu que le registrar effectue les modifications, le site est enfin accessible via le nom <code>ima2a5-wateck.site</code>. | ||
+ | |||
+ | == Sécurisation du serveur DNS avec DNSSEC == | ||
+ | |||
+ | === Modification des fichiers de configuration === | ||
+ | |||
+ | Dans le fichier named.conf.options nous commencons par ajouter l’option <code>dnssec-enable yes;</code>. | ||
+ | |||
+ | Nous avons ensuite créer un répertoire spécifique qui abritera les clés nécéssaires au fonctionnement de DNSSEC : | ||
+ | |||
+ | <code>mkdir ima2a5-wateck.site.dnssec</code> | ||
+ | |||
+ | Ensuite il nous a fallu générer les clés privées et publiques grâce aux commandes suivantes : | ||
+ | |||
+ | <code>dnssec-keygen -a RSASHA1 -b 2048 -f KSK -n ZONE ima2a5-wateck.site -r /dev/urandom</code> | ||
+ | |||
+ | <code>dnssec-keygen -a RSASHA1 -b 1024 -n ZONE ima2a5-wateck.site -r /dev/urandom</code> | ||
− | + | Nous avons renommé les deux paires de clefs obtenues en utilisant le nom de la zone comme préfixe puis en suffixant d’abord par la destination de la clef (-ksk pour la KSK ou -zsk pour la ZSK). Voilà le résultat : | |
− | + | -rw-r--r-- 1 root bind 179 Nov 29 10:12 dsset-ima2a5-wateck.site. | |
− | + | -rw-r--r-- 1 root bind 619 Nov 29 09:40 ima2a5-wateck.site-ksk.key | |
+ | -rw------- 1 root bind 1774 Nov 29 09:40 ima2a5-wateck.site-ksk.private | ||
+ | -rw-r--r-- 1 root bind 445 Nov 29 09:41 ima2a5-wateck.site-zsk.key | ||
+ | -rw------- 1 root bind 1010 Nov 29 09:41 ima2a5-wateck.site-zsk.private | ||
− | + | Il nous a ensuite fallu inclure les clefs <code>ksk.key</code> et <code>zsk.key</code> dans notre fichier de zone et incrémenter sa version (SERIAL) : | |
− | + | ; BIND data file for ima2a5-wateck.site | |
+ | ; | ||
+ | $TTL 14400 | ||
+ | $include /etc/bind/ima2a5-wateck.site.dnssec/ima2a5-wateck.site-ksk.key | ||
+ | $include /etc/bind/ima2a5-wateck.site.dnssec/ima2a5-wateck.site-zsk.key | ||
+ | @ IN SOA ns1.ima2a5-wateck.site. host.ima2a5-wateck.site. ( | ||
+ | 201006602 ; Serial | ||
+ | 7200 ; Refresh | ||
+ | 120 ; Retry | ||
+ | 2419200 ; Expire | ||
+ | 604800) ; Default TTL | ||
+ | ; | ||
+ | @ IN NS ns1.ima2a5-wateck.site. | ||
+ | @ IN NS ns6.gandi.net. | ||
+ | ns1 IN A 193.48.57.164 | ||
+ | www IN A 193.48.57.164 | ||
+ | |||
+ | Nous avons ensuite signé la zone avec la commande : | ||
− | Puis | + | <code>dnssec-signzone -o ima2a5-wateck.site -k ima2a5-wateck.site -ksk ../zones/db.ima2a5-wateck.site ima2a5-wateck.site-zsk</code> |
+ | |||
+ | Puis modifié le fichier <code>named.conf.local</code> pour utiliser la zone signée de suffixe .signed ainsi que le fichier <code>named.conf.options</code> : | ||
− | + | options { | |
+ | // forwarders { | ||
+ | // 0.0.0.0; | ||
+ | // }; | ||
+ | //dnssec-validation auto; | ||
+ | dnssec-enable yes; | ||
+ | auth-nxdomain no; # conform to RFC1035 | ||
+ | listen-on-v6 { any; }; | ||
+ | allow-transfer { "allowed_to_transfer"; }; | ||
+ | }; | ||
− | + | acl "allowed_to_transfer" { | |
+ | 217.70.177.40/32; // adresse IP du ns6.gandi.net | ||
+ | }; | ||
− | + | Enfin nous avons redémarré bind9 avec : | |
− | |||
− | + | <code>service bind9 restart</code> | |
− | <code> | ||
− | |||
− | |||
− | + | La dernière étape consiste à communiquer à Gandi notre clé publique KSK afin d'activer DNSSEC. | |
− | + | === Transmission de la clé publique à Gandi === | |
− | |||
− | |||
− | |||
+ | [[File:clef.png|700px|link=]] | ||
+ | == Configuration Internet de la machine eeePC Morue == | ||
− | + | Avant d'effectuer des installations nous devons tout d'abord connecté le PC à internet. Pour cela nous avons modifié le fichier <code>/etc/network/interfaces</code>. | |
− | |||
On modifie le ficher /etc/network.interfaces, comme suit: | On modifie le ficher /etc/network.interfaces, comme suit: | ||
auto lo | auto lo | ||
Ligne 387 : | Ligne 629 : | ||
gateway 172.26.145.254 | gateway 172.26.145.254 | ||
− | ==== | + | Puis nous effectuons une mise à jour des paquets via <code>apt-get update</code>. |
+ | |||
+ | == Cassage de clé WEP == | ||
+ | === Installation du paquetage AirCrack-ng === | ||
+ | |||
+ | Avant de procéder à l'installation, nous mettons d'abords à jour les paquets via la commande : | ||
+ | |||
+ | apt-get update | ||
+ | |||
+ | Enfin, pour espionner le réseau, nous pouvons installer l'utilitaire Aircrack-ng avec la commande : | ||
+ | |||
+ | apt-get install aircrack-ng | ||
+ | |||
+ | === Utilisation de AirCrack === | ||
+ | Après avoir branché la clé usb permettant de se connecter en wifi aux réseaux mis à disposition, nous commençons par lister les interfaces WiFi disponibles sur l'ordinateur : | ||
+ | <code>airmon-ng </code> | ||
+ | |||
+ | A ce niveau, nous choisissons l'interface que l'on souhaite écouter : | ||
+ | <code>airmong-ng start wlan0mon </code> | ||
+ | |||
+ | Sachant que la commande airodump-ng permet d'écouter tous les réseaux WiFi présents, nous sélectionnons le réseau ciblé et son type de cryptage avec la commande suivante : | ||
+ | |||
+ | <code>airodump-ng --encrypt wep wlan0mon </code> | ||
+ | |||
+ | Ainsi, nous récupérons les données contenues dans les trames échangées et les stockons dans un fichier spécifique. | ||
+ | |||
+ | <code>Airodump-ng -w crack1.txt -c 2 --bssid [@MAC] wlan0mon </code> | ||
+ | |||
+ | L'explication des arguments de la commande utilisée est la suivante: | ||
+ | *-c: pour indiquer le canal d'écoute (canal 2 dans notre cas car tous les réseaux Cracotte y sont) | ||
+ | *-bssid: pour préciser le nom du réseau en question | ||
+ | *-w: pour indiquer le fichier de sauvegarde des trames écoutées | ||
+ | |||
+ | A ce niveau, nous disposons des éléments à analyser pour décrypter la clé WEP, mais pour des raisons de ressources matérielles, nous les utilisons avec une autre machine plus puissante via | ||
+ | |||
+ | <code>aircrack-ng -b [@MAC] crack1*.cap </code> | ||
+ | |||
+ | |||
+ | |||
+ | == Cassage de clé WPA-PSK par force brute== | ||
+ | |||
+ | Pour cette partie, nous utilisons le même utilitaire que pour cracker la clé WEP. | ||
+ | |||
+ | Ainsi nous listons les interfaces Wi-Fi avec la commande <code> airmon-ng</code> afin de repérer le réseau Wi-Fi à cracker. | ||
+ | |||
+ | Ensuite on écoute l'interface | ||
+ | airmon-ng start [nom_de_l_interface] | ||
+ | |||
+ | Lorsque l'utilitaire airodump nous indique si des trames WPA sont capturées avec la commande <code>airodump-ng --encrypt wpa wlan0mon</code>, nous lançons aircrack-ng pour tenter de craquer la clef WPA en s'aidant d'un dictionnaire. D'où l'utilisation de l'expression "cassage par force brute", impliquant que l'on doit se rapprocher au maximum du point d'accès. | ||
+ | |||
+ | A ce niveau, va intervenir l'utilitaire crunch qui va tout simplement créer un dictionnaire de toutes les clés de 8 chiffres car on sait d'avance que la clef WPA est un nombre sur 8 chiffres. | ||
+ | La commande pour cela est la suivante: | ||
+ | crunch 8 8 0123456789 >> dictionnaire_wpa.txt | ||
+ | |||
+ | Puis nous lançons aircrack-ng | ||
+ | aircrack-ng [fichier.cap] -w dictionnaire_wpa.txt | ||
+ | |||
+ | == Sécurisation d'une clé USB avec cryptsetup == | ||
+ | |||
+ | Nous avons commencé par installer l'utilitaire cryptsetup : | ||
− | |||
<code>apt-get install cryptsetup</code> | <code>apt-get install cryptsetup</code> | ||
+ | |||
<code>apt-get install lvm2</code> | <code>apt-get install lvm2</code> | ||
− | <code>lsblk</code> | + | On commence par lister les disques détectés par l'ordinateur et visualiser les partitions avec <code>lsblk</code>. |
− | + | Nous avons constaté que l'unique partition de la clé USB à savoir sda était vide | |
+ | |||
− | + | La commande <code>fdisk /dev/sda</code> permet ensuite de rentrer dans la partition | |
− | |||
− | |||
− | <code>fdisk /dev/sda</code> | ||
<code>n</code> pour créer une partition | <code>n</code> pour créer une partition | ||
Ligne 407 : | Ligne 706 : | ||
<code>d</code> delete | <code>d</code> delete | ||
− | + | Nous sécurisons la partition (clef-WATECK) en utilisant l’utilitaire cryptsetup | |
− | <code>cryptsetup luksFormat -c aes -h sha256 /dev/sda1</code> pour encrypter la partition au format luks puis | + | |
+ | <code>cryptsetup luksFormat -c aes -h sha256 /dev/sda1</code> pour encrypter la partition au format luks puis définir un mot de passe | ||
+ | |||
<code>cryptsetup open --type luks /dev/sda1 clef-WATECK </code> pour l'ouvrir | <code>cryptsetup open --type luks /dev/sda1 clef-WATECK </code> pour l'ouvrir | ||
− | + | Nous un système de fichier au dessus de la partition sécurisée | |
+ | |||
<code>mkfs.ext4 /dev/mapper/clef-WATECK</code> | <code>mkfs.ext4 /dev/mapper/clef-WATECK</code> | ||
On le monte (dans un repertoire sur le poste) . | On le monte (dans un repertoire sur le poste) . | ||
+ | |||
<code>mount -t ext4 /dev/mapper/clef-WATECK /mnt/clef</code> | <code>mount -t ext4 /dev/mapper/clef-WATECK /mnt/clef</code> | ||
+ | <code>touch test.txt<.code> | ||
+ | <code>umount /mnt/clef</code> | ||
− | |||
− | |||
− | |||
<code>cryptsetup close --type luks clef_WATECK</code> pour fermer le volume chiffré | <code>cryptsetup close --type luks clef_WATECK</code> pour fermer le volume chiffré | ||
− | ==== Sécurisation | + | == Sécurisation réseau filaire par EAP-TLS == |
+ | |||
+ | Dans cette partie, nous nous sommes beaucoup inspiré des travaux de nos collègues. | ||
+ | |||
+ | === Configuration du serveur FreeRadius === | ||
+ | |||
+ | Depuis notre machine virtuelle, nous installons freeradius via la commande suivante: | ||
+ | |||
+ | apt-get install freeradius | ||
+ | |||
+ | Puis nous modifierons les fichiers de configuration comme suit: | ||
+ | * rajouter la ligne suivante sur le fichier <code>/etc/freeradius/3.0/users</code>: | ||
+ | |||
+ | wateck Cleartext-Password := "glopglop" | ||
+ | |||
+ | * modifier le fichier <code>/etc/freeradius/3.0/mods-enabled/eap</code> comme suit: | ||
+ | |||
+ | eap{ | ||
+ | default_eap_type = peap | ||
+ | } | ||
+ | |||
+ | * modifier le fichier <code>/etc/freeradius/3.0//mods-enabled/mschap</code> comme suit: | ||
+ | |||
+ | use_mppe = yes | ||
+ | require_encryption = yes | ||
+ | require_strong = yes | ||
+ | |||
+ | [...] | ||
+ | |||
+ | with_ntdomain_hack = yes | ||
+ | |||
+ | |||
+ | * configurer la borne comme client du serveur radius via le fichier <code> /etc/freeradius/3.0/clients.conf </code> comme suit: | ||
+ | |||
+ | client access-point { # nom de notre borne | ||
+ | ipaddr = 10.60.0.100 # @IP de la nborne | ||
+ | secret = glopglop # mot de passe | ||
+ | } | ||
+ | |||
+ | Tout est OK jusque là, nous devrons arrêter puis relancer le serveur: | ||
+ | service freeradius stop | ||
+ | freeradius -X | ||
+ | |||
+ | |||
+ | |||
+ | === Sécurisation du réseau === | ||
+ | Etape initiale: | ||
+ | apt purge brltty | ||
+ | |||
+ | |||
+ | * Nous accédons à la borne Wi-Fi via minicom en s'assurant de bien mettre <code>/dev/ttyUSB0</code> ,<code>9600 bauds</code> et<code>pas de contrôle de flux</code>: | ||
+ | |||
+ | minicom -os | ||
+ | |||
+ | |||
+ | |||
+ | * Autoriser l'accès avec les privilèges maximum et entamer la configuration | ||
+ | |||
+ | enable | ||
+ | Password = "Cisco" | ||
+ | |||
+ | [...] | ||
+ | |||
+ | config term | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | * On met la commande suivante pour vérifier l'identité de l'utilisateur (<code>authentication</code>) , pouvoir limiter l'accès à certaines fonctionnalités (<code>authorization</code>) et pouvoir enregistrer les actions de l'utilisateur (<code>accounting</code>) : | ||
+ | |||
+ | aaa new-model | ||
+ | |||
+ | |||
+ | * On crée un server radius pour notre groupe 4, avec glopglop comme secret word : | ||
+ | |||
+ | radius-server host 193.48.57.164 auth-port 1812 acct-port 1813 key glopglop | ||
+ | |||
+ | |||
+ | * Définition du nom du serveur associé à notre groupe : | ||
+ | |||
+ | aaa group server radius radius_groupe4 | ||
+ | |||
+ | |||
+ | * Association du serveur de notre groupe à la machine virtuelle: | ||
+ | |||
+ | server 193.48.57.164 auth-port 1812 acct-port 1813 | ||
+ | |||
+ | |||
+ | * Définition du login de l'utilisateur : | ||
+ | |||
+ | aaa authentication login wateck group radius_groupe4 | ||
+ | |||
+ | |||
+ | * Notre configurons notre BSSID protégé en WPA2-EAP : | ||
+ | |||
+ | dot11 ssid reseau_wateck | ||
+ | vlan 4 | ||
+ | authentication open eap wateck | ||
+ | authentication network-eap wateck | ||
+ | authentication key-management wpa | ||
+ | |||
+ | |||
+ | * Configuration des VLAN : | ||
+ | |||
+ | interface Dot11Radio0 | ||
+ | encryption vlan vlan4 mode ciphers aes-ccm tkip | ||
+ | ssid reseau_wateck | ||
+ | |||
+ | |||
+ | * Création d'une sous-interface dot11Radio0 pour notre groupe : | ||
+ | |||
+ | interface dot11Radio0.4 | ||
+ | encapsulation dot1Q 4 | ||
+ | |||
+ | |||
+ | * Création d'une sous-interface gigabite pour notre groupe : | ||
+ | |||
+ | interface gigabite0.4 | ||
+ | encapsulation dot1Q 4 | ||
+ | bridge-group 4 | ||
+ | |||
+ | |||
+ | * Ajout de notre BSSID à l'interface Dot11Radio0 | ||
+ | |||
+ | interface Dot11Radio0 | ||
+ | dot11 ssid reseau_wateck | ||
+ | |||
+ | [...] | ||
+ | |||
+ | |||
+ | interface Dot11Radio0 | ||
+ | mbssid | ||
+ | dot11 ssid reseau_wateck | ||
+ | mbssid guest-mode # pour rendre notre réseau visible | ||
+ | |||
+ | |||
+ | Puis on quitte via <code>exit</code> sans oublier de faire un <code>write</code> sinon on perd tout ce qu'on a fait jusque ici | ||
+ | |||
+ | Puis on tape <code>reload</code> | ||
+ | |||
+ | * Attribution d'une adresse IP à la borne | ||
+ | enable | ||
+ | conf t | ||
+ | int bvi1 | ||
+ | ip address 10.60.0.100 255.255.255.0 | ||
+ | |||
+ | |||
+ | |||
+ | <code>reseau_wateck</code> | ||
+ | |||
+ | |||
− | + | * Pour pinger le routeur, on tape <code> ping 10.60.0.254 </code> | |
− | + | * Pour pinger la VM, on doit d'abord configurer la passerelle: | |
− | + | enable | |
+ | conf t | ||
+ | ip route 0.0.0.0 0.0.0.0 10.60.0.253 | ||
+ | |||
+ | Puis <code>ping 193.48.57.164 </code> |
Version actuelle datée du 8 décembre 2019 à 21:17
Membres du groupe:
- Malick SECK
- Gael WATBLED
Sommaire
- 1 Descriptif du projet
- 2 Architecture réseau
- 3 Machine virtuelle Xen
- 4 Mise en place du serveur web
- 5 Configuration du serveur SSH
- 6 Configuration du serveur apache2
- 7 Sécurisation du serveur web (Protocole https)
- 8 Mise en place du serveur DNS
- 9 Sécurisation du serveur DNS avec DNSSEC
- 10 Configuration Internet de la machine eeePC Morue
- 11 Cassage de clé WEP
- 12 Cassage de clé WPA-PSK par force brute
- 13 Sécurisation d'une clé USB avec cryptsetup
- 14 Sécurisation réseau filaire par EAP-TLS
Descriptif du projet
L'objectif du projet consiste à réaliser une maquette réseau pour la manipulation des protocoles de redondance réseau ainsi que le protocole IPv6. Pour cela, il nous faut d'abord installer une machine virtuelle Xen. Suite à cela, on mettra en place un réseau ainsi qu'un site web sécurisé. Ce projet nous permettra de mettre en pratique les notions vues en cours qui sont, entre autres:
- installation d'une machine virtuelle
- découpage et paramétrage réseau
- réservation de nom de domaine avec un registrar
- installation et configuration d'un serveur DNS sécurisé
- installation et configuration d'un serveur web sécurisé
- cassage de clés WEP et WPA-PSK avec l'utilitaire AirCrack
Le groupe est constitué de :
- Malick SECK
- Gael WATBLED
Architecture réseau
Afin d'avoir un réseau redondant, nous utilisons deux routeurs, deux commutateurs et deux points d'accés Wi-Fi. Les points d’accès sont connectés chacun à un commutateur, les routeurs sont connectés sur les deux commutateurs et chaque commutateur est connecté au réseau d’interconnexion avec l’école. Enfin, le serveur de virtualisation est connecté aux deux commutateurs. L'architecture globale est représentée sur la figure suivante:
Nous utilisons par ailleurs le réseau IPv4 routé 193.48.57.160/27
que nous avons découpé en deux sous-réseaux en réservant une plage aux étudiants en IMA5 classique.
De plus, nous disposons d'un sous-réseau privé pour la connexion du client Wi-Fi. Le tableau ci-dessous détaille les infos concernant le découpage réseau pour notre groupe (groupe 4).
Description | Détails |
---|---|
ID VLAN | 4 |
Réseau VLAN | 10.60.4.0/24 |
Adresse IPv4 | 193.48.57.164/28 |
Adresse de broadcast | 193.48.57.175/28 |
Adresse du Routeur 1 | 193.48.57.173/28 |
Adresse du Routeur 2 | 193.48.57.174/28 |
Adresse du Routeur virtuel | 193.48.57.172/28 |
Nom du PC | Morue |
Poste de travail | Zabeth08 |
Machine virtuelle Xen
Installation
Afin d'installer la machine virtuelle, nous nous connectons d'abord au serveur cordouan en ssh via la commande:code
ssh root@cordouan.insecserv.deule.net
(mot de passe= glopglop).
Puis nous lançons la commande xen-create-image --hostname=ima2a5-wateck --dhcp --dir=/usr/local/xen --dist= ascii –apt-proxy=http://proxy.polytech-lille.fr/3128 –force
.
xen-create-image est un scriptvqui permet de créer facilement une instance Xen avec une image qui aura 2 volumes (1 image Logical Volumes et 1 image system root disk).
Le script en question prendra les arguments suivants:
ARGUMENT | SIGNIFICATION |
---|---|
--hostname | pour spécifier le nom de la machine |
--dhcp | pour permettre au client (guest) d'être configuré via dhcp |
--dir | pour spécifier le répertoire où les disques virtuels doivent être créés |
--dist | pour spécifier la distribution que l'on souhaite installer |
-force | pour autoriser l'écrasement des images existantes ou la suppression des volumes logiques LVM qui dépendent de la nouvelle instanciation |
Puis nous lançons la commande tail -f /var/log/xen-tools/ima2a5-wateck.log
pour voir sur un autre terminal si l’installation se fait correctement et pour voir l'état d'avancement en continue
Par la suite, nous modifions le fichier de configuration de la machine virtuelle pour faire en sorte que les répertoires var
et home
de la machine virtuelle soient sur des partitions LVM de l’hôte.
Pour cela, nous modifions le fichier /etc/xen/ima2a5-wateck.cfg
pour mettre nom du bridge (déja configuré) en IMA2a5 comme spécifié lorsque l'on utilise la commande brctl show
afin de permettre à notre VM de se connecter à internet.
Nous avons aussi pris le soin de modifier le mot de passe de la machine via la commande Passwd
en "gloplop", le login étant "root"
Le fichier de configuration est comme suit:
[...] # # Disk device(s). # root = '/dev/xvda2 ro' disk = [ 'file:/usr/local/xen/domains/ ima2a5-wateck /disk.img,xvda2,w', 'file:/usr/local/xen/domains/ ima2a5-wateck /swap.img,xvda1,w', 'phy:/dev/virtual/ ima2a5-wateck -home,xvdb1,w', 'phy:/dev/virtual/ ima2a5-wateck -var,xvdb2,w', ] [...]
# # Configuration file for the Xen instance ima2a5-wateck, created # by xen-tools 4.7 on Fri Nov 8 07:59:07 2019. #
# # Kernel + memory size # kernel = '/boot/vmlinuz-4.9.0-6-amd64' extra = 'elevator=noop' ramdisk = '/boot/initrd.img-4.9.0-6-amd64' vcpus = '1' memory = '256' # # Disk device(s). # root = '/dev/xvda2 ro' disk = [ 'file:/usr/local/xen/domains/ima2a5-wateck/disk.img,xvda2,w', 'file:/usr/local/xen/domains/ima2a5-wateck/swap.img,xvda1,w',
'phy:/dev/virtual/ima2a5-wateck-home,xvdb1,w',
'phy:/dev/virtual/ima2a5-wateck-var,xvdb2,w',
'phy:/dev/virtual/ima2a5-wateck-d1,xvdb3,w', 'phy:/dev/virtual/ima2a5-wateck-d2,xvdb4,w', 'phy:/dev/virtual/ima2a5-wateck-d3,xvdb5,w',
] # # Physical volumes # # # Hostname # name = 'ima2a5-wateck' # # Networking # dhcp = 'dhcp' vif = [ 'mac=00:16:3E:05:CB:E5, bridge=IMA2a5' ] # # Behaviour # on_poweroff = 'destroy' on_reboot = 'restart' on_crash = 'restart'
Nous parsons notre machine via son fichier de configuration avec la commande xl create /etc/xen/ima2a5-watech.cfg
avant de lancer cette dernière avec xl console /etc/xen/ima2a5
(nous passons par xl console pour le moment car le serveur SSH n'est pas encore configuré)
Montage de Var et Home dans cordouan
Nous avons créé des volumes logiques de 10Go pour les répertoires var et home comme suit:
lvcreate -L10G -n ima2a5-wateck -home virtual
lvcreate -L10G -n ima2a5-wateck-var virtual
Création du système de fichiers
Nous formatons ainsi chaque partions pour avoir des volumes logiques (système de fichier)
mke2fs /dev/virtual/ ima2a5-wateck -home
mke2fs /dev/virtual/ ima2a5-wateck -var
Enfin nous vérifions que le montage des volumes a bien fonctionné grâce à fdisk -l
Le résultat obtenu est:
root@ima2a5-wateck:~# fdisk -l Disk /dev/xvda2: 4 GiB, 4294967296 bytes, 8388608 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk /dev/xvda1: 512 MiB, 536870912 bytes, 1048576 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk /dev/xvdb1: 10 GiB, 10737418240 bytes, 20971520 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk /dev/xvdb2: 10 GiB, 10737418240 bytes, 20971520 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes
Ce qui montre que nos volumes ont été bel et biens crées
Nous avons aussi modifié le fichier /etc/fstab
comme suit afin que les volumes soient pris en compte à chaque démarrage de la VM :
/dev/xvdb1 /home ext4 defaults 0 2 /dev/xvdb2 /var ext4 defaults 0 2
Utilisation de RAID5 pour le stockage de donnée
RAID5 est un système permettant de garantir l'intégrité des données en cas de problème majeur (par exemple un problème matériel sur un disque dur). Afin d'éviter de perdre des données, le système RAID5 propose répartir les données sur plusieurs partition. En cas de problème sur l'une des partitions, il est possible de récupérer les données perdues sur cette dernière à partir des autres partitions toujours intactes. La partie qui suit explique comment nous avons mis en place ce système. Cependant nous n'avons fait que le créer et il n'est pas utilisé (pour des raisons de simplicité pour la réalisation des autres tâches du projet).
A partir de Cordouan, nous avons créé trois partitions LVM de 1Go :
lvcreate -L1G -n ima2a5-wateck-d1 virtual lvcreate -L1G -n ima2a5-wateck-d2 virtual lvcreate -L1G -n ima2a5-wateck-d3 virtual
Puis nous avons créé les systèmes de fichiers pour chacune des partitions nouvellement créées.
mke2fs /dev/virtual/ima2a5-wateck-d1 mke2fs /dev/virtual/ima2a5-wateck-d2 mke2fs /dev/virtual/ima2a5-wateck-d3
Ensuite nous avons modifié le fichier de configuration de la VM (/etc/xen/ima2a5-wateck.cfg) en ajoutant ces partitions.
Dans la définiton de la VM , ajouter :
[...] # # Disk device(s). # root = '/dev/xvda2 ro' disk = [ 'file:/usr/local/xen/domains/ ima2a5-wateck /disk.img,xvda2,w', 'file:/usr/local/xen/domains/ ima2a5-wateck /swap.img,xvda1,w', 'phy:/dev/virtual/ ima2a5-wateck -home,xvdb1,w', 'phy:/dev/virtual/ ima2a5-wateck -var,xvdb2,w', 'phy:/dev/virtual/ ima2a5-wateck-d1,xvdb3,w', 'phy:/dev/virtual/ ima2a5-wateck-d1,xvdb4,w', 'phy:/dev/virtual/ ima2a5-wateck-d1,xvdb5,w', ] [...]
Pour que les partitions soient montées au démarrage de la VM il faut aussi modifier le fichier /etc/fstab :
[...] # /etc/fstab: static file system information. # # <file system> <mount point> <type> <options> <dump> <pass> proc /proc proc defaults 0 0 devpts /dev/pts devpts rw,noexec,nosuid,gid=5,mode=620 0 0 /dev/xvda1 none swap sw 0 0 /dev/xvda2 / ext4 noatime,nodiratime,errors=remount-ro 0 1 /dev/xvdb1 /home ext4 defaults 0 2 /dev/xvdb2 /var ext4 defaults 0 2 /dev/md0 /media/raid ext4 defaults 0 1 # Ligne à rajouter [...]
Il faut ensuite redémarrer la machine pour que les modifications soient prises en compte et pour monter
xl shutdown ima2a5-wateck
xlcreate ima2a5-wateck.cfg
On se reconnecte à la machine en SSH, puis on crée un RAID5 logiciel avec les trois partitions obtenues avec paquetage mdadm
.
apt-get install mdadm mdadm –create/dev/md0 –level=5 –raid-devices=3 /dev/xvdb3 /dev/xvdb4 /dev/xvdb5
kfs.ext4 /dev/md0 kdir /media/raid
Et voilà notre système RAID5 operationnel.
Mise en place du serveur web
Installation du serveur web Apache2
Pour mettre en place notre serveur web nous avons utilisé la solution la plus répandue à savoir un serveur apache2. Il est produit par la Apache Software Foundation.
Pour cela, nous avons d'abord installé les paquets apache2.
Apt-get install apache 2
Puis nous lançons le serveur.
Service apache2 start
Configuration du serveur SSH
Afin que notre machine virtuelle intégrant notre serveur puisse être accessible à distance, nous devons y configurer un serveur SSH.
Puis nous modifions le fichier de configuration /etc/ssh/sshd_config
en modifiant les lignes suivantes:
permitRootLogin yes
passwordAuthentification yes
A partir de là nous n'aurons plus besoin d'accéder à notre VM via xl cosole car nous passerons par SSH.
Nous lançons donc le service SSH avec service ssh start
.
Cependant, nous nous sommes rendus compte plus tard qu'il aurait été plus judicieux d'utiliser la connexion pas clé publique + passphrase en passant par ssh-keygen -t rsa -b 1024
par exemple, car plus sécuritaire.
En effet permitRootLogin yes
donne les privilèges root dès qu'on se connecte, ce qui n'est pas idéal.
Configuration du serveur apache2
Nous avons du configurer ce serveur afin qu'il réponde à nos attente. Nous devons commencer par créer un fichier .conf
que nous avons nommé ima2a5-wateck.site.con
.
[...] <VirtualHost *:80> ServerName ima2a5-wateck.site ServerAlias www.ima2a5-wateck.site DocumentRoot "/var/www/ima2a5-wateck" <Directory "/var/www/ima2a5-wateck"> Options +FollowSymLinks AllowOverride all Require all granted </Directory> ErrorLog /var/log/apache2/error.ima2a5-wateck.site.log CustomLog /var/log/apache2/access.ima2a5-wateck.site.com.log combined </VirtualHost> [...]
Ce fichier sera modifié par la suite lorsque nous sécuriserons le serveur web (https). Une fois ce fichier configuré nous pouvons lancer le serveur.
a2ensite ima2a5-wateck.site
service apache2 reload
Le site est maintenant en ligne et il est possible de le consulter en tapant l'adresse 193.48.57.164
. Pour modifier la page web il suffit simplement de modifier le fichier index.html
.
Sécurisation du serveur web (Protocole https)
Certificat SSL
Le SSL (Secure Socket Layer) / TLS (Transport Layer Security) est le protocole de sécurité le plus répandu qui créé un canal sécurisé entre deux machines communiquant sur Internet ou un réseau interne. Le protocole SSL est généralement utilisé lorsqu'un navigateur doit se connecter de manière sécurisée à un serveur web.
Tout d'abord, comme souvent pour les protocoles sécurisés (utiliser un processus de chiffremment), nous devons généner une paire de clefs .key
et .csr
. Pour cela on utilise la commande suivante :
openssl req -nodes -newkey rsa:2048 -sha256 -keyout ima2a5-wateck.key -out ima2a5-wateck.csr
Nous avons donc généré un jeu de 2 clefs privée et publique.
Argument | explication |
---|---|
req | Gestion X.509 Certificate Signing Request (CSR). |
-nodes | Pas de chiffrage sur la clef privée (option arbitraire no des) |
-newkey rsa:2048 | demande de Génération d'une paire de clef RSA de 2048 bits et d'une demande de certificat. |
-keyout ima2a5-wateck.key | spécification du nom de notre .key |
-out ima2a5-wateck.csr | spécification du nom de notre demande de certificat .csr |
A la suite de la commande openssl
, nous répondons à quelques questions afin de générer et d'obtenir le csr:
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]:Polytech Lille Organizational Unit Name (eg, section) []:IMA2A5 Common Name (e.g. server FQDN or YOUR name) []:ima2a5-wateck.site Email Address []:gael.watbled@polytech-lille.net Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []:glopglop! Optionnal informations :
Notre clé publique est donc contenue dans le fichier ima2a5-wateck.csr
. Ensuite cette clé publique doit être communiqué à notre registrar "Gandi" afin qu'il puisse valider ou non l'authenticité de notre site.
Gandi peut utiliser plusieurs méthode pour certifier notre site. Nous avons choisi la méthode par "fichier". Pour cela nous devons fournir à Gandi un fichier temporaire et attendre qu'il soit validé. Une fois valider un certificat .csr
et un certificat .pem
sont générés.
Le protocole http écoute par défaut sur le port 80. Jusqu'ici notre serveur web écoutait donc sur son port 80 pour déceler d'éventuelles tentatives de connexion de la part des clients. Le protocole sécurisé https écoute lui sur le prot 443. Nous avons donc autorisé le serveur à écouter sur le 443 en plus du port 80 et effectué une redirection afin que les clients voulant se conecter via le protocole http soit automatiquement redirigé sur le port 443 afin d'utiliser le protocole https et donc de sécuriser la connexion.
Activation du module SSL
Tout d'abord nous devons activer le module SSL sur notre serveur Apache2, en créant un lien symbolique via a2en :
sudo a2enmod ssl
Puis il faut relancer le serveur avec la commande :
service apache2 restart
Modification du VirtualHost
Maintenant il est temps de modifier le VirtualHost Apache que nous avions configuré pour fonctionner en http. La nouvelle version donne quelque chose comme cela :
<VirtualHost *:80> ServerName ima2a5-wateck.site ServerAlias www.ima2a5-wateck.site # Redirection 301 vers le site en HTTPS Redirect permanent / https://www.ima2a5-wateck.site/ </VirtualHost> <VirtualHost *:443> # General setup for the virtual host DocumentRoot "/var/www/ima2a5-wateck" ServerName ima2a5-wateck.site ServerAdmin gael.watbled@polytech-lille.net ErrorLog "/etc/apache2/logs/error_log" TransferLog "/etc/apache2/logs/access_log" # Activation du SSL SSLEngine On # Activation de tous les protocoles s curis s (TLS v1.0, v1.1 et TLS v1.2) touut en d sactivant les protocoles non s curis s (SSL v2, SSL v3) SSLProtocol All -SSLv3 -SSLv2 # Le navigateur devra choisir une m thode de chiffrement en respectant l'ordre indiqu e dans SSLCipherSuite SSLHonorCipherOrder on
# Chemin vers le certificat SSL de votre nom de domaine SSLCertificateFile "/etc/apache2/certificate/ima2a5-wateck.crt" SSLCACertificateFile "/etc/apache2/certificate/ima2a5-wateck.pem" # Chemin vers la cl e priv e du certificat SSL de votre nom de domaine SSLCertificateKeyFile "/etc/apache2/certificate/ima2a5-wateck.key" </VirtualHost>
Comme nous l'avons décrit précemment la première partie du fichier de configuration des Hôtes virtuels permet la redirection du port 80 vers le port 443. Ce qui change par rapport à la première version est l'activation du protocole SSL ainsi que la description des chemins pour accèder aux diférents certificats ou clés.
root@ima2a5-wateck:/etc/apache2/certificate# ls -l total 16 -rw-r--r-- 1 root root 2155 Nov 28 08:25 ima2a5-wateck.crt -rw-r--r-- 1 root root 1148 Nov 28 08:12 ima2a5-wateck.csr -rw-r--r-- 1 root root 1705 Nov 28 08:09 ima2a5-wateck.key -rw-r--r-- 1 root root 2111 Nov 28 08:14 ima2a5-wateck.pem
Comme d'habitude il faut maintenant relancer le service afin que les modifications soient effectives :
a2dissite ima2a5-wateck.site a2ensite ima2a5-wateck.site service apache2 restart
Notre serveur web est maintenant sécurisé via le protocole https.
Mise en place du serveur DNS
Installation de Bind9
Un serveur DNS (Domain Name System) permet la correspondance entre un nom de domaine et une adresse IP. Ainsi, grâce à DNS, il n'est pas nécessaire de se souvenir des adresses IP. Pour installer notre propre serveur DNS nous avons utilisé Bind9.
Nous commençons tout d'abord par installer bind9 via la commande suivante : apt-get install bind9
Création et configuration de la zone principale
La zone principale permet de faire pointer un nom de domaine pleinement qualifié (FQDN) sur une adresse IP.
Nous avons tout d'abord modifié le fichier /etc/bind/named.conf.local
qui contient la configuration locale du serveur DNS et nous y avons déclaré les zones associées au domaine ainsi qu'un fichier de description de la zone.
Puis nous avons créé le fichier de description/configuration lui-même que nous avons appelé db.ima2a5-wateck.site
.
[...] ; BIND data file for ima2a5-wateck.site ; $TTL 14400 @ IN SOA ns1.ima2a5-wateck.site. host.ima2a5-wateck.site. ( 201006601 ; Serial 7200 ; Refresh 120 ; Retry 2419200 ; Expire 604800) ; Default TTL ; @ IN NS ns1.ima2a5-wateck.site. @ IN NS ns6.gandi.net. ns1 IN A 193.48.57.164 www IN A 193.48.57.164 [...]
Définitions des hôtes
Une fois la zone principale configurée, nous renseignons dans sa description les noms des différentes machines pour lesquels on souhaite résoudre le nom. Pour cela nous modifions les fichiers de configuration named.conf.local
:
zone "ima2a5-wateck.site" { type master; file "/etc/bind/zones/db.ima2a5-wateck.site.signed"; };
Et named.conf.options
:
options { // forwarders { // 0.0.0.0; // }; //dnssec-validation auto; dnssec-enable yes; auth-nxdomain no; # conform to RFC1035 listen-on-v6 { any; }; allow-transfer { "allowed_to_transfer"; }; };
acl "allowed_to_transfer" { 217.70.177.40/32; // adresse IP du ns6.gandi.net };
Après avoir enregistré les modifications dans les fichiers précédemment évoqués, nous redémarrons le service bind9 grâce à la commande service bind9 restart
.
Le service bind9 doit être redémarré à chaque modification, pour qu’elle soit prise en compte.
Réservation du nom de domaine
Grâce au registrar gandi.net, nous avons réservé le nom de domaine ima2a5-wateck.site
. L'extension .site
est une option trés interessante à cause du prix relativement faible (1€/an)
Configuration du nameserver
Les serveurs de noms permettent d'accéder à un réseau ou du contenu sur internet depuis un nom de domaine. Le nameserver utilisé est spécifié dans notre fichier de configuration pour bind9. La figure suivante montre le choix de nos narmeservers via gandi:
Enregistrement Glue Records
Il faut créer un enregistrement Glue records lorsque le serveur de noms fait référence au nom de domaine. Si vous souhaitez mettre en place plusieurs serveurs de noms, faisant référence au nom de domaine, il faudra créer pour chacun un enregistrement glue record. AInsi nous utilisons les enregistrements Glue records fournis par gandi pour associer un hostname (nom de serveur ou DNS) à l'adresse IP de notre machine. NB:Les modifications seront effectives entre 12 et 24 heures. La figure suivante motre l'enregistrement glue records que nous avons effectué:
Après avoir réalisé ces étapes et attendu que le registrar effectue les modifications, le site est enfin accessible via le nom ima2a5-wateck.site
.
Sécurisation du serveur DNS avec DNSSEC
Modification des fichiers de configuration
Dans le fichier named.conf.options nous commencons par ajouter l’option dnssec-enable yes;
.
Nous avons ensuite créer un répertoire spécifique qui abritera les clés nécéssaires au fonctionnement de DNSSEC :
mkdir ima2a5-wateck.site.dnssec
Ensuite il nous a fallu générer les clés privées et publiques grâce aux commandes suivantes :
dnssec-keygen -a RSASHA1 -b 2048 -f KSK -n ZONE ima2a5-wateck.site -r /dev/urandom
dnssec-keygen -a RSASHA1 -b 1024 -n ZONE ima2a5-wateck.site -r /dev/urandom
Nous avons renommé les deux paires de clefs obtenues en utilisant le nom de la zone comme préfixe puis en suffixant d’abord par la destination de la clef (-ksk pour la KSK ou -zsk pour la ZSK). Voilà le résultat :
-rw-r--r-- 1 root bind 179 Nov 29 10:12 dsset-ima2a5-wateck.site. -rw-r--r-- 1 root bind 619 Nov 29 09:40 ima2a5-wateck.site-ksk.key -rw------- 1 root bind 1774 Nov 29 09:40 ima2a5-wateck.site-ksk.private -rw-r--r-- 1 root bind 445 Nov 29 09:41 ima2a5-wateck.site-zsk.key -rw------- 1 root bind 1010 Nov 29 09:41 ima2a5-wateck.site-zsk.private
Il nous a ensuite fallu inclure les clefs ksk.key
et zsk.key
dans notre fichier de zone et incrémenter sa version (SERIAL) :
; BIND data file for ima2a5-wateck.site ; $TTL 14400 $include /etc/bind/ima2a5-wateck.site.dnssec/ima2a5-wateck.site-ksk.key $include /etc/bind/ima2a5-wateck.site.dnssec/ima2a5-wateck.site-zsk.key @ IN SOA ns1.ima2a5-wateck.site. host.ima2a5-wateck.site. ( 201006602 ; Serial 7200 ; Refresh 120 ; Retry 2419200 ; Expire 604800) ; Default TTL ; @ IN NS ns1.ima2a5-wateck.site. @ IN NS ns6.gandi.net. ns1 IN A 193.48.57.164 www IN A 193.48.57.164
Nous avons ensuite signé la zone avec la commande :
dnssec-signzone -o ima2a5-wateck.site -k ima2a5-wateck.site -ksk ../zones/db.ima2a5-wateck.site ima2a5-wateck.site-zsk
Puis modifié le fichier named.conf.local
pour utiliser la zone signée de suffixe .signed ainsi que le fichier named.conf.options
:
options { // forwarders { // 0.0.0.0; // }; //dnssec-validation auto; dnssec-enable yes; auth-nxdomain no; # conform to RFC1035 listen-on-v6 { any; }; allow-transfer { "allowed_to_transfer"; }; };
acl "allowed_to_transfer" { 217.70.177.40/32; // adresse IP du ns6.gandi.net };
Enfin nous avons redémarré bind9 avec :
service bind9 restart
La dernière étape consiste à communiquer à Gandi notre clé publique KSK afin d'activer DNSSEC.
Transmission de la clé publique à Gandi
Configuration Internet de la machine eeePC Morue
Avant d'effectuer des installations nous devons tout d'abord connecté le PC à internet. Pour cela nous avons modifié le fichier /etc/network/interfaces
.
On modifie le ficher /etc/network.interfaces, comme suit:
auto lo iface lo inet loopback auto enp4s0 address 172.26.145.75 netmask 255.255.255.0 gateway 172.26.145.254
Puis nous effectuons une mise à jour des paquets via apt-get update
.
Cassage de clé WEP
Installation du paquetage AirCrack-ng
Avant de procéder à l'installation, nous mettons d'abords à jour les paquets via la commande :
apt-get update
Enfin, pour espionner le réseau, nous pouvons installer l'utilitaire Aircrack-ng avec la commande :
apt-get install aircrack-ng
Utilisation de AirCrack
Après avoir branché la clé usb permettant de se connecter en wifi aux réseaux mis à disposition, nous commençons par lister les interfaces WiFi disponibles sur l'ordinateur :
airmon-ng
A ce niveau, nous choisissons l'interface que l'on souhaite écouter :
airmong-ng start wlan0mon
Sachant que la commande airodump-ng permet d'écouter tous les réseaux WiFi présents, nous sélectionnons le réseau ciblé et son type de cryptage avec la commande suivante :
airodump-ng --encrypt wep wlan0mon
Ainsi, nous récupérons les données contenues dans les trames échangées et les stockons dans un fichier spécifique.
Airodump-ng -w crack1.txt -c 2 --bssid [@MAC] wlan0mon
L'explication des arguments de la commande utilisée est la suivante:
- -c: pour indiquer le canal d'écoute (canal 2 dans notre cas car tous les réseaux Cracotte y sont)
- -bssid: pour préciser le nom du réseau en question
- -w: pour indiquer le fichier de sauvegarde des trames écoutées
A ce niveau, nous disposons des éléments à analyser pour décrypter la clé WEP, mais pour des raisons de ressources matérielles, nous les utilisons avec une autre machine plus puissante via
aircrack-ng -b [@MAC] crack1*.cap
Cassage de clé WPA-PSK par force brute
Pour cette partie, nous utilisons le même utilitaire que pour cracker la clé WEP.
Ainsi nous listons les interfaces Wi-Fi avec la commande airmon-ng
afin de repérer le réseau Wi-Fi à cracker.
Ensuite on écoute l'interface
airmon-ng start [nom_de_l_interface]
Lorsque l'utilitaire airodump nous indique si des trames WPA sont capturées avec la commande airodump-ng --encrypt wpa wlan0mon
, nous lançons aircrack-ng pour tenter de craquer la clef WPA en s'aidant d'un dictionnaire. D'où l'utilisation de l'expression "cassage par force brute", impliquant que l'on doit se rapprocher au maximum du point d'accès.
A ce niveau, va intervenir l'utilitaire crunch qui va tout simplement créer un dictionnaire de toutes les clés de 8 chiffres car on sait d'avance que la clef WPA est un nombre sur 8 chiffres. La commande pour cela est la suivante:
crunch 8 8 0123456789 >> dictionnaire_wpa.txt
Puis nous lançons aircrack-ng
aircrack-ng [fichier.cap] -w dictionnaire_wpa.txt
Sécurisation d'une clé USB avec cryptsetup
Nous avons commencé par installer l'utilitaire cryptsetup :
apt-get install cryptsetup
apt-get install lvm2
On commence par lister les disques détectés par l'ordinateur et visualiser les partitions avec lsblk
.
Nous avons constaté que l'unique partition de la clé USB à savoir sda était vide
La commande fdisk /dev/sda
permet ensuite de rentrer dans la partition
n
pour créer une partition
p
d
delete
Nous sécurisons la partition (clef-WATECK) en utilisant l’utilitaire cryptsetup
cryptsetup luksFormat -c aes -h sha256 /dev/sda1
pour encrypter la partition au format luks puis définir un mot de passe
cryptsetup open --type luks /dev/sda1 clef-WATECK
pour l'ouvrir
Nous un système de fichier au dessus de la partition sécurisée
mkfs.ext4 /dev/mapper/clef-WATECK
On le monte (dans un repertoire sur le poste) .
mount -t ext4 /dev/mapper/clef-WATECK /mnt/clef
touch test.txt<.code>
<code>umount /mnt/clef
cryptsetup close --type luks clef_WATECK
pour fermer le volume chiffré
Sécurisation réseau filaire par EAP-TLS
Dans cette partie, nous nous sommes beaucoup inspiré des travaux de nos collègues.
Configuration du serveur FreeRadius
Depuis notre machine virtuelle, nous installons freeradius via la commande suivante:
apt-get install freeradius
Puis nous modifierons les fichiers de configuration comme suit:
- rajouter la ligne suivante sur le fichier
/etc/freeradius/3.0/users
:
wateck Cleartext-Password := "glopglop"
- modifier le fichier
/etc/freeradius/3.0/mods-enabled/eap
comme suit:
eap{ default_eap_type = peap }
- modifier le fichier
/etc/freeradius/3.0//mods-enabled/mschap
comme suit:
use_mppe = yes require_encryption = yes require_strong = yes
[...]
with_ntdomain_hack = yes
- configurer la borne comme client du serveur radius via le fichier
/etc/freeradius/3.0/clients.conf
comme suit:
client access-point { # nom de notre borne ipaddr = 10.60.0.100 # @IP de la nborne secret = glopglop # mot de passe }
Tout est OK jusque là, nous devrons arrêter puis relancer le serveur:
service freeradius stop freeradius -X
Sécurisation du réseau
Etape initiale:
apt purge brltty
- Nous accédons à la borne Wi-Fi via minicom en s'assurant de bien mettre
/dev/ttyUSB0
,9600 bauds
etpas de contrôle de flux
:
minicom -os
- Autoriser l'accès avec les privilèges maximum et entamer la configuration
enable Password = "Cisco"
[...]
config term
- On met la commande suivante pour vérifier l'identité de l'utilisateur (
authentication
) , pouvoir limiter l'accès à certaines fonctionnalités (authorization
) et pouvoir enregistrer les actions de l'utilisateur (accounting
) :
aaa new-model
- On crée un server radius pour notre groupe 4, avec glopglop comme secret word :
radius-server host 193.48.57.164 auth-port 1812 acct-port 1813 key glopglop
- Définition du nom du serveur associé à notre groupe :
aaa group server radius radius_groupe4
- Association du serveur de notre groupe à la machine virtuelle:
server 193.48.57.164 auth-port 1812 acct-port 1813
- Définition du login de l'utilisateur :
aaa authentication login wateck group radius_groupe4
- Notre configurons notre BSSID protégé en WPA2-EAP :
dot11 ssid reseau_wateck vlan 4 authentication open eap wateck authentication network-eap wateck authentication key-management wpa
- Configuration des VLAN :
interface Dot11Radio0 encryption vlan vlan4 mode ciphers aes-ccm tkip ssid reseau_wateck
- Création d'une sous-interface dot11Radio0 pour notre groupe :
interface dot11Radio0.4 encapsulation dot1Q 4
- Création d'une sous-interface gigabite pour notre groupe :
interface gigabite0.4 encapsulation dot1Q 4 bridge-group 4
- Ajout de notre BSSID à l'interface Dot11Radio0
interface Dot11Radio0 dot11 ssid reseau_wateck
[...]
interface Dot11Radio0 mbssid dot11 ssid reseau_wateck mbssid guest-mode # pour rendre notre réseau visible
Puis on quitte via exit
sans oublier de faire un write
sinon on perd tout ce qu'on a fait jusque ici
Puis on tape reload
- Attribution d'une adresse IP à la borne
enable conf t int bvi1 ip address 10.60.0.100 255.255.255.0
reseau_wateck
- Pour pinger le routeur, on tape
ping 10.60.0.254
- Pour pinger la VM, on doit d'abord configurer la passerelle:
enable conf t ip route 0.0.0.0 0.0.0.0 10.60.0.253
Puis ping 193.48.57.164