Table des matières

1. Objectifs

Dans ce TP, nous allons aborder la thématique du service Web.  

Cette première approche du web comporte 2 étapes : 

  1. Observation d’HTTP sur base de traces et d’interactions simples avec des serveurs web : Analyses Wireshark et connexions telnet.  Certains de ces exercices sont inspirés du livre CNP3.
  2. Familiarisation avec le serveur Apache/httpd  : Premières manipulations des configurations d’un serveur Web Apache

A la fin de ce TP, vous devrez : 

  • Connaître le format des messages HTTP et les échanges protocolaires
  • Comprendre le rôle du client et du serveur Web
  • Pouvoir démarrer et observer un serveur Apache en configuration de base

Dans ce premier cours, nous allons tout d’abord explorer la version non sécurisée du web, au travers de son protocole HTTP. Il est évidemment fortement recommandé de ne PAS faire de HTTP non sécurisé à l’heure actuelle, nous ferons donc temporairement une exception pour raisons pédagogiques. Dès le second semestre, nous travaillerons avec du HTTPS correctement chiffré.

2. Observation d’HTTP

Temps indicatif : 30 minutes

2.1. Trace HTTP

Commencez par capturer une trace HTTP avec Wireshark (par ex., http://httpforever.com).  Affichez l’échange complet à l’aide de l’option Follow TCP stream.

Identifiez :

  • La requête et la réponse
  • La méthode de l’en-tête
  • L’en-tête de la requête, en identifiant et expliquant un maximum de champs
  • Le statut de la réponse
  • L’en-tête de la réponse, en identifiant et expliquant un maximum de champs
  • Le contenu éventuel de la requête et de la réponse

2.2. Dialogue HTTP avec Telnet

Les administrateurs système responsables des serveurs web doivent souvent monitorer ces serveurs et vérifier qu’ils fonctionnent correctement. Puisqu’un serveur HTTP utilise TCP sur le port 80, la solution la plus simple est d’ouvrir une connexion TCP sur ce port et vérifier qu’elle est acceptée par l’hôte distant. Plus encore, puisque HTTP est un protocole ASCII, il est aussi assez facile d’écrire un script permettant de télécharger une page web sur le serveur et comparer son contenu avec le contenu attendu. 

  1. Utilisez telnet pour vérifier qu’il y a bien un serveur web à l’écoute à l’URL http://httpforever.com.
  2. Une fois connecté à httpforever, effectuez une requête HTTP 1.1 permettant d’obtenir la page d’index du site. N’oubliez pas de spécifier le champ Host:.

2.3. Requêtes en cascade

L’extension ipvfoo sur Google Chrome permet d’afficher visuellement si un site est joint via IPv6 ou IPv4, mais également quels sites web sont contactés pendant l’affichage de la page. Certains sites web sont distribués sur plusieurs douzaines de serveurs. Pouvez-vous en trouver un ?

3. Découverte d’Apache

Temps indicatif : 45 minutes

3.1. Préparatifs

Nous allons à présent repartir sur notre labo GNS3. 

Idéalement, il devrait être fonctionnel avec : 

  • La distribution d’adresses IP pour les clients (serveur DHCP)
  • La résolution DNS Internet pour les clients  (serveur DNS résolveur)
  • La résolution de la zone interne  (serveur DNS SOA)

Nous allons à présent nous intéresser au serveur www.

Pour commencer, nous allons devoir ajuster l’installation du serveur Web Apache sur la machine www.  Afin de pouvoir démarrer correctement, Apache a besoin de certains modules. Dans le cadre des labos GNS3, certains répertoires sont parfois perdus lorsque les labos sont déplacés, ce qui peut impacter le démarrage d’Apache. Il faut donc vérifier l’état de votre labo et, le cas échéant, recréer les répertoires et réactiver les modules nécessaires.

3.2. Vérification des modules

  • Les modules Apache disponibles sur la machine sont repris dans le répertoire /etc/apache2/mods-available.  Listez le répertoire pour voir de quoi il s’agit.  
  • Lorsqu’on charge un module, un lien symbolique est créé depuis le répertoire /etc/apache2/mods-enabled vers le répertoire /etc/apache2/mods-available.  Dans ce répertoire, vous devriez voir apparaitre les fichiers suivants, signe que les modules correspondants sont activés :
    • mpm_prefork.load
    • authz_core.load
    • dir.load Si le répertoire mods-enabledou ces fichiers ne sont pas présents, voici la procédure pour les réactiver. Notez bien cette procédure, elle pourrait vous être utile dans le cadre de certains exercices (troubleshootings, interros, …)!

Pour commencer, nous allons donc créer le répertoire absent : mkdir /etc/apache2/mods-enabled" Ensuite, nous allons charger deux modules nécessaires à Apache, via la commande a2enmod

  • a2enmod mpm_prefork
  • a2enmod authz_core
  • a2enmod dir Observez à présent le contenu du répertoire mods-enabled  avec un ls -l : vous devriez voir les liens symboliques créés. 

3.3. Démarrage et test du serveur Apache

Pour démarrer Apache, vous pouvez utiliser la commande suivante : 

apache2ctl start

Vérifiez que le serveur a démarré en utilisant : 

  • netstat -nltp 
  • ps -A

Pourquoi n’utilise-t’on pas le udans la commande netstatici ?

Pouvez-vous afficher le site www.woodytoys.lab depuis le poste du directeur?  Pour vérifier ça, vous pouvez lancer Wireshark puis utiliser la commande links, qui est un navigateur en console : links http://www.woodytoys.lab/index.html

Qu’affiche le navigateur?  Que voyez-vous sur la trace Wireshark? 

Explorez ensuite le serveur Apache : 

  1. Lorsque vous avez réussi à afficher la page par défaut d’Apache, examinez le contenu du répertoire /var/log/apache2/. Quels fichiers contient- il ? Pouvez-vous retrouver la trace des requêtes web que vous avez effectuées ?
  2. Examinez à présent les processus qui tournent sur votre machine, par exemple avec top. Combien de processus sont utilisés par Apache? Quels sont les parents de ces processus? A quels utilisateurs appartiennent-ils? Quels sont les privilèges de ces utilisateurs?
  3. Enfin, essayez de déterminer la version d’Apache que vous avez installée. Cette information figure notamment dans les en-têtes HTTP envoyés par le serveur. Comment pouvez-vous les examiner ?

3.4. Découverte de la configuration Apache

La configuration Apache s’effectue dans le fichier /etc/apache2/apache2.conf.  Actuellement, vous le voyez dans sa version par défaut, largement commentée.  Prenez le temps de lire ce qu’il contient : les commentaires vous expliquent comment la configuration est répartie en plusieurs fichiers.  Essayez d’y jeter un oeil et de comprendre le rôle de chaque fichier.  La semaine prochaine, nous essayerons de modifier ces configurations.