Comment identifier les ports à l’écoute sur un système Linux avec lsof, netstat et ss

Identifier les ports ouverts sur un système Linux est une tâche essentielle pour toute personne travaillant dans le domaine de l’informatique, plus précisément dans l’administration des systèmes et des réseaux. Cet article fournira un aperçu détaillé des commandes lsof, netstat et ss, utilisées pour repérer les ports en écoute sur une machine Linux. Nous allons explorer leur utilisation et les scénarios dans lesquels chacune peut être la plus efficace.

I. Présentation des outils

Comment identifier les ports ouverts sur une machine Linux ? Cette question est primordiale pour les administrateurs systèmes. Différents outils sont disponibles, notamment lsof, netstat et ss. Chacune de ces commandes offre des résultats variés et peut être utilisée selon le contexte.

Deux scénarios justifient la nécessité d’effectuer cette vérification : d’une part, après l’installation d’un nouveau service, pour confirmer son état d’écoute sur un port spécifique, et d’autre part, pour identifier les ports ouverts afin de connaître les services actifs, et donc d’évaluer les risques de sécurité potentiels. En effet, chaque port exposé représente une potentielle porte d’entrée pour les cybermenaces.
Dans cet article, nous allons examiner en détail comment utiliser lsof, netstat, et ss pour lister les ports ouverts sur un système Linux, avec des exemples concrets et des explications sur la manière de les interpréter.

II. Utiliser lsof pour lister les ports en écoute

II. Utiliser lsof pour lister les ports en écoute

La commande lsof.

lsof, qui signifie « list open files », pourrait sembler déconnectée de notre objectif. Cependant, elle est d’une utilité précieuse, car elle permet de visualiser les fichiers ouverts par les processus en cours. Étant donné que les sockets réseau sont traités comme des fichiers sous Linux, lsof peut également être utilisée pour identifier les ports ouverts et les programmes qui les utilisent.

Pour utiliser cette commande, ouvrez un terminal et exécutez la commande appropriée :


sudo lsof -nP -iTCP -sTCP:LISTEN

Cette commande va renvoyer une liste de tous les ports TCP en écoute sur votre système. Analysons un peu la syntaxe :

  • -n et -P : ces options désactivent la résolution des noms d’hôte et la traduction des ports, affichant ainsi les ports sous forme numérique.
  • -iTCP et -sTCP:LISTEN : ces options filtrent pour n’afficher que les connexions en écoute, permettant d’ignorer les connexions actives.

Le retour de cette commande est très instructif. On y voit le nom du service associé, l’utilisateur qui l’a lancé, et bien sûr, l’adresse IP et le numéro de port. Par exemple :


COMMAND   PID         USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
httpd 654 root 6u IPv4 23456 0t0 TCP *:80 (LISTEN)

Cela indique que le service httpd écoute sur le port 80. Une petite remarque à propos de l’astérisque dans l’adresse IP : il signifie que ce service est accessible depuis toutes les interfaces réseau de la machine.
Du coup, pour pouvoir tester si un port spécifique est en écoute, sans se laisser distraire par le reste, utilisez :


sudo lsof -nP -i:<numéro de port>

Pour terminer, vous pouvez également vérifier les connexions en UDP avec :


sudo lsof -iUDP

III. Utiliser netstat pour lister les ports en écoute

Netstat, abréviation de « network statistics », est un outil entièrement intégré et populaire pour révéler des détails sur les connexions réseau. Grâce à ses nombreuses options, il peut être employé pour identifier les ports TCP et UDP sur lesquels une machine Linux est en écoute, tout en indiquant les services associés.

Si votre distribution ne possède pas netstat, vous aurez besoin d’installer le paquet net-tools. Il est parfois considéré comme obsolète, mais reste très utilisé dans de nombreuses distributions.


sudo apt update
sudo apt install net-tools -y

Une fois cela fait, vous pouvez exécuter :


sudo netstat -tulnp

Décortiquons cette commande :

  • -t : affiche les connexions TCP.
  • -u : affiche les connexions UDP.
  • -l : liste les ports en écoute.
  • -n : force l’affichage des adresses et ports en format numérique.
  • -p : affiche le PID et le nom du processus.

Alors le résultat fonctionne de la manière suivante :

Dans le retour, vous verrez des colonnes désignant respectivement le protocole (TCP ou UDP), l’adresse locale (numéro de port), ainsi que le PID et le nom du programme.

À l’aide de la commande grep, vous pourrez filtrer les résultats, par exemple en ciblant un numéro de port :


sudo netstat -tulnp | grep :8080

Si une ligne correspondante est retrouvée, cela indiquera que le service écoutant sur le port 8080 est actif.

IV. Lister les ports en écoute avec ss

IV. Lister les ports en écoute avec ss

La commande ss, qui signifie socket statistics, est un outil plus moderne et optimisé par rapport à netstat. Sa rapidité et son efficacité en font un choix idéal pour observer les connexions réseau. Comme pour netstat, les options de ss sont similaires, ce qui facilite la transition pour ceux qui sont familiers avec cet ancien outil.

Pour afficher tous les ports en écoute, vous pouvez exécuter :


sudo ss -tulnp

Le résultat s’apparente à celui de la commande précédente, avec des colonnes similaires, telles que l’adresse locale et le numéro de port des processus actifs. Examinez attentivement le champ « Local Address : Port », car il contient les informations cruciales.

Il est possible, tout comme avec netstat, d’effectuer des filtrages;


sudo ss -tulnp | grep :8080

Une fois encore, la correspondance des résultats vous renseignera sur l’état du port ciblé.

V. Surveiller les ports en écoute avec un script Bash

Au-delà de l’identification ponctuelle des ports, il peut être intéressant de surveiller l’état de ces ports au fil du temps. À cet effet, un petit script Bash peut faire merveille. Le script ci-dessous illustre comment récupérer les ports en écoute et les comparer avec un état précédent, aidant ainsi à détecter des changements.


#!/bin/bash
# Fichier référence des ports
REFERENCE_FILE="/tmp/ports_reference.txt"
# Fichier actuel des ports
CURRENT_FILE="/tmp/ports_current.txt"

# Fonction pour lister les ports
get_listening_ports() {
sudo ss -tulnp | awk 'NR>1 {print $5}' | sort
}

# Comparer les ports
compare_ports() {
echo "--- Changements détectés ---"
echo "Ports ajoutés :"
comm -13 "$REFERENCE_FILE" "$CURRENT_FILE"
echo "Ports supprimés :"
comm -23 "$REFERENCE_FILE" "$CURRENT_FILE"
echo "----------------------------"
}

# Action principale
get_listening_ports > "$CURRENT_FILE"
if [ ! -f "$REFERENCE_FILE" ]; then
echo "Création de la référence initiale." mv "$CURRENT_FILE" "$REFERENCE_FILE"
exit 0
}
compare_ports
mv "$CURRENT_FILE" "$REFERENCE_FILE"
exit 0

Ce script permet d’effectuer une comparaison entre l’état actuel des ports et un état de référence, facilitant ainsi la détection d’anomalies, qu’il s’agisse d’ajouts ou de suppressions inattendues.

VI. Autres considérations

VI. Autres considérations

Le suivi des ports en écoute ne se limite pas aux simples commandes ou à un script. Il est important de tenir compte de la sécurité. Un audit des ports ouverts doit être intégré dans le cadre d’une stratégie de sécurité réseau. En effet, les ports exposés peuvent facilement devenir des cibles pour des attaques.

La manière de gérer les services et les ports doit être soigneusement planifiée. Remplacer des services obsolètes et s’assurer que seuls les ports nécessaires sont ouverts réduit les risques. Les solutions de pare-feu doivent également être mises en place pour contrôler le trafic entrant/sortant par rapport à ces ports.

Finalement, la documentation et les procédures de gestion des ports doivent être respectées, abordant les mises à jour et la gestion des accès. Le respect des bonnes pratiques dans ce domaine peut considérablement améliorer la sécurité de votre infrastructure.

Marius
Suivez Moi

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *