Consignes

Pour ce TP, vous devrez rendre un petit rapport au format texte comportant vos remarques ainsi que les réponses aux questions posées.

Vous pouvez faire un minimum de mise en page, mais les document Word, OpenOffice ou pdf ne sont pas autorisés !

Liens utiles

Objectifs du TP

L'objectif de ce TP est de se familiariser avec les concepts liés au réseau.

Préliminaires

Avant toute chose

Afin de pouvoir observer le trafic réseau "normal", il est fortement déconseillé d'utiliser votre portable pour ce TP. Certaines questions ne seront pas possibles sans configuration de réseau virtuel, redirection de ports etc.

Lancez, dans un shell, la commande suivante

$ xhost +

Le résultat devrait ressembler à

$ xhost +
access control disabled, clients can connect from any host

Annuaire de vos adresses IP

Chaque machine sur le réseau local de l'université Savoie Mont Blanc possède une adresse IP. Ces adresses sont visibles depuis le reseau de l'université, mais invisibles depuis le réseau Internet. (Sauf lorsqu'on utilise un VPN correctement configuré...)

Pour obtenir l'adresse IP de votre machine, vous pouvez lancer la commande ifconfig. Cette commande est habituellement utilisée par l'administrateur et n'est pas accessible directement aux utilisateurs. Il faut donc la lancer en donnant son chemin absolu :

$ /sbin/ifconfig

Le résultat donnera la configuration actuelle des interfaces réseaux disponibles. La carte réseau s'appellera probablement eth0. Notez l'adresse IP (champs inet adr) dans votre rapport et allez la noter au tableau, en face de votre nom et prénom.

Notez également cette adresse IP dans votre rapport...

1. SSH

SSH ("Secure SHell") est un protocole sécurisé qui permet de lancer un shell sur une machine distante. Pour cela, la machine distante doit avoir un serveur ssh (paquet openssh-server sous Debian / Ubuntu) et la machine locale doit avoir un client ssh (openssh-client sous Debian / Ubuntu). Sous Windows, PuTTY est un client SSH simple.

Sous Linux, la commande ssh s'utilise de la manière suivante :

$ ssh USER@ADDRESS

où, bien entendu, USER et ADDRESS sont à remplacer par le nom d'utilisateur et l'adresse du serveur.

Note : pour pouvoir utiliser ssh avantageusement, il est important de savoir utiliser le shell !

Connectez vous à la machine d53.lama.univ-smb.fr avec l'utilisateur info202 (le mot de passe est info202) et répondez aux questions suivantes

  1. Quel est le chemin absolu du dossier personnel de l'utilisateur info202 ?

  2. Quels sont les droits d'accès sur le répertoire LOG ?

Pendant que vous êtes connecté, lancez la commande

$ check

qui enregistrera votre connexion.

Tous les étudiants doivent faire cette étape, même ceux qui travaillent en binôme !

2. Execution distante et affichage local : SSH et applications graphiques

Une connexion SSH est par défaut en mode texte uniquement. Lorsque le serveur le supporte, il est possible de lancer une connexion SSH pour qu'elle transfère les parties graphiques des applications lancées. Ceci est rarement fait car les délais dûs au réseau rendent l'utilisation d'applications graphiques complexes difficile.

Les questions suivantes ne peuvent pas être faites sur la machine d53.lama.univ-smb.fr. Déconnectez vous de cette machine et choisissez une adresse IP au tableau pour les questions suivantes.

Pour se déconnecter, vous pouvez utiliser les commandes exit ou logout, ou bien la combinaison de touches "Control-d".

Le nom de la machine sur laquelle vous êtes connecté apparait dans le prompt du shell. Il doit être égal au nom de votre machine...

Connectez vous par SSH sur la machine choisie avec la commande

$ ssh USER@ADDRESS

Une fois connecté, vérifiez que votre sessions SSH ne peut pas exécuter de commande graphique en lançant la commande

$ xeyes

Que se passe t'il ?

Déconnectez vous de la machine distante et choisissez une adresse IP au tableau.

Pour se déconnecter, vous pouvez utiliser les commandes exit ou logout, ou bien la combinaison de touches "Control-d".

Le nom de la machine sur laquelle vous êtes connecté apparait dans le prompt du shell. Il doit être égal au nom de votre machine...

Reconnectez vous avec la commande

$ ssh -X USER@ADDRESS

  1. Lancez l'application xeyes. Que constatez vous ?

  2. Comment pouvez vous vérifier sur quelle machine l'application xeyes s'exécute ? Faite cette vérification en décrivant la procédure.

3. Execution locale, affichage distant : variable DISPLAY

Déconnectez vous de la machine distante en utilisant la commande exit ou logout, ou bien la combinaison de touches "Control-d".

Si elle le permet, il est possible de lancer des applications graphiques pour qu'elles s'affichent sur une machine distante.

La variable du shell $DISPLAY précise sur quel écran doivent s'afficher les applications graphiques. Vous pouvez afficher la valeur de cette variable avec

$ echo $DISPLAY

Par defaut, cette variable vaut :0.0 mais il est possible de spécifier une autre machine avant le : initial avec ADDRESS:0.0.

  1. Essayez de lancer la commande xeyes pour l'afficher sur l'écran d'une autre machine. Pour ceci, il faut faire

    $ DISPLAY=ADDRESS:0.0 xeyes

    en remplaçant ADDRESS par l'adresse IP de la machine connectée a l'écran.

    Que se passe t'il ?

    Sur quelle machine s'exécute le processus xeyes ?

  2. La personne utilisant la session graphique peut-elle tuer le processus xeyes qui apparait avec la commande kill ?

  3. La personne utilisant la session graphique peut-elle fermer la fenêtre du processus xeyes ?

Il n'est par défaut pas possible de lancer une application graphique sur un écran autre que le sien. C'est la commande

$ xhost +

du début du TP qui autorise l'affichage d'applications graphiques d'un autre utilisateur.

4. Adresses IP, DNS, routes, etc.

Chaque ordinateur sur Internet doit être identifié par une adresse IP. Par exemple, l'adresse IP (version 4) du serveur qui héberge le site www.lama.univ-smb.fr est 193.48.123.134.

Vérifiez que vous pouvez utiliser l'adresse IP 193.48.123.134 pour aller sur le site du LAMA avec votre navigateur Internet.

DNS

Pour simplifier la vie des utilisateurs, les sites Internet utilisent une adresse "textuelle" :

Ces adresses sont traduites en adresses IP en utilisant le protocole DNS (Domain Name System). Ceci est fait automatiquement par le navigateur web, mais il est possible de faire une requête DNS directement avec la commande host.

Quelle est l'adresse IP du site www.linuxfr.org ?

Vous ne pouvez pas accéder au site www.linuxfr.org en utilisant directement l'adresse IP car le serveur utilise le nom de domaine pour décider quelle page afficher. Cela permet d'avoir plusieurs sites web sur une même adresse IP, avec des noms de domaine différents. (Ceci n'est pas fait par le site du LAMA...)

Comparez les addresses IP de

Ping : temps d'accès

La commande ping permet de mesurer le délai de transmission entre la machine locale et une machine distante. Cette commande s'utilise simplement comme suit

$ ping -c 10 ADDRESS

et envoie des paquets spéciaux (une dizaine) vers l'adresse donnée, qui renvoie une réponse. La commande affiche le temps de réponse de chaque paquet, et des statistiques finales (temps de réponse minimum, moyen et maximum).

Attention, sans l'option -c 10, la commande continue d'envoyer des paquets jusqu'à ce qu'on la stoppe à la main. Pour ceci, il faut utiliser la combinaison "Control-c".

Mesurez le délai de réponse pour atteindre les sites suivants :

Qu'en pensez vous ?

En particulier, où pensez vous que sont hébergés les serveurs de www.univ-smb.fr et de www.polytech.univ-smb.fr ?

Routes

Les paquets qui voyagent sur Internet sont routés : le chemin qu'ils empruntent est décidé dynamiquement par des routeurs qui essaient de rapprocher les paquets de leur destination finale.

L'utilitaire traceroute permet de visualiser le chemin emprunté par un paquet pour arriver à une destination :

$ traceroute ADDRESS

Regardez la route qu'empruntent les paquets pour aller jusqu'aux adresses IP correspondant aux sites suivants :

Précisez, le nombre de routeurs empruntés par les paquets.

L'utilitaire mtr (qui n'est pas installé par défaut) combine ping et traceroute. Si vous voulez l'utiliser, il suffit de l'installer avec

$ sudo apt-get install mtr-tiny

5. Wireshark

Wireshark est un logiciel qui permet de capturer tout ce qui passe par l'interface réseau (carte Ethernet ou carte WiFi) de votre ordinateur et de l'analyser. Cet outils est intéressant pour les administrateurs d'un réseau, mais aussi pour les pirates qui peuvent ainsi écouter le trafic réseau et chercher des informations utiles.

Préliminaire

  1. Vérifiez que vous accèdez bien à la version HTTP de cette page. Si l'url commence par https:..., remplacez la par http:...

  2. Fermez tous les onglets de votre navigateur Internet pour ne gardez que le sujet du TP. Les autres onglets peuvent générer du trafic qui rendra les informations importantes plus difficiles à trouver...

Lancez le logiciel wireshark. (Si vous le lancez depuis le terminal, n'oubliez pas de mettre un & à la fin de la ligne pour récupérer votre shell.)

Vous devriez obtenir quelque chose comme

TP4/wireshark1.jpg

Dans le menu "View",

Vous pouvez maintenant sélectionner l'interface connectée au réseau (probablemnt eth0, eth1 ou eth2 si vous êtes connecté par un cable ethernet) et lancer la capture en cliquant sur le petit "triangle" vert. Vous obtenez quelque chose comme

TP4/wireshark2.jpg

La fenêtre Wireshark est divisée en 3 :

  1. la liste des paquets capturés, avec quelques informations (un numéro de paquet, la date de capture, la source et destination, etc.)

  2. le contenu "lisible" du paquet, c'est à dire analysé par Wireshark. C'est là qu'on peut lire les métadonnées de chaque paquet, ainsi que ses données (lorsqu'elle sont au format texte).

  3. le contenu "brut" du paquet, affiché en hexadécimal.

Vous pouvez supprimer l'affichage du contenu "brut" en désactivant l'option "Paquet Bytes" du menu "View".

Pour limiter l'affichage aux paquets HTTP concernant votre machine, il faut ajouter un filtre : pour ne garder que les paquets en provenance (ou à destination) de votre adresse qui utilisent le protocole HTTP et qui ne sont pas en UDP, on peut ajouter le filtre ip.addr == ADDRESS and http and not udp dans la boite correspondante ("Filter"). "ADDRESS" doit être remplacé par votre adresse IP.

Appliquez ce filtre, et relancez la capture (carré rouge pour arrêter la capture en cours, et "triangle" vert pour en relancer une nouvelle).

Une fois que la capture est lancée, rechargez la page web du sujet.

  1. Combien de requêtes HTTP GET sont effectuées pour recharger la page complète du sujet, et à quoi correspondent ces requêtes ?

  2. Quelles sont les réponses de la part du serveur ?

Pendant que la capture précédente fonctionne encore, supprimez le caches des données de votre navigateur (pour Firefox et Chrome, le raccourci clavier est "Control+Shift+Suppr").

Une fois le cache de données vidé, rechargez la page web du sujet.

  1. Combien de requêtes HTTP GET sont effectuées pour recharger la page complète du sujet ?

  2. Quelles sont les réponses de la part du serveur ?

  3. Les paquets correspondant au code HTML contiennent ils des données ?

Cherchez, dans la liste des paquets HTTP, la requête GET pour l'image wireshark2.jpg. Vous pouvez accéder à la réponse du serveur en cliquant sur le lien bleu dans le menu "Hypertext Transfer Protocol" du paquet.

  1. Quelle est la taille des données de l'image ?

  2. Cette image est trop grosse pour être transférée en un seul paquet TCP. Regardez la réponse du serveur affiché par Wireshark, et donnez le nombre de paquets TCP utilisés pour transférer l'image.

  3. Quels sont les ports de destination et de départ des paquets TCP de l'image ? Quelles sont les adresses IP de destination et de départ de l'image ?

Formulaires : méthode POST

Ce petit formulaire est très simple : il permet simplement de choisir une couleur pour le fond de la page.

  1. Regardez le contenu HTML du paquet HTTP dans Wireshark et vérifiez que la couleur choisie est bien envoyée par le formulaire.

  2. Faites un "diagramme" de communication en précisant la taille des paquets échangés.

    Par exemple, le diagramme pourra contenir

                                          taille           description
             .....
       local  ------>    serveur           571              GET (favicon)
       local  <------    serveur          1907              OK (favicon)

Le formulaire ajoute une vérification de mot de passe... (Vous pouvez utiliser n'importe quel login, et le mot de passe doit simplement commencer par la même lettre que le login...)

Refaites la question précédente avec ce nouveau formulaire.

Qu'en pensez vous ?

Authentification

La page suivante est protégée par un mot de passe.

Relancez la capture de paquets et connectez vous avec l'utilisateur baleine et le mot de passe poum.

Inspectez les paquets capturés par Wireshark et vérifiez que le mot de passe est envoyé en clair avec la requête GET.

Qu'en pensez vous ?

6. Cryptographie : TLS / SSL

  1. Vérifiez que vous accèdez bien à la version HTTPS de cette page. Si l'url commence par http:..., remplacez la par https:...

Le protocol HTTPS ajoute une couche de cryptographie (TLS) au dessus de HTTP. Pour inspecter les paquets correspondants, il faut remplacer le filtre par ip.addr == ADDRESS and ssl.

  1. Relancez la capture de paquets, avec le filtre ssl et rechargez le formulaire simple. Faites un diagramme de communication en précisant la taille des paquets échangés.

  2. En comparant les tailles des paquets échangés, ainsi que la direction des communications, essayez d'ajouter une description des échanges de paquets SSL de type "application". (Les autres paquets correspondent à des messages permettant de mettre en place la communication...)

7. Serveurs web

Requêtes GET "à la main"

Lorsque vous naviguez sur le web, votre navigateur (qui s'exécute sur votre machine) envoie des requêtes à un serveur web. Les deux requêtes principales sont

Ces deux requêtes prennent en argument un chemin vers une ressource : le document demandé dans le cas d'un GET, ou la ressource qui doit gérer les données envoyées dans le cas d'un POST.

Le serveur web est un processus qui est associé à un port de la machine sur laquelle il s'exécute. Chaque port est associé à un service. Habituellement, les serveurs web utilisent le port 80.

La commande netcat permet de faire des connections TCP/IP "à la main". Il suffit de spécifier une adresse et un port :

$ netcat ADDRESS PORT

et :

Autrement dit, on peut écrire des requêtes sur l'entrée standard, et recevoir les réponses sur la sortie standard.

Connectez vous sur le port 80 de l'adresse www.perdu.com avec netcat et envoyez la requête GET pour récupérer le document /index.html.

Une requête GET tient sur 2 lignes:

  GET <document> HTTP/1.1
  Host: <adresse>

Notes :

La réponse du serveur contient 2 parties :

Quelle est le code de la réponse du serveur ?

Vérifiez que vous obtenez bien le bon contenu en visitant directement le site www.perdu.com/index.html.

Attention, si vous ne rentrez pas la requête suffisamment rapidement, le serveur va vous déconnecter. Pour résoudre ce problème, vous pouvez :

  • apprendre à taper plus vite

  • mettre la commande dans un fichier et utiliser une redirection CMD < FICHIER...

Connectez vous sur le port 80 de l'adresse www.perdu.com avec netcat et envoyez la requête pour récupérer le document /index.php.

Quelle est le code de la réponse du serveur ?

Mini "chat" avec netcat

La commande netcat permet de communiquer sur un port, mais également de créer un petit serveur sur un port choisi.

$ netcat -l -p PORT

va ouvrir le port donné sur la machine locale et écouter ce qui se passe dessus. (Pour des raisons de sécurité, le port doit être supérieur à 1000.)

Choisissez une adresse IP au tableau et mettez vous d'accord avec la personne qui utilise l'ordinateur :

  1. l'un d'entre vous doit lancer netcat pour ouvrir un port sur sa machine, et écouter ce qui se passe dessus

  2. l'autre doit utiliser netcat pour se connecter sur la bonne adresse, et le bon port

  3. et voila : les deux commandes netcat permettent de discuter !

Testez et proposer des améliorations possibles à ce système de chat minimaliste.