Security
Difficulte: Intermediate
13 min de lecture

Nmap : Scanner et Auditer un Réseau Linux

Nmap (Network Mapper) est l'outil de référence pour la cartographie réseau et l'audit de sécurité. Ce tutoriel vous guide à travers l'installation, les types de scan, les scripts NSE et les bonnes pratiques pour utiliser Nmap légalement et efficacement.

Retour aux tutoriels
Qu'est-ce que Nmap ?
Nmap (Network Mapper) est un scanner réseau open source créé par Gordon Lyon (Fyodor) en 1997. C'est l'outil de référence pour la découverte d'hôtes, l'inventaire réseau, la détection de services et l'audit de sécurité. Il est utilisé par les administrateurs systèmes, les pentesters et les équipes de sécurité du monde entier.

Introduction : pourquoi utiliser Nmap ?

Nmap répond à une question fondamentale en administration réseau : qu'y a-t-il sur mon réseau, et dans quel état est-il ? Ses cas d'usage sont nombreux :

  • Inventaire réseau : découvrir automatiquement tous les hôtes actifs sur un segment ou une plage d'adresses.
  • Audit de sécurité : identifier les ports ouverts et les services exposés inutilement.
  • Détection de services et de versions : savoir exactement quel logiciel écoute sur quel port, avec son numéro de version.
  • Détection d'OS : identifier le système d'exploitation des machines distantes pour adapter les mesures de sécurité.
  • Audit de firewall : vérifier que les règles de filtrage sont bien appliquées depuis l'extérieur.
  • Détection de vulnérabilités : via les scripts NSE, Nmap peut tester des configurations faibles ou des failles connues.
Cadre légal obligatoire
Scanner un réseau sans autorisation est illégal dans la plupart des pays. En France, l'article 323-1 du Code pénal punit l'accès non autorisé à un système informatique. Utilisez Nmap uniquement sur vos propres systèmes ou avec une autorisation écrite explicite.

Installation de Nmap

Nmap est disponible dans les dépôts officiels de toutes les distributions Linux majeures.

Debian / Ubuntu

sudo apt update
sudo apt install -y nmap

# Vérifier la version installée
nmap --version

CentOS / RHEL / AlmaLinux / Rocky Linux

# CentOS 7 / RHEL 7
sudo yum install -y nmap

# CentOS 8+ / RHEL 8+ / AlmaLinux / Rocky Linux
sudo dnf install -y nmap

nmap --version

Arch Linux / Manjaro

sudo pacman -S nmap

Depuis les sources (dernière version)

Pour obtenir la toute dernière version avec toutes les fonctionnalités :

# Dépendances de compilation
sudo apt install -y build-essential libssl-dev libpcap-dev

# Télécharger les sources depuis nmap.org
wget https://nmap.org/dist/nmap-7.95.tar.bz2
tar -xjf nmap-7.95.tar.bz2
cd nmap-7.95/

# Compiler et installer
./configure
make
sudo make install

nmap --version

Syntaxe de base

La syntaxe générale de Nmap est :

nmap [options] cible

La cible peut être une adresse IP, un nom d'hôte, une plage d'adresses ou une notation CIDR. Les options définissent le type de scan, les ports à sonder, le timing et le format de sortie.

# Scan simple d'une IP
nmap 192.168.1.1

# Scan d'un nom d'hôte
nmap example.com

# Scan avec résolution DNS
nmap -n 192.168.1.1    # désactive la résolution DNS (plus rapide)
nmap -R 192.168.1.1    # force la résolution DNS inverse

Types de scan

Nmap propose plusieurs méthodes de scan, chacune adaptée à un contexte précis.

TCP SYN scan (-sS) — le scan stealth de référence

Le scan SYN est le scan par défaut lorsque Nmap est exécuté avec les droits root. Il envoie un paquet SYN et analyse la réponse :

  • SYN/ACK reçu : le port est ouvert. Nmap répond par un RST pour ne pas compléter la connexion.
  • RST reçu : le port est fermé.
  • Pas de réponse : le port est filtré (firewall).

Ce scan est rapide, furtif (ne termine pas la connexion TCP) et ne laisse généralement pas de trace dans les logs applicatifs.

# Scan SYN sur les 1000 ports les plus courants (nécessite root)
sudo nmap -sS 192.168.1.1

# Scan SYN sur tous les ports
sudo nmap -sS -p- 192.168.1.1

TCP Connect scan (-sT)

Le scan TCP Connect utilise l'appel système connect() du système d'exploitation pour établir une connexion TCP complète (SYN → SYN/ACK → ACK). Il ne nécessite pas de droits root mais est plus lent et laisse des traces dans les logs des services cibles.

# Scan TCP Connect (sans root)
nmap -sT 192.168.1.1

# Utile depuis un utilisateur non-privilégié ou via un proxy SOCKS
nmap -sT --proxies socks4://127.0.0.1:1080 192.168.1.1

UDP scan (-sU)

Le scan UDP sonde les ports UDP. Il est intrinsèquement lent car UDP est sans connexion : Nmap doit attendre l'expiration du délai pour confirmer un port filtré. Un port UDP est considéré ouvert si une réponse UDP est reçue, fermé si un ICMP "port unreachable" est reçu, et ouvert|filtré en l'absence de réponse.

# Scan UDP (lent, nécessite root)
sudo nmap -sU 192.168.1.1

# Scan UDP sur les ports les plus courants uniquement
sudo nmap -sU --top-ports 100 192.168.1.1

# Combinaison TCP SYN + UDP
sudo nmap -sS -sU -p T:80,443,22,U:53,123,161 192.168.1.1

Détection de version de service (-sV)

L'option -sV active la détection de version. Après avoir identifié les ports ouverts, Nmap envoie des sondes spécialisées pour identifier le service exact et son numéro de version. La base de données nmap-service-probes contient des milliers de signatures.

# Détection de version sur les ports ouverts
sudo nmap -sV 192.168.1.1

# Intensité de la détection (0=légère, 9=exhaustive, défaut=7)
sudo nmap -sV --version-intensity 9 192.168.1.1

Exemple de sortie :

PORT    STATE SERVICE VERSION
22/tcp  open  ssh     OpenSSH 8.9p1 Ubuntu 3ubuntu0.6 (Ubuntu Linux; protocol 2.0)
80/tcp  open  http    nginx 1.24.0
443/tcp open  ssl     nginx 1.24.0

Détection d'OS (-O)

Nmap utilise des techniques de TCP/IP fingerprinting — analyse des champs TTL, taille des fenêtres TCP, options TCP, comportement ICMP — pour identifier le système d'exploitation distant avec un niveau de confiance exprimé en pourcentage.

# Détection d'OS (nécessite root)
sudo nmap -O 192.168.1.1

# Activer la détection d'OS même sur les hôtes difficiles
sudo nmap -O --osscan-guess 192.168.1.1

Exemple de sortie :

OS details: Linux 5.4 - 5.15
OS CPE: cpe:/o:linux:linux_kernel:5

Scan agressif (-A)

L'option -A est un raccourci qui active simultanément la détection de version (-sV), la détection d'OS (-O), le traceroute (--traceroute) et les scripts NSE par défaut (-sC). C'est le scan le plus complet et le plus "bruyant" sur le réseau.

# Scan agressif complet
sudo nmap -A 192.168.1.1

# Scan agressif avec sortie verbeuse
sudo nmap -A -v 192.168.1.1
Scan -A et détection IDS
Le scan agressif génère un volume important de paquets et sera très probablement détecté par un IDS/IPS (Snort, Suricata). Réservez-le aux audits autorisés en environnement de lab ou de production avec validation préalable.

Gestion des cibles

Nmap offre une grande flexibilité pour définir les cibles à scanner.

IP unique, nom d'hôte

nmap 192.168.1.10
nmap monserveur.local
nmap example.com

Plage d'adresses

# Plage avec tiret
nmap 192.168.1.1-50

# Plage de sous-réseaux avec wildcard
nmap 192.168.1.*

# Plusieurs hôtes séparés par des espaces
nmap 192.168.1.1 192.168.1.5 192.168.1.10

Notation CIDR

# Scanner tout un sous-réseau /24 (254 hôtes)
sudo nmap -sn 192.168.1.0/24

# Sous-réseau /16 (65534 hôtes) — préférez réduire la cible
sudo nmap -sn 10.0.0.0/16

Fichier de cibles (-iL)

Pour scanner une liste d'hôtes stockée dans un fichier texte (une IP ou un nom d'hôte par ligne) :

# Contenu de targets.txt
# 192.168.1.1
# 192.168.1.5
# serveur-web.local

sudo nmap -iL targets.txt -sV -oA resultats

Exclusion de cibles (--exclude, --excludefile)

# Exclure une IP d'un scan de sous-réseau
sudo nmap 192.168.1.0/24 --exclude 192.168.1.1

# Exclure une liste d'hôtes depuis un fichier
sudo nmap 192.168.1.0/24 --excludefile exclusions.txt

Gestion des ports

Spécifier des ports (-p)

# Port unique
nmap -p 80 192.168.1.1

# Plusieurs ports
nmap -p 22,80,443,8080 192.168.1.1

# Plage de ports
nmap -p 1-1024 192.168.1.1

# Tous les ports TCP (1-65535)
nmap -p- 192.168.1.1

# Ports TCP et UDP combinés
nmap -p T:80,443,U:53,161 192.168.1.1

Ports les plus courants (--top-ports, -F)

# Les 100 ports les plus courants (rapide)
nmap -F 192.168.1.1

# Les N ports les plus courants (basé sur la fréquence dans nmap-services)
nmap --top-ports 200 192.168.1.1
nmap --top-ports 1000 192.168.1.1

Options de timing (-T0 à -T5)

Le timing contrôle la vitesse et l'agressivité du scan. Un timing élevé est plus rapide mais plus visible et moins fiable sur les réseaux congestionnés.

Option Nom Cas d'usage
-T0 Paranoid IDS evasion, extrêmement lent (5 min entre sondes)
-T1 Sneaky IDS evasion, très lent (15 sec entre sondes)
-T2 Polite Réduit la charge réseau, ralentit le scan
-T3 Normal Défaut, équilibre vitesse/fiabilité
-T4 Aggressive Réseau rapide et fiable, recommandé pour les labs
-T5 Insane Maximum de vitesse, risque de résultats inexacts
# Scan rapide sur réseau local fiable
sudo nmap -T4 -F 192.168.1.0/24

# Scan discret pour éviter les IDS
sudo nmap -T1 -sS 10.0.0.1

Scripts NSE (Nmap Scripting Engine)

Le moteur de scripts NSE est l'une des fonctionnalités les plus puissantes de Nmap. Il permet d'exécuter des scripts Lua pour automatiser des tâches avancées : détection de vulnérabilités, énumération de services, tests d'authentification, etc. Nmap inclut plus de 600 scripts répartis en catégories.

Catégories principales

  • auth : teste les mécanismes d'authentification (credentials par défaut, bypass).
  • broadcast : découverte d'hôtes via broadcast (mDNS, DHCP, etc.).
  • default : scripts considérés utiles, rapides et non intrusifs (activés par -sC).
  • discovery : énumération d'informations supplémentaires (DNS, SNMP, LDAP).
  • exploit : tentatives d'exploitation réelles (attention, intrusif).
  • fuzzer : tests de fuzzing sur les protocoles.
  • intrusive : scripts agressifs pouvant déclencher des alertes ou impacter les services.
  • malware : détection de backdoors et malwares connus.
  • safe : scripts non intrusifs, sans impact sur les services cibles.
  • version : extensions de détection de version.
  • vuln : détection de vulnérabilités connues (CVE, misconfigurations).

Utilisation des scripts

# Scripts par défaut (-sC équivalent à --script=default)
sudo nmap -sC 192.168.1.1

# Script spécifique
sudo nmap --script http-title 192.168.1.1

# Catégorie complète
sudo nmap --script vuln 192.168.1.1

# Plusieurs catégories
sudo nmap --script "auth,discovery" 192.168.1.1

# Script avec arguments
sudo nmap --script http-brute --script-args http-brute.hostname=example.com 192.168.1.1

Exemples concrets de scripts NSE

# Détecter Heartbleed sur le port 443
sudo nmap -p 443 --script ssl-heartbleed 192.168.1.1

# Détecter SMBv1 (EternalBlue/WannaCry) sur Windows
sudo nmap -p 445 --script smb-vuln-ms17-010 192.168.1.0/24

# Tester les credentials SSH par défaut
sudo nmap -p 22 --script ssh-brute 192.168.1.1

# Énumérer les partages SMB
sudo nmap -p 445 --script smb-enum-shares 192.168.1.1

# Récupérer les entêtes HTTP et le titre de la page
sudo nmap -p 80,443 --script http-headers,http-title 192.168.1.1

# Détecter les services RDP mal configurés
sudo nmap -p 3389 --script rdp-enum-encryption 192.168.1.0/24

# Lister les scripts disponibles dans une catégorie
ls /usr/share/nmap/scripts/ | grep vuln

Formats de sortie

Nmap propose plusieurs formats de sortie pour intégrer ses résultats dans des workflows d'analyse ou de reporting.

Option Format Usage
-oN fichier Normal (texte lisible) Lecture humaine, documentation
-oX fichier XML Parsing automatique, intégration CI/CD
-oG fichier Grepable Traitement shell (grep, awk, sed)
-oS fichier Script kiddie Anecdotique
-oA prefixe Tous les formats Génère .nmap, .xml et .gnmap en une commande
# Sortie textuelle simple
sudo nmap -sV 192.168.1.0/24 -oN scan_reseau.txt

# Sortie XML pour parsing automatique
sudo nmap -sV 192.168.1.0/24 -oX scan_reseau.xml

# Sortie grepable
sudo nmap -sV 192.168.1.0/24 -oG scan_reseau.gnmap

# Tous les formats en une fois (recommandé pour les audits)
sudo nmap -A 192.168.1.0/24 -oA audit_$(date +%Y%m%d)

# Extraire les hôtes avec le port 22 ouvert depuis la sortie grepable
grep "22/open" scan_reseau.gnmap | awk '{ print $2 }'

# Parser le XML avec nmap-parse-output (outil tiers)
nmap-parse-output scan_reseau.xml hosts-with-port 80

Cas pratiques

Cas 1 : Scan d'inventaire réseau

Découvrir tous les hôtes actifs sur un sous-réseau sans scanner les ports (ping scan) :

# Ping scan : découverte d'hôtes uniquement (rapide)
sudo nmap -sn 192.168.1.0/24

# Avec résolution DNS désactivée (encore plus rapide)
sudo nmap -sn -n 192.168.1.0/24

# Sauvegarder l'inventaire
sudo nmap -sn 192.168.1.0/24 -oG - | grep "Status: Up" | awk '{ print $2 }' > hotes_actifs.txt

Cas 2 : Détection de services exposés

Identifier tous les services en écoute sur un serveur, avec leurs versions :

# Scan complet de version sur tous les ports
sudo nmap -sV -p- -T4 --open 192.168.1.10

# Afficher uniquement les ports ouverts
sudo nmap --open -sV 192.168.1.10

# Détecter les services web sur des ports non-standard
sudo nmap -sV --script http-title -p 80,443,8080,8443,8888,3000 192.168.1.10

Cas 3 : Audit de règles de firewall

Vérifier que les règles de firewall sont correctement appliquées depuis l'extérieur :

# Scanner depuis une machine externe et comparer avec la politique attendue
sudo nmap -sS -sV -p- 203.0.113.10

# Tester des techniques d'évasion (ACK scan pour mapper les règles stateful)
sudo nmap -sA -p 80,443 203.0.113.10

# Scan avec fragmentation pour tester les règles de filtrage de paquets
sudo nmap -sS -f 192.168.1.1

# Tester si un firewall est stateful ou stateless (Window scan)
sudo nmap -sW 192.168.1.1

Cas 4 : Audit rapide d'un serveur web

# Scan ciblé sur les ports web avec scripts NSE appropriés
sudo nmap -sV -p 80,443,8080,8443 \
    --script "http-headers,http-title,http-methods,http-security-headers,ssl-cert,ssl-enum-ciphers" \
    -T4 \
    -oA audit_web_$(date +%Y%m%d) \
    monserveur.example.com

Bonnes pratiques légales et éthiques

L'utilisation de Nmap, comme tout outil d'audit de sécurité, doit respecter un cadre strict :

  • Autorisation explicite : Obtenez toujours une autorisation écrite avant de scanner des systèmes que vous ne possédez pas. Documentez le périmètre, les dates et les méthodes autorisées.
  • Environnement de test : Privilégiez un lab dédié (machines virtuelles, réseau isolé) pour apprendre et tester.
  • Plateformes légales : Des plateformes comme HackTheBox, TryHackMe ou VulnHub fournissent des environnements légaux pour pratiquer.
  • Impact minimal : Adaptez le timing (-T2 ou -T3) sur les environnements de production pour limiter la charge réseau.
  • Journalisation : Sauvegardez toujours vos scans avec -oA pour tracer les opérations réalisées.
  • Coordination : Informez l'équipe réseau/sécurité avant tout scan, même autorisé, pour éviter de déclencher des alertes inutiles.
  • Données personnelles : Les résultats de scan peuvent révéler des informations sensibles sur l'infrastructure. Traitez-les comme des données confidentielles.
Ressources pour pratiquer légalement
HackTheBox et TryHackMe proposent des labs avec des machines vulnérables sur lesquelles pratiquer Nmap et d'autres outils de pentest dans un cadre totalement légal et éthique.

Exemples de commandes utiles — Tableau récapitulatif

Commande Description
nmap -sn 192.168.1.0/24 Découverte d'hôtes (ping scan, sans scan de ports)
sudo nmap -sS -T4 192.168.1.1 Scan SYN rapide sur les 1000 ports courants
sudo nmap -sV -p- -T4 192.168.1.1 Détection de version sur tous les ports TCP
sudo nmap -A -T4 192.168.1.1 Scan agressif : OS + version + scripts + traceroute
sudo nmap -sU --top-ports 100 192.168.1.1 Scan UDP des 100 ports les plus courants
sudo nmap -sC -sV 192.168.1.1 Scripts par défaut + détection de version
sudo nmap --script vuln 192.168.1.1 Détection de vulnérabilités connues via NSE
sudo nmap -sS -p- -oA audit 192.168.1.1 Scan SYN complet avec sauvegarde dans tous les formats
sudo nmap -iL cibles.txt -sV -oN rapport.txt Scan d'une liste de cibles avec sortie dans un fichier
sudo nmap -sV --open 192.168.1.0/24 Lister uniquement les ports ouverts sur tout un réseau

Conclusion

Nmap est un outil incontournable pour tout administrateur système ou professionnel de la sécurité. Sa richesse fonctionnelle — des simples pings aux scripts NSE avancés — en fait le couteau suisse de la cartographie réseau. Maîtriser Nmap, c'est comprendre en profondeur la surface d'attaque de son infrastructure et être capable de l'auditer régulièrement.

L'étape suivante naturelle est de combiner Nmap avec des outils complémentaires : Fail2Ban pour se protéger des scans entrants, Suricata ou Snort pour détecter les tentatives de scan sur votre réseau, et Lynis pour un audit de sécurité complet du système d'exploitation. La sécurité réseau est un processus continu : scanner régulièrement son propre réseau avec Nmap est une des meilleures façons de garder une vision précise de son exposition.

Morgann Riu

Écrit par

Morgann Riu

Expert en cybersécurité et administration Linux. Je partage mes connaissances à travers des tutoriels gratuits et des formations pour aider les administrateurs systèmes et développeurs à sécuriser leurs infrastructures.

Partager ce tutoriel

Cet article vous a plu ?

Commentaires

Checklist Sécurité Linux

30 points essentiels pour sécuriser un serveur Linux. Recevez aussi les nouveaux tutoriels par email.

Pas de spam. Désabonnement en 1 clic.