nmap envoie des sondes conçues sur mesure vers un hôte et vous rapporte quels ports TCP et UDP répondent, dans quel état chacun se trouve — et, si vous le demandez, quel logiciel écoute derrière. Lancé contre une infrastructure qui vous appartient, c’est un outil d’inventaire et de vérification : il vous dit quels ports le monde extérieur atteint vraiment, si un changement de pare-feu a fait ce que vous vouliez, et si un service que vous pensiez avoir coupé écoute encore. Une exécution typique ressemble à sudo nmap -sS -sV -p- 10.0.3.9, et la réponse qui compte, c’est la colonne d’état — open, filtered ou closed — parce que chacune est une affirmation différente sur votre pare-feu. Ce guide reste du côté défensif de l’outil : scanner vos propres hôtes pour confirmer que la réalité correspond à l’intention.
Ce que vous allez accomplir
- Découvrir quels hôtes d’un sous-réseau sont actifs avec un balayage ping, sans toucher à un seul port.
- Choisir le bon type de scan selon vos privilèges — scan SYN en root, scan connect quand vous ne l’êtes pas.
- Sélectionner les ports délibérément avec
-p,-p-et--top-ports, et comprendre pourquoi le scan UDP est lent et flou. - Identifier services et versions avec
-sV, lancer le jeu de scripts par défaut avec-sC, et lire les suppositions d’OS avec-O. - Sauvegarder chaque scan dans un format analysable pour comparer deux scans et prouver qu’un changement de pare-feu a eu exactement l’effet voulu.
Prérequis
- L’autorisation d’abord, toujours. Ne scannez que des hôtes qui vous appartiennent ou pour lesquels vous avez une permission explicite et écrite de tester. Scanner les ports de l’infrastructure de quelqu’un d’autre viole la politique d’utilisation acceptable de tout fournisseur infonuagique et de tout réseau que vous traverseriez, et dans bien des juridictions c’est une infraction criminelle, peu importe l’intention. Ce guide suppose que la cible est votre propre VM, votre propre sous-réseau, ou un système dont le propriétaire vous a autorisé par écrit. Si vous ne pouvez pas pointer cette autorisation, arrêtez ici.
- nmap installé. Vérifiez avec
nmap --version; vous devriez voir quelque chose commeNmap version 7.94— toute version 7.x prend en charge chaque drapeau de ce guide. Installez-le avecapt install nmap,dnf install nmap, ou sur macOSbrew install nmap. - Le compte root, pour les types de scan qui fabriquent des paquets bruts.
-sS(scan SYN),-sU(UDP),-O(détection d’OS) et le traceroute exigent tousCAP_NET_RAW, donc en pratique vous lancezsudo nmap. Sans root, nmap bascule silencieusement vers un scan connect — utilisable, mais plus lent et plus visible dans les journaux de la cible. - Connaître l’adresse ou la plage de votre cible. Un hôte unique (
10.0.3.9), une plage CIDR (10.0.3.0/24), une plage avec tiret (10.0.3.1-50) ou un nom d’hôte : tout fonctionne.
Comment ça marche
nmap procède par phases. Il décide d’abord quelles cibles sont vivantes (découverte d’hôtes), puis quels ports de chaque hôte vivant méritent une sonde, puis en option ce qui tourne derrière ces ports. Chaque phase réduit le travail de la suivante, et c’est pourquoi un scan complet -p- d’un /24 avec détection de version peut prendre des minutes alors qu’un balayage ping de la même plage prend des secondes. Comprendre les phases, c’est aussi savoir lire la sortie : l’état d’un port est l’interprétation par nmap de la façon dont la cible a répondu à une sonde, et cette interprétation, c’est toute la valeur de l’outil.
Les trois états que vous lirez le plus sont open (quelque chose a répondu et a accepté la connexion), closed (l’hôte a répondu mais aucun service n’écoute sur ce port) et filtered (nmap n’a obtenu aucune réponse utile — un pare-feu a écarté la sonde en silence). Ce troisième état vaut la peine d’être intériorisé : filtered est ce que produit un pare-feu bien configuré, et le voir sur un port que vous vouliez bloquer, c’est la confirmation que vous cherchiez.
Étape par étape
1. Trouvez quels hôtes sont actifs. Un balayage ping (-sn) fait seulement de la découverte d’hôtes — aucun scan de port — donc c’est rapide et peu coûteux pour inventorier un sous-réseau :
sudo nmap -sn 10.0.3.0/24
Starting Nmap 7.94 ( https://nmap.org )
Nmap scan report for 10.0.3.1
Host is up (0.00042s latency).
Nmap scan report for 10.0.3.9
Host is up (0.00061s latency).
Nmap scan report for 10.0.3.24
Host is up (0.00088s latency).
Nmap done: 256 IP addresses (3 hosts up) scanned in 2.31 seconds
Trois hôtes ont répondu sur 256 adresses. Sur un sous-réseau local, nmap utilise ARP pour la découverte, ce qui est à la fois rapide et difficile à masquer pour un pare-feu d’hôte ; à travers un routeur, il retombe sur ICMP et quelques sondes TCP.
2. Lancez le scan par défaut sur un hôte. Sans drapeau de type de scan et en root, nmap lance un scan SYN de ses 1000 ports les plus courants. -sS le rend explicite :
sudo nmap -sS 10.0.3.9
Nmap scan report for 10.0.3.9
Host is up (0.00058s latency).
Not shown: 997 closed tcp ports (reset)
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
443/tcp open https
Nmap done: 1 IP address (1 host up) scanned in 0.34 seconds
Le scan SYN envoie un SYN, guette le SYN-ACK qui veut dire open ou le RST qui veut dire closed, et ne complète jamais la poignée de main. Il exige root parce qu’il fabrique des paquets bruts. Not shown: 997 closed tcp ports est nmap qui vous dit que les 997 autres ports de sa liste top-1000 ont répondu par un RST — l’hôte est joignable et n’écoute tout simplement pas là.
3. Utilisez un scan connect quand vous n’êtes pas root. Sans privilèges, nmap ne peut pas forger de paquets bruts, alors il demande au noyau de compléter une poignée de main TCP entière avec -sT :
nmap -sT 10.0.3.9
Nmap scan report for 10.0.3.9
Host is up (0.00071s latency).
Not shown: 997 closed tcp ports (conn-refused)
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
443/tcp open https
Nmap done: 1 IP address (1 host up) scanned in 0.39 seconds
Même résultat, mécanisme différent : conn-refused au lieu de reset dans la ligne « not shown » est l’indice qu’il s’agissait d’un scan connect. Il est plus lent sur de grandes plages de ports et apparaît comme des connexions complétées dans les journaux applicatifs de la cible, alors préférez -sS quand vous avez root et -sT seulement quand vous ne l’avez pas.
4. Choisissez les ports à dessein. Par défaut, nmap scanne 1000 ports courants. -p nomme des ports ou des plages précis, -p- scanne les 65535, et --top-ports N scanne les N plus courants :
sudo nmap -sS -p 22,80,443,5432 10.0.3.9
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
443/tcp open https
5432/tcp filtered postgresql
Ici, 5432/tcp filtered est la ligne intéressante : PostgreSQL est censé être coupé par le pare-feu depuis ce réseau, et filtered confirme que le pare-feu écarte les sondes vers lui. Pour un audit complet, sudo nmap -sS -p- 10.0.3.9 scanne chaque port et attrape un service que quelqu’un aurait monté sur un port haut inhabituel — c’est plus long, gardez-le pour la passe approfondie plutôt que pour la vérification rapide.
5. Scannez l’UDP séparément, et attendez-vous à ce que ce soit lent. L’UDP n’a pas de poignée de main, alors nmap envoie un paquet et déduit l’état du silence ou d’une erreur ICMP. Ça rend -sU lent et ses résultats plus vagues :
sudo nmap -sU --top-ports 20 10.0.3.9
PORT STATE SERVICE
53/udp open domain
123/udp open ntp
161/udp open|filtered snmp
Nmap done: 1 IP address (1 host up) scanned in 18.44 seconds
open|filtered est le haussement d’épaules honnête de l’UDP : un port UDP fermé répond par un ICMP port-unreachable, mais un port ouvert reste souvent muet — comme un port bloqué par le pare-feu — donc nmap ne peut pas toujours les distinguer. Gardez les scans UDP aux ports qui vous importent vraiment (--top-ports 20 ou un -p explicite), parce qu’un balayage UDP complet peut prendre des heures.
6. Identifiez services et versions. -sV se connecte à chaque port ouvert et lit les bannières pour nommer le logiciel et sa version. -sC lance les scripts par défaut sûrs de nmap ; -O devine l’OS ; -A regroupe les trois plus le traceroute :
sudo nmap -sS -sV -p 22,80,443 10.0.3.9
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 9.6p1 Ubuntu 3ubuntu13.5 (Ubuntu Linux; protocol 2.0)
80/tcp open http nginx 1.24.0 (Ubuntu)
443/tcp open http nginx 1.24.0 (Ubuntu)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
Vous voyez maintenant non seulement que SSH est ouvert, mais qu’il s’agit d’OpenSSH 9.6p1 — le détail de version qui vous permet de le comparer à une liste de vulnérabilités connues. Ajoutez -sC pour les scripts par défaut (ils vont, par exemple, extraire les détails du certificat TLS sur 443) ou prenez -A quand vous voulez tout et que le temps et le bruit supplémentaires ne vous dérangent pas.
7. Réglez le gabarit de rythme. -T0 à -T5 échangent la vitesse contre la politesse et la discrétion. -T3 est le défaut ; -T4 accélère en supposant un réseau rapide et fiable :
sudo nmap -sS -T4 -p- 10.0.3.9
Sur votre propre réseau local, -T4 est le bon défaut — le réseau est rapide, vous ne craignez pas de déclencher vos propres alarmes, et ça transforme un scan complet lent en scan rapide. Gardez -T0 et -T1 pour le cas rare où vous ménagez délibérément une cible fragile ; -T5 est assez agressif pour perdre des résultats sur un lien avec pertes, alors ne le prenez que sur un réseau vraiment rapide et local.
8. Consignez les résultats. Pour tout ce que vous voulez garder ou comparer, sauvegardez une sortie lisible par machine. -oN est du texte normal, -oG est « greppable », -oX est du XML, et -oA <base> écrit les trois d’un coup :
sudo nmap -sS -sV -p- -oA scans/db-2026-07-27 10.0.3.9
Nmap done: 1 IP address (1 host up) scanned in 24.10 seconds
Ça laisse scans/db-2026-07-27.nmap, .gnmap et .xml. Le fichier greppable est celui que vous comparez dans le temps — chaque port ouvert est sur sa propre ligne, donc un diff du scan de la semaine dernière contre celui d’aujourd’hui montre exactement ce qui a changé sur l’hôte.
Valider que ça fonctionne
Prouvez la boucle de bout en bout contre un service que vous contrôlez. Démarrez un écouteur jetable sur un port connu :
nc -l -p 9999 &
Puis scannez seulement ce port et confirmez que nmap le voit passer à open :
nmap -sT -p 9999 127.0.0.1
PORT STATE SERVICE
9999/tcp open distinct
Nmap done: 1 IP address (1 host up) scanned in 0.06 seconds
Arrêtez l’écouteur avec kill %1 et rescannez : le même port rapporte maintenant closed (l’hôte a répondu, rien n’écoute). Cette transition — open pendant que le processus tourne, closed après l’arrêt — est votre référence de ce à quoi ressemble un vrai changement d’état, et c’est le signal exact sur lequel vous vous appuyez pour vérifier une règle de pare-feu : bloquez le port, rescannez, et confirmez qu’il bascule à filtered plutôt.
Dépannage
- Chaque port affiche
filtered. Deux causes courantes. Soit un pare-feu écarte réellement toutes vos sondes — ce qui, pour un hôte verrouillé, est correct et attendu — soit vous avez demandé un type de scan que vous ne pouvez pas lancer. Si vous avez lancé-sSsans root, nmap a peut-être échoué à envoyer des paquets bruts ; relancez avecsudo, ou passez à-sT, qui n’exige aucun privilège. Sifilteredpersiste sous sudo contre un hôte que vous savez ouvert, l’écartement est en amont : un groupe de sécurité infonuagique ou une ACL réseau entre vous et la cible. You requested a scan type which requires root privileges.-sS,-sUet-Ofabriquent tous des paquets bruts et exigentCAP_NET_RAW. Lancez la commande soussudo, ou si vous n’avez vraiment pas root, utilisez-sTpour le TCP — c’est la voie sans privilèges et elle donne la même réponse open/closed, juste plus lentement et plus visiblement.- Un hôte que vous savez actif rapporte « Host seems down ». nmap saute le scan de ports d’un hôte qui échoue à la découverte, et un hôte qui écarte l’ICMP paraît éteint aux sondes par défaut. Ajoutez
-Pnpour sauter la découverte et le scanner quand même :sudo nmap -Pn -sS 10.0.3.9. C’est routinier contre les hôtes durcis et la plupart des VM infonuagiques, qui écartent le ping par politique. - Le scan est trop lent. Un
-p-complet avec-sVsur un lien lent, c’est vraiment des minutes de travail. Réduisez la portée : scannez--top-ports 100au lieu des 65535, laissez tomber-sVjusqu’à ce que vous sachiez quels ports sont ouverts, et sur votre propre réseau local rapide montez le rythme avec-T4. Si l’UDP est la partie lente, restreignez-le à la poignée de ports UDP que vous faites vraiment tourner. - Les résultats UDP sont tous
open|filtered. C’est l’UDP qui fonctionne comme prévu, pas un bogue. Un port UDP ouvert qui ne répond pas à une sonde vide est indistinguable d’un port filtré. Pour trancher, ajoutez-sVpour que nmap envoie des charges propres au protocole qui provoquent une vraie réponse, ou acceptez l’ambiguïté et confirmez le service autrement — depuis l’hôte lui-même,ss -lunliste les sockets UDP réellement liés.
Quand c’est la mauvaise approche
nmap vous dit ce qui est joignable depuis l’endroit où vous vous tenez, ce qui est justement le mauvais angle pour certaines questions. Si vous voulez savoir sur quoi un hôte écoute peu importe le pare-feu au milieu, lancez ss -ltnp sur l’hôte lui-même — c’est instantané, faisant autorité, et sans scan. Si votre question porte sur les règles de pare-feu plutôt que sur leur effet, lisez-les directement ; les bases du pare-feu UFW couvrent leur audit et leur modification, et un scan sert à vérifier le changement après coup, pas à le faire. Si un nom résout vers la mauvaise adresse et qu’un « connection refused » est en fait un problème de DNS, dig pour le dépannage DNS vous y mène plus vite que n’importe quel scan de port. Et quand vous devez voir les vrais paquets qu’une sonde nmap produit — pour comprendre pourquoi un port lit filtered — capturer et filtrer le trafic avec tcpdump montre la sonde partir et ce qui revient, s’il y a lieu. La référence complète de chaque drapeau est le manuel officiel de nmap. Par-dessus tout : gardez le scan aux hôtes que vous possédez ou êtes autorisé à tester, et gardez la sortie sauvegardée quelque part où vous pourrez la pointer plus tard.
Si c’est le genre de travail que vous préféreriez ne plus jamais porter, c’est le quotidien d’Opérations Cloud — réservez une revue d’infrastructure.