Exercice 3 — Exposer un serveur web sur le VLAN public¶
Objectif¶
Brancher un conteneur sur le VLAN public du collège, lui donner une vraie adresse IP routée sur Internet, et y faire tourner un serveur web joignable de l'extérieur.
Prérequis¶
- L'exercice 2 terminé : vous savez ce que fait un VLAN Tag.
- Le gabarit Debian 13 standard disponible dans le stockage
local. - Le numéro de votre serveur, noté
#partout dans ce document. Pour le serveur S10,#vaut10.
Ce qui passe vraiment dans votre câble¶
Dans les deux exercices précédents, vous avez fabriqué un VLAN de toutes pièces dans un switch virtuel qui n'existait que dans votre hôte Proxmox. Dans cet exercice, on utilisera un VLAN existant dans le réseau du collège, qui est routé sur Internet. Le switch physique de la salle des serveurs (ToR) est configuré pour accepter deux VLAN sur le même câble, et c'est exactement ce que vous allez faire.
Si vous aviez accès à la configuration du switch ToR, vous verriez que le port de votre serveur est configuré comme ceci (admettons que votre serveur est branché dans le port Gi1/0/13 de la switch ToR) :
sw-tor-rack-13> show vlan brief
VLAN Name Status Ports
700 interne-salle-serveurs-10-70-0-0 active
460 publiques-salle-serveurs-206-167-46-0 active
sw-tor-rack-13> show interface trunk
Port Mode Encapsulation Status Native vlan
Gi1/0/13 on 802.1q trunking 700
Port Vlans allowed on trunk
Gi1/0/13 460,700
Port Vlans allowed and active in management domain
Gi1/0/13 460,700
Port Vlans in spanning tree forwarding state and not pruned
Gi1/0/13 460,700
Le port de switch où arrive votre câble est un port trunk. Ça veut dire qu'il transporte deux VLAN en même temps sur le même câble :
| VLAN | À quoi il sert | Étiquette | Sous-réseau |
|---|---|---|---|
| 700 | Réseau interne de la salle des serveurs | natif, donc sans étiquette | 10.70.0.0/16 |
| 460 | Adresses IP publiques | étiqueté | 206.167.46.0/24 |
Le VLAN natif, c'est celui dont le switch enlève l'étiquette avant d'envoyer la trame dans le câble. Votre serveur reçoit donc du trafic Ethernet tout ce qu'il y a de plus normal, sans avoir besoin de savoir que les VLAN existent.
C'est pour ça que Proxmox s'est installé et a obtenu son adresse 10.70.44.# sans que vous ayez jamais entendu parler de VLAN jusqu'ici. Le trafic de gestion, c'est justement celui qui n'a pas d'étiquette.
Ce VLAN est réellement sur Internet
Les adresses du VLAN 460 sont joignables depuis n'importe où dans le monde, et les ports 22, 80 et 443 y sont ouverts. Tout ce que vous démarrez là-dessus est visible du monde entier, dès la seconde où vous le démarrez.
Étape 1 — Regarder la configuration du bridge avant de le modifier¶
Ouvrez le Shell du nœud.
Un seul VLAN. Pourtant, les trames étiquetées 460 arrivent bel et bien dans le câble. Le bridge les jette, tout simplement parce qu'il n'est pas en mode VLAN aware et qu'il ne sait pas quoi en faire.
Étape 2 — Activer le mode VLAN sur vmbr0¶
Allez dans System > Network, sélectionnez vmbr0 et cliquez sur Edit. Cochez VLAN Aware.
Vous touchez au bridge qui porte l'adresse de gestion
Le bridge est reconstruit. En pratique les sessions ouvertes tiennent le coup, mais faites cette modification depuis l'interface web, et pas au milieu d'une opération longue.
Étape 3 — Appliquer la configuration¶
Cliquez sur Apply Configuration et confirmez.
Proxmox ajoute au passage la ligne bridge-vids 2-4094, qui autorise absolument tous les numéros de VLAN sur le bridge.
Étape 4 — Ne garder que le VLAN dont vous avez besoin¶
Vous n'avez besoin que d'un seul VLAN étiqueté. Ce réglage n'existe pas dans l'interface web : il faut passer par l'API ou éditer le fichier à la main. Faites-le depuis le Shell du nœud.
Dans le bloc vmbr0, remplacez bridge-vids 2-4094 par :
Puis appliquez :
Pourquoi s'embêter ? Parce qu'un bridge qui n'accepte que ce dont il a besoin ne laissera jamais passer un VLAN par accident, par exemple à cause d'un tag mal tapé sur une VM. C'est le même raisonnement qu'une règle de pare-feu : on autorise ce qu'on veut, plutôt que de tout laisser ouvert.
Étape 5 — Vérifier le résultat¶
Relisez le fichier :
Puis la table du switch :
Voilà à quoi ressemble un port trunk vu du côté serveur : un VLAN sans étiquette, qui est le natif, et un VLAN étiqueté par-dessus.
Vous remarquerez que le VLAN 700 n'apparaît nulle part. C'est logique : son trafic arrive sans étiquette, donc il tombe dans le PVID 1, comme n'importe quelle trame anonyme.
Étape 6 — Créer le conteneur web¶
Cliquez sur Create CT. Les valeurs générales sont celles de l'exercice 1, avec ces différences :
| Onglet | Champ | Valeur |
|---|---|---|
| General | CT ID | 210 |
| General | Hostname | web-public |
| DNS | DNS servers | 9.9.9.9 |
À l'onglet Network :
| Champ | Valeur |
|---|---|
| Bridge | vmbr0 |
| VLAN Tag | 460 |
| IPv4 | Static |
| IPv4/CIDR | 206.167.46.#/24 |
| Gateway (IPv4) | 206.167.46.1 |
Notez bien : ce conteneur est branché sur le même bridge que l'adresse de gestion de votre serveur. C'est seulement le tag 460 qui l'envoie dans un autre réseau, avec un autre plan d'adressage.
Étape 7 — Démarrer et vérifier l'adresse¶
Démarrez le conteneur, ouvrez sa Console et connectez-vous.
Cette fois il y a une ligne default. C'est la route par défaut, celle qui manquait aux conteneurs des exercices précédents : elle dit où envoyer tout ce qui n'est pas dans le réseau local.
Étape 8 — Joindre la passerelle¶
Une réponse, même une seule sur deux, suffit pour valider l'étape. Les équipements de bordure limitent souvent le nombre de réponses ICMP qu'ils acceptent de produire, donc une perte sur un si petit échantillon n'a rien d'inquiétant.
Étape 9 — Joindre Internet¶
Une milliseconde jusqu'à un serveur DNS public, qui est à l'extérieur du réseau du collège.
Étape 10 — Installer nginx¶
Vérifiez que le service tourne :
Étape 11 — Mettre votre propre page¶
Étape 12 — Faire la liste de ce qui écoute¶
Deux ports ouverts sur une machine que le monde entier peut joindre. Vous n'avez décidé ni l'un ni l'autre : le 80 est arrivé avec le paquet nginx, le 22 était déjà là dans le gabarit. C'est comme ça que la plupart des services se retrouvent exposés sans que personne ne l'ait voulu.
Étape 13 — Appeler le serveur depuis votre poste¶
Sortez de la console et ouvrez un navigateur sur votre poste, à l'adresse http://206.167.46.#.
Étape 14 — Prouver que l'adresse est vraiment publique¶
Une page qui répond depuis un poste du collège, ça ne prouve rien : le trafic pourrait très bien rester à l'intérieur du réseau. Il faut vérifier quelle adresse Internet voit quand votre conteneur sort.
Depuis la console du conteneur :
Ce service renvoie l'adresse d'où vient la requête, telle qu'elle lui arrive. C'est exactement celle que vous avez configurée sur la carte. Donc personne n'a réécrit votre adresse en chemin : il n'y a pas de NAT, votre conteneur est directement sur Internet.
Comparez avec le conteneur 201 de l'exercice 1, qui n'a même pas de route par défaut.
Question 1¶
L'adresse de gestion est dans le VLAN 700 et le conteneur dans le VLAN 460. Pourquoi la configuration de vmbr0 ne parle-t-elle jamais du VLAN 700 ?
- a) Proxmox le devine à partir de l'adresse
10.70.44.#. - b) Le VLAN 700 est le VLAN natif du trunk : ses trames arrivent sans étiquette.
- c) Le VLAN 700 est configuré dans le firmware de la carte réseau.
Voir la réponse
**b) Le VLAN 700 est le VLAN natif du trunk : ses trames arrivent sans étiquette.** Le switch physique enlève l'étiquette du VLAN natif avant d'envoyer la trame. Votre serveur reçoit donc du trafic Ethernet ordinaire, qu'il range dans le PVID 1 de son bridge. Il n'y a rien à configurer pour ça, et c'est pour cette raison que l'installation de Proxmox a fonctionné du premier coup. Le choix a) prend le problème à l'envers. C'est le switch qui décide du VLAN, en fonction du port où vous êtes branché. L'hyperviseur n'a pas son mot à dire : vous pourriez mettre n'importe quelle adresse sur `vmbr0`, vous resteriez dans le VLAN 700.Question 2¶
Vous avez remplacé bridge-vids 2-4094 par bridge-vids 460. Qu'est-ce que ça change concrètement ?
- a) Le nœud ne peut plus utiliser le VLAN 700 pour sa gestion.
- b) Une VM taguée avec un autre VLAN que 460 n'aura aucun réseau.
- c) Le bridge ne peut plus traiter qu'un VLAN à la fois.
Voir la réponse
**b) Une VM taguée avec un autre VLAN que 460 n'aura aucun réseau.** Le bridge jette les trames des VLAN qu'il n'a pas dans sa liste. Une VM taguée en 999 enverrait dans le vide, sans le moindre message d'erreur, et n'aurait jamais de réponse. Le symptôme ressemble beaucoup à un câble débranché, ce qui rend la panne pénible à diagnostiquer. Le choix a) est tentant, puisque 700 n'est effectivement pas dans la liste. Mais le trafic de gestion arrive **sans étiquette** et tombe dans le PVID 1, qui existe de toute façon. La liste `bridge-vids` ne concerne que les trames qui portent une étiquette.Une machine publique, ce n'est pas une machine de labo¶
Les conteneurs des exercices 1 et 2 étaient injoignables de l'extérieur. Celui-ci ne l'est pas, et la différence tient à un champ de quatre caractères.
Un mot de passe de labo ne protège pas une machine publique
Les robots qui essaient des mots de passe sur le port 22 trouvent une nouvelle adresse publique en quelques heures. abc.123 ne tiendra pas.
Sur une machine du VLAN 460 :
-
Le gabarit Debian refuse par défaut la connexion
rootpar mot de passe. La commandesshd -Taffichepermitrootlogin without-password, ce qui vous protège justement de ce genre de robot. Ne changez pas ce réglage.
-
Tout service que vous installez devient un service exposé. Prenez l'habitude de faire
ss -tlnpavant de quitter la machine.
Nettoyage¶
Le conteneur 210 occupe une adresse publique, et il reste exposé tant qu'il tourne. S'il ne vous sert plus, arrêtez-le et détruisez-le plutôt que de le laisser tourner sans surveillance.











