La surveillance des ports réseau est une compétence cruciale pour tout administrateur système Linux. Que vous soyez débutant ou expert, savoir lister les ports actifs et identifier les ports ouverts sur votre système est indispensable pour la sécurité et le diagnostic réseau.
Dans ce tutoriel complet, vous découvrirez comment utiliser lsof netstat et d'autres outils puissants pour obtenir des informations connexions réseau détaillées. Ces commandes vous permettront de détecter les services suspects, résoudre les conflits de ports et optimiser vos configurations réseau.
Pourquoi surveiller les ports en écoute ? Les risques que vous devez absolument connaître
Avant de plonger dans les commandes, comprenons pourquoi cette compétence est vitale :
- Sécurité maximale : Détecter les portes dérobées et services non autorisés
- Performance optimale : Identifier les applications qui monopolisent les ressources réseau
- Diagnostic rapide : Résoudre les problèmes de connectivité en quelques secondes
- Conformité : Respecter les politiques de sécurité de votre organisation
Les 3 outils incontournables pour lister les ports sous Linux
netstat : L'outil classique qui fait ses preuves
netstat (network statistics) est l'outil historique pour afficher les informations connexions réseau. Bien que considéré comme obsolète sur certaines distributions, il reste largement utilisé.
Installation de netstat
# Debian/Ubuntu
sudo apt install net-tools
# CentOS/RHEL/Fedora
sudo yum install net-tools
# Arch Linux
sudo pacman -S net-tools
Commandes netstat essentielles pour identifier les ports
Lister tous les ports en écoute (TCP et UDP) :
sudo netstat -tuln

Explication des options :
- -t : Affiche les connexions TCP
- -u : Affiche les connexions UDP
- -l : Affiche uniquement les ports en écoute (listening)
- -n : Affiche les adresses numériques (plus rapide)
Afficher les processus associés aux ports :
sudo netstat -tulnp
L'option -p ajoute le PID et le nom du programme, crucial pour identifier les ports utilisés par chaque application.
Exemple de sortie :

Filtrer les résultats comme un pro
Afficher uniquement les connexions TCP établies :
netstat -tn
Compter le nombre de connexions par état :
netstat -ant | awk '{print $6}' | sort | uniq -c | sort -rn

ss : La commande moderne qui écrase tout
ss (socket statistics) est le remplaçant moderne de netstat, plus rapide et plus puissant pour lister les ports.
Pourquoi ss domine netstat ?
- ⚡ Vitesse fulgurante : Jusqu'à 10x plus rapide
- 🔍 Informations détaillées : Plus de données sur les connexions
- 🆕 Maintenu activement : Intégré au paquet iproute2
Commandes ss indispensables
Lister tous les ports en écoute :
sudo ss -tuln

Afficher les processus (équivalent netstat -tulnp) :
sudo ss -tulnp
Exemple de sortie détaillée :

Techniques avancées avec ss
Afficher uniquement les connexions TCP établies :
ss -tn state established
Filtrer par port spécifique :
ss -tuln sport = :80
Afficher les statistiques résumées :
ss -s

Surveiller les connexions en temps réel :
watch -n 1 'ss -tuln'

lsof : L'arme secrète pour identifier les ports avec précision
lsof (list open files) est extraordinairement polyvalent. Sous Linux, "tout est fichier", y compris les sockets réseau. C'est l'outil parfait pour corréler lsof netstat et obtenir une vue complète.
Installation de lsof
# Debian/Ubuntu
sudo apt install lsof
# CentOS/RHEL/Fedora
sudo yum install lsof
# Arch Linux
sudo pacman -S lsof
Commandes lsof dévastatrices
Lister tous les ports en écoute :
sudo lsof -i -P -n | grep LISTEN
Explication des options :
- -i : Affiche les fichiers Internet (connexions réseau)
- -P : Affiche les numéros de port (pas les noms de service)
- -n : N'effectue pas de résolution DNS (plus rapide)

Identifier quel processus utilise un port spécifique :
sudo lsof -i :80
Cette commande révèle instantanément quelle application monopolise le port 80.
Exemple de sortie :

Techniques ninja avec lsof
Lister les connexions d'un utilisateur spécifique :
sudo lsof -u username -i
Afficher tous les ports TCP en écoute :
sudo lsof -iTCP -sTCP:LISTEN -P -n
Identifier les processus avec plusieurs connexions :
sudo lsof -i -P | awk '{print $1}' | sort | uniq -c | sort -rn

Tableau comparatif : netstat vs ss vs lsof

Cas pratiques : résoudre les problèmes réels comme un expert
Scénario 1 : Détecter qui utilise le port 8080
Problème : Votre application ne peut pas démarrer car le port 8080 est occupé.
Solution rapide avec lsof :
sudo lsof -i :8080
Solution avec ss :
sudo ss -tulnp | grep :8080
Solution avec netstat :
sudo netstat -tulnp | grep :8080
Scénario 2 : Lister tous les ports ouverts pour un audit de sécurité
Approche complète :
# Créer un rapport détaillé
echo "=== PORTS EN ÉCOUTE ===" > audit_ports.txt
sudo ss -tulnp >> audit_ports.txt
echo -e "\n=== PROCESSUS RÉSEAU ===" >> audit_ports.txt
sudo lsof -i -P -n >> audit_ports.txt
Scénario 3 : Surveiller les connexions suspectes
Détecter les connexions externes inhabituelles :
sudo ss -tnp | grep -v "127.0.0.1"
Identifier les connexions établies vers l'extérieur :
sudo lsof -i -P -n | grep ESTABLISHED | grep -v "127.0.0.1"

Commandes combinées : Multipliez votre éfficacité
Créer un script de surveillance automatique
#!/bin/bash
# script: monitor_ports.sh
echo "========================================="
echo "Rapport de surveillance réseau"
echo "Date: $(date)"
echo "========================================="
echo -e "\n[1] Top 10 des ports en écoute:"
sudo ss -tulnp | awk '{print $5}' | cut -d':' -f2 | sort | uniq -c | sort -rn | head -10
echo -e "\n[2] Processus avec le plus de connexions:"
sudo lsof -i -P | awk '{print $1}' | sort | uniq -c | sort -rn | head -10
echo -e "\n[3] Connexions établies vers l'extérieur:"
sudo ss -tnp state established | wc -l
echo -e "\n[4] Ports en écoute non-standard (> 1024):"
sudo ss -tulnp | awk '$5 ~ /:/ {split($5,a,":"); if(a[2]>1024) print $0}'
Rendre le script exécutable :
chmod +x monitor_ports.sh
sudo ./monitor_ports.sh
Différences entre IPv4 et IPv6 : Ne vous faites plus piéger
Lister uniquement les ports IPv4 :
sudo ss -tuln4
Lister uniquement les ports IPv6 :
sudo ss -tuln6
Avec lsof pour IPv4 :
sudo lsof -i 4 -P -n | grep LISTEN
Avec lsof pour IPv6 :
sudo lsof -i 6 -P -n | grep LISTEN
Sécurité : Protégez vos ports comme une forteresse
Identifier les ports dangereux exposés
Vérifier si des services sensibles sont exposés publiquement :
sudo ss -tulnp | grep -E ":(3306|5432|27017|6379)"
Ces ports correspondent à :
- 3306 : MySQL
- 5432 : PostgreSQL
- 27017 : MongoDB
- 6379 : Redis
⚠️ Si ces ports écoutent sur 0.0.0.0, ils sont accessibles depuis n'importe où !
Recommandations de sécurité
- Limitez l'écoute aux interfaces locales quand possible (127.0.0.1)
- Utilisez un firewall (iptables, ufw, firewalld)
- Surveillez régulièrement les ports ouverts
- Fermez les services inutilisés immédiatement
Astuces de performance : Accélérez vos diagnostics
Créer des alias pratiques
Ajoutez ces lignes à votre ~/.bashrc ou ~/.zshrc :
# Alias pour lister les ports rapidement
alias ports='sudo ss -tulnp'
alias listening='sudo lsof -i -P -n | grep LISTEN'
alias established='sudo ss -tnp state established'
alias portcheck='sudo lsof -i :'
# Utilisation: portcheck 80
Recharger la configuration :
source ~/.bashrc
Automatiser la surveillance avec cron
# Éditer le crontab
sudo crontab -e
# Ajouter cette ligne pour un rapport quotidien
0 2 * * * /usr/local/bin/monitor_ports.sh > /var/log/port_monitoring_$(date +\%Y\%m\%d).log 2>&1
Dépannage : Résoudre les erreurs courantes
Erreur "command not found"
Solution :
# Pour netstat
sudo apt install net-tools # Debian/Ubuntu
sudo yum install net-tools # CentOS/RHEL
# Pour lsof
sudo apt install lsof
Erreur "Permission denied"
Cause : Droits insuffisants pour accéder aux informations réseau.
Solution : Utiliser sudo avant les commandes
Sortie vide ou incomplète
Vérifiez que vous utilisez les bonnes options :
# Incorrect (ne montre pas les processus)
ss -tuln
# Correct
sudo ss -tulnp
FAQ : Toutes les réponses à vos questions
Q: Quelle est la différence entre netstat et ss ?
ss est le remplaçant moderne de netstat. Il est plus rapide, fournit plus d'informations et est activement maintenu. netstat est considéré comme obsolète mais reste disponible pour la compatibilité. Pour lister les ports efficacement, privilégiez ss.
Q: Comment identifier quel processus utilise un port spécifique ?
Utilisez l'une de ces commandes pour identifier les ports et leurs processus :
sudo lsof -i :NUMERO_PORT
sudo ss -tulnp | grep :NUMERO_PORT
sudo netstat -tulnp | grep :NUMERO_PORT
Remplacez NUMERO_PORT par le port recherché (exemple : 80, 443, 3306).
Q: Pourquoi dois-je utiliser sudo avec ces commandes ?
Les informations connexions réseau complètes, notamment les PIDs et noms de processus, nécessitent des privilèges élevés. Sans sudo, vous obtiendrez une sortie partielle sans les détails des processus.
Q: Comment voir uniquement les ports TCP en écoute ?
sudo ss -tlnp # Avec ss
sudo netstat -tlnp # Avec netstat
sudo lsof -iTCP -sTCP:LISTEN -P -n # Avec lsof
Q: Comment vérifier si un port est ouvert sur une machine distante ?
Utilisez telnet ou nc (netcat) :
telnet IP_DISTANTE PORT
# ou
nc -zv IP_DISTANTE PORT
Pour scanner plusieurs ports, utilisez nmap :
nmap -p 80,443,22 IP_DISTANTE
Q: Quelle est la meilleure commande pour un débutant ?
Pour débuter, utilisez ss avec ces options simples :
sudo ss -tulnp
Cette commande affiche tous les ports en écoute avec les processus associés, idéal pour comprendre l'activité réseau de votre système.
Q: Comment surveiller les connexions en temps réel ?
Utilisez watch combiné avec ss ou netstat :
watch -n 1 'sudo ss -tulnp'
Cela rafraîchit l'affichage toutes les secondes. Appuyez sur Ctrl+C pour arrêter.
Q: Comment exporter les résultats dans un fichier ?
sudo ss -tulnp > ports_ouverts.txt
sudo lsof -i -P -n > connexions_reseau.txt
Pour un rapport horodaté :
sudo ss -tulnp > rapport_ports_$(date +%Y%m%d_%H%M%S).txt
Q: Pourquoi certains ports affichent 0.0.0.0 et d'autres 127.0.0.1 ?
- 0.0.0.0 : Le service écoute sur toutes les interfaces réseau (accessible depuis l'extérieur)
- 127.0.0.1 : Le service écoute uniquement sur l'interface locale (accessible uniquement depuis la machine elle-même)
Pour la sécurité, préférez 127.0.0.1 pour les services qui n'ont pas besoin d'être accessibles depuis le réseau.
Q: Comment filtrer les résultats pour un utilisateur spécifique ?
Avec lsof, vous pouvez facilement filtrer par utilisateur :
sudo lsof -u nom_utilisateur -i
Cela affiche toutes les connexions réseau de l'utilisateur spécifié.
Q: Combien de connexions simultanées mon serveur peut-il gérer ?
Vérifiez les limites système :
# Limite par processus
ulimit -n
# Limite globale
cat /proc/sys/fs/file-max
# Nombre de connexions actives
sudo ss -s
Q: Comment identifier les connexions suspectes ?
Recherchez les connexions vers des ports inhabituels ou des IPs inconnues :
# Connexions établies vers l'extérieur
sudo ss -tnp state established | grep -v "127.0.0.1"
# Trier par nombre de connexions par IP
sudo ss -tn | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -rn
Conclusion : Maîtrisez vos ports pour un système sécurisé
Vous disposez maintenant d'un arsenal complet pour lister les ports, identifier les ports actifs et obtenir des informations connexions réseau détaillées sous Linux.
Récapitulatif des commandes essentielles :
- ss -tulnp : Votre commande quotidienne pour une vue d'ensemble
- lsof -i :PORT : Pour cibler un port spécifique instantanément
- netstat -tulnp : Pour la compatibilité avec les anciens systèmes
La surveillance régulière de vos ports est une pratique de sécurité indispensable. Intégrez ces commandes dans vos routines d'administration et créez des scripts de monitoring automatisés.
N'oubliez pas : un port ouvert inutilement est une porte d'entrée potentielle pour les attaquants. Restez vigilant et auditez régulièrement votre système.