Отправлять dns запросы через прокси при использовании socks 5

Обновлено: 06.07.2024

Каким образом можно резолвить хостнеймы через SOCKS5 proxy ?

Собственно, нужно просто чтобы все имена резолвились не локально или через выданный по DHCP DNS сервер, а через те сервера которые обслуживают сервер на котором стоит SOCKS5.

Пробовал найти хоть какую-то инфу по этому поводу, перепробовал кучу готовых решений типа WinCap, ProxyCap, FreeCap.

У них каким-то образом резолвится хостнейм и вместо реального адреса возвращается что-то типо 127.29.*.*

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

Буду благодарен если кто-то объяснит это.

Собственно, нужно просто зарезолвить хостнейм через ДНС сервер на SOCKS5 сервере.

Буду благодарен за любую помощь в данном вопросе.

1. установить руками 2. если dns не в одной подсети с вами то на форейволе сделать редирект 53 удп порта на тот сервер который вам нужен. 3. если в вашей подсети. то поднять опенвпн сервер, который не будет маршрутом по умолчанию, но будет менять днс.

Спасибо за ответ, дело в том, что сервера которые стоят на SOCKS5 серверах не публичные, то есть на запросы из вне не отвечают только из локально сети, насколько я понял. Так как если вручную прописать тот сервак, который выдается разными онлайн тулзами типо DnsLeak, то просто не резолвит хостнейм.

Вопрос такой, тогда чтобы конкретно, как узнать адрес DNS сервера который стоит на прокси сервере ? Если прокси сервер администрируется не мной, например выделенный приватный.

Отлично, спасибо большое, уже как раз думал что-то сам писать по RFC SOCKS5 чтобы UDP слать.

Обязательно попробую, только с современным вы погорячились конечно, последний коммит был сделан 5 лет назад)

Если кто-то еще знает подобные тулзы, буду благодарен, чтобы не изобретать велосипед.

Вопрос такой немного по матчасти. Может кто подскажет каким образом происходит инкапсуляция UDP пакета через SOCKS5, согласно RFC добавляется флаг 0x03 и это так и есть, но после этого и пару служебных полей идет сразу хостнейм. Каким образом эта штука работает ? Если как минимум должен быть DNS UDP пакет, в котором задан, класс, хостнейм и так далее + сам UDP пакет имеет порт и айпишник.

В предложенной вам либе нужно задавать все равно DNS сервер это и логично, сначала немного не допер, потом влепил вместо конкретного адреса 127.0.0.1 и порт 53. Соответственно пакет инкапсулируется в TCP и шлется на прокси сервак, а там уже локально резолвится.

Или каким образом происходит резолв ДНС на прокси сервере ?

Если как минимум должен быть DNS UDP пакет, в котором задан, класс, хостнейм и так далее

Ну так у вас в коде dns.message.make_query(qname, dns.rdatatype.ANY) вот это вот, что?

сначала немного не допер, потом влепил вместо конкретного адреса 127.0.0.1 и порт 53

не очень понятно зачем и работает только если на прокси на 127.0.0.1 кто-то dns поднял

Направляем все DNS запросы через socks прокси - зачем? Затем, чтобы "Большому брату" досталось меньше информации о нашей личной жизни. Направление всех ДНС запросов через socks прокси скроет от Вашего провайдера список посещаемых Вами веб-сайтов.

Для тех кто не в курсе о том, что такое DNS (система доменных имён - Domain Name System): коротко, DNS является своего рода адресной книгой веб-сайтов, примерно как Ваша записная телефонная книжка, в которой по имени Вы находите номер телефона нужного субъекта, как и компьютер, а вернее ОС, по доменному имени (например www.example.com) в ДНС ищет ИП адрес. Нагляднее в видео-ролике "DNS Explained - YouTube":

Доказываем значимость перенаправления DNS запросов через socks

Дело в том, что когда ОС обращается с запросом к DNS серверу нашего провайдера, большинство из которых законодательно обязали хранить весь входящий и исходящий Интернет-трафик своих пользователей, то в лог. файлах ДНС серверов сохраняются все доменные имена, а также дата/время/ИП и пр., которые запрашивал пользователь.

Таким образом наш провайдер, а также все спецслужбы с ним работающие, при желании может иметь на руках полную картину нашей жизни в сети Интернет - получить список всех доменных имен (веб-сайтов), время и дату посещения. Имея на руках подобную статистику можно составить примерный список предпочтений и интересов отдельного пользователя, составить график его работы/отдыха/досуга, выяснить тип ОС и ПО, которое установлено на компьютере пользователя.

В случае, когда мы перенаправим все DNS запросы через сокс прокси, то в лог файлах нашего провайдера будут светится только IP-адреса посещаемых ресурсов, а как многим известно на одном IP адресе могут одновременно размещаться сотни, а то и тысячи веб-сайтов (доменных имён). Таким образом провайдеру или кому-то ещё будет затруднительно выяснить список посещаемых нами веб-ресурсов, хотя эту информацию можно будет вытянуть из заголовков IP-пакета (HTTP запроса), таких как "Request-Line", "Host", "User-Agent".

А почему бы нам просто не юзать сторонние ДНС сервера, такие как например "Comodo SecureDNS", "Norton DNS" или "Google Public DNS"? Именно сторонние DNS сервера мы и будем использовать, но только через сокс прокси, а не на прямо имхо DNS запросы также как и DNSSEC запросы не шифруются и передаются по сети в открытом виде. Про использование "Google Public DNS" в приватной жизни рекомендую забыть сразу же!

В некоторых веб-браузерах есть параметр позволяющий направлять все DNS запросы через socks прокси, например для Firefox - это " network.proxy.socks_remote_dns = true " на странице конфигурации " about:config ". Но, такие фокусы доступны не для всех браузеров и не доступны для прочего ПО, такого как ICQ, Skype, менеджеры закачек, системные вызовы svchost.exe etc..

Благо в своём стремлении быть в тени анонимус не один. Представляем Вашему вниманию относительно молодую (первая версия от 2012-01-13) чудо-программу DNS2SOCKS, которая поможет нам организовать socks туннель для всех наших ДНС запросов, включая ДНС запросы со стороны ICQ, Skype, менеджеров закачки, системных вызовов svchost.exe и пр..

Как работает DNS2SOCKS? Параметры программы:

Пишем bat/cmd файл для скрытого (без консольных окон) запуска DNS2SOCKS:

Только после полного отключения блокировщика скриптов и рекламы на этом месте появится полезная подсказка/ссылка/код/пример конфигурации/etc!

В примере выше мы запустили две копии программы, чем создали socks туннель для всех наших ДНС запросов на локальном интерфейсе " 127.0.0.1:53 " (ListenIP:Port) и " 127.0.0.2:53 ", с направлением запросов к "Comodo SecureDNS" серверам (8.26.56.26:53 и 8.20.247.20:53), через локальный TOR сервер.

Теперь в настройках нашего сетевого подключения достаточно удалить все старые ДНС сервера и вписать туда наши 127.0.0.1 и 127.0.0.2. Только нужно помнить что, если используется провайдер локальной сети, то при удалении его ДНС серверов из списка могут стать недоступны внутренние сервисы локальной сети. В таком случае нужно поставить ДНС сервер своего провайдера локальной сети последним в списке предпочтения (например "Сетевые подключения - Подключение по локальной сети - Общие - Протокол Интернета (TCP/IP) - Использовать следующие адреса ДНС-серверов"):

set-own-dns-servers-for-network-settings

На вкладке "Дополнительно - ДНС" можно указать дополнительные ДНС сервера.

Туннелирование DNS запросов: что дальше

Рекомендуемый контент

Вы не любите рекламу!? Напрасно!:) На нашем сайте она вовсе ненавязчивая, а потому для нашего сайта можете полностью отключить AdBlock (uBlock/uBlock Origin/NoScript) и прочие блокировщики рекламы! AdBlock/uBlock может препятствовать нормальной работе системы поиска по сайту, отображению рекомендуемого контента и прочих сервисов Google. Рекомендуем полностью отключить блокировщик рекламы и скриптов, а также разрешить фреймы (aka iframe).

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

  • В первом разделе мы закончим разговор про централизованные решения для «анонимности»: VPN, SSH, SOCKSx.
  • Во втором — рассмотрим конкретные утечки деанонимизирующих данных.


Централизованные средства «анонимности»

Сразу отмечу главное: никакое централизованное решение высокий уровень анонимности обеспечить не может, так как необходимо доверять центральному узлу.
Мы не будем рассуждать об организационных, политических и бюрократических сложностях на пути раскрытия анонимности.
Возможно, VPN-сервер в Панаме действительно более безопасен, чем такой же сервер в Испании. А возможно — нет.
Также как и не будем говорить про цепочки узлов, так как их надежность с трудом поддаётся оценке. С одной стороны, в виду организационных сложностей, риск раскрытия ниже, а с другой — мы должны быть достаточно уверены в каждом узле.
Перейдём к конкретике.

  • X-Forwarded-For: client1, proxy1, proxy2 …
  • X-Forwarded-For: 169.78.138.66, 169.78.64.103…

SOCKS-прокси, как вы помните, никаких заголовков не передают.

Рассмотрим разницу между SOCKS 4, 4a и 5. Существуют разные версии SOCKS:

  • SOCKS4. Такие серверы требуют от клиента, например, веб-браузера, только ip-адрес ресурса, к которому он обращается (адресата). Следовательно, клиенту надо как-то этот ip-адрес узнать, а узнать его клиент может только прямым DNS-запросом в обход прокси. Это может привести к деанонимизации, так как интернет-провайдер может видеть DNS-запросы в открытом виде, данная уязвимость называется DNS-leaks, она описана далее, во второй части статьи.
  • SOCKS4a. Является расширением SOCKS4. Главное отличие состоит в том, что SOCKS4a-сервер принимает от клиента только DNS-имя адресата, а не его ip-адрес. Это бывает необходимо, когда клиент не может самостоятельно определить ip-адрес адресата по DNS-имени.
  • SOCKS5. Также является расширением SOCKS4. Сервер SOCKS5 поддерживает UDP, IPv6, авторизацию и пр. И хотя SOCKS5-прокси могут принимать от клиента как ip-адрес, так и DNS-имя целевого ресурса, некоторые приложения, поддерживающие SOCKS5, могут сами получать ip-адрес адресата до того, как обратиться к SOCKS5-прокси, что также может привести к утечке DNS-запросов.
SSH. Сравнение SSH и VPN


SSH туннель — это туннель, создаваемый посредством SSH-соединения и используемый для шифрования передаваемых данных. Как гласит одноимённая статья в Википедии: «SSH (англ. Secure SHell — «безопасная оболочка») — сетевой протокол прикладного уровня, позволяющий производить удалённое управление операционной системой и туннелирование TCP-соединений (например, для передачи файлов)».
При использовании SSH-туннеля открытый траффик какого-либо протокола шифруется на одном конце SSH-соединения, клиенте, и расшифровывается на другом, SSH-сервере.
Схема работы SSH-туннеля показана на рисунке:

Протокол SSH поддерживает несколько вариантов работы:

Сравним VPN и SSH с точки зрения анонимности.

Цели
Исторически VPN и SSH предназначались для разных целей, что и объясняет их плюсы и минусы.

  • VPN призван обеспечить защищённый удалённый доступ к ресурсам корпоративной сети. Как только компьютер подключается к VPN-серверу, он становится частью «локальной» сети, а, следовательно, может получать все её сервисы: общие ресурсы, локальный сервис VoIP, также становятся возможными NetBios-, UDP-, и широковещательные запросы, единые VPN-политики и т.д. Через VPN в большинстве случаев отправляется траффик всей операционной системы и приложений.
  • SSH изначально предназначался для защищенного удаленного управления устройствами. SSH-соединение — это соединение с «конкретным устройством», а не с «сетью». Хотя мастера SSH могут делать с помощью него много крутых вещей.

Безопасность
Протоколы VPN и SSH достаточно безопасны за исключением разве что PPTP. Большинство возможных атак сводится к Man-in-the-middle и подмене сертификатов или ключей, однако это проблема аутентификации и внимательности пользователя.


Удобство
Удобство — понятие условное и субъективное, оно зависит от ваших целей и опыта.

К VPN-серверу легко подключиться, но для новичков может быть непросто его настроить.
Тогда как SSH-сервер более прост в настройке, но, например, вручную настраивать SSH-туннель для каждого приложения кому-то может показаться не совсем удобным.

Скорость
Скорость каждого средства зависит от конкретной реализации и используемых протоколов. Если сравнивать SSH и OpenVPN, поделюсь уже проведённым исследованием:

  • network — 96.5 Mbps.
  • network/SSH — 94.2 Mbps.
  • network/VPN — 32.4 Mbps.

Подводя итог, стоит отметить, что VPN-серверы более популярны, чем SSH. В интернете существует много коммерческих VPN-провайдеров. Однако и SSH-туннели тоже продаются в избытке на специализированных форумах.
Что разворачивать на своём сервере в Антарктиде — дело ваше.

Полезный совет

Иногда бывает ситуация, когда VPN-соединение по каким-либо причинам может разрываться. Если в случае с прокси-сервером, сетевое взаимодействие прекращается, то в случае с VPN траффик продолжит идти напрямую. Наиболее надёжным вариантом для недопущения этого является использование таблицы маршрутизации, где в качестве основного шлюза по умолчанию указан только шлюз VPN-сервера.
Делается это просто:
1. Удаляем любые маршруты по умолчанию:

2. Разрешаем доступ в интернет только к адресу VPN-сервера:

3. Добавляем маршрут по умолчанию со шлюзом – VPN-сервером:

Где: 192.168.0.1 — шлюз интернета, 55.55.55.55 — VPN-шлюз.
Еще одним способом является установка в свойствах открытого интернет-соединения несуществующих DNS-серверов, например, 127.0.0.1. В таком случае веб-сёрфинг и другие подобные задачи становятся невозможными без подключения к VPN-серверу.
Также существуют специальные программы, например, VPN-watcher, которые для заданных приложений проверяет VPN-соединение несколько раз в секунду и приостанавливает их работу, если VPN-соединение обрывается.
Спасибо за еще один способ: «Еще один способ обезопасить себя от разрыва vpn — это настройка файрвола. Подойдет в том числе и стандартный windows firewall. Есть инструкция с картинками. Причем блокирующие правила можно не создавать, а ограничиться 10-м пунктом. Для отдельных программ (например для openvpn) можно отдельно создать разрешающие правила, чтобы эти программы работали даже если впн не подключен.»
Спасибо за еще один способ: «Я думаю, если строить защищённую конструкцию, то следует просто выделять две сессии — защищённую и не защищённую. Лидера сессии положить в cgroups, откуда не-vpn интерфейс просто не доступен для использования — в этом случае информация будет отправляться только через этот интерфейс.«

Деанонимизирующие данные и возможные уязвимости


Посмотрим, какую идентификационную информацию о себе мы можем передать в интернет. Я не буду рассматривать уязвимости (в том числе и 0day) в программах, эксплуатация которых может привести вообще к полному контролю за компьютером.

Общее

IP-адрес. Самый «популярный» идентификатор в сети. Его ценность может быть разной в различных ситуациях, но как правило именно раскрытием ip-адреса принято пугать сетевых «анонимусов».
Решение: со скрытием ip-адреса справляются средства, описанные в первой статье: «Как быть анонимным в сети.«

Профилирование возникает, когда большая часть траффика долго выходит в интернет через один узел, например, Тоr. Тогда появляется возможность отнести увиденную активность к одному псевдониму. Выходной узел может и не знать ваш ip-адрес, но будет знать, что вы делаете.
Решение: не использовать постоянные цепочки Tor, регулярно менять выходные узлы (VPN-серверы, прокси-серверы), либо, забегая вперёд, использовать дистрибутив Whonix.

MitM-атаки направлены на прослушивание и модификацию траффика на выходном узле, например Tor или любом прокси-сервере. Интересным вариантом является модификация выходным узлом цифровых подписей, GPG- или SSL-отпечатков, хеш-сумм скачиваемых файлов.
Решение: быть внимательным при появлении предупреждений о валидности сертификатов и ключей.

Деанонимизирующая активность в анонимном сеансе. Например, когда клиент из анонимного сеанса заходит на свою страницу в соцети, то его интернет-провайдер об этом не узнает. Но соцсеть, несмотря на то, что не видит реальный ip-адрес клиента, точно знает, кто зашёл.
Решение: не допускать никакой левой активности в анонимном сеансе.

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

Определение авторства текста. Подробнее здесь. Приложение может сравнить текст написанный анонимно и другой открытый текст, точно принадлежащий автору, и определить с высокой степень вероятности совпадение авторства.
Решение: шутки-шутками, но эта тема пока не достаточно изучена. Можно посоветовать прятать текст, который можно однозначно связать с вами. Тогда не с чем будет сравнивать и анонимный текст.

MAC-адрес сетевого интерфейса становится известен wi-fi точке доступа при подключении к ней клиента.
Решение: если переживаете за то, что точка доступа запомнит MAC-адрес вашего интерфейса, просто поменяйте его до подключения.

Что могут рассказать Браузеры?

Скрипты Javascript, исполняемые на стороне клиента, могут собрать для сервера еще больше информации, в том числе и явно его идентифицирующей. Более того, если посещаемый нами сайт подвержен XSS, то включенные на нём скрипты Javascript помогут злоумышленнику провести успешную атаку со всеми вытекающими последствиями.

Web Bugs — это невидимые детали веб-страниц, используемые для мониторинга посещений сайта, способны дополнительно отсылать серверу разные данные о клиенте. Web Bugs от Гугла широко распространены по всему интернету.

Приложения

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

Решение: не использовать в анонимном сеансе любое недоверенное и непроверенное приложение.

Скрытие вашей личности в Интернете с помощью Linux-система на самом деле очень проста, и все это без необходимости нанимать VPN сервис вроде тех, что существуют сегодня. Такие дистрибутивы, как Kali Linux, используются для аудита безопасности Wi-Fi сети, Интернет, серверы и т. д. Однако операционные системы, такие как Debian или Ubuntu также широко используются для этих задач. Сегодня в этой статье мы собираемся научить вас шаг за шагом, как скрыть свою личность при просмотре Интернета, используя Tor, а также инструмент Proxychains для Linux.

Что такое проксичейны?

Используйте Proxychains и Tor в Linux, чтобы быть анонимным

Наконец, proxychains позволяет вам определять максимальное количество связанных прокси. Мы должны принять во внимание этот последний аспект: чем больше прокси мы связываем, тем выше будет наша анонимность, потому что трафик «прыгает» с одного сервера на другой, однако производительность, которую мы достигаем, будет очень низкой, как с точки зрения скорость, а также задержка (задержка соединения будет очень высокой).

Благодаря использованию сети Tor мы можем настроить сеть Tor в Proxychains для выхода в Интернет через эту анонимную сеть без необходимости использования специального программного обеспечения, такого как Tor. Браузер который служит для навигации по сети Tor без необходимости дополнительной настройки нашей команды.

Установка Tor и Proxychains в Linux

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

sudo apt update && sudo apt upgrade

Мы дождемся обновления репозиториев и установки всех обновлений, прежде чем продолжить этот процесс. После обновления нашей системы мы установим в нее Tor из тех же репозиториев, набрав:

sudo apt install tor proxychains


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

sudo service tor start

И проверяем правильность запуска с помощью:

sudo service tor status


Теперь, когда у нас активирован сервис Tor, мы собираемся произвести необходимую настройку в Proxychains для выхода в Интернет через сеть Tor.

Конфигурация Proxychains для выхода через Tor

Когда Tor уже запущен, мы собираемся изменить файл конфигурации Proxychains, для этого мы введем:

sudo nano /etc/proxychains.conf

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


Конфигурация будет следующей:


Как видите, мы можем настроить следующие параметры:

  • Dynamic_chain: цепочка прокси будет динамической.
  • Strict_chain: цепочка прокси будет статической, как мы определили.
  • Random_chain: цепочка прокси будет случайной
  • Chain_len: длина цепочки, максимум 2 или как хотите.

Теперь нам нужно будет выполнить очень важную дополнительную конфигурацию, а именно настроить SOCKS5, который мы хотим, для этого нам нужно будет разместить эту конфигурацию внизу: socks5 127.0.0.1 9050


  • Proxy_dns: если мы хотим, чтобы трафик DNS-запросов также проходил через прокси, чтобы избежать утечки данных.
  • tcp_read_time_out и tcp_connect_time_out - внутренние параметры, рекомендуется не трогать их, если вы не знаете, что делаете.

С помощью этих шагов у нас есть все готово для запуска веб-браузера с использованием прокси-цепочек для выхода в Интернет через сеть tor.

Запускайте веб-браузер или программы с прокси-цепочками

После того, как мы настроили прокси-цепочки, теперь нам нужно будет запустить веб-браузер с использованием прокси-цепочек, например, мы могли бы выполнить следующую команду, чтобы открыть определенный веб-сайт через сеть Tor:

При выполнении в консоли мы можем видеть все, что proxychains делает внутри:



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

Если вы хотите запустить любую другую программу с доступом в Интернет через этот настроенный нами прокси, вам просто нужно будет запустить «proxychains», а затем программу, которую мы хотим. Например, проксичейны широко используются пентестерами для удаленного анонимного сканирования портов, таким образом, если мы выполняем:

proxychains nmap -p 53 8.8.8.8

Мы можем выполнить сканирование портов на основе настроенного нами прокси, таким образом, будет отображаться не наш реальный общедоступный IP-адрес, а адрес настроенного прокси.

Мы надеемся, что с помощью этого руководства вы сможете просматривать и выполнять различные действия в Интернете анонимно, используя сеть Tor или любой другой анонимный прокси-сервер, который мы можем настроить в этой мощной и простой в использовании программе Proxychains.

Читайте также: