Когда применять
- Discover - какие хосты живут в подсети
- Inventory - какие порты открыты, какие сервисы крутятся
- Security audit - проверить что firewall закрыл то, что должен
- Troubleshoot - почему клиент не подключается к порту?
Юридическое: сканирование чужих сетей в большинстве юрисдикций незаконно. Сканируй только свою инфраструктуру или с письменным разрешением (red team engagement).
Базовые типы сканирования
Host discovery (-sn)
Без сканирования портов - только пинг кто живой:
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:
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():
nmap -sT 192.168.1.42
Медленнее, шумнее в логах (полный handshake), зато из user-space.
UDP scan (-sU)
sudo nmap -sU -p 53,123,161 192.168.1.42
Проблема UDP-сканирования: «нет ответа» = либо open, либо filtered. Закрытый порт шлёт ICMP unreachable, но rate-limited. Поэтому UDP-scan долгий - часто час на /24.
Service version (-sV)
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)
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 forcediscovery- сбор информации
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 / Sambadns-zone-transfer- проверка AXFRvuln-cve2021-XXXX- конкретные CVE
Сканирование от хоста к хосту в локалке
ARP-scan быстрее всего:
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
sudo nmap --source-port 53 192.168.1.42
Эмулирует ответ DNS-сервера - может пройти firewall.
Когда что-то пошло не так
- Все порты filtered - firewall дропает SYN; попробуй
-Pnесли хост не отвечает на ICMP, или другой подход (-sAACK scan) - Сканирование зависает - часто на UDP. Снизь количество портов
или используй
-T4 - Ложные «open» - load balancer перед сервисом отвечает SYN-ACK
на любой запрос, потом RST.
-sVдисквалифицирует - Тебя забанили - агрессивный скан → IDS заблокировал. Используй
-T2и таргетируй
Полезные комбинации
# Быстрая ревизия открытых портов в подсети
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