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
le web, les mails et les transferts de fichiers.
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.
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.
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.
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é.