Expert Cybersécurité & IAv9.0
Centres de ressources conformité
Besoin d'un accompagnement expert ?
Devis personnalisé sous 24h — audit, conformité, incident
Checklists Sécurité — Audit & Durcissement
Formats disponibles
📄 PDF 📊 Excel 🌐 Web

11 checklists professionnelles couvrant 2 200+ points de contrôle. Téléchargement gratuit, aucune inscription.

8 Chapitre 8 sur 10
10 min de lecture

Ports et Sockets

Maîtriser les ports réseau (0-65535), les catégories, les ports importants, la définition d'un socket, le cycle de vie, et les commandes ss/lsof pour l'administration système.

Les ports : l'adressage des applications

Une adresse IP identifie un hôte sur le réseau. Mais un hôte fait tourner des dizaines d'applications simultanément : un serveur web, un serveur SSH, une base de données, un agent de monitoring... Comment la couche réseau sait-elle vers quelle application livrer chaque paquet ?

La réponse : les ports. Un port est un entier sur 16 bits (0 à 65535) qui identifie une application ou un service spécifique sur un hôte. Combiné avec l'adresse IP et le protocole (TCP ou UDP), il permet d'adresser précisément un processus applicatif.

Analogie

Imaginez un immeuble de bureaux :

  • L'adresse IP = l'adresse de l'immeuble (ex: 192.168.1.100)
  • Le port = le numéro de bureau (ex: :80, :443, :22)
  • Le socket = la ligne téléphonique directe du bureau

Vous envoyez votre courrier à "Immeuble 192.168.1.100, Bureau 443" → il arrive exactement au bon destinataire.


Les 3 catégories de ports

L'IANA (Internet Assigned Numbers Authority) divise les 65536 ports en trois catégories :

Catégorie Plage Nom officiel Usage
Ports bien connus 0 – 1023 Well-known ports Services système standards (nécessitent root)
Ports enregistrés 1024 – 49151 Registered ports Applications tierces enregistrées auprès de l'IANA
Ports éphémères 49152 – 65535 Dynamic/Private ports Ports temporaires côté client

Ports éphémères (ephemeral ports)

Quand votre navigateur ouvre une connexion vers google.com:443, votre OS lui attribue automatiquement un port source éphémère choisi aléatoirement dans la plage dynamique. Ce port identifie votre connexion particulière.

# Voir la plage de ports éphémères configurée sur Linux
cat /proc/sys/net/ipv4/ip_local_port_range
# → 32768	60999  (plage par défaut sur Linux)

# Modifier la plage (pour serveurs très chargés)
sudo sysctl -w net.ipv4.ip_local_port_range="1024 65535"

Tableau des ports importants

Ports systèmes essentiels (0-1023)

Port Protocole Service Description
20 TCP FTP-DATA Transfert de données FTP
21 TCP FTP Contrôle FTP
22 TCP SSH Shell sécurisé, SFTP, SCP
23 TCP Telnet Shell non chiffré (obsolète, à bannir)
25 TCP SMTP Envoi d'e-mails serveur à serveur
53 TCP/UDP DNS Résolution de noms
67 UDP DHCP Server Attribution d'adresses IP
68 UDP DHCP Client Client DHCP
80 TCP HTTP Web non chiffré
110 TCP POP3 Réception e-mails (obsolète)
111 TCP/UDP RPC Remote Procedure Call
123 UDP NTP Synchronisation horloge
143 TCP IMAP Réception e-mails
161 UDP SNMP Supervision réseau
162 UDP SNMP Trap Alertes SNMP
389 TCP/UDP LDAP Annuaire (Active Directory)
443 TCP HTTPS Web chiffré (TLS)
465 TCP SMTPS SMTP sur TLS
514 UDP Syslog Journalisation centralisée
587 TCP SMTP/STARTTLS Envoi e-mail avec STARTTLS
636 TCP LDAPS LDAP sur TLS
853 TCP/UDP DNS-over-TLS DNS chiffré (DoT)
993 TCP IMAPS IMAP sur TLS
995 TCP POP3S POP3 sur TLS

Ports enregistrés courants (1024-49151)

Port Protocole Service Description
1194 UDP/TCP OpenVPN VPN open-source
1433 TCP MSSQL Microsoft SQL Server
1521 TCP Oracle DB Oracle Database
2181 TCP ZooKeeper Coordination distribuée
2375 TCP Docker API Docker non chiffrée
2376 TCP Docker TLS API Docker chiffrée
3000 TCP Grafana/Node Monitoring / apps Node.js
3306 TCP MySQL/MariaDB Base de données relationnelle
5432 TCP PostgreSQL Base de données relationnelle
5601 TCP Kibana Interface Elasticsearch
6379 TCP Redis Cache/broker in-memory
7700 TCP Meilisearch Moteur de recherche
8080 TCP HTTP-alt Alternative HTTP, proxies
8443 TCP HTTPS-alt Alternative HTTPS
9092 TCP Kafka Broker de messages
9200 TCP Elasticsearch Moteur de recherche
27017 TCP MongoDB Base de données NoSQL

Définition d'un socket

Un socket est un point de communication identifié par un quintuplet unique :

Socket = (Protocole, IP_source, Port_source, IP_destination, Port_destination)

Exemple : votre connexion HTTPS à Google

Protocole     : TCP
IP source     : 192.168.1.100   (votre IP)
Port source   : 54321           (port éphémère)
IP destination: 142.250.74.46   (IP Google)
Port dest     : 443             (HTTPS)

→ Socket identifiant : TCP 192.168.1.100:54321 ↔ 142.250.74.46:443

Ce quintuplet est globalement unique : il n'existe qu'une seule connexion avec cette combinaison précise au monde à cet instant.

Types de sockets

Type Protocole Usage
Stream socket TCP Connexion fiable, flux d'octets
Datagram socket UDP Datagrammes sans connexion
Raw socket IP direct Accès bas niveau (ping, nmap)
Unix Domain Socket IPC local Communication entre processus locaux

Cycle de vie d'un socket

Côté serveur (TCP)

# Pseudo-code du cycle de vie serveur
socket()    # Création du socket
bind()      # Lier à l'adresse et au port (ex: 0.0.0.0:80)
listen()    # Marquer comme passif, définir la file d'attente
accept()    # Bloquer jusqu'à l'arrivée d'une connexion client
            # → retourne un NOUVEAU socket pour cette connexion
read()/write()  # Communication avec le client
close()     # Fermer la connexion

Côté client (TCP)

# Pseudo-code du cycle de vie client
socket()    # Création du socket
            # Le kernel attribue automatiquement un port éphémère
connect()   # Initie le three-way handshake
write()/read()  # Envoi de la requête, lecture de la réponse
close()     # Fermeture de la connexion

États LISTEN vs ESTABLISHED

# Voir les sockets en état LISTEN (serveur en attente)
ss -tlnp

# Exemple de sortie typique d'un serveur web :
# State    Recv-Q  Send-Q  Local Address:Port  Peer Address:Port  Process
# LISTEN   0       511     0.0.0.0:80          0.0.0.0:*          nginx
# LISTEN   0       511     0.0.0.0:443         0.0.0.0:*          nginx
# LISTEN   0       128     0.0.0.0:22          0.0.0.0:*          sshd
# LISTEN   0       128     127.0.0.1:3306      0.0.0.0:*          mysqld

# Voir les connexions ESTABLISHED
ss -tnp state established

# Exemple :
# ESTAB  0  0  192.168.1.100:22   192.168.1.200:54321  users:(("sshd"))
# ESTAB  0  0  192.168.1.100:443  203.0.113.5:48291    users:(("nginx"))

La commande ss — Socket Statistics

ss (socket statistics) est le remplaçant moderne de netstat. Plus rapide, plus précis, directement depuis le kernel.

Syntaxe et options principales

ss [options] [filtres]

Options :
  -t    TCP sockets
  -u    UDP sockets
  -l    Sockets en écoute (LISTEN)
  -n    Afficher numéros (pas résolution nom/service)
  -p    Afficher le processus propriétaire
  -s    Résumé statistique
  -e    Informations étendues
  -i    Informations TCP internes (cwnd, rtt, etc.)
  -4    IPv4 uniquement
  -6    IPv6 uniquement

Commandes ss les plus utiles

# Tous les ports en écoute (TCP + UDP)
ss -tulnp

# Sortie exemple :
# Netid  State   Local Address:Port  Process
# udp    UNCONN  0.0.0.0:68          dhclient
# udp    UNCONN  0.0.0.0:123         ntpd
# tcp    LISTEN  0.0.0.0:22          sshd
# tcp    LISTEN  0.0.0.0:80          nginx
# tcp    LISTEN  0.0.0.0:443         nginx
# tcp    LISTEN  127.0.0.1:3306      mysqld

# Toutes les connexions TCP établies avec processus
ss -tnp state established

# Compter le nombre de connexions par état
ss -tn | awk 'NR>1 {print $1}' | sort | uniq -c | sort -rn

# Voir les connexions vers un port spécifique
ss -tnp dst :443

# Voir les connexions depuis une IP source
ss -tnp src 192.168.1.200

# Statistiques globales
ss -s
# Total: 856
# TCP: 43 (estab 31, closed 2, orphaned 0, timewait 2)
# UDP: 8

# Informations TCP avancées (RTT, cwnd, etc.)
ss -tip state established

# Filtres avancés
ss -tnp 'sport > 1024 and dport = 443'
ss -tnp 'dst 192.168.1.0/24'

Champ par champ : décoder la sortie de ss

State  Recv-Q  Send-Q  Local Address:Port  Peer Address:Port  Process

State    : LISTEN / ESTAB / TIME-WAIT / CLOSE-WAIT / etc.
Recv-Q   : Octets reçus non encore lus par l'application
           (en LISTEN : nombre de connexions en attente d'accept())
Send-Q   : Octets envoyés mais non encore acquittés
           (en LISTEN : backlog maximum configuré)
Local    : IP:Port local
Peer     : IP:Port distant (0.0.0.0:* si LISTEN)
Process  : Processus propriétaire (nécessite root pour les autres processus)

La commande lsof — List Open Files

lsof (List Open Files) liste tous les fichiers ouverts par tous les processus — et sous Linux, les sockets réseau sont des fichiers.

# Voir tous les fichiers réseau ouverts
sudo lsof -i

# Voir les processus sur le port 80
sudo lsof -i :80

# Exemple de sortie :
# COMMAND  PID     USER  FD  TYPE  DEVICE SIZE/OFF NODE NAME
# nginx    1234    root  6u  IPv4  23456  0t0      TCP  *:http (LISTEN)
# nginx    1235    www   6u  IPv4  23456  0t0      TCP  *:http (LISTEN)
# nginx    1235    www   8u  IPv4  24567  0t0      TCP  192.168.1.100:80->203.0.113.5:48291 (ESTABLISHED)

# Voir les sockets d'un processus spécifique (par nom)
sudo lsof -i -p $(pgrep nginx)

# Voir les connexions TCP
sudo lsof -i TCP

# Voir les connexions UDP
sudo lsof -i UDP

# Voir les Unix Domain Sockets (communication locale)
sudo lsof -U

# Trouver quel processus utilise le port 3306
sudo lsof -i :3306
# ou
sudo ss -tnlp | grep :3306

Port Forwarding

Le port forwarding (redirection de port) permet de rediriger le trafic arrivant sur un port vers une autre adresse/port.

SSH Port Forwarding (tunneling)

# Local port forwarding :
# Redirige localhost:8080 → serveur_distant:80
ssh -L 8080:localhost:80 user@serveur-distant
# Accédez à http://localhost:8080 dans votre navigateur

# Remote port forwarding :
# Le serveur distant redirige son port 9090 → votre localhost:3000
ssh -R 9090:localhost:3000 user@serveur-distant

# Dynamic port forwarding (proxy SOCKS5) :
# Crée un proxy SOCKS5 sur localhost:1080
ssh -D 1080 user@serveur-distant

iptables Port Forwarding (DNAT)

# Rediriger le port 8080 local vers un autre serveur sur le port 80
sudo iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 192.168.1.50:80

# Rediriger le port 80 vers une application interne sur 8080
sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080

# Voir les règles NAT actives
sudo iptables -t nat -L -n -v

Sécurité et bonnes pratiques

Minimiser la surface d'attaque

# Principe de base : n'exposer que les ports nécessaires

# Lister tous les ports en écoute (audit)
ss -tulnp

# Vérifier les ports exposés depuis l'extérieur
nmap -sT localhost
sudo nmap -sU -sT 192.168.1.100

# Fermer un service inutile (exemple : telnet)
sudo systemctl stop telnet
sudo systemctl disable telnet
sudo systemctl mask telnet  # empêche toute activation future

Bind sur localhost uniquement

# Mauvais : service exposé sur toutes les interfaces
mysqld --bind-address=0.0.0.0    # ← dangereux

# Bien : service uniquement sur localhost
mysqld --bind-address=127.0.0.1  # ← sécurisé

Vérifiez toujours dans /etc/mysql/mysql.conf.d/mysqld.cnf :

[mysqld]
bind-address = 127.0.0.1

Ports non-standard

Changer un service d'un port well-known (ex: SSH de 22 vers 2222) n'est pas une vraie sécurité (security by obscurity), mais peut réduire le bruit dans les logs provenant des scanners automatiques.

# Dans /etc/ssh/sshd_config
Port 2222

# Adapter le pare-feu
sudo ufw allow 2222/tcp
sudo ufw deny 22/tcp

Récapitulatif

Concept Détail
Port 16 bits (0-65535), identifie un service
Well-known 0-1023, services systèmes, nécessitent root
Registered 1024-49151, applications enregistrées
Éphémères 49152-65535 (Linux: 32768-60999), côté client
Socket Quintuplet (proto, IP src, port src, IP dst, port dst)
LISTEN Serveur attend des connexions
ESTABLISHED Connexion active
ss -tulnp Commande de référence pour auditer les ports
lsof -i :PORT Trouver le processus sur un port

Passez au chapitre suivant : ICMP et outils de diagnostic — les outils essentiels pour diagnostiquer les pannes réseau.

Un projet cybersécurité ?

Expert dispo · Réponse 24h

Devis