Chapitre 6.12Les ports

Identifier le bon service sur une machine.

4 minutes de lecture

On a vu qu'une adresse IP identifie une machine sur le réseau. Mais une machine peut héberger plusieurs services en même temps, un site web, un serveur de mail, une base de données, un outil d'administration. Comment le réseau sait-il auquel de ces services une requête est destinée ?

C'est le rôle des ports.

Le principe

Si l'adresse IP est l'adresse d'un immeuble, le port est le numéro de l'appartement. L'immeuble abrite plusieurs résidents, et chaque résident a son propre numéro. Le facteur a besoin des deux pour livrer, sinon il dépose le colis dans le hall et espère que ça se passera bien.

Un port est un nombre entre 0 et 65535. Quand tu tapes une adresse dans ton navigateur, celui-ci ajoute automatiquement le port par défaut sans te le montrer. L'adresse https://google.com est en réalité https://google.com:443. Tu peux d'ailleurs taper le port toi-même, le résultat sera identique.

Les trois familles de ports

L'IANA, l'organisme qui tient les registres techniques d'Internet, découpe les 65536 ports en trois plages.

  • 0 à 1023 : les ports bien connus, ou well-known ports. Ils sont attribués aux grands services standards. Sur les systèmes de type Linux, seul un programme disposant de privilèges élevés peut s'y installer, ce qui évite qu'un logiciel quelconque vienne se faire passer pour un serveur web.
  • 1024 à 49151 : les ports enregistrés. Des éditeurs y ont réservé un numéro pour leur produit, mais n'importe quel programme peut techniquement les utiliser.
  • 49152 à 65535 : les ports dynamiques, ou éphémères. Personne ne les réserve, le système d'exploitation y pioche au hasard.

Voici les numéros que tu croiseras le plus souvent dans une discussion technique.

  • 80 : HTTP, les sites web non chiffrés.
  • 443 : HTTPS, les sites web chiffrés. C'est celui que tu utilises la quasi-totalité du temps.
  • 22 : SSH, la connexion sécurisée à distance sur une machine.
  • 53 : DNS, la résolution des noms de domaine.
  • 25, 465, 587 : les différents ports du mail sortant. Le 25 sert aux échanges entre serveurs de messagerie, le 587 et le 465 servent à ton logiciel de mail pour déposer un message.
  • 3306 : MySQL, et 5432 pour PostgreSQL.
  • 6379 : Redis, souvent utilisé comme cache applicatif.
  • 3000, 8000, 8080 : les ports de confort, ceux que les développeurs utilisent pour lancer une application sur leur propre machine. Aucun standard ne les impose, c'est simplement devenu une habitude.

Le port de retour

Il y a un point que presque personne ne voit passer. Une connexion réseau met en jeu deux ports, pas un seul. Ton navigateur contacte bien le port 443 du serveur, mais il ouvre en même temps un port sur ta machine pour recevoir la réponse. Ce port-là est choisi au hasard dans la plage éphémère, et il est différent pour chaque connexion ouverte, sachant qu'un navigateur en maintient plusieurs en parallèle vers un même serveur.

Exemple :

Ton navigateur ouvre trois connexions vers le même site. Les trois visent la même adresse IP et le même port 443. Ce qui permet à ta machine de savoir quelle réponse appartient à quelle connexion, c'est justement le port éphémère différent utilisé par chacune. Le couple adresse plus port, des deux côtés, identifie la conversation de façon unique.

TCP et UDP

Nous avons évoqué ces deux protocoles de transport dans le chapitre sur TCP/IP. Ils utilisent tous les deux les ports, mais avec des philosophies opposées.

TCP garantit que toutes les données arrivent, dans le bon ordre, sans erreur. Il numérote les morceaux, réclame ceux qui manquent, et attend les confirmations. C'est le courrier recommandé avec accusé de réception, et c'est ce qu'utilisent les mails, les transferts de fichiers et le web dans ses versions historiques.

UDP envoie les données sans rien vérifier. C'est plus rapide, mais rien ne garantit l'arrivée ni l'ordre. C'est la carte postale, si elle se perd, tant pis. On l'emploie quand la vitesse prime sur la fiabilité, pour la visioconférence, la téléphonie sur Internet ou les jeux en ligne. Perdre une image dans un flux vidéo est imperceptible, alors qu'attendre sa retransmission provoquerait un gel de l'écran bien plus gênant.

Le web lui-même a d'ailleurs commencé à changer de camp. La dernière version de HTTP abandonne TCP au profit d'un protocole bâti sur UDP, qui reprend à son compte les garanties de fiabilité au lieu de les confier à la couche de transport. Le port 443 reste le même, ce qui voyage dedans a changé.

Détail qui surprend souvent, le port 53 en TCP et le port 53 en UDP sont deux portes différentes. Un pare-feu qui ouvre l'une sans l'autre peut casser un service de façon parfaitement mystérieuse, ce qui arrive justement au DNS, lequel utilise les deux selon la taille de la réponse.

Ports et box Internet

Nous avons vu que chez toi, tous tes appareils partagent une seule adresse IP publique grâce au NAT. Ce que ce chapitre ajoute, c'est le moyen concret dont ta box dispose pour s'y retrouver, et ce moyen, ce sont les ports. Elle note que la connexion sortie sur tel port éphémère venait de ton téléphone, et renvoie la réponse au bon appareil.

Ça marche très bien dans ce sens. Dans l'autre, une requête arrivant de l'extérieur n'a aucun moyen de deviner à quelle machine de ta maison elle s'adresse. C'est la raison pour laquelle il faut configurer une redirection de port, ou port forwarding, quand tu veux rendre accessible depuis Internet un serveur de jeu ou une caméra installée chez toi.

"Ça marche chez moi mais pas au bureau"

Le réseau d'une entreprise fait l'inverse de ta box. Il ne se contente pas de bloquer ce qui entre, il filtre aussi ce qui sort, et il ne laisse passer en général que les ports du web, 80 et 443. Un outil de visioconférence qui a besoin d'un port inhabituel, un accès à distance, un logiciel de transfert de fichiers, et voilà quelque chose qui marche parfaitement depuis la maison et jamais depuis le bureau. Rien n'est cassé, une porte est fermée, et la personne à voir est l'équipe informatique.

Tu vivras aussi la situation dans l'autre sens. Un transporteur ou un logiciel de gestion demande qu'on lui "ouvre un port" pour déposer ses fichiers chez toi. Ce qu'il demande, c'est d'ajouter une porte sur ton infrastructure, et l'équipe technique traînera des pieds pour la raison expliquée juste après. Avant d'insister, demande si l'échange ne peut pas passer par une API sur le port du web, que tout le monde a déjà.

Pare-feu et sécurité

Les ports sont surtout un enjeu de sécurité. Un pare-feu contrôle quels ports sont joignables depuis l'extérieur. Sur un serveur correctement configuré, tout est fermé par défaut et on ouvre uniquement ce dont on a besoin, jamais l'inverse.

Laisser un port ouvert inutilement, c'est laisser une fenêtre entrouverte dans l'immeuble. Ça n'invite pas forcément les cambrioleurs, mais ça leur simplifie beaucoup la vie. Des robots parcourent en permanence les adresses publiques d'Internet pour tester quels ports répondent. Un serveur exposé reçoit des tentatives de connexion dans les minutes qui suivent sa mise en ligne, sans que personne ne le vise en particulier.

L'ensemble des portes ouvertes s'appelle la surface d'exposition, et c'est un argument d'arbitrage que tu peux reprendre à ton compte. Moins on en ouvre, moins il y a de choses à surveiller. Les fuites de données les plus médiatisées de ces dernières années ne sont d'ailleurs pas des exploits, ce sont des bases de données ou des outils d'administration laissés accessibles depuis Internet, sans mot de passe, sur leur port par défaut, qu'un robot a trouvés avant que quelqu'un ne s'en aperçoive.

Changer le port d'un service, par exemple mettre SSH sur 2222 au lieu de 22, réduit le bruit des robots automatiques mais ne protège de rien. C'est de la dissimulation, pas de la sécurité. Un mot de passe solide, une authentification par clé et un pare-feu restent indispensables. Nous avons développé le sujet dans le chapitre sur la cybersécurité.

PrécédentFrameworks et bibliothèques Tous les chapitres