Vous êtes sur la page 1sur 12

Wireshark

M3204 – DOCKERISER UN ENVIRONNEMENT

Patrice Gommery - Mai 2020

PRE-REQUIS
Pour réaliser ce TP vous devez avoir en votre possession :
- L'adresse IP de votre serveur VPS hébergé chez PulseHeberg
- Votre identifiant MMI (mmiXXxxx)
- Le mot de votre identifiant MMI créé lors de l'initialisation de votre VPS.

En cas de problème :
- Un accès à votre compte PulseHeberg pour lancer la console VNC
- Le mot de passe du compte root de votre VPS (premier mail de PulseHeberg)

DOCKER doit être installé sur votre VPS


(Dans le cas contraire, reprenez les TP précédents)

Consignes Générales pour le TP

Pendant tout le TP,


remplacez VPS l'adresse IP de votre VPS PulseHeberg
remplacez MMI par votre identifiant MMI (mmiXXxxx)

WIRESHARK & DOCKER - M3204 1


Préambule :
Wireshark est un analyseur de paquets libre et gratuit. Il est utilisé dans le dépannage et l’analyse
de réseaux informatiques. Il permet une capture locale des trames réseaux arrivant sur votre machine et
donc de mieux comprendre les communications effectuées entre votre poste de travail et les autres
machines du réseau.

Nous n'allons pas l'installer directement sur notre VPS, mais dans un container afin de pouvoir y accéder
directement grâce à une interface web qui nous sera fournie par Guacamole (un outil qui permet de
déporter en environnement graphique sur une interface web)

Nous allons aussi créer tout un environnement dans Docker pour illustrer le réseau en mode host que va
utiliser Wireshark pour accéder à nos interfaces réseaux.

Partie 1 : INTRANET
Architecture Docker :

Votre premier travail va être de créer un fichier docker-compose.yml qui permettra de construire
cet environnement. Je vous donne le nom des images (mais libre à vous d'en utiliser d'autres si
voulez - sauf pour wireshark ) que j'ai utilisées et récupérées sur le DockerHub .
N'hésitez pas à consulter leurs documentations pour avoir plus d'information .

Pour commencer votre fichier docker-compose.yml, utilisez :


version: "3.8"

WIRESHARK & DOCKER - M3204 2


Description de l'environnement :

Un container nommé wireshark qui contiendra :


Image : linuxserver/wireshark
network_mode: host (Obligatoire pour accéder aux interfaces du VPS)
Volume local : /mmitrans/wireshark
Pas de modification de mot de passe lors de la création, nous le changerons plus tard.
Wireshark devra être accessible depuis l'URL MMI.h205.online:3000 .
3000 étant le n° de port de l'application Guacamole.

Un container nommé web qui contiendra :


Image : php:apache-buster
- Il expose le port 80 pour autoriser les accès en HTTP.
Mais comme ce port est déjà attribué sur votre VPS,
nous accéderons au site web du container avec l'URL : MMI.h205.online:8080
- Les pages web de ce container seront stockées sur votre VPS dans le dossier :
/mmitrans/web et dans le container sur /var/www/html
network intranet (voir plus bas pour l'explication)

Un container nommé ftp qui contiendra :


image: stilliard/pure-ftpd
- un service FTP tournant sur pure-ftp (l'équivalent du proftpd vu en début de S1)
- Il expose le port 21 sur le port 21 de votre VPS qui n'est pas utilisé.
- ll doit aussi exposé les ports 30000 à 30059 (pour la partie ftp-data)
Vous pourrez donc utiliser Filezilla pour y accéder
avec le port FTP par défaut et l'IP de votre VPS.
- L'utilisateur du container devra se nommer ftpuser (FTP_USER_NAME)
- sont mot de passe sera celui de votre choix (FTP_USER_PASS)
- Le volume associé au compte ftpuser sera accessible par /mmitrans/ftp
- Sur le container le dossier de l'utilisateur sera /home/ftpuser (FTP_USER_HOME)
network intranet (voir plus bas pour l'explication)

Un container nommé dns qui contiendra :


image: jpillora/dnsmasq
- un service DNS avec dnsmasq (un résolveur relais DNS)
- il expose son port 53 sur le port 53 de votre VPS,
qui peut donc maintenant résoudre des noms DNS en passant par dnsmasq.
- Il expose son port 80 sur le port 5380 pour pouvoir accéder
à son interface de gestion avec l'URL : MMI.h205.online:5380
- L'administrateur du service se nomme dnsuser (HTTP_USER)
- Le mot de passe sera celui que vous déclarerez dans la variable d'environnement : HTTP_PASS
- La configuration est aussi accessible dans /mmitrans/dns/dsnmasq.conf

WIRESHARK & DOCKER - M3204 3


N'oubliez pas de créer les dossiers nécessaires pour les volumes locaux dans /mmitrans

NETWORKS:
Pour finir, notre intranet possède son propre réseau (172.17.0.0 dans le schéma) qui relie tous nos
containers entre eux (sauf wireshark) , ainsi que votre VPS qui se verra donc attribuée une nouvelle
interface réseau (de type br-ID) et une nouvelle adresse IP .

Pour déclarer vos containers (web, ftp et dns) dans cet intranet vous devez ajouter dans votre fichier :
Dans chaque déclaration de container les lignes suivantes :
networks:
- intranet
Attention, pas de tabulation pour l'indentation (4 espaces pour la première ligne, 8 pour la seconde)

A la fin de votre fichier docker-compose.yml, ajoutez les deux lignes suivantes :


networks:
intranet:
Attention pas d'indentation pour la première ligne, 4 espaces pour la seconde.

IMPORTANT : Le réseau IP de votre intranet n'aura pas les mêmes adresses que dans l'exemple.
Elles seront sur un réseau privé de classe C, comme par exemple 192.168.176.0 .
Cette adresse est créée aléatoirement et peut donc être différente d'un VPS à l'autre,
et même à chaque fois que vous démarrez la stack Docker.

ENVIRONMENT:

Les variables d'environnement de chaque container sont à déclarées comme suit


(Exemple pour le container dns)
environment:
HTTP_USER: dnsuser
HTTP_PASS: password
Encore une fois, attention à l'indentation des lignes.

Partie 2 : TESTS
PROCEDURES DE TEST :

Si la vérification ne fonctionne pas comme vous voulez.


La procédure à suivre est la suivante :
Arrêter les containers :
docker-compose down

Corrigez votre fichier docker-compose et relancer les containers:


nano docker-compose.yml
docker-compose up -d

Ensuite, recommencez les tests jusqu'à obtenir un résultat satisfaisant

WIRESHARK & DOCKER - M3204 4


Une fois, votre fichier docker-compose.yml créé rien de plus simple.
Placez-vous dans le dossier où vous avez créé le fichier et exécutez la commande :
docker-compose up -d

Vous verrez alors Docker à l'œuvre.


Il téléchargera les images nécessaires à la construction des containers et les démarrera automatiquement.
Creating network "mmitrans_intranet" with the default driver
Pulling wireshark (linuxserver/wireshark:)...
latest: Pulling from linuxserver/wireshark
6fcf2e311856: Pull complete
...
Status: Downloaded newer image for linuxserver/wireshark:latest
Pulling web (php:apache-buster)...
apache-buster: Pulling from library/php
afb6ec6fdc1c: Pull complete
...
Status: Downloaded newer image for php:apache-buster
Pulling ftp (stilliard/pure-ftpd:)...
latest: Pulling from stilliard/pure-ftpd
99760bc62448: Pull complete
...
ee9f678b25d1: Pull complete
latest: Pulling from jpillora/dnsmasq
...
Digest: sha256:98b69ad825942089fb7c4b9153e3c5af0205eda3a103c691e30b1a13fd912830
Status: Downloaded newer image for jpillora/dnsmasq:latest
Creating web ... done
Creating dns ... done
Creating wireshark ... done
Creating ftp ... done

Il ne nous reste plus qu'à vérifier si les services fonctionnent :

1) Ouvrez un navigateur avec l'URL : MMI.h205.online:8080


Vous devriez voir la page de démonstration fournie par le prof
Pour la modifiez :
nano /mmitrans/web/index.html

2) Ouvrez une autre page avec l'URL: MMI.h205.online:5380


Vous devriez accéder à la page de gestion de notre résolveur DNS
L'utilisateur est : dnsuser, le mot de passe est celui que vous avez choisi (HTTP_PASS)

3) Ouvrez Filezilla avec les paramètres suivants :


hôte : MMI.h205.online
Identifiant : ftpuser
le mot de passe est celui que vous avez choisi (FTP_USER_PASS)
Port: 21 (ou laissez vide, c'est le port par défaut)

Pour vérifier que le service FTP fonctionne, uploadez un fichier de votre choix sur le serveur.
Vous devriez retrouver le fichier dans /mmitrans/ftp
ls /mmitrans/ftp

Lorsque tous vos tests fonctionnent, copiez votre fichier docker-compose.yml dans le dossier /mmitrans
(Vérifiez que c'est bien celui que vous venez de créer et pas celui d'un TP précédent)
Le fichier docker-compose.yml est noté.

WIRESHARK & DOCKER - M3204 5


Voilà notre configuration est prête, il ne nous reste plus qu'à sécuriser un peu wireshark
docker container exec -i wireshark passwd abc

Enter new UNIX password: PASSWORD


Retype new UNIX password: PASSWORD
passwd: password updated successfully

Lorsque l'invite de commandes vous le propose, saisissez un mot de passe de votre choix.
Pas trop simple quand même car c'est celui de l'utilisateur (abc) qui lancera wireshark et donc la capture
de trame. Et vous le verrez dans ce TP, si n'importe qui accède à votre container wireshark, il pourrait
découvrir pas mal de chose sur votre VPS.

Avant de continuer découvrons quelles sont les adresses IP qui ont été attribuées à nos différentes
machines. Cela simplifiera la compréhension de la capture des trames.

docker network inspect mmitrans_intranet

"Containers": {
"0500a1fa88abd810701a7d0a20203e6e0f3ffe06b421ad578daaa7f8110f37e6": {
"Name": "dns",
"MacAddress": "02:42:c0:a8:b0:04",
"IPv4Address": "192.168.176.4/20",
},
"2556b350030c914d682a9fbebe76c035cd12afeafb566cc2d741434bd5db761c": {
"Name": "web",
"MacAddress": "02:42:c0:a8:b0:03",
"IPv4Address": "192.168.176.3/20",
},
"d005b8d2ea1b7c94b0f357af64bb85314e2174513f02071191f8ef3cbe0875dd": {
"Name": "ftp",
"MacAddress": "02:42:c0:a8:b0:02",
"IPv4Address": "192.168.176.2/20",
Vous voyez ici les 3 containers sur le réseau de l'intranet avec leurs IP. Ici le réseau est 192.168.176.0,
l'adresse IP du VPS sur l'intranet est donc : 192.168.176.1 . Vous pouvez vérifier avec un ifconfig.

IMPORTANT : Comme vous pouvez le constater votre container wireshark, n'apparait pas dans cette liste.
Cela est tout à fait normal puisque nous ne l'avons pas connecté à notre réseau intranet.
Si vous avez respecté les consignes de configuration , vous avez d'ailleurs déclaré qu'il doit fonctionner en
mode réseau : host (network_mode: host) dans votre fichier docker-compose.yml. Ceci fait de votre
container un service à part entière de votre VPS, il voit et peut donc utiliser les mêmes IP que votre VPS.
A l'inverse, les autres containers fonctionnement en mode bridge et ne voient que les IP situées sur le
réseau que nous avons déclaré (mmitrans_intranet dans l'exemple)

WIRESHARK & DOCKER - M3204 6


Partie 3 : WIRESHARK
Nous pouvons donc maintenant capturer les trames de notre intranet
Pour commencer, ouvrez l'URL : http://MMI.h205.online:3000
Vous devriez avoir un message d'échec du login. C'est tout à fait normal, puisque nous avons changé le mot
de passe de l'utilisateur abc . Cliquez sur OK pour accéder au login :

Saisissez simplement le mot de passe que vous avez choisi lors du changement de mot de passe

Ensuite, choisissez l'interface réseau qui correspond à notre stack Docker et cliquez sur CAPTURE
C'est celle qui commence par br (bridge) . Ne tenez pas compte du numéro, il est différent sur chaque
machine. C'est un ID aléatoire attribué au réseau Docker lors de sa création.

WIRESHARK & DOCKER - M3204 7


A l'écran suivant , cliquez simplement sur start pour lancer la capture des trames :

La capture est lancée, mais il est fort probable que rien ne soit affiché.

Normal, si nous ne créons pas de trafic sur nos serveurs, il n'y aura aucune trame à afficher.
Ouvrez la page du site web : MMI.h205.online:8080 et faites un REFRESH (F5) de votre navigateur pour
que wireshark vous montre les trames capturées.

WIRESHARK & DOCKER - M3204 8


1

L'écran de Wireshark est divisé en trois zones :

Zone 1 : Le trafic du réseau, donc toutes les trames capturées sur votre interface.
Zone 2 : Pour la trame sélectionnée dans la partie 1 (ici la trame 9),
nous retrouvons en partant du haut les informations des différentes couches
qui constituent la trame complète :
• Frame et Ethernet (La couche Matériel avec les adresses MAC),
• Internet Protocole Version 4 (Couche Internet) avec les adresses IP
• Transmission Control Protocol (Couche Transport) avec les ports TCP
• HyperText Transfer Protocol (Couche Applications) avec ici HTML

Si vous développez le contenu d'une couche en cliquant sur la flèche de gauche, vous obtenez le
détail des informations sur le protocole mis en œuvre. Exemple ici avec HTML

On voit ici l'entête http avec le message applicatif (GET / http) , le nom du navigateur utilisé (Mozilla 5.0),
le système de la machine émettant la requête (Windows NT 10 ) etc. …
La zone 3 contient l'affichage en Hexadécimal de la trame sélectionnée, ainsi qu'un aperçu des données si
elles sont émises en clair sur le réseau.

WIRESHARK & DOCKER - M3204 9


FILTRAGE D'UNE CAPTURE

Il est évident qu'il devient rapidement difficile de retrouver une information si on laisse la capture se
dérouler ainsi. Une façon simple d'utiliser wireshark consiste en l'application de filtres qui vont pouvoir
limiter l'affichage à certaines trames en fonction de nos besoins.

L'utilisation des filtres est assez simple, il se saisissent dans la zone de texte juste sous la barre de menu.
On peut les sélectionner et les paramétrer en utilisant le bouton expression à droite ou simplement en les
entrant dans la zone de texte.
Exemple avec un filtre sur une adresse IP :

ip.addr == 90.109.128.2 n'affichera que les trames échangées avec la machine 90.109.128.2
Ici il s'agit de l'adresse publique de la box ou se situe mon poste de travail le jour de la capture.
Pour connaitre votre IP publique, allez sur le site : https://mon-ip.io/

Pour appliquer le filtre, saisissez le dans la zone de texte et cliquez sur la flèche à droite.
Ensuite, ouvrez un navigateur et retournez à l'adresse : MMI.h205.online:8080

On ne voit plus ici que les trames pour le trafic entre votre poste et la machine 192.168.128.2 qui héberge
le site MMI.h205.online:8080. Si vous développez la trame HTTP qui contient la réponse du serveur web
(ici trame 9) vous y verrez clairement le contenu de la page web envoyée par le serveur :

On voit donc ici que le contenu du message applicatif passe en clair sur le réseau.
Mais il n'y a pas que le contenu qui passe en clair sur le réseau.

Ouvrez maintenant Filezilla et connectez-vous sur le service FTP de notre intranet.


Cherchez dans le détail des trames FTP, vous y verrez le login et le mot de passe en clair.

Convaincu, que le SFTP serait mieux ? C'est pour cette raison que l'accès FTP classique a été désactivé de
votre VPS et que vous devez passer par le port 22 et SFTP.

Voilà pour cette présentation rapide de Wireshark, pour plus de détails (notamment sur les filtres) , je vous
invite à consulter la documentation : https://wiki.wireshark.org/DisplayFilters

WIRESHARK & DOCKER - M3204 10


Partie 4 : EXERCICE
Afin d'avoir une capture la plus simple (et donc plus lisible) possible, nous n'allons pas générer les trames à
partir de votre navigateur, mais à partir de notre VPS.
Dans votre navigateur, ne laissez que la page de capture ouverte
(Fermez la page de démonstration et la page de gestion du relais DNS)

Ensuite, relancez une capture en cliquant sur l'aileron vert


N'enregistrez pas pour l'instant, continuez sans sauvegarder (Continue without saving)

Ouvrez une session SSH sur votre VPS et saisissez les commandes suivantes :
(Si vous le pouvez, vous pouvez observer le résultat en direct dans Wireshark)

curl localhost:8080
curl ftp://ftpuser@localhost (Ne tenez pas compte de l'erreur)
dig @localhost MMI.h205.online
curl localhost:5380
docker container exec -i dns ping -c 5 IP_FTP (remplacez IP_FTP par l'IP du container ftp)

Ensuite ouvrez Filezilla ,


reconnectez-vous au service ftp et retéléchargez un fichier vers le serveur

Voilà nous avons une suite de trames assez représentatives d'un trafic réseau.
Cette capture est terminée, nous allons la sauvegarder pour pouvoir l'analyser tranquillement.

1) Arrêtez la capture en cliquant sur le carré rouge.


2) Enregistrez la sous le nom TP08.pcapng en passant par le menu File/Save As

ET MAINTENANT QUELQUES QUESTIONS POUR TERMINER :

Les réponses aux questions sont à mettre dans un fichier TP08.txt


Créez ce fichier sur votre poste de travail avec votre éditeur préféré et ensuite téléchargez-le sur le
service ftp de notre stack Docker.(Ne le créez pas avec nano sur le VPS !!) .
A la fin , supprimez les fichiers que vous avez téléchargés précédemment,
ne laissez que le fichier TP08.txt sur le serveur ftp.

Les réponses dans le fichier sont à mettre comme d'habitude avec juste le numéro de la question (Q1,Q2
etc.) suivi de la réponse . S'il y a plusieurs réponses à la question, séparez-les par des ,

Pour répondre aux questions, observez votre capture de trame (Si vous l'avez fermée, vous pouvez ouvrir
le fichier sauvegardé) ou refaites le début de l'exercice (Partie3)

Q1: Quel est le nom de l'interface réseau ajoutée sur votre VPS pour l'intranet ?
Q2 : Quelle est l'adresse IP de votre VPS sur l'intranet ?
Q3 : Quelle est l'adresse IP du container web ?
Q4 : Quelle est la version de votre navigateur ? (user-agent dans les trames HTTP)
Q5 : Quelle est la version d'Apache installée sur le serveur web ?
Q6 : Quelle distribution Linux est installé sur le serveur web ?
Q7: Quel serveur DNS (sur internet) a répondu à la requête de notre relais ?

WIRESHARK & DOCKER - M3204 11


Q8 : Quel protocole est utilisé pour le ping ?
Q9: Pourquoi le port 5380 utilisé pour la page de gestion du DNS n'apparait pas dans la capture ?
Q10 : A quoi correspondent les trames ARP ?

Pour terminer, démontez notre stack applicative et arrêtez Docker.


cd /mmitrans
docker-compose down
systemctl stop docker

Si vous voulez reprendre le plus tard


cd /mmitrans
systemctl start docker
docker-compose up -d
docker container exec -i wireshark passwd abc

WIRESHARK & DOCKER - M3204 12

Vous aimerez peut-être aussi