Что показывает Nmap и зачем это пентестеру
Nmap отправляет пакеты на целевой хост и по ответам определяет, какие порты доступны, какие сервисы за ними работают и какая операционная система установлена. Результат сканирования — это не просто список портов, а структурированная таблица, где каждая строка несёт конкретный смысл. Умение читать эту таблицу — базовый навык для любого, кто занимается аудитом безопасности.
В лабораторных условиях Nmap помогает ответить на три вопроса:
- Какие сервисы подняты на хосте и не забыли ли вы закрыть лишнее.
- Корректно ли работает межсетевой экран.
- Видна ли версия сервиса и не устарела ли она.
Все примеры ниже предполагают, что вы сканируете собственную виртуальную машину или контейнер в изолированной сети. Сканирование чужих хостов без письменного согласия — нарушение закона.
Состояния портов: что означает каждая строка
Ключевое поле в выводе Nmap — STATE. Оно принимает одно из шести значений:
| Состояние | Что означает |
|---|---|
open | Приложение активно слушает на этом порту и принимает соединения |
closed | Порт доступен, но приложение не слушает; хост ответил RST |
filtered | Пакеты не доходят до порта — их блокирует файрвол, фильтр или сетевое препятствие |
unfiltered | Порт отвечает на зонды, но Nmap не может определить, открыт он или закрыт |
open|filtered | Nmap не получил ответа и не может различить эти два состояния |
closed|filtered | Аналогично, но между closed и filtered |
На практике чаще всего встречаются
open, closed и filtered. Комбинированные состояния появляются при UDP-сканировании и сканировании через ACK-пакеты, когда ответ неоднозначен.Почему filtered не равно «порт закрыт»
Частая ошибка новичков — считать, что
filtered означает «сервис не работает». Это не так. За filtered может скрываться полностью рабочий сервис, просто пакеты до него не доходят. Чтобы убедиться, нужно проверить правила файрвола на целевой машине или повторить сканирование с другого сетевого уровня.Минимальная лабораторная среда
Для практики достаточно:
- Гипервизор (VirtualBox, VMware, KVM/QEMU) или Docker.
- Одна виртуальная машина с Linux (например, Ubuntu Server или Metasploitable для учебных целей).
- Nmap, установленный на хост-машине или в отдельной ВМ.
Сеть лучше сделать изолированной (host-only или internal), чтобы трафик не уходил за пределы лаборатории.
Базовые команды и их вывод
TCP SYN-сканирование (по умолчанию для root)
Bash:
sudo nmap 192.168.56.101
Nmap отправляет SYN-пакет на каждый порт из списка по умолчанию (1000 наиболее популярных). Если приходит SYN/ACK — порт
open. Если RST — closed. Если ответа нет — filtered.Пример вывода:
Код:
Nmap scan report for 192.168.56.101
Host is up (0.00042s latency).
Not shown: 997 closed ports
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
3306/tcp open mysql
Строка
Not shown: 997 closed ports означает, что 997 портов ответили RST и Nmap не стал выводить их по отдельности.Сканирование всех 65535 портов
Bash:
sudo nmap -p- 192.168.56.101
Флаг
-p- заменяет список «топ-1000» на полный диапазон 1–65535. Время сканирования вырастет, но вы не пропустите нестандартный сервис на высоком порту.Определение версий сервисов
Bash:
sudo nmap -sV 192.168.56.101
Nmap отправляет дополнительные зонды на открытые порты и по ответам определяет имя и версию сервиса. Вывод дополняется столбцом VERSION:
Код:
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.9p1 Ubuntu 3ubuntu0.1
80/tcp open http Apache httpd 2.4.52
3306/tcp open mysql MySQL 8.0.33
Версия сервиса — отправная точка для поиска известных уязвимостей (CVE) и проверки актуальности патчей.
Определение операционной системы
Bash:
sudo nmap -O 192.168.56.101
Nmap анализирует особенности TCP/IP-стека (TTL, размер окна, флаги в ответах) и сравнивает их с базой отпечатков. Результат выглядит так:
Код:
OS details: Linux 5.4 - 5.15
Точность зависит от количества открытых портов и наличия нестандартных настроек ядра.
Агрессивный режим: всё сразу
Bash:
sudo nmap -A -T4 192.168.56.101
Флаг
-A включает определение ОС, версий, скриптовое сканирование и traceroute. -T4 ускоряет тайминги. Это удобный вариант для быстрого обзора одного хоста в лаборатории.Как читать полный вывод: разбор примера
Код:
Nmap scan report for 192.168.56.101
Host is up (0.00038s latency).
Not shown: 994 closed ports
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.9p1 Ubuntu 3ubuntu0.1 (protocol 2.0)
80/tcp open http Apache httpd 2.4.52 ((Ubuntu))
|_http-title: Lab Home Page
443/tcp filtered https
3306/tcp open mysql MySQL 8.0.33
Device type: general purpose
Running: Linux 5.X
OS details: Linux 5.4 - 5.15
Network Distance: 1 hop
Разберём по строкам:
- Host is up — хост ответил хотя бы на один зонд. Если написано
Host seems down, хост не отвечает вообще (выключен, блокирует ICMP, или между вами файрвол).
- Not shown: 994 closed ports — 994 порта вернули RST.
- PORT 22/tcp open ssh — SSH-сервер слушает на порту 22.
- VERSION OpenSSH 8.9p1 — конкретная версия, по которой можно проверить наличие CVE.
- 443/tcp filtered — порт 443 заблокирован фильтром. Сервис за ним может работать, но пакеты не проходят.
- http-title — скрипт Nmap получил заголовок страницы. Это подсказка о содержимом веб-сервера.
- OS details — предположение об ОС.
- Network Distance: 1 hop — хост находится в одном сегменте (типично для лаборатории).
Скриптовое сканирование (NSE)
Nmap содержит встроенные скрипты на Lua (Nmap Scripting Engine). Они запускаются флагом
--script.
Bash:
sudo nmap --script=default 192.168.56.101
Категория
default включает безопасные скрипты, которые собирают дополнительную информацию: заголовки HTTP, сертификаты TLS, баннеры SSH, список баз данных и т. д.Для более глубокой проверки конкретного сервиса:
Bash:
sudo nmap -p 80 --script=http-headers,http-title 192.168.56.101
Вывод скриптов отображается с отступом под строкой порта, каждая строка начинается с
| или |_.Тайминги и производительность
Флаг
-T задаёт шаблон таймингов от 0 (самый медленный, для обхода IDS) до 5 (максимальная скорость, возможна потеря точности):| Шаблон | Когда использовать |
|---|---|
-T0, -T1 | Обход IDS/IPS в авторизованном тесте, очень медленно |
-T2, -T3 | Баланс скорости и надёжности (по умолчанию -T3) |
-T4 | Лаборатория и быстрые сети |
-T5 | Только в изолированной среде, возможны ложные результаты |
В лаборатории
-T4 — разумный выбор. На медленных или нестабильных каналах лучше не подниматься выше -T3.Типичные ошибки при интерпретации результатов
Ошибка 1: filtered воспринимается как «сервиса нет»
Как уже сказано,
filtered означает лишь то, что Nmap не получил ответа. Сервис может работать за файрволом. Проверьте правила iptables или nftables на целевой машине.Ошибка 2: сканирование только топ-1000 портов
По умолчанию Nmap проверяет 1000 наиболее популярных портов. Если сервис запущен на порту 8443 или 9090, он не попадёт в результат. Используйте
-p- или явно указывайте диапазон: -p 1-65535.Ошибка 3: игнорирование UDP
TCP-сканирование не покажет UDP-сервисы (DNS на 53, SNMP на 161, NTP на 123). Для UDP:
Bash:
sudo nmap -sU --top-ports 100 192.168.56.101
UDP-сканирование медленнее и часто возвращает
open|filtered, потому что многие хосты не отвечают на UDP-зонды к закрытым портам.Ошибка 4: версия определена неверно
Nmap определяет версию по эвристике. Если сервис нестандартный или за прокси, версия может быть ошибочной. Всегда перепроверяйте критичные находки вручную (например, подключением через
curl или openssl s_client).Проверка результатов: как убедиться, что сканирование корректно
- Сравните с реальностью. Зайдите на целевую машину и выполните
ss -tlnp(Linux) — вы увидите реальный список слушающих портов. Сопоставьте с выводом Nmap.
- Повторите с другим флагом. Если порт показывает
filtered, попробуйтеsudo nmap -sA(ACK-сканирование) — оно помогает определить, блокирует ли порт stateful-файрвол.
- Проверьте с другого хоста. Если результаты различаются, проблема в маршрутизации или правилах между хостами.
Bash:
## На целевой машине (Linux)
ss -tlnp
Вывод покажет все TCP-порты в состоянии LISTEN и процессы, которые их заняли.
Сохранение результатов
Для документирования и дальнейшего анализа используйте флаги вывода:
Bash:
sudo nmap -A -T4 -oN scan_result.txt -oX scan_result.xml 192.168.56.101
-oN— обычный текстовый вывод.
-oX— XML, который можно импортировать в инструменты анализа или конвертировать в HTML.
-oA— все три формата сразу (обычный, XML, grepable).
XML-формат удобен для автоматической обработки и интеграции с системами отчётности.
Ограничения Nmap
- Nmap не обходит файрволы автоматически. Если все порты показывают
filtered, это значит, что правила блокируют зонды, а не что сервисов нет.
- Определение ОС и версий — вероятностная оценка, а не гарантия.
- Скрипты категории
vulnиexploitмогут вызвать нестабильную работу целевого сервиса. В лаборатории это допустимо, но на продакшене — нет.
- UDP-сканирование значительно медленнее TCP из-за отсутствия handshake и частого отсутствия ответов.
Чек-лист для первого сканирования в лаборатории
- Убедитесь, что целевой хост — ваша ВМ или контейнер в изолированной сети.
- Запустите
sudo nmap -A -T4 <IP>для быстрого обзора.
- Проверьте столбец STATE:
open— сервис доступен,filtered— проверьте файрвол.
- Запустите
ss -tlnpна целевой машине и сравните с результатами.
- Добавьте
-p-для полного диапазона портов.
- Добавьте
-sU --top-ports 100для UDP.
- Сохраните результат в файл (
-oNили-oX) для отчёта.
- По версиям сервисов проверьте наличие известных CVE в базах (NVD, Exploit-DB).
