Cahier 2016 groupe n°8
Sommaire
Cahier des charges
Mise en réseau commutateur 6006 (à gauche sur le schéma ci-dessous)
Configuration du commutateur 6006
Objectif
L'objectif de notre travail est de parvenir à configurer le commutateur 6006 de la salle E306 afin de permettre la connexion entre les différents équipements.
Connexion au commutateur via liaison console et configuration
Pour la configuration des VLANS sur le commutateur, on commence par définir et nommer ces vlans via vlan database, par exemple pour le vlan 16 :
vlan database vlan 16 name wifi
Une fois les VLAN définis, on peut les associer aux différents ports du commutateur, les commandes CISCO sont (ici par exemple pour le VLAN2) :
interface GigabitEthernet 4/1 switchport switchport access vlan2 end
On a donc :
- 10 VLAN pour les groupes
Groupe 1 - Vlan 2 : port 4/1
Groupe 2 - Vlan 3 : port 4/2
Groupe 3 - Vlan 4 : port 4/3
Groupe 4 - Vlan 5 : port 4/4
Groupe 5 - Vlan 6 : port 4/5
Groupe 6 - Vlan 7 : port 4/6
Groupe 7 - Vlan 8 : port 4/7
Groupe 8 - Vlan 9 : port 4/8
Groupe 9 - Vlan 10 : port 4/9
Groupe 10 - Vlan 11 : port 4/10
- 1 VLAN (vlan12) pour les machines virtuelles défini sur le port 4/13
On définit ensuite 4 ports en mode TRUNK pour les accès aux routeurs,équipements wifi et Bounding Linux 4/47,4/48 et 5/47, 5/48
La commande est la suivante (exemple avec le port 4/47):
interface GigabitEthernet 4/47 switchport mode trunk switchport trunk encapsulation dot1q end
Enfin on désactive le mode shutdown sur l'ensemble des ports configurés.
Travail Commun
Installation du système de la machine virtuelle Xen (zabeth17)
Xen étant un logiciel de (para)virtualisation de type hyperviseur, il permet de faire tourner plusieurs systèmes d'exploitation (OS) sur une même ressource matérielle (PC, Serveur,…).
Nous allons donc créer notre machine virtuelle, Batman, sur le serveur Cordouan à l'aide de Xen.
- Connexion sur le dom0 du serveur Cordouan en ssh
ssh root@cordouan.insecserv.cordouan.deule.net
- Création de l'image de la machine virtuelle
xen-create-image --hostname=Batman --dist=jessie --dir=/usr/local/xen --ip=193.48.57.168
- Modification du fichier de configuration correspondant à notre machine
xl create /etc/xen/Batman
- Connexion sur la machine virtuelle
xl console Batman //xl list (pour voir la liste des machines disponibles)
Cependant, il faut éviter de se connecter sur la VM avec la commande précédente car génère souvent des problèmes d'écriture en ligne de commandes.
Le mieux est de se connecter en ssh sur le serveur de l'école weppes:
ssh login@weppes (mot de passe demandé) ssh root@ip_VM
Après avoir créé notre VM,nous avons obtenu le mot de passe propre à notre système.
Ensuite, nous créons les systèmes de fichiers de la machine virtuelle afin que les répertoires var et home soient des partitions LVM de l'hôte
La démarche est la suivante :
- Création des partitions sdb1 et sdc1
- Formatage des partitions
- Montage du volume à modifier
- Recopie des des fichiers de /var dans un fichier /tmp
- Démontage du volume
- Montage de tous les systèmes de fichiers dans fstab
Commandes:
lvcreate -L 10G /dev/virtual/ima5-batman-home -v lvcreate -L 10G /dev/virtual/ima5-batman-var -v
ensuite nous les ajoutons dans le fichier de configuration.
Services Internet
Réservation du nom de domaine
Nous avons réservé un nom de domaine sur le registrar http://www.gandi.net : docteurgru.net et installé les paquetages nécessaires pour la réalisation du TP, à savoir apache2 et bind9 (permettant d'attribuer sur notre serveur virtuel Xen les adresses correspondant à notre nom de réseau IP, au nom de notre interface de routeur, au nom de notre machine et au nom de l'adresse de diffusion du réseau IP).
apt-get install apache2 apt-get install bind9
Nous avons ensuite configuré notre VM comme un serveur maître ( Mulan comme esclave) et défini les zones inverses ( qui permettent de trouver nos noms en fonction des adresses IP). Le fichier de zone est le docteurgru.net.db se trouvant dans /etc/bind
Sur la capture d'écran ci-haut, on peut voir l'association entre l'IP et le nom de domaine.
Les zones,quant à eux, sont définis dans le fichier named.conf.local en spécifiant l'adresse de l'esclave dans allow-transfer
Afin de vérifier si tout se passe correctement, on utilise la commande host sur notre VM pour voir si le DNS effectue la résolution en ayant pris le soin de redémarrer le service bind9
service bind9 restart host docteurgru.net 127.0.0.1
Certificat SSL
Pour cette partie du travail, nous allons sécuriser le site web par un certificat généré par Gandi : le CSR (Certificate Signing Request). Nous utilisons donc la commande
openssl req -nodes -newkey rsa:2048 -sha256 -keyout docteurgru.net.key -out docteurgru.net.csr
Les domaines protégés sont donc :
Nous avons ensuite configuré Apache de telle sorte qu'il écoute sur le port 443
Enfin nous définissons notre VM sur ce port dans /etc/apache2/sites-available en créant le fichier 000.docteurgru.net-ssl.conf
Configuration DNS
Dans cette partie, nous allons d'abord configurer le DNS, ensuite le sécuriser par DNSSEC.
Nous créons d'abord le fichier de zone dans /etc/bind/docteurgru.net (c'est dans ce fichier où se trouve les enregistrements d'un domaine. Ces enregistrements établissent le lien entre les adresses IP et les noms).
Puis, dans le fichier named.conf.options, nous rajoutons l'option
dnssec-enable yes.
Création du dossier docteurgru.dnssec dans lequel on stockera les clefs de zone dans etc/bind
mkdir docteurgru.dnssec
Ensuite nous générons les clefs asymétriques de signature de clefs de zone et pour les enregistrements en utilisant l'utilitaire dnssec-keygen. Sous Debian le générateur d'aléa est faible, on utilisera l'option -r /dev/urandom.
dnssec-keygen -a RSASHA1 -b 2048 -f KSK -n ZONE docteurgru.net dnssec-keygen -a RSASHA1 -b 1024 -n ZONE docteurgru.net
Nous avons renommé les 2 paires de clés et les avons inclus dans le fichier de zone /etc/bind/docteurgru.net, en ayant pris le soin d'incrémenter la version .
$include /etc/bind/docteurgru.net.dnssec/docteurgru.net-ksk.key $include /etc/bind/docteurgru.net.dnssec/docteurgru.net-zsk.key
Signature des enregistrements de zone en utilisant la commande (supposé être dans /etc/bind/docteurgru.dnssec)
dnssec-signzone -o docteurgru.net -k docteurgru.net-ksk ../docteurgru.net.db docteurgru.net-zsk
Modification du fichier named.conf.local pour utiliser la zone signée de suffixe docteurgru.net.db.signed ;
Après toutes ces manipulations,nous avons effectué des tests afin de s'assurer s'il était bien configuré à l'aide de l'outil "ZoneCheck" en renseignant docteurgru.net dans la case Domaine.
Sur DNSViz, on peut voir qu'il est bien sécurisé:
Tests d'intrusion
Cassage de clef WEP d'un point d'accès Wifi
Dans cette partie du projet, nous devons nous connecter à un point d'accès wi-fi protégé par clé WEP.
Pour cela, nous avons tout d'abord téléchargé et installé les paquetages aircrack-ng sur notre eeePC.
Une fois les composants installés, nous nous sommes servis d'une clé réseau wifi connecté en USB pour analyser les accés disponibles alentours. Nous avons commencé par passer la carte Wi-fi en mode monitoring :
airmon-ng start wlan0
Nous avons ensuite analyser les points d'accés alentours à l'aide de :
airodump-ng mon0
Nous choisissons le réseau cracotte07 pour notre attaque.
Nous allons désormais faire en sorte de n'observer que notre cible, à l'aide de:
airodump-ng --essid cracotte07 --channel 13 -w dmp mon0
On lance ensuite aircrack à l'aide de :
aircrack-ng dmp-01.cap
Ce qui permet de trouver la clé WEP :
Cassage mot de passe WPA-PSK par force brute
Nous allons désormais casser le mot de passe d'un point d'accés Wi-Fi sécurisé en WPA2.
L'approche est différente de celle de la clé WEP car ici seules des techniques de force brute peuvent être utilisées.
La seule donnée qui donne l'information entre le client et le point d'accès et la poignée de main (handshake en anglais).
Le moyen de casser la clé est ici d'utiliser un dictionnaire.
Le sujet suppose que la clé comporte 8 chiffres, nous allons donc créer un dictionnaire comportant toutes les clés possédant 8 chiffres imaginables puis nous casserons le mot de passe par force brute.
Nous commençons par créer notre dictionnaire à l'aide de crunch :
crunch 8 8 0123456789 > dico.txt
Comme précédemment pour le crackage WEP, on passe l'interface en mode monitoring (voir ci-dessus).
On scanne ensuite les réseaux alentours, en précisant cette fois que l'on ne s'intéresse qu'aux réseaux protégés en WPA
airodump-ng --encrypt wpa mon0
On choisit ensuite un réseau pour l'attaque. Une fois de plus nous attaquons cracotte07 (qui est cette fois protégé en WPA2).
airodump-ng --encrypt wpa --bssid 04:DA:D2:9C:50:56 -w dmp mon0
Puis nous lançons aicrack, en spécificant cette fois l'utilisation du dictionnaire créé précédemment:
aircrack-ng -w dico.txt dmp-01.cap
L'attaque se lance donc :
Vu la puissance relativement faible de l'eeePC, la vitesse de calcul n'est pas très élevé et la recherche de la clé est très longue.</br>
Nous avons donc relancé l'attaque depuis une machine Zabeth disposant de plus de ressources.
Nous obtenons finalement la clé :
Réalisations
Sécurisation des données
Dans cette partie, nous allons mettre en place un RAID5, ce système permet d'utiliser plusieurs espaces mémoires pour sécuriser des données
En effet, avec ce type de configuration, si un espace mémoire tombe en panne, les autres espaces sont capable de régénérer les informations.
On parle de parallélisation de l'information.
On crée tout d'abord les trois partitions de 1GB sur notre serveur Xen:
lvcreate -L 1G -n /dev/virtual/ima5-Batman-raid1 lvcreate -L 1G -n /dev/virtual/ima5-Batman-raid2 lvcreate -L 1G -n /dev/virtual/ima5-Batman-raid3
On modifie ensuite le fichier de configuration pour ajouter les nouveaux emplacements.
On relance la machine virtuelle puis on vérifie que les nouveaux espaces de stockage sont bien pris en compte avec :
fdisk -l
On crée ensuite un RAID5 logiciel avec les trois paquetages obtenus à l'aide de mdadm
mdadm --create /dev/md0 --level=5 --assume-clean --raid-devices=3 /dev/xvdd1 /dev/xvde1 /dev/xvdf1
On vérifie que l'opération s'est déroulée correctement :
cat /proc/mdstat
Création du système de fichiers avec :
mkfs /dev/md0
On vérifie le contenu de notre RAID :
root@Batman:/dev# mdadm --detail /dev/md0 /dev/md0: Version : 1.2 Creation Time : Thu Nov 17 19:28:49 2016 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 17 19:31:00 2016 State : clean Active Devices : 3 Working Devices : 3 Failed Devices : 0 Spare Devices : 0 Layout : left-symmetric Chunk Size : 512K Name : Batman:0 (local to host Batman) UUID : a767c52f:ba3704db:a8f43399:7e8ad5cf Events : 2 Number Major Minor RaidDevice State 0 202 49 0 active sync /dev/xvdd1 1 202 65 1 active sync /dev/xvde1 2 202 81 2 active sync /dev/xvdf1
On crée un fichier dans notre RAID puis on teste la perte d'une partition physique.
mdadm --set-faulty /dev/md0 /dev/xvdd1 mdadm --remove /dev/md0 /dev/xvdd1
On voit que la partition a bien été supprimé, mais nos données sont toujours présentes.
cat /proc/mdstat mount /dev/md0 /mnt
On procède à la reconstruction de la partition physique et on obtient :
mdadm --add /dev/md0 /dev/xvdd1
root@Batman:~# cat /proc/mdstat Personalities : [raid6] [raid5] [raid4] md0 : active raid5 xvdd1[3] xvde1[1] xvdf1[2] 2095104 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/2] [_UU] [====>................] recovery = 23.2% (243780/1047552) finish=0.3min speed=34825K/sec
Cryptage des données
On installe lvm2 et crypsetup sur l'eeepc. On veut 1 partition sur la carte SD: La carte SD est sur mmcblk1p1
fdisk /dev/mmcblk1p1
On crée la partition avec la commande "n".
Puis on choisit "p" pour créé une partition primaire, on choisit tout l'espace disponible pour la partition.
On a crée la partition, on va la sécuriser avec cryptsetup.
La commande suivante va formater la partition au type LUKS, le chiffrement sera de type AES avec un algorithme de hachage SHA256.
Une phrase secréte est alors choisie pour sécuriser la partition. On choisit "docteurgru".
Le conteneur chiffré de manière standard va stocker la clé de chiffrement qui servira à ouvrir le volume chiffré.
cryptsetup luksFormat -c aes -h sha256 /dev/mmcblk1p1
Pour voir l'état du conteneur:
cryptsetup luksDump /dev/hda7
Ouverture et formatage en ext3 de la partition chiffrée. L'appellation du volume est ici batman.
cryptsetup luksOpen /dev/sdb1 batman mkfs.ext3 /dev/mapper/batman
Puis montage de la partition :
mount -t ext3 /dev/mapper/batman /mnt
Pour démonter et fermer le volume chiffré:
umount /mnt/ cryptsetup luksClose batman
On propose ensuite notre carte SD à un autre groupe qui ne peut accéder aux informations de la carte qu'en connaissant la phrase secrète.
Sécurisation Wifi par WPA2-EAP
Dans cette partie, on cherche à sécuriser le point d'accès Wifi par WPA2-EAP.
On commence par installer FreeRadius sur la machine virtuelle.
C'est ce serveur Radius qui va permettre de définir les accès d'utilisateur se connectant à notre réseau.
On configure un nouvel utilisateur par :
batman Cleartext-password := "docteurgru"
On ajoute ensuite un nouveau client dans clients.conf (chemin /etc/freeraduis/client.conf )
client 10.60.1.6/24 { secret = docteurgru shortname = batman }
On se connecte ensuite à la borne d'accès Wifi via telnet, on spécifie 'Cisco' comme mot de passe.
telnet 10.60.1.6 Trying 10.60.1.6... Connected to 10.60.1.6. Escape character is '^]'. User Access Verification Username: Cisco Password:
Puis on ajoute les commandes suivantes :
aaa new-model aaa authentication login eap_batman group radius_batman radius-server host 193.48.57.168 auth-port 1812 acct-port 1813 key docteurgru aaa group server radius radius_batman server 193.1 auth-port 1812 acct-port 1813 dot11 ssid ssid_batman vlan 8 authentication open eap eap_batman authentication network-eap eap_batman authentication key-management wpa mbssid guest-mode interface Dot11Radio0 encryption vlan 9 mode ciphers aes-ccm tkip ssid SSID_Batman interface Dot11Radio0.9 encapsulation dot1Q 9 no ip route-cache bridge-group 9 bridge-group 9 subscriber-loop-control bridge-group 9 spanning-disabled bridge-group 9 block-unknown-source no bridge-group 9 source-learning no bridge-group 9 unicast-flooding interface GigabitEthernet0.9 encapsulation dot1Q 9 bridge-group 9
Et enfin nous configurons l'interface de notre eeePC pour lui attribuer une adresse IP manuellement (nous verrons plus tard comment attribuer une ip automatiquement à l'aide d'un serveur DHCP).
auto wlan2 iface wlan2 inet static address 10.60.9.10 netmask 255.255.255.0 gateway 10.60.9.1 wpa-ssid ssid_batman wpa-key-mgmt WPA-EAP wpa-eap PEAP wpa-identity batman wpa-password docteurgru
On vérifie que notre configuration est opérationnelle en pingant l'eeePC via la machine virtuelle.
root@Batman:~# ping 10.60.9.10 PING 10.60.9.10 (10.60.9.10) 56(84) bytes of data. 64 bytes from 10.60.9.10: icmp_seq=1 ttl=63 time=11.7 ms 64 bytes from 10.60.9.10: icmp_seq=2 ttl=63 time=8.06 ms 64 bytes from 10.60.9.10: icmp_seq=3 ttl=63 time=16.0 ms
On réussi ensuite à se connecter à l'Internet directement depuis l'eeePC.
Mise en place du serveur DHCP
On procède d'abord à l'installation du paquet isc-dhcp-server.
On modifie ensuite le fichier de configuration dhcpd.conf (chemin /etc/dhcp/dhcpd.conf)
subnet 10.60.9.0 netmask 255.255.255.0 { range 10.60.9.100 10.60.9.200; option routers 10.60.9.1; }
On notifie ensuite wlan2 dans /etc/default/isc-dhcp-server.
Pour tester, on se sert de l'interface wlan0 du eeePC.
On se place donc dans /etc/network/interfaces et on spécifie:
iface wlan0 inet dhcp wpa-ssid ssid_batman wpa-key-mgmt WPA-EAP wpa-eap PEAP wpa-identity batman wpa-password docteurgru
On recharge le serveur dhcp via un restart, puis on met à jour l'interface wlan0 par un ifup wlan0.
On obtient bien une adresse ip :
root@sardine:/etc# ifconfig wlan0 wlan0 Link encap:Ethernet HWaddr 74:29:af:f3:fd:71 inet adr:10.60.9.100 Bcast:10.60.9.255 Masque:255.255.255.0
On essaie ensuite de connecter un smartphone au point d'accès Wifi via notre SSID, nous obtenons une l'adresse IP juste après:
PCBX
On installe Asterisk sur la machine virtuelle.
apt-get install asterisk
On modifie le fichier sip.conf pour ajouter les utilisateurs:
[general] hasvoicemail=yes hassip=yes hasiax=yes callwaiting=yes threewaycalling=yes callwaitingcallerid=yes transfer=yes canpark=yes cancallforward=yes callreturn=yes callgroup=1 pickupgroup=1 nat=yes [666] type=friend host=dynamic dtmfmode=rfc2833 disallow=all allow=ulaw fullname=GruWayo username=qgruson secret=docteurgru context=work [665] type=friend host=dynamic dtmfmode=rfc2833 disallow=all allow=ulaw fullname=GruWayo username=snduwayo secret=soso context=work
Puis nous modifions le fichier extensions.conf pour ajouter notre contexte.
[work] exten=>_6XX,1,Dial(SIP/${EXTEN},20) exten => _6XX,2,Hangup()
Cela signifie que la première action (dial) lance d'abord l'appel puis la 2e action abandonne (Hangup) au bout de 20 secondes.
On relance Asterisk
service asterisk restart
On utilise ensuite l'application mobile "CSipSimple" pour tester notre configuration. Nous arrivons à nous appeler.
Voici les logs d'Asterisk
References
DHCP sous debian : https://wiki.debian.org/fr/DHCP_Server
PCBX avec android : https://denisrosenkranz.com/tuto-installer-et-configurer-asterisk-sous-debian-6-et-ubuntu/