Попробовать
Назад к блогу

Nmap через прокси: что работает, что нет и почему

Nmap через прокси: что работает, что нет и почему

Направить трафик Nmap через прокси можно двумя путями: обернуть его в proxychains и использовать TCP-сканирование соединением (-sT) либо задействовать встроенную опцию --proxies, которую руководство ограничивает определением версий и скриптами NSE. Ни один из способов не превращает прокси в полноценный туннель для Nmap: сканирования SYN, UDP, пинг и определение ОС опираются на сырые пакеты, которые SOCKS- или HTTP-прокси передать не может. Понимание этой границы экономит часы на разборе непонятных результатов.

Это обзор для тех, кто запускает Nmap в рамках разрешенной работы по безопасности на своих системах или на тех, что тестирует по договору. Разберем, как прокси пересылает соединение, какие типы сканирования переживают такую пересылку, как выглядит базовая конфигурация proxychains и как читать вывод, пришедший через прокси.

Статические прокси

Стабильный выделенный выходной IP для разрешенного сканирования своих ресурсов

Попробовать

Сканируйте только то, что разрешено

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

  • Согласуйте рамки письменно — диапазоны IP, порты и временное окно — до того, как что-либо запускать с любого адреса.
  • Проверьте правила использования вашего прокси-провайдера. Многие сети ограничивают или запрещают сканирование; если формулировка неясна, сначала спросите поддержку.

Типичные законные причины сканировать через прокси: посмотреть, как выглядит ваш собственный периметр из другого региона, убедиться, что белый список фаервола пускает только адреса партнеров, и проверить собственные облачные ресурсы. Подробнее о прокси в защитной работе — на странице сценария кибербезопасность.

Как прокси пересылает соединение

SOCKS5-прокси или HTTP-прокси работает на уровне соединений. Программа просит прокси открыть TCP-сессию к указанному хосту и порту; прокси открывает ее со своей стороны и пересылает байты туда-обратно. Ваши исходные пакеты он при этом не ретранслирует. Если разница между прокси и пакетным туннелем нова, ее поясняет наш разбор что такое прокси-сервер.

Из одного этого факта следует все остальное. Приемы, при которых операционная система устанавливает обычное TCP-соединение, через прокси пройдут. Приемы, где Nmap собирает пакеты сам, — нет: прокси нечем переслать полуоткрытый SYN, UDP-датаграмму или ICMP-эхо.

Сканер открывает TCP-соединение к прокси, а тот открывает свое соединение дальше к цели
Прокси завершает одно TCP-соединение и начинает другое, поэтому сквозь него проходят только полные соединения

Какие типы сканирования переживают прокси

Возможность NmapНа чем держитсяПройдет через SOCKS/HTTP-прокси?
-sT, сканирование соединениемСистемный вызов connect(), полное рукопожатие TCPДа, через proxychains
Определение версий -sV и NSEПолные TCP-соединенияДа — случаи, названные в руководстве для --proxies
-sS, SYN-сканированиеСырые полуоткрытые пакетыНет
-sU, UDP-сканированиеСырые UDP-датаграммыНет
Обнаружение хостов (пинг) -snICMP и сырые зондыНет — отключайте через -Pn
Определение ОС -OСконструированные пакеты, фингерпринтингНет

Поэтому дружелюбное к прокси сканирование на практике — это сканирование соединением с отключенным обнаружением хостов: Nmap считает хост поднятым и пытается открыть настоящие соединения к перечисленным портам.

Встроенная опция --proxies и ее пределы

Руководство Nmap честно о ней говорит. Опция устанавливает TCP-соединения к цели через цепочку HTTP- или SOCKS4-прокси, заданных элементами proto://host:port через запятую, без авторизации. Руководство добавляет несколько оговорок: функция «еще в разработке и имеет ограничения», она «не влияет на фазы пинга, сканирования портов и определения ОС», и «пока от нее выигрывают только NSE и сканирование версий». Там же отмечено, что SSL-соединения и разрешение DNS на стороне прокси пока не поддерживаются.

Проще говоря, --proxies полезна, когда вы запускаете скрипты NSE или определение версий против сервиса и хотите, чтобы эти соединения шли от прокси, но обычное сканирование портов она не маршрутизирует. Поскольку в ней нет ни авторизации, ни SOCKS5, большинство выбирает proxychains.

proxychains со сканированием соединением

proxychains (поддерживаемый форк — proxychains-ng) перехватывает вызовы соединения программы и направляет их через прокси из конфигурационного файла. Он поддерживает SOCKS5 с логином и паролем, что подходит коммерческому прокси.

Минимальная конфигурация оставляет в списке один прокси и пускает через него DNS, чтобы запросы имен не утекали мимо:

# /etc/proxychains.conf
strict_chain
proxy_dns
[ProxyList]
socks5  198.51.100.14  1080  acct-fz42  Qm7tLp9x

Дальше достаточно добавить префикс к команде Nmap. Сканирование соединением нескольких явных портов на хосте из вашей области выглядит так:

proxychains4 nmap -sT -Pn -n -p 80,443,8080 scanme.example.net
  • -sT устанавливает полные TCP-соединения — единственное, что прокси пересылает.
  • -Pn пропускает обнаружение хостов, которое использовало бы сырые зонды, отбрасываемые прокси.
  • -n отключает собственный DNS Nmap, чтобы разрешение имен шло по правилу proxy_dns.
  • Короткий явный список портов ускоряет работу; прокси добавляет задержку к каждому соединению, поэтому полный проход по всем 65 535 портам через один прокси идет медленно.

Если многие соединения зависают, снизьте параллельность через --max-parallelism или --min-rate: часть прокси ограничивает число одновременно открываемых сессий.

Сканирование соединением проходит через прокси, а зонды SYN, UDP и пинга отбрасываются до него
До цели доходит только сканирование полным соединением; приемы на сырых пакетах останавливаются на прокси

Как читать результаты, пришедшие через прокси

Через прокси важны два отличия:

  • «Filtered» и «closed» различаются хуже. Вы видите только исход попытки connect(), поэтому таймаут прокси выглядит как отфильтрованный порт. Спорные находки повторяйте и по возможности сверяйте с прямым сканированием с разрешенного адреса.
  • Цель пишет в логи IP прокси, а не ваш. Часто в этом и смысл, но тогда лимиты и блокировки прилетают на адрес прокси. Здесь выручает чистый стабильный выходной IP: наши статические прокси держат один адрес на всю сессию, и видно, что именно увидела цель.

Для протоколов, которые прокси не несет, реалистичные варианты — сканировать с разрешенного хоста внутри целевой сети либо использовать SSH-туннель или VPN, который пересылает пакеты, а не соединения. Обычный SOCKS5-прокси для SYN- или UDP-сканирования не подходит, и никакой флаг этого не меняет.

Частые вопросы о Nmap через прокси

Можно ли сделать SYN-сканирование через прокси?

Нет. SYN-сканирование шлет сырые полуоткрытые пакеты, а SOCKS- или HTTP-прокси пересылает только готовые TCP-соединения. Используйте сканирование соединением (-sT) через proxychains или запускайте SYN-сканирование с разрешенного хоста в сети.

Чем proxychains отличается от опции --proxies?

proxychains оборачивает любую программу и поддерживает SOCKS5 с авторизацией, поэтому может маршрутизировать сканирование соединением. Встроенная --proxies поддерживает только HTTP и SOCKS4 без авторизации и, по руководству, помогает лишь определению версий и NSE, но не сканированию портов.

Зачем при сканировании через прокси нужен -Pn?

Обнаружение хостов использует ICMP и сырые зонды, которые прокси не пересылает, поэтому Nmap может решить, что хост выключен, и пропустить его. -Pn велит считать хост поднятым и сразу переходить к соединениям.

Скрывает ли сканирование через прокси, кто я?

Цель видит IP прокси, а не ваш, но это не делает несанкционированное сканирование законным. Сканируйте только свои системы или те, что тестируете по договору, и соблюдайте правила использования прокси-провайдера.

Можно ли сделать UDP-сканирование через SOCKS5-прокси?

Нет. UDP-сканирование опирается на сырые датаграммы, которые прокси уровня соединений не несет. Понадобится пакетный туннель вроде VPN на сети, которую вы вправе тестировать.