15%

Économisez 15% sur tous les services d'hébergement

Testez vos compétences et obtenez Réduction sur tout plan d'hébergement

Utilisez le code :

Skills
Commencer
30.10.2024

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

  1. Comprendre les ports et leurs types
  2. Vérifier les ports avec netstat
  3. Vérifier les ports avec ss
  4. Comparaison netstat vs. ss
  5. Autres outils pour vérifier les ports ouverts
  6. Bonnes pratiques de sécurité pour la gestion des ports ouverts
  7. 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

PlageCatégorieDescription
0–1023Ports bien connusRéservés aux services système standard (HTTP, SSH, FTP, etc.)
1024–49151Ports enregistrésUtilisés par les applications et les intergiciels (MySQL, PostgreSQL, etc.)
49152–65535Ports dynamiques/éphémèresAttribué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 -y

CentOS / RHEL / AlmaLinux / Rocky Linux :

sudo yum install net-tools -y
# or on newer versions:
sudo dnf install net-tools -y

Arch Linux :

sudo pacman -S net-tools

Syntaxe de base de netstat

sudo netstat [options]

Vérifier tous les ports TCP et UDP à l’écoute

sudo netstat -tuln

Décomposition des drapeaux :

DrapeauSignification
-tAfficher les connexions et ports TCP
-uAfficher les connexions et ports UDP
-lAfficher uniquement les sockets à l’écoute (ports en attente de connexions)
-nAfficher 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.0 signifie que le service écoute sur toutes les interfaces disponibles ; 127.0.0.1 signifie 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 -tulnp

Exemple 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 -tunp

Affichage de la table de routage

sudo netstat -r

Affichage des statistiques d’interface réseau

sudo netstat -i

3. 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 -tuln

Les drapeaux ont une signification identique à netstat :

DrapeauSignification
-tAfficher les sockets TCP
-uAfficher les sockets UDP
-lAfficher uniquement les sockets à l’écoute
-nAfficher 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 -tulnp

Exemple 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 -tl

Afficher uniquement les ports UDP à l’écoute :

ss -ul

Afficher toutes les connexions TCP (y compris établies) :

ss -t

Filtrage 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 = :22

Filtrer par port de destination :

ss -tuln dport = :3306

Afficher tous les sockets en état ESTABLISHED :

ss -t state established

Afficher tous les sockets en état LISTEN :

ss -t state listening

Filtrer par adresse IP source :

ss -tuln src 192.168.1.100

Afficher les connexions à un hôte distant spécifique :

ss -t dst 203.0.113.50

Combiner 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 -tm

Affichage des informations du minuteur

ss -to

Cela 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énetstatss
Packagenet-tools (souvent non pré-installé)iproute2 (pré-installé sur les distros modernes)
VitessePlus lent (lit depuis /proc/net/)Plus rapide (utilise l’interface kernel Netlink)
Performance à grande échelleSe dégrade avec des milliers de connexionsGère efficacement un grand nombre de connexions
Filtrage avancéNécessite un tuyau vers grepFiltrage basé sur les expressions intégrées
Détail de la sortieBonPlus détaillé (mémoire, minuteurs, etc.)
Support IPv6AdéquatExcellent
Statut de maintenanceDépréciéActivement maintenu
Courbe d’apprentissageFamilier aux administrateurs de longue dateSyntaxe 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ù ss peut 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 -y

Vérifier quel processus utilise le port 80 :

sudo lsof -i :80

Vérifier quel processus utilise le port 443 :

sudo lsof -i :443

Lister toutes les connexions réseau :

sudo lsof -i

Lister tous les sockets TCP à l’écoute :

sudo lsof -i TCP -s TCP:LISTEN

Exemple 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 -y

Analyser tous les ports TCP sur localhost :

sudo nmap -sT localhost

Analyser les ports ouverts avec détection du système d’exploitation :

sudo nmap -sT -O localhost

Analyser une plage de ports spécifique :

sudo nmap -p 1-1024 localhost

Analyser les ports UDP (nécessite root) :

sudo nmap -sU localhost

Analyser 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/udp

Notez 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.1

Utiliser 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 22

Auditer 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).txt

Sé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 :

15%

Économisez 15% sur tous les services d'hébergement

Testez vos compétences et obtenez Réduction sur tout plan d'hébergement

Utilisez le code :

Skills
Commencer