# nmap - сканирование портов и хостов _Команды · LinuxLab Knowledge Base_ **TL;DR:** nmap - сетевой сканер: discover хостов (-sn), TCP/UDP-порты (-sS/-sU), версии сервисов (-sV), ОС (-O), NSE-скрипты. Только в своей сети или с явным разрешением - сканировать чужое запрещено. ## Когда применять - Discover - какие хосты живут в подсети - Inventory - какие порты открыты, какие сервисы крутятся - Security audit - проверить что firewall закрыл то, что должен - Troubleshoot - почему клиент не подключается к порту? **Юридическое:** сканирование чужих сетей в большинстве юрисдикций незаконно. Сканируй только свою инфраструктуру или с письменным разрешением (red team engagement). ## Базовые типы сканирования ### Host discovery (`-sn`) Без сканирования портов - только пинг кто живой: ```bash sudo nmap -sn 192.168.1.0/24 Nmap scan report for 192.168.1.1 Host is up (0.0011s latency). Nmap scan report for 192.168.1.42 Host is up (0.052s latency). ``` Шлёт ICMP echo + TCP SYN на 80/443 + ARP в локалке. ARP надёжен на L2, ICMP может быть зафильтрован. ### TCP SYN scan (`-sS`) Самый быстрый и стандартный. Шлёт [[tcp-handshake|SYN]], получает SYN-ACK = open, RST = closed, нет ответа = filtered: ```bash sudo nmap -sS 192.168.1.42 PORT STATE SERVICE 22/tcp open ssh 80/tcp open http 443/tcp filtered https ``` - **open** - сервис принимает соединения - **closed** - порт доступен, но никто не слушает (RST) - **filtered** - firewall дропает (нет ответа) Нужны root-права (raw sockets). ### TCP connect scan (`-sT`) Без root - использует обычный `connect()`: ```bash nmap -sT 192.168.1.42 ``` Медленнее, шумнее в логах (полный handshake), зато из user-space. ### UDP scan (`-sU`) ```bash sudo nmap -sU -p 53,123,161 192.168.1.42 ``` Проблема UDP-сканирования: «нет ответа» = либо open, либо filtered. Закрытый порт шлёт ICMP unreachable, но rate-limited. Поэтому UDP-scan **долгий** - часто час на /24. ### Service version (`-sV`) ```bash nmap -sV -p 80,22,443 example.com PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 9.6 (protocol 2.0) 80/tcp open http nginx 1.24.0 443/tcp open ssl/http nginx 1.24.0 ``` Шлёт пробы и парсит ответ для определения версии. Полезно для vulnerability assessment. ### OS detection (`-O`) ```bash sudo nmap -O 192.168.1.42 Running: Linux 5.X OS details: Linux 5.4 - 6.5 ``` Анализ TCP-стэка - размеры окон, опции, behaviour. Не 100% точно. ## Полезные опции | Опция | Что | |-------|-----| | `-p 22,80,443` | конкретные порты | | `-p-` | все 65535 портов | | `-p 1-1024` | диапазон | | `-T0..T5` | timing - 0 paranoid, 5 insane | | `-A` | aggressive: -O + -sV + traceroute + scripts | | `-Pn` | не пинговать перед сканом (если ICMP блокирован) | | `-n` | без DNS | | `-oA result` | дамп в XML/grep/normal формат | | `--open` | только открытые порты в выводе | | `--top-ports 100` | 100 самых популярных портов | | `-iL hosts.txt` | список целей из файла | | `--reason` | почему порт классифицирован (SYN-ACK, RST, no-response) | ## NSE - Nmap Scripting Engine Сотни скриптов для глубокой проверки. Категории: - `safe` - не вредят - `default` - базовая проверка - `vuln` - известные уязвимости - `auth` - аутентификация / brute force - `discovery` - сбор информации ```bash nmap --script=default 192.168.1.42 nmap --script=vuln 192.168.1.42 nmap --script=ssl-enum-ciphers -p 443 example.com nmap --script=http-title -p 80 192.168.1.0/24 ``` Полезные скрипты: - `ssl-enum-ciphers` - какие cipher suites сервер поддерживает - `http-title` - заголовок страницы - `smb-os-discovery` - версия Windows / Samba - `dns-zone-transfer` - проверка AXFR - `vuln-cve2021-XXXX` - конкретные CVE ## Сканирование от хоста к хосту в локалке ARP-scan быстрее всего: ```bash sudo nmap -sn -PR 192.168.1.0/24 # ARP discovery ``` За ~3 секунды на /24 в localnet. ## Stealth и обход ### `-T` - timing - `-T0` (paranoid) - один пакет в 5 минут (для IDS-обхода) - `-T2` (polite) - 0.4с между пробами - `-T3` (default) - норма - `-T4` (aggressive) - быстрее, может терять пакеты на плохой сети - `-T5` (insane) - максимум, годится для локалки ### `-f` - фрагментация Делит TCP-пакет на 8-байтовые фрагменты. Старые firewall'ы могут пропустить. ### `--source-port` - фейковый source ```bash sudo nmap --source-port 53 192.168.1.42 ``` Эмулирует ответ DNS-сервера - может пройти firewall. ## Когда что-то пошло не так - **Все порты filtered** - firewall дропает SYN; попробуй `-Pn` если хост не отвечает на ICMP, или другой подход (`-sA` ACK scan) - **Сканирование зависает** - часто на UDP. Снизь количество портов или используй `-T4` - **Ложные «open»** - load balancer перед сервисом отвечает SYN-ACK на любой запрос, потом RST. `-sV` дисквалифицирует - **Тебя забанили** - агрессивный скан → IDS заблокировал. Используй `-T2` и таргетируй ## Полезные комбинации ```bash # Быстрая ревизия открытых портов в подсети sudo nmap -sS --top-ports 100 --open -T4 -n 192.168.1.0/24 # Полный аудит одного хоста sudo nmap -A -p- -T4 192.168.1.42 # SSL-аудит nmap --script=ssl-enum-ciphers -p 443 example.com # Сравнить два скана (изменилось что?) ndiff before.xml after.xml ``` ## Команды ```bash sudo nmap -sn 192.168.1.0/24 ``` Discover - кто живой в подсети, без сканирования портов ```bash sudo nmap -sS --top-ports 100 192.168.1.42 ``` Быстрый SYN-скан 100 популярных портов одного хоста ```bash nmap -sV -p 22,80,443 example.com ``` Версии сервисов на конкретных портах ```bash nmap --script=ssl-enum-ciphers -p 443 example.com ``` Какие cipher suites поддерживает HTTPS-сервер ```bash sudo nmap -A -p- 192.168.1.42 ``` Полный скан: все 65535 портов + версии + OS + NSE-скрипты. Долго! ## См. также - [Порт - как несколько сервисов делят один IP](/kb/port.md) - [TCP three-way handshake](/kb/tcp-handshake.md) - [UDP - User Datagram Protocol](/kb/udp-basics.md) - [IPv4-адресация и CIDR](/kb/ipv4-addressing.md) - [Conntrack - память Linux о всех сетевых соединениях](/kb/conntrack.md)