Vérification des ports ouverts et à l’écoute sur Linux à l’aide de netstat et ss
La surveillance des ports ouverts et à l’écoute sur un système Linux est l’une des pratiques les plus critiques pour maintenir la sécurité du serveur, diagnostiquer les problèmes réseau et gérer efficacement votre infrastructure. En auditant régulièrement les ports ouverts et les services qui y sont liés, vous pouvez identifier de manière proactive les tentatives d’accès non autorisé, détecter les erreurs de configuration et éliminer les surfaces d’attaque inutiles avant qu’elles ne deviennent de graves vulnérabilités.
Que vous exécutiez une application à fort trafic sur un plan VPS Hosting ou que vous gériez une flotte de machines bare-metal, comprendre l’exposition réseau de votre serveur Linux est non négociable. Ce guide fournit une procédure complète et techniquement précise sur la façon d’utiliser à la fois netstat et ss — les deux outils en ligne de commande les plus largement utilisés pour l’inspection des ports sur Linux — ainsi que des outils supplémentaires et des bonnes pratiques du monde réel.
Table des matières
- Comprendre les ports et leurs types
- Vérifier les ports avec netstat
- Vérifier les ports avec ss
- Comparaison netstat vs. ss
- Autres outils pour vérifier les ports ouverts
- Bonnes pratiques de sécurité pour la gestion des ports ouverts
- Conclusion
1. Comprendre les ports et leurs types {#understanding-ports}
Avant de plonger dans les outils eux-mêmes, il est important d’établir une compréhension claire de ce que sont les ports, comment ils sont catégorisés et pourquoi leur surveillance est importante.
Qu’est-ce qu’un port réseau ?
Un port réseau est un point de terminaison de communication logique associé à un processus ou un service spécifique sur un hôte. Les ports permettent à un seul serveur avec une adresse IP d’exécuter plusieurs services en réseau simultanément — par exemple, un serveur web sur le port 80, un démon SSH sur le port 22 et une base de données sur le port 3306.
Catégories de ports
| Plage | Catégorie | Description |
|---|---|---|
| 0–1023 | Ports bien connus | Réservés aux services système standard (HTTP, SSH, FTP, etc.) |
| 1024–49151 | Ports enregistrés | Utilisés par les applications et les intergiciels (MySQL, PostgreSQL, etc.) |
| 49152–65535 | Ports dynamiques/éphémères | Attribués temporairement pour les connexions client sortantes |
États des ports que vous rencontrerez
- LISTEN — Le port est ouvert et un service attend activement les connexions entrantes.
- ESTABLISHED — Une connexion active existe entre deux points de terminaison.
- TIME_WAIT — La connexion se ferme ; le système attend pour s’assurer que l’extrémité distante a reçu l’accusé de réception final.
- CLOSE_WAIT — L’extrémité distante a fermé la connexion ; l’application locale n’a pas encore fermé son côté.
Protocoles de transport
- TCP (Transmission Control Protocol) : Orienté connexion, fiable, avec vérification des erreurs et livraison garantie. Utilisé par HTTP, HTTPS, SSH, FTP et la plupart des protocoles de couche application.
- UDP (User Datagram Protocol) : Sans connexion, plus rapide, mais sans garanties de livraison. Utilisé par DNS, NTP, DHCP et les services de streaming.
2. Vérifier les ports avec netstat {#netstat}
Qu’est-ce que netstat ?
netstat (statistiques réseau) est un utilitaire en ligne de commande classique qui affiche les connexions réseau actives, les tables de routage, les statistiques d’interface et les ports à l’écoute. Bien qu’il ait été officiellement déprécié en faveur de ss sur les distributions Linux modernes, netstat reste largement déployé — en particulier sur les systèmes hérités et dans les environnements où les administrateurs connaissent bien sa syntaxe.
Installation de netstat
netstat fait partie du package net-tools, qui n’est plus installé par défaut sur de nombreuses distributions modernes. Installez-le comme suit :
Debian / Ubuntu :
sudo apt update && sudo apt install net-tools -yCentOS / RHEL / AlmaLinux / Rocky Linux :
sudo yum install net-tools -y
# or on newer versions:
sudo dnf install net-tools -yArch Linux :
sudo pacman -S net-toolsSyntaxe de base de netstat
sudo netstat [options]Vérifier tous les ports TCP et UDP à l’écoute
sudo netstat -tulnDécomposition des drapeaux :
| Drapeau | Signification |
|---|---|
-t | Afficher les connexions et ports TCP |
-u | Afficher les connexions et ports UDP |
-l | Afficher uniquement les sockets à l’écoute (ports en attente de connexions) |
-n | Afficher les adresses IP et les numéros de port numériques (ignorer la résolution DNS pour la vitesse) |
Exemple de sortie :
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN
tcp6 0 0 :::443 :::* LISTEN
udp 0 0 0.0.0.0:68 0.0.0.0:*Lecture de la sortie :
- Proto — Le protocole utilisé (tcp, udp, tcp6, udp6).
- Local Address — L’adresse IP et le numéro de port sur lesquels le service écoute.
0.0.0.0signifie que le service écoute sur toutes les interfaces disponibles ;127.0.0.1signifie qu’il n’est accessible que localement. - Foreign Address — L’adresse du client distant (affichée comme
0.0.0.0:*pour les ports à l’écoute sans connexion active). - State — L’état de la connexion (
LISTEN,ESTABLISHED,TIME_WAIT, etc.).
Inclusion des informations de processus
Pour voir quel processus possède chaque port à l’écoute, ajoutez le drapeau -p :
sudo netstat -tulnpExemple de sortie avec informations de processus :
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1023/sshd
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 2847/nginx
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 3102/mysqld> Remarque : Vous devez exécuter cette commande avec sudo pour voir les noms de processus pour tous les utilisateurs, pas seulement les vôtres.
Filtrer la sortie pour des ports ou services spécifiques
Utilisez grep pour affiner les résultats à un port ou service spécifique :
# Check if anything is listening on port 80
sudo netstat -tuln | grep ":80"
# Check for SSH (port 22)
sudo netstat -tuln | grep ":22"
# Check for MySQL (port 3306)
sudo netstat -tuln | grep ":3306"
# Check for HTTPS (port 443)
sudo netstat -tuln | grep ":443"Affichage de toutes les connexions actives (pas seulement à l’écoute)
Pour voir toutes les connexions actives, y compris les connexions établies, supprimez le drapeau -l :
sudo netstat -tunpAffichage de la table de routage
sudo netstat -rAffichage des statistiques d’interface réseau
sudo netstat -i3. Vérifier les ports avec ss {#ss}
Qu’est-ce que ss ?
ss (statistiques de socket) est le remplacement moderne de netstat, développé dans le cadre du package iproute2. Il communique directement avec le noyau Linux via les sockets Netlink, ce qui le rend considérablement plus rapide et plus efficace que netstat — en particulier sur les systèmes avec des milliers de connexions simultanées.
ss est installé par défaut sur pratiquement toutes les distributions Linux modernes, y compris Ubuntu 18.04+, CentOS 7+, Debian 9+ et leurs dérivés.
Syntaxe de base de ss
ss [options] [filter]Vérifier tous les ports TCP et UDP à l’écoute
ss -tulnLes drapeaux ont une signification identique à netstat :
| Drapeau | Signification |
|---|---|
-t | Afficher les sockets TCP |
-u | Afficher les sockets UDP |
-l | Afficher uniquement les sockets à l’écoute |
-n | Afficher les adresses numériques (pas de résolution DNS) |
Exemple de sortie :
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
tcp LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
tcp LISTEN 0 511 0.0.0.0:80 0.0.0.0:*
tcp LISTEN 0 128 127.0.0.1:3306 0.0.0.0:*
tcp LISTEN 0 511 [::]:443 [::]:*
udp UNCONN 0 0 0.0.0.0:68 0.0.0.0:*Inclusion des informations de processus
sudo ss -tulnpExemple de sortie :
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
tcp LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=1023,fd=3))
tcp LISTEN 0 511 0.0.0.0:80 0.0.0.0:* users:(("nginx",pid=2847,fd=6))
tcp LISTEN 0 128 127.0.0.1:3306 0.0.0.0:* users:(("mysqld",pid=3102,fd=21))Filtrage par protocole
Afficher uniquement les ports TCP à l’écoute :
ss -tlAfficher uniquement les ports UDP à l’écoute :
ss -ulAfficher toutes les connexions TCP (y compris établies) :
ss -tFiltrage avancé avec ss
L’une des fonctionnalités les plus puissantes de ss est son filtrage basé sur les expressions intégrées, qui vous permet de filtrer par port, adresse, état, etc. — sans dépendre de grep.
Filtrer par numéro de port spécifique :
ss -tuln sport = :80
ss -tuln sport = :443
ss -tuln sport = :22Filtrer par port de destination :
ss -tuln dport = :3306Afficher tous les sockets en état ESTABLISHED :
ss -t state establishedAfficher tous les sockets en état LISTEN :
ss -t state listeningFiltrer par adresse IP source :
ss -tuln src 192.168.1.100Afficher les connexions à un hôte distant spécifique :
ss -t dst 203.0.113.50Combiner plusieurs filtres :
ss -t state established '( dport = :443 or sport = :443 )'Affichage de l’utilisation de la mémoire du socket
ss peut également afficher l’utilisation détaillée de la mémoire par socket, ce qui est utile pour diagnostiquer les problèmes de performance :
ss -tmAffichage des informations du minuteur
ss -toCela affiche les minuteurs de retransmission et les minuteurs de maintien de connexion pour les connexions TCP, ce qui est inestimable pour diagnostiquer les problèmes de stabilité de connexion.
4. Comparaison netstat vs. ss {#comparison}
Les deux outils accomplissent le même objectif fondamental, mais il existe des différences significatives qui doivent guider votre choix :
| Fonctionnalité | netstat | ss |
|---|---|---|
| Package | net-tools (souvent non pré-installé) | iproute2 (pré-installé sur les distros modernes) |
| Vitesse | Plus lent (lit depuis /proc/net/) | Plus rapide (utilise l’interface kernel Netlink) |
| Performance à grande échelle | Se dégrade avec des milliers de connexions | Gère efficacement un grand nombre de connexions |
| Filtrage avancé | Nécessite un tuyau vers grep | Filtrage basé sur les expressions intégrées |
| Détail de la sortie | Bon | Plus détaillé (mémoire, minuteurs, etc.) |
| Support IPv6 | Adéquat | Excellent |
| Statut de maintenance | Déprécié | Activement maintenu |
| Courbe d’apprentissage | Familier aux administrateurs de longue date | Syntaxe légèrement différente mais bien documentée |
Quand utiliser netstat
- Lors de l’administration de systèmes Linux plus anciens (CentOS 6, Debian 7, etc.) où
sspeut ne pas être disponible. - Lorsque vous travaillez avec des scripts ou de la documentation qui utilisent déjà la syntaxe
netstat. - Lorsque vous êtes plus à l’aise avec son format de sortie et que vous n’avez pas besoin de filtrage avancé.
Quand utiliser ss
- Sur toute distribution Linux moderne (Ubuntu 18.04+, CentOS 7+, Debian 9+ et plus récent).
- Lors de la gestion de serveurs avec un volume élevé de connexions simultanées — comme ceux exécutés sur des Serveurs dédiés sous charge lourde.
- Lorsque vous avez besoin d’un filtrage avancé, d’informations de minuteur ou de statistiques de mémoire de socket.
- Pour l’automatisation et les scripts où la performance compte.
5. Autres outils pour vérifier les ports ouverts {#other-tools}
Au-delà de netstat et ss, plusieurs autres utilitaires sont utiles pour l’inspection des ports et l’analyse réseau sur Linux.
lsof — Lister les fichiers ouverts (y compris les sockets)
lsof (List Open Files) traite les sockets réseau comme des fichiers (conformément à la philosophie Linux « tout est un fichier ») et peut afficher quel processus a un port spécifique ouvert.
Installer lsof :
# Debian/Ubuntu
sudo apt install lsof -y
# CentOS/RHEL
sudo yum install lsof -yVérifier quel processus utilise le port 80 :
sudo lsof -i :80Vérifier quel processus utilise le port 443 :
sudo lsof -i :443Lister toutes les connexions réseau :
sudo lsof -iLister tous les sockets TCP à l’écoute :
sudo lsof -i TCP -s TCP:LISTENExemple de sortie :
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
nginx 2847 root 6u IPv4 23456 0t0 TCP *:http (LISTEN)
nginx 2848 www-data 6u IPv4 23456 0t0 TCP *:http (LISTEN)nmap — Network Mapper
nmap est un outil puissant d’analyse réseau utilisé pour l’audit de sécurité, la découverte réseau et l’analyse des ports. Contrairement à ss et netstat (qui inspectent le système local), nmap peut analyser les hôtes locaux et distants.
Installer nmap :
# Debian/Ubuntu
sudo apt install nmap -y
# CentOS/RHEL
sudo yum install nmap -yAnalyser tous les ports TCP sur localhost :
sudo nmap -sT localhostAnalyser les ports ouverts avec détection du système d’exploitation :
sudo nmap -sT -O localhostAnalyser une plage de ports spécifique :
sudo nmap -p 1-1024 localhostAnalyser les ports UDP (nécessite root) :
sudo nmap -sU localhostAnalyser un serveur distant :
sudo nmap -sT 203.0.113.50> Important : Analysez uniquement les systèmes que vous possédez ou pour lesquels vous avez la permission explicite d’analyser. L’analyse non autorisée des ports peut violer les lois et les conditions de service.
fuser — Identifier les processus utilisant des fichiers ou des sockets
# Find which process is using port 80 (TCP)
sudo fuser 80/tcp
# Find which process is using port 53 (UDP)
sudo fuser 53/udp/proc/net/ — Interface directe du kernel
À des fins de script, vous pouvez lire les informations de port directement à partir du système de fichiers virtuel du kernel Linux :
# View raw TCP socket table
cat /proc/net/tcp
# View raw UDP socket table
cat /proc/net/udpNotez que les adresses et les ports dans /proc/net/tcp sont affichés en hexadécimal et nécessitent une conversion pour être lisibles par l’homme. Des outils comme ss et netstat analysent automatiquement ces données.
6. Bonnes pratiques de sécurité pour la gestion des ports ouverts {#security}
Savoir comment vérifier les ports ouverts n’est que la moitié de la bataille. Agir sur ces informations est ce qui maintient votre serveur sécurisé. Voici les bonnes pratiques exploitables que tout administrateur Linux devrait suivre :
Principe de la moindre exposition
Exposez uniquement les ports absolument nécessaires au fonctionnement de votre application. Chaque port ouvert est un vecteur d’attaque potentiel. Auditez régulièrement vos ports à l’écoute et fermez ou bloquez par pare-feu tout ce qui n’a pas besoin d’être accessible publiquement.
Lier les services à des interfaces spécifiques
Évitez de lier les services à 0.0.0.0 (toutes les interfaces) sauf si nécessaire. Par exemple, un serveur de base de données MySQL ne devrait écouter que sur 127.0.0.1 s’il n’est accessible que localement :
# In /etc/mysql/mysql.conf.d/mysqld.cnf
bind-address = 127.0.0.1Utiliser un pare-feu
Utilisez ufw (Ubuntu) ou firewalld / iptables (CentOS/RHEL) pour restreindre l’accès aux ports ouverts par adresse IP, sous-réseau ou interface réseau :
# Allow SSH only from a specific IP (ufw)
sudo ufw allow from 203.0.113.10 to any port 22
# Deny all other access to port 22
sudo ufw deny 22Auditer régulièrement les ports à l’écoute
Planifiez des audits réguliers des ports à l’aide de tâches cron ou d’outils de surveillance. Un nouveau port à l’écoute soudain peut indiquer un service compromis, une erreur de configuration ou — dans le pire des cas — un malware :
# Quick audit command — save output and compare over time
sudo ss -tulnp > /var/log/port_audit_$(date +%F).txtSécuriser les services avec SSL/TLS
Tout service exposé à Internet — serveurs web, serveurs de messagerie, panneaux de contrôle — doit utiliser des connexions chiffrées. Associez vos ports ouverts à des Certificats SSL valides pour protéger les données en transit et prévenir les attaques de l’homme du milieu.
Surveiller les changements inattendus
Utilisez des outils de détection d’intrusion comme AIDE, Tripwire ou auditd pour vous alerter lorsque de nouveaux processus commencent à écouter sur les ports. Intégrez avec la journalisation centralisée (par exemple, ELK Stack, Graylog) pour une visibilité complète.
Désactiver les services inutilisés
Si un service n’est pas nécessaire, arrêtez-le et désactivez-le du démarrage au boot :
