Nmap для начинающих: как читать результаты сканирования портов в собственной лаборатории

Что показывает Nmap и зачем это пентестеру​


Nmap отправляет пакеты на целевой хост и по ответам определяет, какие порты доступны, какие сервисы за ними работают и какая операционная система установлена. Результат сканирования — это не просто список портов, а структурированная таблица, где каждая строка несёт конкретный смысл. Умение читать эту таблицу — базовый навык для любого, кто занимается аудитом безопасности.

В лабораторных условиях Nmap помогает ответить на три вопроса:

  • Какие сервисы подняты на хосте и не забыли ли вы закрыть лишнее.
  • Корректно ли работает межсетевой экран.
  • Видна ли версия сервиса и не устарела ли она.

Все примеры ниже предполагают, что вы сканируете собственную виртуальную машину или контейнер в изолированной сети. Сканирование чужих хостов без письменного согласия — нарушение закона.

Состояния портов: что означает каждая строка​


Ключевое поле в выводе Nmap — STATE. Оно принимает одно из шести значений:

СостояниеЧто означает
openПриложение активно слушает на этом порту и принимает соединения
closedПорт доступен, но приложение не слушает; хост ответил RST
filteredПакеты не доходят до порта — их блокирует файрвол, фильтр или сетевое препятствие
unfilteredПорт отвечает на зонды, но Nmap не может определить, открыт он или закрыт
open|filteredNmap не получил ответа и не может различить эти два состояния
closed|filteredАналогично, но между closed и filtered

На практике чаще всего встречаются open, closed и filtered. Комбинированные состояния появляются при UDP-сканировании и сканировании через ACK-пакеты, когда ответ неоднозначен.

Почему filtered не равно «порт закрыт»​


Частая ошибка новичков — считать, что filtered означает «сервис не работает». Это не так. За filtered может скрываться полностью рабочий сервис, просто пакеты до него не доходят. Чтобы убедиться, нужно проверить правила файрвола на целевой машине или повторить сканирование с другого сетевого уровня.

Минимальная лабораторная среда​


Для практики достаточно:

  1. Гипервизор (VirtualBox, VMware, KVM/QEMU) или Docker.
  2. Одна виртуальная машина с Linux (например, Ubuntu Server или Metasploitable для учебных целей).
  3. 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).

Проверка результатов: как убедиться, что сканирование корректно​


  1. Сравните с реальностью. Зайдите на целевую машину и выполните ss -tlnp (Linux) — вы увидите реальный список слушающих портов. Сопоставьте с выводом Nmap.
  2. Повторите с другим флагом. Если порт показывает filtered, попробуйте sudo nmap -sA (ACK-сканирование) — оно помогает определить, блокирует ли порт stateful-файрвол.
  3. Проверьте с другого хоста. Если результаты различаются, проблема в маршрутизации или правилах между хостами.

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).

Источники​


 
Назад
Верх Низ