Comment vérifier les ports ouverts sur les routeurs et les IP publiques

En informatique, et notamment lorsqu’on parle de réseaux, le terme de port est fréquemment utilisé. Les ports sont des « points d’accès » utilisés par les systèmes connectés au réseau pour établir des connexions avec d’autres hôtes : il peut s’agir de PC traditionnels, de smartphones, de tablettes, de téléviseurs intelligents, de serveurs NAS, d’imprimantes, de dispositifs pour l’Internet des objets, d’équipements industriels, etc. Tout ce qui possède une carte réseau Ethernet ou Wifi.

Les connexions réseau sont établies en utilisant l’un des 65 535 ports de communication disponibles : c’est ensuite au système d’exploitation d’associer chaque port à un point de contact ou socket utilisé par une ou plusieurs applications pour envoyer et recevoir des données.

Que signifie avoir des ports ouverts ?

Les ports ouverts sont des ports de communication qui sont exposés et sur lesquels un composant serveur est à l’écoute, prêt à traiter les demandes de connexion provenant d’autres dispositifs connectés localement ou à distance. Chaque port possède un numéro d’identification et des connexions TCP ou UDP peuvent être établies sur chacun d’eux.

Connexions TCP ou UDP sur les ports ouverts

Des connexions TCP (Transmission Control Protocol) ou UDP (User Datagram Protocol) peuvent être établies sur les ports, en fonction du type de protocole de transport utilisé pour le transfert des données.

Le TCP est un protocole de communication fiable, qui utilise une connexion orientée flux pour garantir une livraison des données sans erreur. Les ports TCP sont utilisés pour les communications qui nécessitent un flux de données fiable, comme la navigation sur le Web, le téléchargement de fichiers et l’envoi de courriels.

UDP, quant à lui, est un protocole de communication non fiable, qui ne garantit pas la livraison des données ni l’ordre dans lequel elles sont reçues. Les ports UDP sont utilisés pour les communications où la vitesse est plus importante que la fiabilité : pensez à la transmission de données audio et vidéo en temps réel (streaming, VoIP, jeux en ligne, …). Dans ces cas, la perte de quelques paquets de données lors de l’envoi ou de la réception d’informations n’a aucune importance.

En parlant de la suite de protocoles TCP/IP, nous nous sommes brièvement attardés sur les principales différences avec UDP.

Vérification des ports ouverts avec Windows et Netstat

La commande netstat -na, lancée à l’invite de commande de Windows, vous permet de déterminer les connexions réseau en cours et les ports qui sont à l’écoute (‘listening’) en attendant de recevoir des demandes de connexion.

Chaque quadruplet (IP: port, IP:port) renvoyé par la commande indique l’adresse IP source (généralement l’adresse IP privée associée à l’ordinateur du réseau local, le port utilisé sur ce système, l’adresse IP de destination et le port auquel vous êtes connecté.

La présence des valeurs 80 et 443, par exemple, suggère que l’on s’est connecté à un serveur web utilisant respectivement les protocoles HTTP et HTTPS.

Comment vérifier les ports ouverts sur les routeurs et les IP publiques

Dans l’exemple de la figure, nous avons demandé d’extraire uniquement les connexions HTTPS fonctionnant sur le port 443.

À l’aide de la commande netstat -fa, les adresses distantes sont automatiquement résolues de sorte que, dans la mesure du possible, seule l’adresse IP numérique n’est pas affichée. La procédure de résolution inverse n’est toutefois pas instantanée et la sortie est générée avec un peu d’attente.

Ports ouverts visibles sur le réseau local et IP publique

Il n’y a pas de danger inhérent à l’utilisation de ports de communication spécifiques. Il est plutôt important de vérifier quels ports et combien de ports sont ouverts pour recevoir des demandes de connexion de l’extérieur.

Que ce soit lors de la mise en place d’un serveur ou lors de l’accès à Internet à l’aide d’un routeur « grand public » ou d’un produit professionnel, il est important de vérifier les ports ouverts sur le routeur et l’IP public.

Si vous installez un serveur Web sur votre machine, il est normal qu’il accepte le trafic réseau entrant sur le port 80. L’important est que les demandes soient traitées correctement et que le serveur ne présente pas de vulnérabilités inhérentes qui doivent toujours être résolues rapidement par l’application des correctifs de sécurité publiés par les différents fabricants de logiciels.

En règle générale, les ports ouverts sur les différents appareils connectés au réseau local sont visibles uniquement et exclusivement par les clients locaux. Le pare-feu et le NAT (Network Address Table) activés sur le routeur empêchent un utilisateur distant, non connecté au réseau local, de se connecter directement à un port ouvert sur un dispositif connecté au réseau local.

Lors de l’installation d’un composant serveur sur un dispositif connecté au réseau local qui doit rester à l’écoute (« listening ») pour traiter les demandes de connexion entrantes, il est nécessaire d’effectuer ce que l’on appelle une redirection de port ou port forwarding sur le routeur afin que le port soit joignable de l’extérieur.

Cela signifie que le routeur doit être configuré pour transmettre tout le trafic reçu sur un port donné, sur l’interface associée à l’IP publique (port WAN), au système connecté au réseau local où le composant serveur est exécuté.

En activant la redirection de port sur le routeur, le composant serveur installé sur la machine connectée au réseau local ne répondra plus seulement aux demandes de connexion provenant du réseau local, mais aussi à celles provenant du « monde extérieur » (réseau Internet, WAN).

De nombreux logiciels utilisent des mécanismes basés sur le cloud qui exploitent le concept de connexion inverse : afin de contourner les pare-feu et les NAT en évitant d’avoir à ouvrir les ports entrants sur le routeur, ces programmes utilisent des connexions sortantes vers un serveur distant qui joue le rôle d’intermédiaire.

Combien de ports et comment vérifier les ports ouverts sur les routeurs et les IP publics ?

Nous avons déjà souligné que les ports de communication suivent un système de numérotation à 16 bits : il y a un total de 65 535 ou 216-1).

Les 1 024 premiers ports (appelés « ports connus ») sont associés à des services spécifiques, dont certains sont bien connus, fournis par l’IANA (Internet Assigned Numbers Authority), un organisme chargé d’attribuer les adresses IP et qui dépend de l’ICANN.

Parmi les 1024 premiers ports, il suffit de mentionner que par convention, 20 et 21 sont utilisés par exemple par le protocole FTP pour le transfert de fichiers ; 25, 465, 587 par le protocole SMTP ; 80 par HTTP ; 110 et 995 par POP3 ; 443 par HTTPS ; 53 par DNS ; 137-138-139 par NetBIOS et ainsi de suite.

Une liste complète des ports les plus utilisés est disponible sur le site de l’IANA.

Une liste plus lisible et commentée est également disponible sur Wikipédia.

En partant du nombre de ports en écoute sur un système ou ouverts sur l’IP publique sur laquelle se trouve le routeur, il est donc possible d’estimer quel type de service est en cours d’exécution, c’est-à-dire quel composant du serveur gère les demandes de connexion sur ce port spécifique. Rien n’empêche qu’un service écoutant habituellement sur un certain port soit déplacé sur un autre port.

Aussi et surtout par mesure de précaution, il est donc important de vérifier les ports ouverts sur les routeurs et les IP publiques, car les malveillants et les cybercriminels sont souvent utilisés pour scanner de grands groupes d’adresses IP à la recherche de ports ouverts sur lesquels fonctionnent des services vulnérables.

Cette activité, appelée balayage de ports, est un peu à double tranchant : en principe, elle n’est pas illégale en Europe ou dans d’autres pays. Toutefois, l’utilisation du balayage de ports peut être considérée comme illégale ou inappropriée dans certaines circonstances.

Par exemple, si le balayage des ports est utilisé dans le but de découvrir des vulnérabilités logicielles afin de porter atteinte à la sécurité d’un réseau ou d’un système informatique, il s’agit d’une activité illégale qui peut faire l’objet de poursuites.

À l’inverse, si l’activité de balayage de ports est réalisée avec l’autorisation du propriétaire du réseau (test de pénétration), il n’y a évidemment aucun problème.

Vérification des ports ouverts sur l’IP public avec GRC Shields Up

L’un des outils « historiques » pour vérifier les ports ouverts sur les routeurs et les IP publics reste GRC Shields Up.

Shields Up est un service qui vérifie séquentiellement les 1 056 premiers ports TCP en examinant l’adresse IP publique avec laquelle vous vous êtes présenté.

Comment vérifier les ports ouverts sur les routeurs et les IP publiques

Après avoir cliqué sur Proceed, vous devez sélectionner All service ports : les ports « invisibles » (furtifs) sont mis en évidence en vert, les ports « ouverts » (c’est-à-dire joignables à distance) en rouge, les ports visibles mais fermés en bleu.

Sur les routeurs utilisés dans l’entreprise ou au bureau, le port 80, par exemple, devrait normalement être fermé (ou plutôt, indiqué comme « invisible »), sauf en cas de transfert de port vers un système serveur, connecté au réseau local, auquel il doit être possible de se connecter – après avoir saisi les informations d’accès – depuis l’extérieur.

Dans le cas où des fonctions serveur ont été activées, il est donc judicieux de vérifier que seuls les ports effectivement associés aux services que l’on souhaite réellement rendre accessibles depuis l’extérieur sont ouverts.

Pour éviter d’exposer les ports à l’adresse IP publique, on peut utiliser un serveur VPN : la configuration d’un serveur VPN sur le routeur est généralement très simple et permet d’éviter que les ports de communication des appareils connectés au réseau local soient publiquement visibles et donc exposés à des utilisateurs non autorisés.

Shields Up ne scanne que sa propre IP : il n’est pas possible de scanner les adresses IP publiques attribuées à des tiers. En outre, le service ne vérifie que les ports TCP et non les ports UDP.

Toujours en ce qui concerne sa propre IP publique, Shields Up permet de vérifier l’état de tout autre port TCP, même ceux qui se trouvent au-delà des 1 056 premiers ports vérifiés.

En tapant un numéro de port dans la case « Vous pouvez sélectionner n’importe quel service parmi ceux énumérés ci-dessus », puis en cliquant sur la sonde de port personnalisée spécifiée par l’utilisateur, son état peut être vérifié.

Comment vérifier les ports ouverts sur les routeurs et les IP publiques

Dans l’exemple, le port 5060 associé au protocole SIP (le routeur traite les numéros VoIP) est ouvert et accessible de l’extérieur.

Vérifier si des ports individuels sont ouverts avec YouGetSignal

Le service YouGetSignal vous permet, comme Shields Up, de vérifier quels ports sont ouverts sur le routeur ou sur l’IP publique.

Dans ce cas pour vérifier les ports ouverts, vous pouvez spécifier quel port doit être vérifié, en cliquant sur le lien Scan all common ports en bas à droite, YouGetSignal vérifiera les ports les plus couramment utilisés.

Le service ne fait pas de différence, contrairement à Shields Up, entre les ports fermés et invisibles : les ports sont indiqués soit comme ouverts, soit simplement comme fermés.

Il est également possible de lancer une analyse des IP publiques autres que celle utilisée, bien que YouGetSignal vous permette d’analyser un seul port à la fois ou une vingtaine des ports les plus couramment utilisés (Scan all common ports).

Pour des besoins plus limités, il existe également Microsoft PortQry, qui a l’avantage de permettre le scan des ports TCP et UDP sous Windows. Il est également possible de lancer un scan de ports avec PowerShell sans rien installer.

Scanner n’importe quelle adresse IP publique avec Nmap

Pour effectuer un scan plus complet et vérifier les ports TCP et UDP ouverts, vous pouvez utiliser un outil comme Nmap, le roi des scanners de ports.

Nmap est un logiciel multiplateforme : il existe des versions pour Linux, MacOs, Windows et d’autres systèmes d’exploitation.

Ce qui est génial, c’est qu’avec l’intégration de WSL 2 (Windows Subsystem for Linux) dans Windows 10 et Windows 11, il est possible d’exécuter Linux dans Windows et d’utiliser Nmap sans les limitations de la ligne de commande.

Il suffit d’installer par exemple la dernière version de la distribution Ubuntu avec WSL 2, de la démarrer depuis Windows puis de lancer les deux commandes suivantes pour la mettre à jour et installer la dernière version de Nmap :

sudo apt update && sudo apt upgrade -y
sudo apt install nmap -y

À ce stade, vous pouvez confortablement utiliser toutes les commandes de Nmap et exploiter tout le potentiel de cet outil comme expliqué dans l’article mentionné ci-dessus.

Après avoir détecté votre adresse IP publique, la commande suivante recherche tous les ports TCP/UDP ouverts sur cette adresse :

nmap -sSU -p 1-1023 -v adresse-ip

Dans ce cas, seuls les ports connus sont analysés ; remplacez 1023 par 65535. Il faut garder à l’esprit que cette opération peut prendre beaucoup de temps pour se terminer. En outre, le système analysé peut mettre en place des blocs temporaires pour empêcher ou ralentir l’analyse des ports.

En suivant les instructions de l’article vu plus haut, il est possible d’activer un scan plus ou moins rapide et agressif.

Au lieu de l’adresse IP, il faut spécifier l’adresse IP publique : en spécifiant l’adresse privée d’un appareil local, Nmap vérifie les ports TCP/UDP ouverts en se présentant comme un client connecté au même réseau local. Comme on peut le voir dans l’exemple de la figure, le scan a été dans ce cas lancé sur un hôte local (dans ce cas un routeur Wifi avec l’adresse IP 192.168.1.1) :

Comment vérifier les ports ouverts sur les routeurs et les IP publiques

Tous ces ports, bien sûr, ne sont pas et ne devraient pas être visibles sur l’adresse IP publique.

De plus, comme on peut le voir, pour chaque port, Nmap offre une indication du service en cours d’exécution à partir de sa base de données. Cette information n’est évidemment pas une garantie que le même service tourne sur le port correspondant.

Telnet sous Windows et nc sous Linux

Pour vérifier l’accessibilité d’un seul port TCP sous Windows, il suffit de taper la commande telnet à l’invite suivie de l’adresse IP et du numéro de port. Exemple :

telnet 8.8.8 53

Il va sans dire que vous obtiendrez une réponse car le service DNS de Google pour la résolution des noms de domaine est actif sur le port 53 du serveur 8.8.8.

Au cas où la commande telnet serait inconnue sous Windows, il suffit de l’ajouter en appuyant sur Windows+R, en tapant optionalfeatures, en cochant la case Client Telnet et en appuyant sur OK.

Sous Linux ou à partir de Windows 10 et Windows 11 après avoir installé WSL 2, vous pouvez utiliser la commande nc pour vérifier non seulement les ports TCP mais aussi les ports UDP. Exemple :

nc -z -v -u 192.168.0.1 53

Dans ce cas, l’adresse IP locale 192.168.0.1 est un routeur sur lequel tourne un serveur DNS, la commande nc répond donc avec le message Connection to 192.168.0.1 53 port succeeded.

L’ajout du commutateur -u à la commande nc demande un test sur le port UDP spécifié. Sinon, le test de connexion est effectué en utilisant TCP.