Cahier 2016 groupe n°8

De Wiki de Projets IMA

Cahier des charges

Mise en réseau commutateur 6006 (à gauche sur le schéma ci-dessous)

Schématisation du réseau à implémenter

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

Bind.png

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

Zones.png

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

VerifDns.png

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 :

Protected domain.png

Nous avons ensuite configuré Apache de telle sorte qu'il écoute sur le port 443

Portapache1.png

Enfin nous définissons notre VM sur ce port dans /etc/apache2/sites-available en créant le fichier 000.docteurgru.net-ssl.conf

Port VM.png

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é:

Dnssecuriz.png

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

ScanNetwork.png

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

AnalyseReseau.png

On lance ensuite aircrack à l'aide de :

aircrack-ng dmp-01.cap

Ce qui permet de trouver la clé WEP :

KeyFound.png

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 :

CrackWPA.png

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é :

KeyfoundWPA.png

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:

Ssid batman.png

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.

Appel reussi.png

Voici les logs d'Asterisk

CallAsterisk.png

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/