Лайфхаки

Маленькие, полезные хитрости

Создание обратного прокси-сервера Socks5 на PowerShell: Часть 1

11.09.2024 в 19:19

Создание обратного прокси-сервера Socks5 на PowerShell: Часть 1

Пишем reverse SOCKS5 proxy на powershell.Част.  Создание SOCKS5 прокси через SSH туннель

Среди различных возможностей использования SSH, есть возможность создания локального SOCKS5 прокси-сервера, трафик которого будет туннелироваться через удаленный сервер. В нашем материале мы разберем возможности использования двух популярных SSH клиентов - стандартной утилите ssh и популярного Windows клиента PuTTy.

Использование утилиты ssh

В стандартной утилите ssh, которая является частью набора программ OpenSSH и входит в стандартный набор программ Linux и Windows, создание туннелируемого прокси сервера SOCKS5 делается с помощью указания дополнительного параметра-D.

Например, если нужно подключиться к серверу с адресом 192.168.0.1 , используя имя пользователя root , с поднятием SOCKS5 прокси на 3128 порту, то строка подключения будет иметь следующий вид:

ssh -D 0.0.0.0:3128 root@192.168.0.1

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

Создание обратного прокси-сервера Socks5 на PowerShell: Часть 1

В этой статье мы рассмотрим, как создать локальный SOCKS5 прокси-сервер с помощью PowerShell, используя SSH клиенты. Этот метод позволяет туннелировать трафик через удаленный сервер, обеспечивая безопасное и анонимное соединение.

Использование стандартной утилиты ssh

Чтобы создать SOCKS5 прокси-сервер с помощью стандартной утилиты ssh, необходимо выполнить следующую команду:

ssh -D 3128 root@192.168.0.1

В этой команде:

  • -D 3128 - указывает порт, на котором будет запущен SOCKS5 прокси-сервер;
  • root - имя пользователя для подключения к удаленному серверу;
  • 192.168.0.1 - адрес удаленного сервера.

Использование PuTTy

Чтобы создать SOCKS5 прокси-сервер с помощью PuTTy, необходимо выполнить следующие шаги:

  1. Запустите PuTTy и введите адрес удаленного сервера в поле "Хост" (Host).
  2. В поле "Порт" (Port) укажите порт, на котором будет запущен SOCKS5 прокси-сервер (например, 3128).
  3. В меню "Соединение" (Connection) выберите "SSH" и в поле "Прокси" (Proxy) выберите "SOCKS5".
  4. Нажмите кнопку "Открыть" (Open) для подключения к удаленному серверу.

Подключение к SOCKS5 прокси-серверу

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

Например, если SOCKS5 прокси-сервер запущен на порту 3128, то в настройках браузера необходимо указать:

  • Тип прокси: SOCKS5;
  • Адрес: localhost;
  • Порт: 3128.

После этого все запросы браузера будут направляться через SOCKS5 прокси-сервер, обеспечивая безопасное и анонимное соединение.

Использование утилиты PuTTy

  1. Запускаем PuTTy, и выполняем стандартные процедуры - вписываем адрес сервера и его порт - к примеру, 192.168.0.1.Пишем reverse SOCKS5 proxy на powershell.Част.  Создание SOCKS5 прокси через SSH туннель
  2. После этого открываем " Connection - SSH - Tunnels ".Пишем reverse SOCKS5 proxy на powershell.Част.  Создание SOCKS5 прокси через SSH туннель
  3. Заполняем " Source port " (например, стандартными значениями 3128 или 8080). Отмечаем пункт " Dynamic ".Пишем reverse SOCKS5 proxy на powershell.Част.  Создание SOCKS5 прокси через SSH туннель
  4. Нажимаем кнопку " Add ". В строке " Forwarded ports " появится строка D3128, или с любым другим значением, которое было установлено в качестве Source port.Пишем reverse SOCKS5 proxy на powershell.Част.  Создание SOCKS5 прокси через SSH туннель
  5. Нажимаем кнопку " Open ".Пишем reverse SOCKS5 proxy на powershell.Част.  Создание SOCKS5 прокси через SSH туннель
  6. Откроется окно соединения с SSH сервером, где вам нужно будет ввести свой логин и пароль. После успешной авторизации, можно начинать пользоваться SOCKS5 прокси, которое будет работать по адресу 127.0.0.1:3128 (или любой другой самостоятельно указанный порт).При закрытии окна с подключением к SSH серверу, будет так же завершена работа и прокси-сервера.

Связанные вопросы и ответы:

Вопрос 1: Что такое reverse socks5 proxy

Reverse socks5 proxy - это тип прокси-сервера, который позволяет клиентам находиться за NAT-шлюзом или защищенными сетями, подключаться к серверу, используя протокол SOCKS5. Этот тип прокси-сервера используется для обеспечения доступа к сети из закрытых или защищенных сетей.

Вопрос 2: Как работает reverse socks5 proxy

Reverse socks5 proxy работает, используя двусторонний процесс соединения между клиентом и сервером. Клиент отправляет запрос на соединение с сервером, который, в свою очередь, отправляет запрос обратно на клиент. После этого, соединение устанавливается и клиент может передавать данные через это соединение.

Вопрос 3: Какие преимущества есть у reverse socks5 proxy

Преимущества reverse socks5 proxy включают в себя возможность подключения к сети из закрытых или защищенных сетей, а также обеспечение конфиденциальности и безопасности при передаче данных. Кроме того, reverse socks5 proxy позволяет избежать ограничений, которые могут быть наложены на сетевой трафик.

Вопрос 4: Как написать reverse socks5 proxy на PowerShell

Чтобы написать reverse socks5 proxy на PowerShell, необходимо использовать библиотеку Net.Sockets для создания сокета и обработки соединений. Также, необходимо использовать библиотеку System.Net для обработки запросов и ответов клиента.

Вопрос 5: Какие функции должен включать reverse socks5 proxy

Reverse socks5 proxy должен включать функции, такие как поддержка протокола SOCKS5, обработка соединений, а также обработка запросов и ответов клиента. Кроме того, reverse socks5 proxy должен обеспечивать конфиденциальность и безопасность при передаче данных.

Вопрос 6: Как можно защитить reverse socks5 proxy от атак

Чтобы защитить reverse socks5 proxy от атак, необходимо использовать меры безопасности, такие как фильтрация пакетов, ограничение доступа по IP-адресу, а также использование криптографических протоколов для защиты передаваемых данных. Кроме того, необходимо периодически обновлять и проверять код reverse socks5 proxy на наличие уязвимостей.

Что такое обратный прокси-сервер Socks5


  1. В условиях реальной сети с потерями практическая скорость прокси зачастую выше, чем у VPN-решений. Это вызвано тем, что при проксировании TCP-соединений ретрансмиты на участках клиент-прокси и прокси-целевой узел происходят независимо. Прокси имеет свои TCP-буферы и кратковременные задержки ввода-вывода в обе стороны не сказываются на передаче с противоположной стороны. VPN же работает только на сетевом уровне (IP) и потерянные сегменты TCP будут пересылаться по всей длине пути от VPN-клиента до целевого сервера.
  2. Гибкость. Проще настроить избирательное проксирование. Использование прокси можно ограничить конкретными приложениями, в браузере — конкретными доменами. Можно использовать несколько разных прокси для разных адресов назначения одновременно.
  3. Трудно обнаружить с помощью DPI, в том числе DPI осуществляющими активные пробы. Однако, для этого необходима некоторая донастройка. В случае с прокси через TLS, такое соединение можно выдать за обычное HTTPS-соединение. В случае с VPN факт его использования виден даже пассивному DPI. Даже если это Wireguard.
  4. Нет целого класса проблем с внезапно прервавшимся VPN-соединением. В худшем сценарии VPN-соединение может прерваться и пользователь не заметит, что его трафик уже не защищён и/или он уже работает со своего «домашнего» IP-адреса. В случае с прокси такие проблемы исключены.
  5. Нет принципиальной возможности проводить атаки, пускающие трафик мимо VPN-туннеля. Пример такой проблемы .
  6. Не нужны высокие привилегии в системе ни для клиента прокси, ни для сервера. Это может быть весьма полезно в случаях, когда у Вас нет высоких прав в системе.

Зачем нужен обратный прокси-сервер Socks5


Понятное дело, что сперва мы посмотрим в гугл и… не найдем ровным счетом ничего по этой теме (если кто-то нашел — кидайте ссылки в комменты). Есть толькоSocks5 на powershell, но это обычный «прямой» сокс, имеющий ряд своих недостатков (о них поговорим позднее). Можно, конечно, легким движением руки превратить его в обратный, но это будет только однопоточный сокс, что для нас не совсем то, что надо.Итак, мы не нашли ничего готового, поэтому нам придется все-таки изобрести свой велосипед. За основу нашего велосипеда мы возьмемобратного сокса на голанге, а клиента к нему реализуем на powershell. RSocksTun Итак, как же работает rsockstun?В основе работы RsocksTun (далее по тексту — rs) лежат два программных компонента — Yamux и Socks5 сервер. Socks5 сервер — это обычный локальный socks5, он запускается на клиенте. А мультиплексирование соединений к нему (помните про многопоточность?) обеспечивается с помощью yamux (). Такая схема позволяет запускать несколько клиентских socks5 серверов и распределять внешние подключения к ним, пробрасывая их через одно единственное TCP-соединение (почти как в meterpreter) от клиента к серверу, реализуя тем самым многопоточный режим, без которого нам просто не получится полноценно работать во внутренней сети.Суть работы yamux’а заключается в том, что он вводит дополнительный сетевой уровень стримов, реализуя его в виде 12-байтного заголовка для каждого пакета. (Здесь мы намеренно используем слово «стрим», а не поток, чтобы не путать читателя с программным потоком «thread» — это понятие мы так же будем использовать в данной статье). Внутри yamux заголовка содержатся номер стрима, флаги для установки/завершения стрима, количество передаваемых байт, размер окна передачи.Помимо установки/завершения стрима в yamux реализован механизм keepalive’ов, позволяющий отслеживать работоспособность установленного канала связи. Работа механизма keeplive-сообщений настраивается при создании Yamux-сессии. Собственно, из настроек там только — два параметра: enable/disable и периодичность отсылки пакетов в секундах. Keepalive-сообщения может отсылать yamux-сервер, так yamux-клиент. При получении keepalive-сообщения удаленная сторона обязана ответить на него посылкой точно такого же идентификатора сообщения (фактически — числа), который она приняла. В общем, keepalive — это тот же пинг, только для yamux.Подробно вся техника работы мультиплексора: типы пакетов, флаги установки и завершения соединений механизм передачи данных описана вк yamux.

Какие преимущества имеет PowerShell для создания обратного прокси-сервера Socks5

Вот так, тихо, без оваций и громких речей на Mikrotik завезли поддержку Socks5. Скромная строчка в релизе 6.47 - added support for SOCKS5 (RFC 1928) и ожидания пользователей mikrotik наконец то сбылись.

Краткая справка для тех кто не в теме:

SOCKS это разновидность прокси-сервера. Используется например для доступа к сайтам торрентов. В отличие от HTTP-прокси-серверов, SOCKS передаёт все данные от клиента, ничего не добавляя от себя, то есть с точки зрения конечного сервера, данные, полученные им от SOCKS-прокси, идентичны данным, которые клиент передал бы напрямую, без проксирования.

Отличие SOCKS 4 от SOCKS 5 состоит в том, что SOCKS 5 имеет поддержку сетевого протокола UDP, может работать в схемах со строгой аутентификацией, а также поддерживает сетевую адресацию IPv6 (которую планируют внедрить в будущем, так как современная IPv4 скоро исчерпает все свои возможности). SOCKS 5 дал возможность работы через прокси, даже тем программам, которые изначально не имели такой возможности.

Проще говоря соксы 5 продвинутей.

Настройка Socks5 сервера проста и не затейлива.

Как настроить сетевой трафик для работы с обратным прокси-сервером Socks5 на PowerShell. Настройка SOCKS5 на Mikrotik

Порт я обычно меняю на не стандартный, чтобы хоть чуть-чуть снизить нагрузку от сканящих все подряд ботов. Выбираем версию протокола 5 и метод аутентификации по паролю:

Как настроить сетевой трафик для работы с обратным прокси-сервером Socks5 на PowerShell. Настройка SOCKS5 на Mikrotik

Добавляем пользователя с паролем и на этом базовая настройка Socks5 сервера завершена.

Хотя я обычно добавляю еще ограничение на доступ по IP:

Как настроить сетевой трафик для работы с обратным прокси-сервером Socks5 на PowerShell. Настройка SOCKS5 на Mikrotik

Остается добавить правило в файрволл:

ip firewall filter add chain=input protocol=tcp dst-port=7777 action=accept comment="SOCKS5 TCP"

add chain=input protocol=udp dst-port=7777 action=accept comment="SOCKS5 UDP"или в winbox

Как настроить сетевой трафик для работы с обратным прокси-сервером Socks5 на PowerShell. Настройка SOCKS5 на Mikrotik

Для работы с проксей в хроме использую расширение Proxy Switcher, но он почему то не хочет использовать авторизацию.

Какие инструменты и технологии могут использоваться для создания обратного прокси-сервера Socks5 на PowerShell

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

Гугление в интернете (гуглим мы вроде нормально), а также поиск по гитхабу по ключевым словам «reverse socks» не дал особо много результатов. В основном, все сводится к построению ssh-туннелей с обратным пробросом портов и всего, что с этим связано. Помимо SSH-туннелей можно выделить несколько решений:

github.com/klsecservices/rpivot
Давняя реализация обратного туннеля от ребят из Лаборатории Касперского. По названию понятно, для чего предназначен этот скрипт. Реализован на Python 2.7, туннель работает в cleartext режиме (как модно сейчас говорить — привет РКН)

github.com/tonyseek/rsocks
Еще одна реализация на питоне, так же в cleartext, но возможностей больше. Написан в виде модуля и есть API для интеграции решения в свои проекты.

github.com/llkat/rsockstun
github.com/mis-team/rsockstun
Первая ссылка — изначальная версия реализации реверс сокса на голанге (не поддерживается разработчиком).
Вторая ссылка — уже наша доработка с дополнительными фишками, также на голанге. В нашей версии мы реализовали SSL, работу через прокси с NTLM-авторизацией, авторизацию на клиенте, лендинг-страницу при неверном пароле (вернее — редирект на лендинг-страницу), многопоточный режим (т.е. с туннелем могут работать несколько человек одновременно), систему пингов клиента на предмет того — живой он или нет.

github.com/jun7th/tsocks
Реализация обратного сокса от наших «китайских друзей» на питоне. Там же для ленивых и «бессмертных» лежит уже готовый бинарь (exe), собранный китайцами и готовый к использованию. Тут один только китайский бог знает, что в этом бинаре может быть еще, кроме основного функционала, так что используйте на свой страх и риск.

github.com/securesocketfunneling/ssf
Довольно-таки интересный проект на С++ для реализации обратного сокса и не только. Помимо обратного туннеля, он может делать проброс портов, создание командного шелла и т.д.

MSF meterpreter
Тут как говорится, без комментариев. Все мало-мальски образованные хакеры прекрасно знакомы с этой штукой и понимают, насколько легко ее обнаруживают средства защиты.

Все вышеописанные инструменты работают по схожей технологии: на машине внутри сети запускается заранее подготовленный исполняемый бинарный модуль, который устанавливает соединение с внешним сервером. На сервере запускается SOCKS4/5 сервер, принимающий подключения и транслирующий их на клиента.

Недостатком всех вышеперечисленных инструментов является то, что либо на клиентской машине необходим установленный Python или Golang (часто ли вы встречали установленный Python на машинах, к примеру, директора компании или офисных работников?), либо на эту машину необходимо тащить заранее собранный бинарь (фактически python и скрипт в одном флаконе) и запускать этот бинарь уже там. А загрузка exe с последующим его запуском — это еще та сигнатура для местного антивируса или HIPS.

В общем, вывод напрашивается сам собой — нам нужно решение на powershell. Сейчас в нас полетят помидоры — мол powershell — это уже все избито, он мониторится, блокируется и т.д. и т.п. На самом деле — далеко не везде. Ответственно заявляем. Кстати, существует уйма способов обойти блокировки (тут опять модная фраза про привет РКН ), начиная от тупого переименования powershell.exe -> cmdd.exe и заканчивая powerdll и т.п.

Как настроить сетевой трафик для работы с обратным прокси-сервером Socks5 на PowerShell


Прежде чем изобретать свой велосипед — необходимо сделать анализ существующих велосипедов и понять, действительно ли оно нам надо и, вероятно, не только мы задумались о необходимости такого функционального велосипеда.Гугление в интернете (гуглим мы вроде нормально), а также поиск по гитхабу по ключевым словам «reverse socks» не дал особо много результатов. В основном, все сводится к построению ssh-туннелей с обратным пробросом портов и всего, что с этим связано. Помимо SSH-туннелей можно выделить несколько решений:Давняя реализация обратного туннеля от ребят из Лаборатории Касперского. По названию понятно, для чего предназначен этот скрипт. Реализован на Python 2.7, туннель работает в cleartext режиме (как модно сейчас говорить — привет РКН)Еще одна реализация на питоне, так же в cleartext, но возможностей больше. Написан в виде модуля и есть API для интеграции решения в свои проекты.Первая ссылка — изначальная версия реализации реверс сокса на голанге (не поддерживается разработчиком).Вторая ссылка — уже наша доработка с дополнительными фишками, также на голанге. В нашей версии мы реализовали SSL, работу через прокси с NTLM-авторизацией, авторизацию на клиенте, лендинг-страницу при неверном пароле (вернее — редирект на лендинг-страницу), многопоточный режим (т.е. с туннелем могут работать несколько человек одновременно), систему пингов клиента на предмет того — живой он или нет.Реализация обратного сокса от наших «китайских друзей» на питоне. Там же для ленивых и «бессмертных» лежит уже готовый бинарь (exe), собранный китайцами и готовый к использованию. Тут один только китайский бог знает, что в этом бинаре может быть еще, кроме основного функционала, так что используйте на свой страх и риск.Довольно-таки интересный проект на С++ для реализации обратного сокса и не только. Помимо обратного туннеля, он может делать проброс портов, создание командного шелла и т.д. MSF meterpreter Тут как говорится, без комментариев. Все мало-мальски образованные хакеры прекрасно знакомы с этой штукой и понимают, насколько легко ее обнаруживают средства защиты.Все вышеописанные инструменты работают по схожей технологии: на машине внутри сети запускается заранее подготовленный исполняемый бинарный модуль, который устанавливает соединение с внешним сервером. На сервере запускается SOCKS4/5 сервер, принимающий подключения и транслирующий их на клиента.Недостатком всех вышеперечисленных инструментов является то, что либо на клиентской машине необходим установленный Python или Golang (часто ли вы встречали установленный Python на машинах, к примеру, директора компании или офисных работников?), либо на эту машину необходимо тащить заранее собранный бинарь (фактически python и скрипт в одном флаконе) и запускать этот бинарь уже там. А загрузка exe с последующим его запуском — это еще та сигнатура для местного антивируса или HIPS.В общем, вывод напрашивается сам собой — нам нужно решение на powershell. Сейчас в нас полетят помидоры — мол powershell — это уже все избито, он мониторится, блокируется и т.д. и т.п. На самом деле — далеко не везде. Ответственно заявляем. Кстати, существует уйма способов обойти блокировки (тут опять модная фраза про привет РКН :) ), начиная от тупого переименования powershell.exe -> cmdd.exe и заканчивая powerdll и т.п.