TP sysres IMA5sc 2019/2020 G2
Sommaire
- 1 Présentation générale
- 2 Réalisation du TP
- 2.1 Installation dans la machine virtuelle Xen
- 2.2 Architecture réseau
- 2.2.1 L’architecture générale
- 2.2.2 Organisation du travail
- 2.2.3 Réalisation
- 2.2.4 Sécurisation du réseau
- 2.3 Services Internet
- 2.4 Ferme de serveurs Web
- 2.5 Tests d’intrusion
- 2.6 Partie ASR
Présentation générale
Travaux pratiques protocoles avancés. Cet atelier consiste en la réalisation d’une maquette de réseau permettant de manipuler les protocoles de redondance réseau ainsi que le protocole réseau IPv6.
Le cours se trouve à cette adresse Le sujet du TP se trouve à cette adresse
Réalisation du TP
Installation dans la machine virtuelle Xen
Nous avons acheté notre domaine : mycoplasma.site sur le site gandi. Il faut créer la machine virtuelle Xen Linux sur le dom0 cordouan.insecserv.deule.net
Donc il faut se connecter en shh à Cordouan:
ssh root@cordouan.insecserv.deule.net
Puis créer notre machine virtuelle :
xen-create-image --hostname=mycoplasma --dhcp --dir=/usr/local/xen --dist=buster xl create mycoplasma.cfg
On a ensuite installer les paquetages nécessaires pour SSH, le serveur Web apache2 et le serveur DNS bind :
sudo apt-get install openssh-server sudo apt-get install apache2 sudo apt-get install -y bind9
Pour afficher les logs et savoir si l'installation à bien lieu :
tail -f /var/log/xen-tools/mycoplasma.log
Accès Internet et Permettre SSH
Une fois la VM créée (semaine 1), il faut installer les packages, donc il faut lui donner l'accès à internet. Il faut modifier le fichier suivant etc/network/interfaces. Pour enregistrer les modifications, il faut exécuter les commandes: if down eth0, ifup eth0.
auto eth0 iface eth0 inet static address 193.48.57.178 netmask 255.255.255.240
Pour le moment, pour se connecter à la Machine virtuelle, on utilise la commande suivante:
xl console mycoplasma
SSH
Mais il y a une seconde façon d'accéder à notre VM: c'est en utilisant SSH. Pour le faire il faut remplacer la ligne suivante :
" #PermitRootLogin prohibit-password"
par
" PermitRootLogin yes"
de ce fichier etc/ssh/sshd_config.
Architecture réseau
L’architecture générale
L'objectif que l'on souhaite réaliser dans cette partie est une architecture capable de résister à la défaillance de quelques uns des équipements réseau qui la composent par le biais de la redondance.
Nous disposons, pour la réalisation, de deux commutateurs et de deux routeurs et deux bornes wifi répartis entre les deux salles E304 et E306.
Nous avons sur les deux terminaisons de notre architecture:
- Le serveur XEN qui abrite des machines virtuelles avec les différents services qui y sont implantés.
- Le réseau de l'école.
Le schéma de principe ci-joint, résume l'architecture proposée.
On peut ainsi voir à partir de ce schéma que tant que nous avons au minimum un routeur et un commutateur fonctionnels l’infrastructure pourra toujours assurer le service
Entre autres, on doit satisfaire le cahier des charges suivant:
- Un routage IPv4
- Un routage IPv6
- Interconnexion avec Internet (IPv4)
- Interconnexion avec Internet (IPv6)
- Sécurisation du réseau en implantant le protocol VRRP sur les routeurs.
- Confguration des bornes wifi
Organisation du travail
Nous avons pris l'initiative de nous répartir la réalisation de l'infrastructure et notre groupe s'est principalement chargé de l'implémentation sur la partie E304.
Sur cette partie nous devons donc configurer le commutateur (COM-1) pour:
- Communiquer avec la serveur XEN
- Communiquer avec le routeur R1 en E304 et le R2 en E306.
Et configurer le routeur R1 pour:
- L'interconnexion des deux commutateurs COM-1 et COM-2 avec le réseau de l'école et internet
Le schéma proposé à droite résume le choix des interfaces pour la réalisation de l'interconnexion des équipements.
Réalisation
Rappelons la table des adressages convenue en phase d'architecture:
Nom | VLAN | Réseau IPV4 | Réseau IPV6 | IP routeur 1 | IP routeur 2 | Routeur virtuel | Nom VM | IP VM | IP VM Private |
---|---|---|---|---|---|---|---|---|---|
XEN | 200 | 193.48.57.176/28 | 2001:660:4401:60AB::/64 | 193.48.57.188/28 | 193.48.57.189/28 | 193.48.57.190/28 | *** | 193.48.57.176/28 | *** |
Interconnection | 131 | 10.60.100.0/24 | *** | 10.60.100.1/24 | 10.60.100.2/24 | *** | *** | *** | *** |
Groupe 1 | 101 | 10.60.101.0/24 | 2001:660:4401:60A1::/64 | 10.60.101.1/24 | 10.60.101.2/24 | 10.60.101.3/24 | 6phil | 193.48.57.177/28 | 192.168.0.1 |
Groupe 2 | 102 | 10.60.102.0/24 | 2001:660:4401:60A2::/64 | 10.60.102.1/24 | 10.60.102.2/24 | 10.60.102.3/24 | mycoplasma | 193.48.57.178/28 | 192.168.0.2 |
Groupe 3 | 103 | 10.60.103.0/24 | 2001:660:4401:60A3::/64 | 10.60.103.1/24 | 10.60.103.2/24 | 10.60.103.3/24 | herpesgenital | 193.48.57.179/28 | 192.168.0.3 |
Groupe 4 | 104 | 10.60.104.0/24 | 2001:660:4401:60A4::/64 | 10.60.104.1/24 | 10.60.104.2/24 | 10.60.104.3/24 | chlamydiae | 193.48.57.180/28 | 192.168.0.4 |
Groupe 5 | 105 | 10.60.105.0/24 | 2001:660:4401:60A5::/64 | 10.60.105.1/24 | 10.60.105.2/24 | 10.60.105.3/24 | chaudepisse | 193.48.57.181/28 | 192.168.0.5 |
Groupe 6 | 106 | 10.60.106.0/24 | 2001:660:4401:60A6::/64 | 10.60.106.1/24 | 10.60.106.2/24 | 10.60.106.3/24 | blennoragie | 193.48.57.182/28 | 192.168.0.6 |
Autres | 300 | 10.60.200.0/24 | 2001:660:4401:60AA::/64 | 10.60.200.1/24 | 10.60.200.2/24 | 10.60.200.3/24 | *** | *** | *** |
Comme on peut le voir, les VMs exposées possèdent chacune deux adresses IPv4 sur deux réseaux différents:
- Le réseau routé : 193.48.57.176/28 (Class C)
- Le réseau non-routé : 10.10.0.0/16 (Class A)
Nous devons allouer sur le réseau non-routé, dit privé, un VLAN pour chaque groupe pour qu'il puisse y connecter son client Wifi en plus des VLANs fonctionnels.
Configuration du commutateur 1 (COM-1)
Création des VLANs
Pour la création des VLANs nous utilisons la suite de commandes ci-dessous:
conf t vlan <NUMERO> name <NOM> exit exit write
avec les couples de valeurs:
<NUMERO> | <NOM> |
---|---|
101 | VLAN0101 |
102 | VLAN0102 |
103 | VLAN0103 |
104 | VLAN0104 |
105 | VLAN0105 |
106 | VLAN0106 |
131 | INTERCNX |
200 | XEN |
Liaison COM-1 vers XEN
Cette connexion doit faire transiter les différents VLANs et doit donc être en Trunk.
Configuration de l'interface
conf t interface GigabitEthernet1/1 switchport switchport trunk encapsulation dot1q # On utilise le standard 802.1q pour l'encapsulation switchport mode trunk # On met l'interface en mode Trunk no shut
Liaison COM-1 vers R1
Configuration de l'interface
conf t interface GigabitEthernet4/1 switchport switchport mode trunk
Liaison COM-1 vers R2
Configuration de l'interface
conf t interface GigabitEthernet1/2 switchport switchport trunk encapsulation dot1q switchport mode trunk
Liaison COM-1 vers Borne Wifi
Configuration de l'interface
conf t interface GigabitEthernet4/4 switchport switchport mode trunk
Configuration du Routeur 1 (R1)
- Je_Continue_Demain
Création des Réseaux virtuels
La notion de Bridge Domain Interface (BDI)
conf t interface BDI101 ip address 10.60.101.1 255.255.255.0 standby version 2 standby 101 ip 10.60.101.3 standby 101 preempt ipv6 address 2001:660:4401:60A1::/64 eui-64 ipv6 enable ipv6 nd prefix 2001:660:4401:60A1::/64 1000 900 ipv6 nd router-preference High no shut exit
interface BDI102 ip address 10.60.102.1 255.255.255.0 standby version 2 standby 102 ip 10.60.102.3 standby 102 preempt ipv6 address 2001:660:4401:60A2::/64 eui-64 ipv6 enable ipv6 nd prefix 2001:660:4401:60A2::/64 1000 900 ipv6 nd router-preference High no shut exit
interface BDI103 ip address 10.60.103.1 255.255.255.0 standby version 2 standby 103 ip 10.60.103.3 standby 103 preempt ipv6 address 2001:660:4401:60A3::/64 eui-64 ipv6 enable ipv6 nd prefix 2001:660:4401:60A3::/64 1000 900 ipv6 nd router-preference High no shut exit
interface BDI104 ip address 10.60.104.1 255.255.255.0 standby version 2 standby 104 ip 10.60.104.3 standby 104 preempt ipv6 address 2001:660:4401:60A4::/64 eui-64 ipv6 enable ipv6 nd prefix 2001:660:4401:60A4::/64 1000 900 ipv6 nd router-preference High no shut exit
interface BDI105 ip address 10.60.105.1 255.255.255.0 standby version 2 standby 105 ip 10.60.105.3 standby 105 priority 150 standby 105 preempt ipv6 address 2001:660:4401:60A5::/64 eui-64 ipv6 enable ipv6 nd prefix 2001:660:4401:60A5::/64 1000 900 ipv6 nd router-preference High no shut exit
interface BDI106 ip address 10.60.106.1 255.255.255.0 standby version 2 standby 106 ip 10.60.106.3 standby 106 priority 150 standby 106 preempt ipv6 address 2001:660:4401:60A6::/64 eui-64 ipv6 enable ipv6 nd prefix 2001:660:4401:60A6::/64 1000 900 ipv6 nd router-preference High no shut exit
interface BDI131 ip address 192.168.222.10 255.255.255.248 ipv6 enable no shut exit
interface BDI200 ip address 193.48.57.188 255.255.255.240 standby version 2 standby 200 ip 193.48.57.190 standby 200 preempt ipv6 enable no shut exit exit write
Configuration IPv4
Configuration IPv6
Interconnexion avec le réseau école
Sécurisation du réseau
Services Internet
Serveur SSH
Pour se connecter à la VM une première fois, il faut utiliser la commande :
xl console mycoplasma --depuis cordouan.
Pour sécuriser les services réseaux il faut être capable de se connecter à la VM en SSH, il faut faire quelques modifications dans le fichier etc/ssh/sshd_config de la VM. Voici la modification :
#PermitRootLogin prohibit-password
par
PermitRootLogin yes
Par la suite, il sera possible d'accéder à la VM directement :
ssh root@193.48.57.178
Serveur DNS
Nous avons utiliser le registrar Gandi (http://www.gandi.net) pour réserver notre nom de domaine, nous avons choisi mycoplasma2.
Dans un premier temps, faire apparaitre dans le fichier /etc/bind/named.conf.options la ligne suivante:
dnssec-validation auto;
Configuration apache
root@mycoplasma:~# cat /etc/apache2/sites-available/loadbalance.conf
<VirtualHost 193.48.57.178:443> ServerName www.mycoplasma2.site ServerAlias mycoplasma2.site DocumentRoot /var/www/html/ ServerAdmin lina.mejbar@polytech-lille.net SSLEngine on SSLCertificateFile /etc/ssl/certs/mycoplasma2.site.crt SSLCertificateKeyFile /etc/ssl/private/myserver.key SSLCertificateChainFile /etc/ssl/certs/GandiStandardSSLCA2.pem SSLVerifyClient None ErrorLog ${APACHE_LOG_DIR}/lb-error.log CustomLog ${APACHE_LOG_DIR}/lb-access.log combined </VirtualHost>
<VirtualHost 193.48.57.178:80> ServerName www.mycoplasma2.site ServerAlias mycoplasma2.site ProxyPass "/" "http://192.168.0.2:8002/" ProxyPassReverse "/" "http://192.168.0.2:8002/" Redirect "/" "https://www.mycoplasma2.site" </VirtualHost>
Enfin pour enregistrer nos modifications :
a2enmod ssl a2ensite mycoplasma2.site.conf service apache2 restart
Comme on peut le voir sur la photo ci-dessous : nous avons accès à notre site de façon sécurisée.
Configuration bind9
BIND veut dire : Berkeley Internet Name Daemon Nous avons déjà installer le package titre du lien ici.
Ensuite il faut créer un fichier de configuration dans le dossier /etc/bind/ avec les informations de notre site:
root@mycoplasma:/etc/bind# cat mycoplasma2.site
; ; BIND data file for local loopback interface ; $TTL 604800 @ IN SOA ns.chlamydiae.site. root.mycoplasma2.site ( 4 ; Serial 604800 ; Refresh 86400 ; Retry 2419200 ; Expire 604800 ) ; Negative Cache TTL ; IN NS ns.mycoplasma2.site. IN NS ns6.gandi.net. @ IN A 193.48.57.178 ns IN A 193.48.57.178 www IN A 193.48.57.178
Il faut modifier le fichier named.conf.local pour lui donner le nom de notre fichier configuration et de définir les paramètres généraux d'une zone.:
root@mycoplasma:/etc/bind# cat named.conf.local
zone "mycoplasma2.site" { type master; file "/etc/bind/mycoplasma2.site"; allow-transfer {217.70.177.40;}; };
Il faut ensuite relancer avec la commande suivante :
service bind9 restart
Il faut aussi ajouter dans l'onglet GlueRecords le nom de domaine de notre site, et celui de gandi.
Sécurisation de site web par certificat
On doit configurer apache2 en mode sécurisé à l’aide d’une clef asymétrique et d’un certificat signé par une autorité de certification. Le CA signe un CSR (Certificate Signing Request), pour ce faire il faut créer les clefs et le CSR en utilisant openssl. Il faut ensuite le transformer en un certificat, on va donc configurer apache2 sur le port 443 afin qu'il puisse gérer du HTTPS.
openssl req -nodes -newkey rsa:2048 -sha256 -keyout myserver.key -out server.csr
Il faut ensuite renseigner quelques informations :
Country Name (2 letter code) [AU]: France State or Province Name (full name) [Some-State]: Haut de France Locality Name (eg, city) []: Lille Organization Name (eg, company) [Internet Widgits Pty Ltd]: Polytech Lille Organizational Unit Name (eg, section) []: IMA5 Common Name (e.g. server FQDN or YOUR name) []: mycoplasma2.site Email Address []: Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []:
La seule vraie ligne où il ne faut pas se tromper, c'est celle où l'on indique le nom du site (Common Name), si la ligne est fausse Gandi n'acceptera pas votre clef. Une fois ces informations renseignées, une clef est générée.
/!\ Il faut la garder précieusement et ne pas la SUPPRIMER des fichiers de la machine virtuelle, dans ce cas il faudra tout recommencer avec un nouveau nom de domaine parce que la clef n'est générable qu'une seule fois. Il faut maintenant copier le contenu de ce fichier avec le "BEGIN CERTIFICATE REQUEST-----" et le "END CERTIFICATE REQUEST-----" sur le site de gandi.
Sécurisation de serveur DNS par DNSSEC
root@mycoplasma:/etc/bind# vim named.conf
include "/etc/bind/named.conf.options"; include "/etc/bind/named.conf.local"; include "/etc/bind/named.conf.default-zones"
Pour générer les clefs dans un même dossier, il faut le créer voici le chemin pour notre groupe :
root@mycoplasma:/etc/bind/mycoplasma2.site.dnssec#
Pour générer les clés KSK on lance la commande suivante :
dnssec-keygen -a RSASHA1 -b 2048 -f KSK -n ZONE mycoplasma2.site
Pour ZSK :
dnssec-keygen -a RSASHA1 -b 1048 -n ZONE mycoplasma2.site
On peut maintenant rajouter nos clefs dans le fichier mycoplasma2.site:
root@mycoplasma:~# cat /etc/bind/mycoplasma2.site
$TTL 604800 $include /etc/bind/mycoplasma2.site.dnssec/mycoplasma2.site-ksk.key $include /etc/bind/mycoplasma2.site.dnssec/mycoplasma2.site-zsk.key @ IN SOA ns.chlamydiae.site. root.mycoplasma2.site ( 4 ; Serial 604800 ; Refresh 86400 ; Retry 2419200 ; Expire 604800 ) ; Negative Cache TTL ; IN NS ns.mycoplasma2.site. IN NS ns6.gandi.net. @ IN A 193.48.57.178 ns IN A 193.48.57.178 www IN A 193.48.57.178
On signe les enregistrements de la zone en exécutant la commande suivante :
dnssec-signzone -o mycoplasma2.site -k mycoplasma2.site-ksk ../mycoplasma2.site mycoplasma2.site-zsk
Dernière étape, il fait ajouter le chemin du fichier pour utiliser le fichier de zone signé :
root@mycoplasma:~# cat /etc/bind/named.conf.local
zone "mycoplasma2.site" { type master; file "/etc/bind/mycoplasma2.site.signed"; allow-transfer {217.70.177.40;}; };
service bind9 restart
Nous vérifions sous dnsviz.net le bon fonctionnement du DNSSEC :
Serveur Freeradius
Ferme de serveurs Web
Création du conteneur
Configuration des serveurs internes
Equilibreur de charge
Tests d’intrusion
Cassage de clef WEP d’un point d’accès WiFi
Pour scanner l'environnement Wi-Fi, on utilise l'outil airodump-ng. On remarque qu'il y a deux types de wifi, les cracottes avec un c et les kracottes avec un k. On lance l'interface en mode moniteur :
airmon-ng start wlan0mon airodump-ng --encrypt wep wlan0mon
On a choisi de casser la clé WEP de la cracotte5 sur le channel 2, on enregistre les paquets dans webPack.
airodump-ng -c 2 –-bssid 04:DA:D2:9C:5O:5A -w wepPack wlan0mon
La commande suivante permet de se faire passer pour un client afin de générer de l'activité sur le réseau.
aireplay-ng --fakeauth 30 -a 04:DA:D2:9C:5O:5A wlan0mon
On utilise les paquets enregistrés pour réaliser le cassage:
aircrack-ng wepDico*.cap
Cassage de mot de passe WPA-PSK par force brute
Il faut lancer la commande ip a : récupérer le nom de l'interface wifi : ""wlx40a5ef0f6518"". Il faut le lancer avec la commande :
airmon-ng start wlx40a5ef0f6518
Il faut ensuite écouter le réseau, on récupère alors le channel(2), le nom du wifi, le BSSID (04:DA:D2:9C:5O:5A) avec la commande suivante:
airodump-ng --encrypt wpa wlan0mon
Nous avons choisi de cracker "kracote03"
airodump-ng wlan0mon --bssid 04:DA:D2:9C:5O:5A --ch 2 -w capture
Il faut l'arreter une fois qu'on obtient un handshake
Pour générer un dictionnaire, on a besoin de la commande suivante :
sudo apt-get update sudo apt-get install crunch
crunch 8 8 -o dico.txt 0123456789
- 8 8 : donne des codes de 8 caractères au minimum et au maximum
On lance cette commande :
airodump-ng -c 2 --bssid 04:DA:D2:9C:5O:5A -w ./home/pifou/crack wlx40a5ef0f6518
Voici une capture de la commande :
aircrack crack/capture.cap -w dico.txt
On remarque ce la photo ci dessus que la commande a pris 21 min et 42 sec.
Partie ASR
Nouvelle VM
L'objectif de ces 12 heures est de créer une nouvelle Machine virtuelle qui serait cette fois-ci privée, elle va permettre d'héberger un serveur Web.
Pour la créer :
xen-create-image --hostname=private-mycoplasma --ip=ip 192.168.0.2 --dir=/usr/local/xen xl create private-mlycoplasma.cfg
Généralement lorsque les export ne sont pas configurés, la création reste bloquée. Il faut exécuter les commande suivante:
export http_proxy=http://proxy.plil.fr:3128 export https_proxy=http://proxy.plil.fr:3128
et suivre la suite de la création avec le fichier de log:
tail -f /var/log/xen-tools/private-mycoplasma.log
Voici notre nouvelle structure :
Pour y arriver, il faut modifier les fichiers /etc/network/interfaces des deux machines virtuelles avec les adresses, Gateway, et netmask marque sur la photo ci-dessus. Et valider les modifications avec les commandes habituelles : ifdown ethi et ifup ethi
Mascarade
iptables -P FORWARD DROP iptables -A FORWARD -j ACCEPT -s 192.168.0.0/24 iptables -A FORWARD -j ACCEPT -d 192.168.0.0/24 iptables -t nat -A POSTROUTING -j MASQUERADE -s 192.168.0.0/24 echo 1 > /proc/sys/net/ipv4/ip_forward apt install iptables-persistent
Il faut ensuite décommenter
net.ipv4.ipforward=1
Ansible
Ansible permet l'automatisation par connexion sans mot de passe. Il faut d'abord générer une clef asymétrique :
ssh-keygen -t rsa
Installation de la clef publique sur les machines virtuelles 192.168.0.1 à 192.168.0.6 :
cat .ssh/id_rsa.pub | ssh 192.168.0.1 "cat >> /root/.ssh/authorized_keys2"
Il faut installer Ansible :
apt install ansible
Hosts
Ensuite il faut rédiger l'inventaire ( /etc/ansible/hosts ) c'est un fichier yaml, il faut très attention à la syntaxe. Ce fichier regroupe le parc informatique :
all: hosts: interne: ansible_host: 192.168.0.2 children: serveur-web: hosts: 192.168.0.[1:6]
Playbooks
Maintenant qu'on a défini toutes les machines dans notre parc et qu'on peut se connecter automatique, on peut exécuter une commande à distance sur tout le parc à l'aide d'Ansible. Un "playbook" c'est une liste des tâches à effectuer sur ces machines.