Как безопасно использовать Nmap и читать результаты
Но Nmap отображает сеть; он не находит уязвимости по волшебной кнопке. Его первая задача — показать, что отвечает в сети.
В материалах для начинающих обнаружение, сканирование портов, определение сервисов и перечисление часто рассматриваются как взаимозаменяемые понятия. Но каждое из них отвечает на отдельный вопрос:
- Обнаружение находит доступные хосты.
- Сканирование портов определяет доступные порты.
- Определение сервисов идентифицирует приложения и версии.
- Перечисление собирает детали, необходимые для принятия решения.
Список из 100 команд — это не руководство для начинающих. (Если ваша цель — защитить сканируемую машину, начните с нашего чеклиста по усилению безопасности Linux-сервера.), а картотечный шкаф с ещё худшей типографикой. Это руководство по Nmap для начинающих следует одному рабочему процессу. Авторизуйте, установите, обнаружьте, просканируйте, интерпретируйте и выполните перечисление. Затем сообщите о результате и выберите следующий инструмент.
В этой статье
- Nmap отображает поверхность воздействия, а не уязвимости
- Сканируйте только системы, которые вам разрешено тестировать
- Установите воспроизводимую конфигурацию Nmap
- Начните с обнаружения хостов, а не с гигантского сканирования
- [Состояния портов — это наблюдения, а не вердикты](#состояния-портовhttpsnmaporgbookmanhtml—это-наблюдения-а-не-вердикты)
- Стройте сканирование по уровням
-A— это набор функций, а не значение по умолчанию для начинающих- Выбирайте NSE-скрипты исходя из вопроса
- Сохраняйте команду вместе с результатом
- Превращайте открытые порты в вопросы
- Выбирайте альтернативы по задаче
- Используйте этот воспроизводимый рабочий процесс Nmap
Nmap отображает поверхность воздействия, а не уязвимости
Для начинающего, которому нужны объяснимые доказательства, Nmap — хорошая отправная точка по умолчанию. Его справочная страница описывает инструмент с открытым исходным кодом, который использует необработанные IP-пакеты для идентификации доступных хостов, сервисов, версий, операционных систем и характеристик фильтрации.
Таким образом, Nmap отображает поверхность воздействия. Он показывает, что отвечает и как именно отвечает.
Открытый SSH-порт может быть ожидаемым каналом администрирования, плохо защищённым интерфейсом управления или сервисом, защищённым строгими мерами контроля. Но Nmap не может определить, какой именно вариант имеет место.
Nmap — стандартный первый шаг в тестировании API с помощью curl и в большинстве других ручных проверок безопасности. Он впервые был выпущен 1 сентября 1997 года в статье Phrack 51 под названием «The Art of Port Scanning». Он работает в Windows, Linux и macOS. Официальная книга предлагает более глубокое изучение. Практический вывод проще: связывайте каждое наблюдение со следующим вопросом.
Сканируйте только системы, которые вам разрешено тестировать
Поэтому определите цель и свои полномочия до установки сканера.
Сканирование собственной домашней лаборатории, авторизованного корпоративного актива или явно предоставленной учебной цели отличается от проверки произвольного публичного хоста. Сканирование создаёт трафик и может повлиять на хрупкое оборудование или активировать системы мониторинга. В рекомендациях ROIhacks по безопасному изучению Nmap авторизация рассматривается как обязательное предварительное условие.
Используйте Nmap только против систем, которыми вы владеете или на тестирование которых у вас есть явное разрешение. До начала работы запишите цель, область, временное окно и разрешённые типы сканирования.
Для практики проект Nmap предоставляет scanme.nmap.org в качестве учебной цели. Используйте её только в рамках практики, разрешённой проектом Nmap. Для публичного адреса требуется разрешение.
Полезная авторизация указывает владельца, окно обслуживания, ожидаемые сервисы и контактное лицо для необычных результатов. Такой контекст превращает список портов в расследование.
Установите воспроизводимую конфигурацию Nmap
Выберите способ установки, который позволит легко повторять первое сканирование.
В Debian или Ubuntu проще всего использовать менеджер пакетов:
sudo apt update
sudo apt install nmap
Версии пакетов могут отставать от выпусков upstream. HackerTarget указал Nmap 7.98 как последний стабильный выпуск, протестированный им в январе 2026 года; проверяйте официальную документацию Nmap для получения информации о текущих выпусках.
Используйте пакет, когда удобство важнее наличия самых новых сигнатур и скриптов. Собирайте из исходного кода, когда у вас есть конкретная причина использовать более новые возможности и вы можете поддерживать такую установку:
sudo apt update
sudo apt install g++ libssl-dev wget
wget https://nmap.org/dist/nmap-7.98.tar.bz2
bzip2 -cd nmap-7.98.tar.bz2 | tar xvf -
cd nmap-7.98/
./configure
make
sudo make install
Приведённые выше команды следуют протестированному HackerTarget пути сборки из исходного кода; адрес загрузки с указанием версии может измениться, поэтому проверьте выпуск перед копированием команды.
Docker предоставляет изолированную воспроизводимую среду, но добавляет настройку контейнера. Пользователи Windows могут выбрать официальный установщик для нативной работы. WSL2 предоставляет рабочий процесс в стиле Linux. В целом Linux обеспечивает наиболее простой опыт использования Nmap, поэтому в примерах здесь используются команды Linux.
Выберите один путь, запишите его версию и двигайтесь дальше. Археология пакетов редко является тем уроком, за которым вы пришли.
Начните с обнаружения хостов, а не с гигантского сканирования
Предположим, что 192.168.1.10 — это авторизованный лабораторный хост в вашей частной сети. Начните с проверки того, какие адреса отвечают:
sudo nmap -sn 192.168.1.0/24
-sn выполняет обнаружение хостов без сканирования портов. Он отвечает на узкий вопрос: какие адреса ответили на эти запросы?
Вы можете увидеть вывод следующего вида:
Nmap scan report for 192.168.1.10
Host is up.
Nmap done: 256 IP addresses (3 hosts up) scanned
Результат с тремя хостами и продолжительностью 3,29 секунды взят из примера в руководстве HackerTarget и не является гарантированным результатом для вашей сети. На обнаружение влияют поведение беспроводной сети, правила firewall, маршрутизация и устройства в спящем режиме.
Рассматривайте обнаружение как зацепку, а не как инвентаризацию. Отсутствие ответа не доказывает, что хост отсутствует, поскольку фильтрация и поведение хоста могут подавлять запросы. Если авторизованный реестр активов предоставляет известный адрес, также просканируйте этот адрес напрямую.
После появления лабораторного хоста сузьте следующее сканирование до 192.168.1.10.
Состояния портов — это наблюдения, а не вердикты
filtered не означает closed, а open автоматически не означает опасность.
| Состояние | Что наблюдал Nmap | Что остаётся неизвестным |
|---|---|---|
open | Nmap получил ответ, указывающий, что приложение прослушивает порт. | Одобрен ли сервис, правильно ли он настроен и уязвим ли он |
closed | Хост доступен, но ни один сервис не прослушивает порт; обычно отвечает RST. | Останется ли порт закрытым |
filtered | Firewall или ACL не позволили Nmap определить состояние. | Существует ли сервис за фильтром |
open|filtered | Nmap не смог отличить открытый порт от отфильтрованного. | Какое состояние имеет место |
closed|filtered | Nmap не смог отличить закрытый порт от отфильтрованного. | Какое состояние имеет место |
Отклоняющий firewall отправляет ответ и может сделать так, что порт будет выглядеть закрытым. Firewall, отбрасывающий пакеты, обычно приводит к состоянию filtered. UDP-сканирование часто даёт результат open|filtered, поскольку молчание трудно интерпретировать.
Синтетический вывод для иллюстрации столбцов; это не результат для 192.168.1.10:
PORT STATE SERVICE
22/tcp open ssh
23/tcp filtered telnet
80/tcp closed http
Состояние open — это наблюдение о доступности; для вывода требуется сравнение с ожидаемым состоянием, конфигурацией, версией или результатами тестирования.
Это руководство может научить вас собирать и интерпретировать доказательства доступности. Оно не может сказать, одобрен ли сервис или пригоден ли он для эксплуатации. Для таких выводов нужны записи об активах, свидетельства о конфигурации и тестирование за пределами Nmap.
Стройте сканирование по уровням
Выполняйте самую простую команду, которая отвечает на ваш текущий вопрос.
sudo nmap 192.168.1.10
Сканирование TCP по умолчанию охватывает 1 000 наиболее распространённых портов Nmap. Это разумный первый проход, поскольку он обеспечивает полезный охват, не создавая сразу стену вывода.
При наличии соответствующих привилегий явно укажите метод TCP:
sudo nmap -sS 192.168.1.10
-sS выполняет TCP SYN-сканирование. Без необходимых привилегий для работы с необработанными пакетами используйте TCP connect scan:
nmap -sT 192.168.1.10
Без привилегий для работы с необработанными пакетами Nmap использует TCP connect scanning, который обычно создаёт завершённое соединение и может быть медленнее или заметнее.
Теперь определите приложения и версии, работающие за открытыми портами:
sudo nmap -sV 192.168.1.10
Определение версии опрашивает обнаруженные сервисы и пытается идентифицировать приложение и версию. Строка вроде 22/tcp open ssh становится более полезной, когда Nmap может определить реализацию, стоящую за ней.
Если результат по распространённым портам вызывает обоснованный вопрос о необычном сервисе, расширьте диапазон:
sudo nmap -p- 192.168.1.10
-p- сканирует все 65 535 TCP-портов. Это создаёт больше трафика и вывода, поэтому используйте параметр, когда решение оправдывает более широкий охват. Сочетайте его с определением версий, если вам нужно, чтобы расширенный результат был пригоден для дальнейших действий:
sudo nmap -p- -sV 192.168.1.10
Определение ОС использует fingerprinting TCP/IP:
sudo nmap -O 192.168.1.10
Результат представляет собой оценку ОС, качество которой зависит от ответов и сетевого пути. Рассматривайте её как доказательство, требующее проверки, особенно если результат влияет на устранение проблемы.
Для UDP требуется отдельное сканирование:
sudo nmap -sU 192.168.1.10
UDP-сканирование медленнее и сложнее для интерпретации, поскольку многие сервисы не отвечают на неожиданные запросы. Используйте его, когда актив или инвентаризация указывают на актуальность UDP.
-A — это набор функций, а не значение по умолчанию для начинающих
«Почему бы не использовать -A первым?» Потому что он объединяет несколько задач до того, как вы поймёте, какая именно задача вам нужна.
sudo nmap -A TARGET
-A включает определение ОС и определение версий. Он также запускает скрипты по умолчанию и traceroute. В контролируемой лаборатории он полезен для изучения взаимодействия этих функций. В обычной работе он может скрыть базовое наблюдение под дополнительным выводом.
Вы можете получить оценки ОС, результаты определения версий, скрипты по умолчанию и traceroute в одном результате. Из-за этого сложнее определить, какое наблюдение отвечает на какой вопрос. Это также может создавать больше трафика и сильнее воздействовать на цель.
Шаблоны тайминга Nmap идут от -T0 до -T5 — от paranoid до insane. Более быстрый тайминг может активировать оповещения систем обнаружения вторжений. Он также может повлиять на хрупкие устройства. Используйте тайминг по умолчанию, пока не поймёте цель и последствия его изменения.
Использование агрессивных параметров для компенсации неясной области работ — безрассудство. Правило остановки простое: уточните авторизацию до повышения интенсивности сканирования.
Выбирайте NSE-скрипты исходя из вопроса
Nmap Scripting Engine, или NSE, расширяет Nmap с помощью Lua-скриптов для задач обнаружения и выявления уязвимостей. Официальная документация NSE содержит актуальную библиотеку, которая выросла за пределы описаний с устаревшим количеством скриптов.
Набор скриптов по умолчанию используется с параметром -sC:
sudo nmap -sV -sC TARGET
Набор по умолчанию отправляет дополнительные запросы. Ознакомьтесь с описаниями скриптов перед использованием против оборудования в production, даже если сканирование авторизовано.
Для конкретного скрипта по его документации определите, выполняет ли он сбор баннеров, попытки аутентификации или проверки уязвимостей. Затем выбирайте его по имени только после изучения поведения:
sudo nmap -sV --script <script-name> TARGET
Замените <script-name> документированным скриптом, который вы выбрали осознанно. Результат скрипта всё равно требует подтверждения с помощью сведений о сервисе, проверки конфигурации или авторизованной оценки.
Вам не нужно запоминать библиотеку. Вам нужно понимать, почему вы выбрали скрипт.
Сохраняйте команду вместе с результатом
Сохраняйте вывод во время работы, чтобы другой человек мог воспроизвести сканирование.
Для удобных для чтения заметок:
sudo nmap -sV -oN scan.txt TARGET
Для XML, используемого другими инструментами:
sudo nmap -sV -oX scan.xml TARGET
Для основных форматов одновременно:
sudo nmap -sV -oA baseline TARGET
-oN записывает обычный вывод, удобный для чтения человеком. -oX записывает XML. -oA baseline создаёт:
baseline.nmap
baseline.xml
baseline.gnmap
Храните команду, цель, временную отметку, оператора и ссылку на авторизацию вместе с файлами. Также добавьте назначение. Используйте фактическую дату в описательном базовом имени, например:
lab-host-TARGET-YYYY-MM-DD
Замените YYYY-MM-DD датой сканирования. Храните результаты с контролируемым доступом, поскольку инвентаризация сервисов раскрывает структуру сети.
Превращайте открытые порты в вопросы
Начните с наблюдения, затем последовательно проработайте контекст:
- Подтвердите сервис и версию. Используйте
-sV, затем проверьте важные детали через владельца сервиса или другой авторизованный механизм контроля. - Спросите, должен ли сервис быть доступен. SSH на порту 22 может быть ожидаемым администрированием. HTTP на порту 80 может обслуживать внутреннее приложение. SMTP на порту 25 может принадлежать почтовой системе.
- Определите владельца и ожидаемую конфигурацию. Неизвестный сервис заслуживает эскалации, поскольку никто не может объяснить его назначение.
- Выберите следующее расследование. В зависимости от вопроса переходите к проверке конфигурации, аутентифицированной оценке, тестированию приложения, проверке firewall или управлению уязвимостями.
Номера портов дают зацепки. Они не дают вердикта.
filtered не является доказательством безопасности; это означает, что данное сканирование не смогло ответить на вопрос. Открытый порт — это наблюдение о доступности, тогда как для вывода о безопасности нужен контекст, например неавторизованный сервис, слабая конфигурация, устаревшая версия или подтверждённый результат тестирования.
Прекратите использовать Nmap, когда следующий вопрос касается аутентификации, поведения приложения, статуса исправлений или конфигурации. Эти вопросы относятся к владельцу или инструменту, предназначенному для ответа на них.
Выбирайте альтернативы по задаче
Выбор правильного инструмента зависит от задачи — поэтому мы написали гид по выбору инструментов для пентеста.
Nmap — правильная отправная точка, когда вам нужны объяснимые подробные результаты. Другие инструменты решают другие задачи.
| Инструмент | Лучше всего подходит | Компромисс |
|---|---|---|
| Nmap | Определение сервисов и ОС. NSE и подробное расследование | Широкие сканирования занимают время и требуют интерпретации |
| Masscan | Очень быстрое широкое обнаружение портов | Меньше контекста о сервисах и больший риск выхода за область работ |
| RustScan | Быстрое обнаружение, результаты которого можно передать в Nmap | Добавляет ещё один инструмент и уровень конфигурации |
| Онлайн-сканеры | Разведка без локальной установки | Меньше контроля над средой сканирования |
ScanSearch описывает Masscan как инструмент для очень широкого обнаружения, включая работу в масштабе интернета. Ограничивайте такой вариант использования явной авторизацией и тщательно определённой областью. Скорость увеличивает цену ошибки.
В сравнении Netalith описывается роль RustScan как инструмента для быстрого обнаружения портов с последующим использованием Nmap для получения деталей. Онлайн-сканеры заменяют локальную настройку меньшим контролем над тем, где и как выполняются запросы.
Используйте другой сканер, когда проблема заключается в масштабе или скорости и вы можете контролировать область работ. Выбирайте Nmap, когда результат должен объяснять, что было обнаружено, и поддерживать обоснованное следующее действие.
Используйте этот воспроизводимый рабочий процесс Nmap
Базовые команды — лишь одна часть полного процесса:
- Авторизуйте: зафиксируйте цель и разрешение. Укажите область, время и ограничения сканирования.
- Установите: выберите документированную среду Nmap и запишите её версию.
- Обнаружьте: найдите отвечающие хосты, когда диапазон адресов неизвестен.
- Просканируйте: проверьте распространённые TCP-порты, затем при наличии оснований расширьте сканирование на все порты.
- Интерпретируйте: рассматривайте
open,closedиfilteredкак результаты запросов. - Выполните перечисление: определите сервисы, версии, владельцев и ожидаемую конфигурацию.
- Составьте отчёт: сохраните команду, вывод, временную отметку и доказательства.
- Выберите следующий инструмент: переходите к проверке конфигурации, тестированию приложения, управлению уязвимостями или более быстрому сканеру, когда этого требует вопрос.
Определение ОС, UDP-сканирование и NSE — это осознанные последующие шаги. Они не относятся к каждому первому сканированию.
Используйте этот шаблон отчёта:
Target:
Authorization:
Command:
Time:
Observed states/services:
Owner:
Next question:
Если вы не можете заполнить эти поля, вы всё ещё сканируете; вы ещё не расследуете.