- Manipulations IP et masque (avec le binaire)
- Notions :
- Firewall
- Routage (statique)
- IP, Ports, MAC
- Utilisation de CentOS
- installation simple
- utilisation CLI simple (cf les commandes du Lexique)
man,cd,ls,nano,catip a,ping,nc,traceroute,ss
- configuration réseau (voir la fiche de procédures)
- configuration d'interfaces
- gestion simplifié de nom de domaine
- hostname, FQDN, fichier
/etc/hosts
- hostname, FQDN, fichier
- configuration firewall
- configuration routage statique (TP 3)
Gné ? "Spéléologie" ? Oui, on va descendre dans les couches du modèle OSI (on y reviendraaaaaa), explorer le principe d'encapsulation, et regarder un peu comment ça fonctionne vraiment tout ça.
En vrai c'est le TP qui fait un peu mal aux dents, alors gardez le sourire, soyez motivées les filles et tout ira bien. :)
Ha et c'est un TP solo ! Vous pouvez vous aider entre vous (oui, aidez-vous, vous êtes beaux et forts), mais un rendu/personne exigé !
-
vous utiliserez un l'hyperviseur de votre choix parmi :
- Virtualbox
- VMWare Workstation
- j'utiliserai VirtualBox pour ma part, c'est avec lui que les exemples seront donnés
-
les machines virtuelles :
- l'OS devra être CentOS 7 (en version minimale)
- pas d'interface graphique (que de la ligne de commande)
-
il y a beaucoup de ligne de commande dans ce TP, préférez les copier/coller aux screens
-
le rendu doit toujours se faire au même format
- pour vos recherches Google (ou autres) :
- en anglais
- précisez l'OS et la version dans vos recherches ("centos 7" ici)
- dans le TP, lisez en entier une partie avant de commencer à la réaliser. Ca donne du sens et aide à la compréhension
- allez à votre rythme. Le but n'est pas de finir le TP, mais plutôt de bien saisir et correctement appréhender les différentes notions
- n'hésitez pas à me demander de l'aide régulièrement mais essayez toujours de chercher un peu par vous-mêmes avant :)
- pour moult raisons, il sera préférable pendant les cours de réseau de désactiver votre firewall. Vous comprendrez ces raisons au fur et à mesure du déroulement du cours très justement. N'oubliez pas de le réactiver après coup.
- utilisez SSH dès que possible
- Préparation d'une VM "patron"
- I. Mise en place du lab
- II. Spéléologie Réseau
- Annexe 1 : Installation d'une interface graphique sur CentOS 7
Bon c'est rigolo d'installer CentOS, mais c'est vite chiant. Nos hyperviseurs permettent de cloner des machines déjà existantes. Sauf que vos machines précédentes, vous les avez bien pourries !
Vous allez réaliser une nouvelle installation de CentOS, configurer le minimum, et l'éteindre. Vous ne rallumerez plus jamais cette VM, elle ne servira qu'à être clonée. Cela accélerera grandement la mise en place de nos TPs ! (ce ne sont que des choses qu'on a déjà fait au TP précédent)
Installation et configuration de la VM "patron" :
- créer une VM
- 512 Mo RAM
- 1 CPU
- Réseau
- une carte NAT
- Stockage
- disque de 8Go
.isode CentOS 7 (sur le "contrôleur IDE")
- installation
- se référer au TP précédent (n'hésitez pas à m'appeler en cas de doute)
- wait for installation process to finish
- redémarrer la VM
- vous pouvez enlever le
.isodu lecteur CD si ce n'est pas fait automatiquement :)
- vous pouvez enlever le
- configuration VM
- se logger avec votre utilisateur
- exécutez :
# Désactivation de SELinux
sudo setenforce 0 # temporaire
sudo sed -i 's/enforcing/permissive/g' /etc/selinux/config # permanent
# Mise à jour des dépôts
sudo yum update -y
# Installation de dépôts additionels
sudo yum install -y epel-release
# Installation de plusieurs paquets réseau dont on se sert souvent
sudo yum install -y traceroute bind-utils tcpdump nc nano
# Désactivation de la carte NAT au reboot
sudo nano /etc/sysconfig/network-scripts/ifcfg-enp0s3
# mettre ONBOOT à NO
# Eteindre la machine
sudo shutdown nowLe "lab", c'est juste l'environnement nécessaire à notre TP. Vous allez créer des VMs quoi !
On va créer de nouveaux réseaux host-only. Pour rappel, la création d'un réseau host-only ajoute une carte réseau sur votre PC. Vous pouvez la voir avec un ipconfig bien sûr !
Créez les réseaux host-only suivants :
- le "réseau 1" ou
net1:10.1.0.0/24- la carte réseau de l'hôte doit porter l'IP
10.1.0.1 - PAS de DHCP
- la carte réseau de l'hôte doit porter l'IP
- le "réseau 2" ou
net2:10.2.0.0/24- la carte réseau de l'hôte doit porter l'IP
10.2.0.1 - PAS de DHCP
- la carte réseau de l'hôte doit porter l'IP
NB : Quand vous clonez, Virtualbox va vous poser des questions :
- clone intégral
- réinitialisation des adresses MAC : OUI
NB2 : PAS DE NAT DANS LES CLONES (ou alors vous la désactivez). Une interface de type NAT dans VirtualBox sert à accéder à internet. On en a PAS besoin (vous avez déjà fait les yum install dans le patron).
Créez les VMs suivantes (= clonez votre VM patron !) :
- VM cliente ou
client1.tp4- elle a une carte réseau dans
net1(host-only) qui porte l'IP10.1.0.10 - elle nous servira... de client !
- elle a une carte réseau dans
- VM serveur ou
server1.tp4- elle a une carte réseau dans
net2(host-only) qui porte l'IP10.2.0.10 - elle nous servira de serveur :|
- elle a une carte réseau dans
- VM routeur ou
router1.tp4- elle a une carte réseau dans
net1(host-only) qui porte l'IP10.1.0.254 - et une carte réseau dans
net2(host-only) qui porte l'IP10.2.0.254 - cette machine sera notre routeur. Ce sera la passerelle de
client1etserver1
- elle a une carte réseau dans
Je pense que vous avez compris le principe. Au cas où, je vous fais un schéma moche !
client <--net1--> router <--net2--> server
Checklist (à faire sur toutes les machines) :
- Désactiver SELinux
- déja fait dans le patron
- Installation de certains paquets réseau
- déja fait dans le patron
- Désactivation de la carte NAT
- déja fait dans le patron
- Définition des IPs statiques
- La connexion SSH doit être fonctionnelle
- une fois fait, vous avez vos trois fenêtres SSH ouvertes, une dans chaque machine
- Définition du nom de domaine
- Remplissage du fichier
/etc/hosts -
client1pingrouter1.tp4sur l'IP10.1.0.254 -
server1pingrouter1.tp4sur l'IP10.2.0.254
Pour tester si vos changements sont permanents, vous pouvez essayer de reboot. Je vous conseille de le faire si vous comptez bosser sur plusieurs jours.
Petit tableau récapitulatif :
| Machine | net1 |
net2 |
|---|---|---|
client1.tp4 |
10.1.0.10 |
X |
router1.tp4 |
10.1.0.254 |
10.2.0.254 |
server1.tp4 |
X | 10.2.0.10 |
Habituez-vous à faire ce genre de tableau, c'est une méthode qui vous fera gagner énormément de temps. Pensez à quand vous aurez ~10 machines avec des IPs différentes. Je les ferai pas toujours à votre place ;)
Rappel : SELinux doit être désactivé (fait dans le patron de VM normalement)
Rappel : Votre carte NAT doit être désactivée (fait dans le patron de VM normalement)
On va faire en sorte que notre client1 puisse joindre server1, et vice-versa. Ceci, comme au TP 3, avec du routage statique.
Pour ce faire :
-
sur
router1:- activer l'IPv4 Forwarding (= transformer la machine en routeur)
sudo sysctl -w net.ipv4.conf.all.forwarding=1(temporaire)echo "net.ipv4.ip_forward=1" | sudo tee -a /etc/sysctl.conf(valide après reboot)
- désactiver le firewall (pour éviter certaines actions non voulues)
sudo systemctl stop firewalld(temporaire)sudo systemctl disable firewalld(permanent)
- vérifier qu'il a déjà des routes pour aller vers
net1etnet2- bah oui : il y est directement connecté !
ip route show
- activer l'IPv4 Forwarding (= transformer la machine en routeur)
-
sur
client1:- faire en sorte que la machine ait une route vers
net1etnet2 - laisser le firewall activé
- faire en sorte que la machine ait une route vers
-
sur
server1:- faire en sorte que la machine ait une route vers
net1etnet2 - laisser le firewall activé
- faire en sorte que la machine ait une route vers
-
test
client1doit pouvoir pingserver1server1doit pouvoir pingclient1- effectuez un
traceroutedepuis le client pour voir le chemin pris par votre message
Rappel : SELinux doit être désactivé
Rappel : Votre carte NAT doit être désactivée (sauf contre-indication)
Rappel : vous DEVEZ utiliser SSH pour contrôler vos VMs
ARP est le protocole qui permet de connaître la MAC d'une machine quand on connaît son IP.
Pour toutes les actions liées à la table ARP sous CentOS, c'est ici que ça se passe.
Il est inutile de juste dérouler le truc, inutile d'apprendre. Essayez de bien comprendre et ça deviendra parfaitement naturel.
Rappel : vous DEVEZ utiliser SSH pour contrôler vos VMs
- vider la table ARP de toutes vos machines
- sur
client1- vous DEVEZ utiliser SSH
- afficher la table ARP
- expliquer la seule ligne visible (hint : vous êtes connecté à cette VM, non ?... ;) )
- sur
server1- vous DEVEZ utiliser SSH
- afficher la table ARP
- expliquer la seule ligne visible (hint : celle-la aussi non ?)
- sur
client1- ping
server1 - afficher la table ARP
- expliquer le changement
- ping
- sur
server1- afficher la table ARP
- expliquer le changement
- vider la table ARP de toutes vos machines
- sur
router1- afficher la table ARP
- expliquer le(s) ligne(s)
- sur
client1- ping
server1
- ping
- sur
router1- afficher la table ARP
- expliquer le(s) changement(s)
- vider la table ARP de toutes vos machines
- sur l'hôte (votre PC)
- afficher la table ARP
- vider la table ARP
- afficher de nouveau la table ARP
- attendre un peu
- afficher encore la table ARP
- expliquer le(s) changement(s) (c'est lié à votre passerelle)
- vider la table ARP de toutes vos machines
- sur
client1- afficher la table ARP
- activer la carte NAT
- joindre internet (
curl google.compar exemple) - afficher la table ARP
- expliquer le(s) changement(s)
- expliquer quelle machine porte l'IP qui vient de pop dans cette table ARP
- n'oubliez pas de re-désactiver/débrancher la carte NAT
Je vous conseille très fortement de reprendre le tableau avec les IP plus haut et d'y ajouter les adresses MAC de chacune des interfaces pour la suite.
Ok. On va aller voir ce qui s'est passé exactement sur le réseau. Analyser les trames réseau une par une !
Si ce n'est pas déjà fait :
- téléchargez Wireshark sur votre PC
- téléchargez
tcpdumpsurrouter1
On va capturer le trafic qui passe par router1 :
- on doit dire à Wireshark d'intercepter et noter tout ce qui passe par une interface spécifique
- actuellement, votre PC est connecté en SSH à
router1 - pour ce faire, vous avez choisi l'une de ses deux IPs pour vous connecter
10.1.0.254ou10.2.0.254
- vu que vous êtes connecté en SSH, vous envoyez des trames en permanence sur l'IP choisie
- on va donc capturer le trafic de l'interface à laquelle vous n'êtes PAS connecté pour éviter le bruit généré par SSH
On va procéder comme suit :
- Wireshark s'appelle
tcpdumpen ligne de commande - on va dire à
tcpdump- d'intercepter le trafic sur une interface spécifique de
router1 - d'enregistrer tout ce qu'il voit passer dans un fichier
- les fichiers Wireshark portent l'extension
.pcap
- d'intercepter le trafic sur une interface spécifique de
- pendant que
tcpdumpintercepte le trafic- on va envoyer divers messages de
client1àserver1
- on va envoyer divers messages de
- une fois que les messages auront été transmis
- on fermera
tcpdump - on enverra le fichier
.pcapsur notre hôte - on pourra visualiser le contenu du fichier
.pcapavec une jolie interface graphique !
- on fermera
Let's go !
On a vu dans la partie du TP concernant l'ARP que le moindre message envoyé sur le réseau nécessite une MAC de destination. Elle est connue grâce à un message ARP broadcast.
On va ping server1 depuis client1 et observer à la fois les messages ARP et les messages de ping :
-
sur
router1- lancer Wireshark pour enregistrer le trafic qui passer par l'interface choisie et enregistrer le trafic dans un fichier
ping.pcap:sudo tcpdump -i enp0s9 -w ping.pcap
- lancer Wireshark pour enregistrer le trafic qui passer par l'interface choisie et enregistrer le trafic dans un fichier
-
sur
client1- vider la table ARP
- envoyer 4 pings à
server1 ping -c 4 server1
-
sur
router1- quitter la capture (CTRL + C)
- vérifier la présence du fichier
ping.pcapavec unls - envoyer le fichier
ping.pcapsur votre hôte- si vous savez pas comment, ou si vous voulez des conseils sur des moyens rapides et/ou secure de le faire, appelez-moi !
-
sur l'hôte (votre PC) :
- ouvrir le fichier
ping.pcapdans Wireshark - essayez de comprendre un peu toutes les lignes (il devrait y en avoir une dizaine tout au plus !)
- vous devriez voir :
- la question pour connaître la MAC de la destination
- protocole ARP
- "Who has .... ? Tell ...."
- envoyée en broadcast
- la réponse
- protocole ARP
- "... is at ..."
- envoyée à celui qui a posé la question
- les pings aller
- "ping !"
- protocole ICMP
- message
ECHO request
- les ping retour
- "pong !"
- protocole ICMP
- message
ECHO reply
- la question pour connaître la MAC de la destination
- Important
- notez que ARP n'est pas encapsulé dans IP, c'est un paquet ARP dans une trame ethernet
- notez que ICMP est encapsulé dans IP, c'est un datagramme ICMP, dans un paquet IP, dans une trame Ethernet !
- NOTEZ BIEN "QUI DISCUTE AVEC QUI" REELLEMENT : au niveau des MAC
- vous devriez en déduire qu'il vous manque la moitié des trames concernant cette communication
- expliquez pourquoi
- Appelez-moi pour discuter de cette question si vous avez un doute. C'est essentiel pour bien comprendre un peu tout ce qu'il se passe !
- ouvrir le fichier
Bon bah je crois que vous le voyez venir :
- intercepter le trafic
- depuis
router1 - pendant que
client1se connecte au serveurnetcatdeserver1- oubliez pas d'ouvrir le port firewall sur
server1 - videz les tables ARP de tout le monde, comme ça on verra encore les messages ARP dans la capture
- échangez quelques messages pour avoir de la matière à étudier :)
- oubliez pas d'ouvrir le port firewall sur
- nommez la capture
netcat_ok.pcap
- depuis
Envoyez le fichier netcat_ok.pcap sur votre hôte, puis ouvrez le avec Wireshark. Mettez en évidence :
- l'établissement de la connexion TCP
- c'est le "3-way handshake" :
- le client envoie
SYN: demande de synchronisation - le serveur répond
SYN,ACK: il accepte la synchronisation - le client répond
ACK: "ok frer, on est bien connectés, on peut échanger de la donnée maintenant !"
- vos messages qui circulent
HEY j'ai une idée :
- fermer le port firewall du
server1 - refaire la même chose
- se faire jeter la connexion parce que le port est fermé
- intercepter le trafic dans un fichier
netcat_ko.pcap
- exporter le fichier sur l'hôte
- mettre en évidence les lignes qui correspondent au firewall qui dit "nop frer"
C'est un bonus mais c'est pas grand chose à faire (genre 5 min?) si vous avez fait le reste. Et c'est délire.
Ca va être la même chose, mais on va intercepter du trafic HTTP. Du trafic web quoi ! De l'HTML qui transite sur le réseau toussa toussa.
Pour que ça se fasse dans de bonnes conditions, je vous propose :
- on va installer un serveur web sur
server1- tkt frer, ce sera guidé, il y aura très peu de choses à faire, on veut juste un truc simple qui fonctionne
- c'est quoi déjà un serveur web ?
- c'est juste une application, qui écoute derrière le port d'une IP !
- si on lui parle en HTTP, elle répond en HTTP
- avec firefox ou
curl
- et on va installer une interface graphique sur
client1(facultatif)- ouais parce qu'il n'y a aucun problème pour avoir une interface graphique avec CentOS en fait !
- ça simulera un peu mieux un "client" comme vous les connaissez
- idem, ce sera guidé, y'aura juste à reboot la VM et paf une interface graphique
- le but ?
- installer et lancer un serveur web sur
server1(son nom c'estnginx) - installer et lancer un client web sur
client1(son nom c'est Firefox :) ) - se connecter au serveur web de
server1avec le Firefox declient1 - intercepter le trafic avec
router1 - visualiser le trafic HTTP sur votre hôte avec Wireshark
- installer et lancer un serveur web sur
Tout se passe sur server1 uniquement ici !
On va faire ça un peu bête et méchant, le but est juste d'avoir un truc qui marche. Vous jouerez avec des serveurs web ailleurs que dans mes cours :)
En partant du principe que vous n'avez raté aucune étape lors de la réalisation de la VM-patron :
# Allumer l'interface NAT
sudo ifup enp0s3
# Installation de nginx
sudo yum install -y nginx
# Ouverture du port firewall
sudo firewall-cmd --add-port=80/tcp
sudo firewall-cmd --reload
# Lancement du serveur web
sudo systemctl start nginx
# Eteindre l'interface NAT
sudo ifdown enp0s3
Pour tester si c'est ok :
- sur
server1sudo systemctl status nginxcurl localhost:80
- sur
router1curlvers l'IP deserver1
- sur l'hôte (votre PC)
- navigateur web sur
http://<IP_server1>:80
- navigateur web sur
Tout se passe sur client1 uniquement ici !
-
si vous voulez vous pouvez installer une interface graphique sur la VM
client1. CentOS supporte ça sans problème- ce sera (très) long à l'école, alors c'est pas obligatoire
-
sinon,
client1peut utiliser la commandecurl, c'est pareil !
- sur
server1- s'assurer que le serveur web est fonctionnel
- vider la table ARP
- sur
client1- vider la table ARP
- sur
router1- vider la table ARP
- lancer la capture (fichier
http.pcap)
- sur
client1- effectuer une connexion au serveur web à l'aide de votre client web
- sur l'hôte (votre PC)
- analyser la capture :
- repérez les messages ARP
- repérez le trafic HTTP et le contenu HTML de la page demandée
- analyser les lignes une à une
- dans quels types de trames circulent le trafic HTTP ? Détaillez un peu !
- analyser la capture :
Idem, bête et méchant, vous jouerez avec les interfaces graphiques Linux plus tard. (pour info on va installer l'interface xfce réputée pour être légère)
Même si c'est "léger" ça va prendre plusieurs centaines de Mo à l'installation. La connexion à l'école sera probablement un peu short...
En partant du principe que vous n'avez raté aucune étape lors de la réalisation de la VM-patron :
- éteindre la VM
- ajouter un peu de RAM, de RAM vidéo, et un proc histoire d'avoir un truc un minimum fluide
- 1024Mo RAM
- 128Mo RAM vidéo
- 2 procs
- allumer la VM, et :
# Allumer l'interface NAT
sudo ifup enp0s3
# Installation d'un serveur X
sudo yum groupinstall "X Window system"
# Installtion de xfce
sudo yum groupinstall xfce
# Configuration du système
sudo systemctl isolate graphical.target
sudo systemctl set-default graphical.target
# Reboot frer
sudo reboot