En réseau, un port est une fonctionnalité intéressante. C’est un moyen pour le trafic réseau d’identifier l’app ou le service de destination. Chaque processus/service obtient son port unique. Un port sera toujours associé à l’adresse IP de l’hôte avec le protocole.
C’est ma métaphore préférée pour décrire ce qu’est un port. Imaginez un navire chargé de marchandises, qui va voyager vers une terre lointaine. Quelles sont les informations nécessaires pour atteindre correctement la destination ? Pour simplifier, disons qu’il a besoin du pays (l’adresse IP) et du port auquel le navire va accoster.
Dans ce guide, découvrez comment lister les ports ouverts sur Linux.
Les ports sur Linux
Les ports agissent comme un point final de communication. C’est un nombre de 16 bits (0 à 65535 en décimal). Bien que la plage soit large, pour faciliter l’utilisation, les ports sont classés en trois catégories. Chaque catégorie est étiquetée comme la plage de valeur du port :
- 0 à 1023 : Ce sont les ports « Bien connus », également connus sous le nom de ports « Système », qui sont réservés aux processus système qui offrent une grande variété de services réseau. Pour se lier avec un port « Bien connu », un processus doit avoir le privilège de superutilisateur.
- 1024 à 49151 : Ce sont les ports « Enregistrés », également connus sous le nom de ports « Utilisateurs », qui sont désignés par l’IANA pour des services spécifiques. Sur demande, un processus peut y avoir accès. Dans le cas de la plupart des systèmes, il n’est pas nécessaire d’avoir un privilège de superutilisateur pour utiliser ces ports.
- 49152 à 65535 : Ce sont les ports « Dynamiques », également connus sous le nom de ports « Privés ». Ces ports ne peuvent pas être enregistrés auprès de l’IANA. Ces ports sont ouverts à l’utilisation pour des services privés ou personnalisés et peuvent également être automatiquement alloués comme ports éphémères (ports à courte durée de vie utilisés par IP).
Dans Linux, il existe plusieurs façons de vérifier les ports ouverts. Par défaut, tout port reste fermé, sauf si une application l’utilise. Si un port est ouvert, alors il doit être attribué à un service/processus.
Liste des ports ouverts
Il est plus facile d’identifier les ports utilisés plutôt que ceux qui sont ouverts. C’est pourquoi la section suivante présentera des méthodes permettant de lister tous les ports actuellement utilisés. Sous Linux, il existe de nombreux outils disponibles pour cette tâche. La plupart d’entre eux sont intégrés dans n’importe quelle distro Linux.
Savoir quels ports sont actuellement ouverts peut être utile dans divers scénarios. Il est possible de configurer un port dédié pour une certaine application. Un port ouvert peut également être une forte indication d’intrusion dans le réseau.
Les méthodes suivantes sont démontrées sur Ubuntu 20.04.1 LTS.
Lister les protocoles et les ports ouverts à partir de /etc/services
Le fichier /etc/services contient des informations sur les services actuellement en cours d’exécution. C’est un gros fichier, alors préparez-vous à être submergé.
Liste des ports ouverts avec netstat
L’outil netstat est un utilitaire permettant d’afficher les connexions réseau pour TCP, les tables de routage, et diverses interfaces réseau. Il propose également des statistiques sur les protocoles réseau. En utilisant netstat, nous pouvons lister tous les ports ouverts du système.
Exécutez la commande netstat suivante :
Détaillons rapidement tous les drapeaux que nous avons utilisés dans cette commande.
- a : Dit à netstat de montrer toutes les sockets
- t : Dit à netstat de lister les ports TCP
- U : Dit à netstat de lister les ports UDP
Voici une autre variante de la commande netstat :
Il y a deux nouveaux drapeaux utilisés dans la commande. Que signifient-ils ?
- l : Indique à netstat d’imprimer uniquement les sockets en écoute
- n : Indique à netstat d’afficher le numéro de port
Pour afficher le PID du processus qui utilise un port, utilisez le drapeau « -p » :
Liste des ports ouverts à l’aide de ss
L’outil ss est un utilitaire d’investigation des sockets. Son utilisation est similaire à celle de netstat.
Pour lister les ports ouverts, exécutez la commande ss suivante :
Les drapeaux sont similaires à ceux de netstat. Les fonctions qu’ils décrivent sont également assez similaires.
- l : dit à ss d’afficher les sockets en écoute
- n : Dit à ss de ne pas essayer de résoudre les noms de service
- t : Dis à ss d’afficher les sockets TCP
- U : Dis à ss d’afficher les sockets UDP
Lister les ports ouverts en utilisant lsof
La commande lsof permet de lister les fichiers ouverts. Cependant, elle peut également être utilisée pour afficher les ports ouverts.
Exécutez la commande lsof suivante :
Pour obtenir les ports ouverts d’un protocole spécifique (TCP, UDP, etc.), puis le définir après le drapeau « -i », utilisez :
Liste des ports ouverts à l’aide de nmap
L’outil nmap est un outil puissant pour l’exploration du réseau et le scan de sécurité/port. Il peut signaler tous les ports ouverts dans le système.
Pour lister les ports TCP ouverts, exécutez la commande nmap suivante. Ici, l’adresse IP est celle de l’ordinateur hôte :
Ici, il y a deux parties de l’argument de la commande.
- -sT : Cette section indique à nmap de rechercher les ports TCP.
- -p- : Ceci indique à nmap de rechercher les 65535 ports. S’il n’est pas utilisé, alors nmap ne scannera que 1000 ports par défaut.
Si vous avez besoin de lister les ports UDP ouverts, alors exécutez la commande nmap suivante :
Pour obtenir à la fois les ports TCP et UDP ouverts, utilisez la commande suivante :
Lister les ports ouverts à l’aide de netcat
L’outil netcat est un utilitaire en ligne de commande permettant de lire et d’écrire des données sur les connexions réseau via les protocoles TCP et UDP. Cet outil peut également être utilisé pour répertorier les ports ouverts. Il peut effectuer des tests sur un port spécifique ou une plage de ports.
La commande netcat suivante effectuera un balayage du port de 1 à 1000. La commande netcat effectuera le scan sur le protocole TCP par défaut :
Elle peut également être étendue à toute la liste des ports possibles :
Découvrons rapidement les drapeaux.
- z : Indique à netcat de rechercher uniquement les ports ouverts sans envoyer de données
- v : Indique à netcat de s’exécuter en mode verbeux
Pour obtenir uniquement les ports ouverts de cette liste, filtrez la sortie avec grep pour le terme « succeeded ».
Si vous souhaitez effectuer le scan sur le protocole UDP, ajoutez alors le drapeau « -u ».
Pensées finales
Comme démontré, il existe des tonnes de façons de rechercher des ports ouverts sous Linux. Je suggère d’essayer toutes les méthodes avant de décider laquelle maîtriser. Si vous utilisez régulièrement un certain outil comme netcat ou nmap, alors la maîtrise des méthodes associées sera la plus bénéfique.
Happy computing!