Aller au contenu
M08 · C. Protéger les applications Web

Le pare-feu réseau devant un serveur web

Le rôle d'un pare-feu réseau, les paquets, adresses IP et ports, les règles lues de haut en bas, la politique « tout refuser sauf », la zone démilitarisée (DMZ) pour un serveur web, et la configuration d'un pare-feu pour le trafic HTTP et HTTPS.

1Situer

Le serveur de Souk Atlas est branché sur Internet : des milliers de machines inconnues peuvent lui envoyer des paquets, sur n'importe lequel de ses 65 535 ports. Seuls deux services doivent être visibles du public, le site en HTTP et en HTTPS. Le pare-feu réseau est le portier qui laisse passer ces deux-là et ferme tout le reste, avant même que PHP ne s'exécute.

2Comprendre

Les paquets traversent les règles du pare-feu
paquetsrègles (de haut en bas) 1 politique refuser 2 refuser de 185… 3 autoriser 443 4 3306 web→bdd 5 22 de admin 41.250.3.7 → web : 443✔ autorisé (ligne 3) 41.250.3.7 → bdd : 3306✖ refusé (politique) web → bdd : 3306✔ autorisé (ligne 4) 185.220.101.4 → web : 443✖ refusé (ligne 2)

Un client de Casablanca demande le site en HTTPS. La règle 3 « autoriser tcp 443 vers web » correspond : le paquet passe.

1 / 4

Ce que voit un pare-feu

Sur Internet, les données voyagent découpées en paquets. Chaque paquet porte une étiquette que le pare-feu sait lire :

ChampExempleCe que c’est
Adresse source41.250.3.7La machine qui envoie
Adresse destination10.0.0.10La machine visée
Protocoletcp, udp, icmpLa façon de transporter (icmp sert au ping)
Port destination443Le service visé sur la machine

Le pare-feu réseau ne lit pas le contenu : il ne sait pas si la requête HTTP contient un formulaire, un mot de passe ou une injection SQL. Il décide seulement sur l’adresse, le protocole et le port.

Des règles lues de haut en bas

Dans le simulateur de cette leçon, une règle s’écrit ainsi :

politique refuser                          # ce que rien n'autorise est bloqué
autoriser tcp 443 vers web                 # HTTPS vers le serveur web, depuis partout
autoriser tcp 22 de admin vers web         # SSH, seulement depuis le poste admin
refuser tous de 185.220.101.4              # une adresse bannie, tous protocoles

Les vrais pare-feux ont une syntaxe différente, mais la même logique. Sur un serveur Linux, avec l’outil ufw :

sudo ufw default deny incoming
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw allow from 192.168.1.5 to any port 22 proto tcp
sudo ufw enable

Tout refuser, sauf

La DMZ : isoler le serveur web

Pour Souk Atlas, cela donne trois zones et deux pare-feux (ou un pare-feu à trois pattes) :

Internet ──[443, 80]──▶ DMZ : serveur web 10.0.0.10
DMZ      ──[3306, seulement depuis web]──▶ réseau interne : base 10.0.1.20
Bureau   ──[22, seulement depuis admin]──▶ serveur web

Si une faille du site est exploitée, l’attaquant contrôle le serveur web, mais il ne peut pas joindre les postes du bureau, et ne parle à la base que sur le port 3306.

Configurer le pare-feu pour HTTP

Pour un serveur web, la configuration type :

  • 80 et 443 ouverts à tous. Le port 80 ne sert qu’à rediriger vers HTTPS (réponse 301 vers https://).
  • 22 (SSH) limité à l’adresse de l’administration, ou accessible seulement par un VPN.
  • 3306 (MySQL) jamais ouvert vers Internet : seul le serveur web y accède.
  • Le trafic sortant du serveur web limité lui aussi : un serveur piraté qui ne peut pas contacter Internet ne peut pas télécharger d’outils ni envoyer les données volées.
  • Les journaux du pare-feu conservés et surveillés : une rafale de paquets refusés sur le port 22 signale une attaque en cours.
Exemple simple

Le gardien de la résidence

Le gardien a une liste : les livreurs vont à l'accueil, les résidents entrent avec leur badge, et personne n'entre au local technique. Celui qui n'est pas sur la liste reste dehors. Un pare-feu est ce gardien, et sa liste, ce sont les règles.

Exemple simple

Les guichets de la poste

Le bâtiment a une adresse (l'adresse IP) et des guichets numérotés (les ports) : guichet 443 pour les colis, 22 pour l'administration. Le pare-feu décide quel guichet ouvre, et pour qui.

3Manipuler

Écrivez les règles du pare-feu de Souk Atlas. Le site (machine web) doit être joignable par tous en HTTP et HTTPS. La base de données (bdd) ne doit recevoir que les requêtes du serveur web. L'administration à distance (SSH, port 22) n'est permise que depuis le poste admin. L'adresse 185.220.101.4 a attaqué le site : bloquez-la entièrement. Tout le reste est refusé. Cliquez sur « Tester les paquets » : chaque ligne passe au vert quand sa décision est la bonne.
Les règles sont lues de haut en bas : la première qui correspond décide.

Paquets à traiter 0 / 10

PaquetDe → versServiceIl fautDécisionRègle appliquée
Un client ouvre le site en HTTPS 41.250.3.7 → 10.0.0.10 (web) tcp 443 laisser passer … …
Un client tape http:// (il sera redirigé vers HTTPS) 41.250.3.7 → 10.0.0.10 (web) tcp 80 laisser passer … …
Le serveur web interroge la base 10.0.0.10 (web) → 10.0.1.20 (bdd) tcp 3306 laisser passer … …
Un inconnu tente de joindre MySQL directement 41.250.3.7 → 10.0.1.20 (bdd) tcp 3306 bloquer … …
Un robot essaie des mots de passe SSH 41.250.3.7 → 10.0.0.10 (web) tcp 22 bloquer … …
L'administratrice se connecte en SSH 192.168.1.5 (admin) → 10.0.0.10 (web) tcp 22 laisser passer … …
Un inconnu tente le bureau à distance Windows 41.250.3.7 → 10.0.0.10 (web) tcp 3389 bloquer … …
Un ping depuis Internet 41.250.3.7 → 10.0.0.10 (web) icmp (ping) bloquer … …
L'attaquant revient sur le site en HTTPS 185.220.101.4 → 10.0.0.10 (web) tcp 443 bloquer … …
  1. La politique par défaut est « refuser » (ce qui n'est pas autorisé est bloqué).

4Pratiquer

Exercice 1 · Lire une règle

Que fait la règle `autoriser tcp 3306 de web vers bdd` ? Et pourquoi n'écrit-on pas simplement `autoriser tcp 3306` ?

Voir le corrigé
Elle laisse passer les connexions TCP vers le port 3306 (MySQL) seulement quand elles partent
de la machine web et vont vers la machine bdd.
« autoriser tcp 3306 » sans « de » ni « vers » ouvrirait MySQL à toutes les adresses d'Internet :
n'importe qui pourrait tenter des mots de passe sur la base.

Exercice 2 · L'ordre compte

Ces règles doivent bloquer l'adresse 185.220.101.4. Pourquoi ne fonctionnent-elles pas ? Corrigez-les. ``` politique refuser autoriser tcp 443 vers web refuser tous de 185.220.101.4 ```

Voir un indice

Pour un paquet de 185.220.101.4 vers le port 443, quelle est la première règle qui correspond ?

Voir le corrigé
La première règle qui correspond décide. Un paquet HTTPS de l'attaquant correspond déjà
à la ligne 2, il passe : la ligne 3 n'est jamais lue pour lui.
Il faut placer le blocage avant :

politique refuser
refuser tous de 185.220.101.4
autoriser tcp 443 vers web

Exercice 3 · Un réseau entier

Les machines du bureau ont toutes une adresse entre 192.168.1.0 et 192.168.1.255. Écrivez une seule règle qui leur permet le SSH vers web.

Voir le corrigé
autoriser tcp 22 de 192.168.1.0/24 vers web

/24 signifie que les 24 premiers bits (192.168.1) sont fixes : les 256 adresses du réseau sont concernées.

5Vérifier

1. Que vaut la politique « refuser » d'un pare-feu ?
2. Quels ports doivent être ouverts au public pour un site web ?
3. Un pare-feu réseau bien réglé protège-t-il d'une injection SQL dans un formulaire ?
4. Pourquoi place-t-on le serveur web dans une DMZ ?