Содержание статьи
Nmap — инструмент разведки, который поможет тебе собрать информацию о сети и конкретных серверах и компьютерах. Ты увидишь, какие хосты живые, какие у них открыты порты и какие сервисы отвечают на этих портах. В некоторых случаях удается собрать максимально подробную информацию, включая конкретное ядро операционной системы.
info
В статье я буду писать про сканирование серверов. Но в качестве цели можно рассматривать любое сетевое устройство.
Хакеру Nmap предоставит начальный список векторов для атаки. Может оказаться, что на одном из портов висит уязвимое ПО и есть публичный эксплоит, который в две команды даст доступ к серверу. Глянь любой гайд по прохождению машин: каждый раз все начинается со сканирования (или, как еще говорят, «перечисления») портов при помощи Nmap. Например, можешь посмотреть недавнее прохождение машины Editor с Hack The Box.
У специалистов по защите Nmap тоже всегда под рукой: нужно знать, что «торчит наружу», то есть какие части инфраструктуры доступны извне периметра сети.
Иногда можно найти что‑то очень интересное. Например, такая ситуация: разработчики подняли сервис для тестов и забыли его закрыть, подарив хакерам прямой путь к эксплуатации. Или взять непропатченные версии ПО.
info
Возможно, ты слышал про атаку WannaCry. Крипточервь атаковал службу SMB на 445-м порте, у которой была публичная уязвимость и был патч, но не все его установили. Информация на компьютере шифровалась, за дешифровку злоумышленники требовали выкуп в биткоинах. Атака масштабная, заражено около 300 тысяч компьютеров, общий ущерб больше четырех миллиардов долларов.
В «хакерских» ОС (Kali Linux, HTB-версии ParrotOS и прочие) утилита предустановлена. В других Linux утилита доступна из стандартных репозиториев.
В Debian и Ubuntu пиши
sudo apt install nmap
В Fedora:
sudo dnf install nmap
В Arch:
sudo pacman -S nmap
Если пользуешь Windows, качай установщик Nmap.
На macOS можно поставить так же, но лучше воспользоваться пакетным менеджером Homebrew. Установив его, пиши в консоли
brew install nmap
Давай запустим первое сканирование.
ret0x2a@kali:~$ sudo nmap localhost --reason
Starting Nmap 7.95 ( https://nmap.org ) at 2025-12-17 00:14 EST
Nmap scan report for localhost (127.0.0.1)
Host is up, received localhost-response (0.0000060s latency).
Other addresses for localhost (not scanned): ::1
Not shown: 997 closed tcp ports (reset)
PORT STATE SERVICE REASON
22/tcp open ssh syn-ack ttl 64
5432/tcp open postgresql syn-ack ttl 64
8000/tcp open http-alt syn-ack ttl 64
Nmap done: 1 IP address (1 host up) scanned in 0.14 seconds
Изучив результат, ты можешь увидеть, что на компьютере три полностью открытых порта без фильтрации. На них висит SSH, СУБД PostgreSQL и что‑то, что обрабатывает HTTP-запросы. Это может быть API, админка или какой‑то сервер. Значит, есть три вектора для атаки.
Можно попытаться получить более подробную информацию по этим трем конкретным портам, добавив в команду параметры -p22, и -sV, который пытается определить вид и версии ПО.
Я добавил параметр --reason, чтобы Nmap давал пояснения к своим выводам. Остальные параметры по дефолту. В этот раз Nmap использовал тип сканирования TCP SYN. Утилита в этом случае сама формирует «сырой» TCP-запрос и анализирует ответ сервера. На трех портах сервер вернул SYN-ACK, что означает «порт открыт». Остальные порты вернули RST или сброс соединения — эти порты закрыты.
info
Полученный RST не всегда обозначает, что порт закрыт. Это актуально для сканирования вида TCP . Nmap интерпретирует RST, исходя из типа сканирования.
Команду мы запускали от имени суперпользователя, через sudo. В ином случае Nmap не смог бы полноценно работать с «сырыми» запросами и сбрасывать соединение без завершения рукопожатия. Сброс соединения в некоторых случаях помогает не оставлять следов сканирования в логах и делает сканы менее шумными.
«Сырые», или RAW, запросы позволяют Nmap установить нестандартные флаги в TCP-пакете. Операционная система не разрешает обычным пользователям такое поведение, требуя корректные пакеты и выполнение всего процесса соединения. Без прав root Nmap сканировал бы с полным рукопожатием (-sT).
Запуск сканирования с дефолтными параметрами равносилен такому запуску:
sudo nmap -sS -T3 localhost
Эти параметры указывают:
-
sS— тип сканирования TCP SYN. Стелс, который обеспечивается частичным рукопожатием; - по дефолту — сканировать только 1000 наиболее часто используемых портов. Для сканирования отдельных портов используй
-p<(без пробела и треугольных скобок). Чтобы проверить все 65 536 портов, вбивайPORT_NUMBER> -p-. Быстрая проверка топ-100 наиболее часто используемых портов —-F; -
T3— определяет временные задержки между запросами. Доступны значения отT0(Paranoid) с отправкой одного запроса каждые пять минут, доT5(Insane) — мегаагрессивное сканирование.
warning
Запуск без прав root равносилен команде sudo .
Порты, сервисы, рукопожатия
Перед тем как углубляться в типы сканирования и параметры Nmap, разберемся с базовыми понятиями. Ты явно встречал запись вида 192., которая указывает на порт 8080 у машины с IP-адресом 192.. Чтобы снять все вопросы, используем аналогию. Представь офисное здание. IP-адрес — это его адрес, а порты — это номера кабинетов.
В каждом кабинете находится фирма, которая выполняет какую‑то работу, — это и есть сервис. В 21-м кабинете канцелярия здания, которая отвечает за работу с документами. Через них ты можешь передать файлы или получить согласно своему доступу. Кабинет 110 принимает почтовые отправления, а 25-й отвечает за исходящую почту. В 3306-м расположен архив — база данных MySQL.
В одном здании может быть несколько похожих фирм. Например, в кабинете 80 раньше обрабатывали HTTP-запросы, выдавая каждому посетителю красивые страницы. Но с недавнего времени все перешли на более безопасный HTTPS, поэтому из 80-го кабинета тебя отправят в кабинет 443.
В кабинете 3000 тоже принимают HTTP, но там сидят любители JavaScript и работают на Node.js. Этот кабинет обрабатывает только запросы, построенные по определенной схеме, и представляет собой сервис API. В кабинете 8080 любители Python разместили админку. Все это сервисы работают с вебом, но выполняют разную работу.
Кабинеты могут быть в разных состояниях. Один открыт для свободного посещения любым желающим — он находится в состоянии open. В другом пусто, и он в состоянии closed. Третий может быть сегодня closed, а завтра в нем появится новая фирма и он станет open.
Есть кабинеты, в которые просто так не попасть. Доступ в них жестко фильтруется, для портов это значит, что они filtered. Чтобы каждый праздно шатающийся гражданин не узнал, какие конкретно кабинеты работают и что в них находится, администрация здания настроила файрвол. Его задача — догадаться, что идет сканирование, и максимально скрыть информацию. Чтобы обмануть фильтр, придуманы разные варианты сканирования.
Получилось не очень приветливое здание, но именно так и выглядит сервер для случайного посетителя. Администраторы не хотят, чтобы мамкины хакеры знали, что и где работает. Есть четко разрешенные кабинеты, к ним и обращайся.

Теперь подумай: как ты обычно входишь в неизвестный тебе кабинет? Стучишь, спрашивают «Кто там?», представляешься и входишь. В сетях этот процесс называется «рукопожатие». При работе с протоколом TCP твоя машина отправляет пакет SYN. В ответ прилетает либо сброс RST (значит, никого нет и кабинет, скорее всего, закрыт), либо ответное приветствие SYN-ACK, вроде «Кто там? Проходи!». После чего с твоей стороны летит подтверждающий пакет ACK — «я вхожу». Это весь процесс трехэтапного рукопожатия.

Иногда на твой SYN нет никакого ответа, даже RST. Это один из маркеров того, что порт фильтруется. Если внутри кто‑то есть, он тихонько передал информацию о твоем стуке в службу безопасности.

Сканировать можно не только TCP, но и UDP (параметр -sU). В этом случае стучать в дверь бесполезно. На такой двери есть ящик для писем. Ты бросаешь в него датаграмму и уходишь.
info
Датаграмма — это пакет данных, который, кроме самих данных, содержит информацию об источнике и получателе, плюс в нем указана длина самих данных и чек‑сумма.
Никаких рукопожатий в UDP нет, как и гарантий, что твои данные дойдут. Если порт открыт, в ответ может прилететь датаграмма от сервера. Но не факт, чаще всего в ответ не приходит ничего, и Nmap помечает порт как open|filtered. Закрытый порт отдаст пакет ICMP .
Виды сканирований
Ты уже знаешь основные типы сканирований:
-
-sT— полное соединение поTCP; -
-sS— сканированиеTCPсо сбросом соединения;SYN -
-sU— сканирование поUDP.
Продолжение доступно только участникам
Материалы из последних выпусков становятся доступны по отдельности только через два месяца после публикации. Чтобы продолжить чтение, необходимо стать участником сообщества «Xakep.ru».
Присоединяйся к сообществу «Xakep.ru»!
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
