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.
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
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
-oApour 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.
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.
Commentaires