Socks прокси что это
HackWare.ru
Этичный хакинг и тестирование на проникновение, информационная безопасность
Всё о прокси: виды, как пользоваться, как проверить качество прокси
Оглавление
Что такое прокси, чем они различаются, виды прокси
В этой статье мы рассмотрим всё самое важное о прокси: что такое прокси, какие бывают виды прокси, чем они различаются. Мы заглянем во внутрь их работы: увидим, как эти прокси раскрывают наш настоящий IP в своих заголовках и научимся самостоятельно перепроверять анонимность прокси.
Прокси — это программа, которая выполняет действие для другой программы, то есть является посредником. Весь этот процесс называется проксированием.
Веб прокси — это разновидность прокси, которые предназначены для выполнения запросов к веб-сайтам и веб-приложениям.
Веб-прокси могут быть использованы для следующих целей:
На самом деле, что прокси, что веб-прокси — это собирательное название, которое включает в себя много различных программ и протоколов для выполнения данной функции.
Поскольку иногда прокси используются для анонимности и сокрытия реального IP адреса, необходимо чётко представлять как они работают и варианты их настройки, чтобы точно понимать возможные риски.
Зададимся вопросом: использование веб-прокси означат ли, что наш IP адрес обязательно скрыт от сайта, к которому мы обращаемся? Ответим на этот вопрос чуть позже.
Рассмотрим виды прокси с технической точки зрения, а именно по видам протоколов:
HTTP прокси: позволяют посещать веб-сайты и загружать файлы по протоколу HTTP (запросы передаются в виде обычного текста, без шифрования).
HTTPS прокси: (также называются SSL прокси): с этими прокси вы можете просматривать сайты по протоколам HTTP и HTTPS (данные передаются в зашифрованном виде). Со специальным программным обеспечением они могут использоваться с любым протоколом, таким как SOCKS прокси.
Необходимо отметить, что рассмотренные выше прокси не скрывают перед третьей стороной (к которой они делают запрос) тот факт, что к ней обращается прокси. Довольно часто они добавляют HTTP заголовки, характерные для прокси, а иногда даже (в зависимости от настроек) могут показывать в заголовках IP адрес узла, для которого они делают запрос. То есть, использование прокси не означает что ваш IP адрес надёжно скрыт от сайта, к которому вы обращаетесь!
SOCKS 4 прокси: может использоваться с любым TCP/IP протоколом с любым адресом назначения и портом. В отличие от HTTP-прокси-серверов, SOCKS передаёт все данные от клиента, ничего не добавляя от себя, то есть с точки зрения конечного сервера, данные, полученные им от SOCKS-прокси, идентичны данным, которые клиент передал бы напрямую, без проксирования. SOCKS более универсален, он не зависит от конкретных протоколов уровня приложений (5-го уровня пятислойной гибридной модели) и оперирует на уровне TCP-соединений (4‑й уровень гибридной модели). Зато HTTP-прокси кэширует данные и может более тщательно фильтровать содержимое передаваемых данных.
SOCKS 5: в дополнении к возможностям SOCKS 4, также может использовать UDP протокол, делать DNS запросы и использовать функцию BIND для перенаправления портов, поддерживает доменные имена и адреса IPv6. И, пожалуй, главной отличие — это поддержка аутентификации. То есть можно установить логин и пароль, без которых невозможно пользоваться прокси.
Какой тип прокси выбрать? В первую очередь это зависит от того, какие типы прокси поддерживает программа, которой вы собираетесь пользоваться. Если она поддерживает только один вид прокси, то ответ очевиден. Если поддерживается несколько видов прокси, то предпочтение можно отдать SOCKS 5 как самому универсальному варианту.
Анонимность прокси
Анонимность это интересный вопрос — в данном случае мы говорим об анонимности для сайта, к которому выполняется запрос. Владелец прокси в любом случае видит IP. Но сам прокси может передавать IP адрес и сайту, для которого делается запрос. Рассмотрим следующую классификацию прокси по анонимности:
Без анонимности: удалённый хост знает ваш IP адрес и знает, что вы используете прокси.
Низкая анонимность (ещё называют прозрачными, транспарентными прокси): удалённый хост не знает ваш IP, но знает, что вы используете прокси.
Средняя анонимность: удалённый хост знает, что вы используете прокси и думает, что знает ваш IP, но этот IP не ваш (это обычно многосетевые прокси, которые для целевого хоста показывают свой входящий интерфейс как REMOTE_ADDR).
Высоко анонимные: удалённый хост не знает ваш IP и не имеет прямых доказательств использования прокси (строк HTTP заголовков, которые любят отправлять прокси). Если такие хосты не отправляют дополнительных строк заголовков, то их можно рассматривать как высоко анонимные. Если анонимный прокси поддерживает keep-alive, то его можно считать крайне анонимным. Тем не менее такие хосты скорее всего являются honey-pot (приманками, для наблюдения за действиями пользователей и выявления новых способов атак и совершённых взломов).
Нужно отметить, что такое разделение по видам анонимности применим только к HTTP прокси. И основывается такое разделение только на том, добавляют ли эти прокси заголовки к вашему запросу или нет — далее мы сможем своими глазами увидеть эти заголовки.
SOCKS4/5 в принципе не может ничего добавить к заголовкам HTTP протокола, поскольку работают на другом уровне (на уровне протокола TCP).
HTTPS (SSL) прокси также не могут добавить никакие заголовки, поскольку HTTPS трафик проходит через них в зашифрованном виде. Тем не менее обычно HTTPS прокси также поддерживают и работу с HTTP — и если с сайта придёт запрос с использованием этого протокола, то прокси может отправить ваш IP адрес в заголовке. Запомним это — эта информация нам очень скоро пригодиться: то есть заголовки можно добавлять только к HTTP трафику, но HTTPS прокси не является гарантией анонимности, поскольку сайт может отправить запрос по HTTP протоколу и мы не знаем, как поведёт себя прокси.
Можно ещё упомянуть другие свойства прокси: аптайм (какую долю времени они доступны, то есть работают), их пропускную способность, принадлежность к стране и другие характеристики.
Где скачать списки прокси
Подготовленные списки прокси (спарсенные адреса и порты записаны в удобном для применения формате):
Как включить прокси
Прокси можно включить на уровне приложения или на уровне операционной системы.
При включении прокси в определённой программе, только она будет выходить в Интернет через прокси, а остальные приложения будут подключаться напрямую.
При включении прокси на уровне операционной системы это не гарантирует, что все программы будут выходить в Интернет через прокси — некоторые программы игнорируют системные настройки прокси.
О включении прокси на уровне операционной системы смотрите разделы (в самих статья рассказывается о проксировании трафика через Tor, но настройка прокси идентичная — просто указывайте IP и порт своего прокси):
Включение прокси в веб-браузерах
Браузеры Google Chrome, Opera и Internet Explorer используют одни и те же настройки. Т.е. внесённые изменения будут действовать сразу для всех трёх браузеров. В любом из них перейдите к настройкам Прокси, откроется такое окно:
В окне нажмите «Настройка сети». В открывшемся новом окне поставьте галочку «Использовать прокси сервер для локальных подключений…»:
Станет активной кнопка «Дополнительно», нажмите её. Выберите нужный тип прокси и введите его IP и порт:
Нажмите во всех окнах ОК для сохранения сделанных настроек.
Как самому проверить анонимность прокси
Нам необязательно доверять информации об уровне анонимности прокси — мы можем выполнить самостоятельную проверку.
Схема довольно проста:
Для реализации необходим хостинг сайтов — любой, главное, чтобы была поддержка PHP. На этот хостинг закидываем файл с содержимым:
Теперь включаем прокси и открываем этот файл в веб-браузере.
Конечно, вы можете настроить это сами и выполнять проверки без сторонних сервисов, но для целей этой статьи, я написал небольшой сервис, который ищет и подсвечивает добавляемые прокси заголовки. Сервис для определения, используется ли прокси и уровня анонимности прокси: http://suip.biz/ru/?act=proxy-checker. Обратите внимание, что важно открыть адрес именно по HTTP протоколу (а не HTTPS).
Страница покажет все HTTP заголовки, которые пришли с вашей стороны, если имеются специфичные для прокси заголовки, они будут подсвечены красным:
Как видно, заголовками, которые выдают использования прокси, являются:
В них X-Forwarded-For содержит реальный IP пользователя прокси! Заголовок Via содержит какие-то данные о самом прокси — иногда его IP, иногда его локальный IP, хотя может содержать что-угодно.
Реальный IP пользователя могут выдать следующие HTTP заголовки, которые добавляет прокси:
На эти заголовки нужно обращать особое внимание.
Некоторые прокси добавляют типичные заголовки (то есть выдают факт использования прокси), но при этом скрывают настоящий IP пользователя:
Рассмотрим популярные заголовки, которые добавляют прокси:
Forwarded
Раскрывает информацию о клиенте, подключённому к веб-серверу через HTTP прокси. Эта информация меняется или теряется, когда прокси является одним из промежуточных звеньев в запросе.
X-Forwarded-For
Фактический стандарт для определения исходного IP-адреса клиента, подключающегося к веб-серверу через HTTP-прокси или балансировщик нагрузки. Вытесняется заголовком Forwarded.
X-Forwarded-Host
Фактический стандарт для идентификации исходного хоста, запрошенного клиентом, в заголовке HTTP-запроса Host, поскольку имя хоста и/или порт обратного прокси-сервера (балансировщика нагрузки) может отличаться от исходного сервера, обрабатывающего запрос. Вытесняется заголовком Forwarded.
X-Forwarded-Proto
Фактический стандарт для идентификации исходного протокола HTTP-запроса, поскольку обратный прокси-сервер (или балансировщик нагрузки) может связываться с веб-сервером с использованием HTTP, даже если запрос к обратному прокси-серверу — HTTPS. Альтернативная форма заголовка (X-ProxyUser-Ip) используется клиентами Google, общающимися с серверами Google. Вытесняется заголовком Forwarded.
Информирует конечный сервер о прокси, через который был отправлен запрос. Этот заголовок добавляется прямыми и обратными прокси, он может появиться в заголовках запросов и заголовках ответов.
Примеры реальных заголовков:
X-Proxy-ID
Я не нашёл описание этого заголовка — по названию можно понять, что это идентификатор прокси сервера, либо идентификатор конкретного запроса.
Другие способы выявления прокси
Есть и другие способы косвенного подтверждения, что удалённый пользователь использует средства анонимизации. С ними можно познакомиться на соответствующих онлайн сервисах, которые пытаются найти прорехи в ваших прокси:
Многие способы привязаны к браузеру и JavaScript: утечка DNS, разные временные зоны IP и в браузере и так далее.
Более-менее универсальным способом является сканирование портов удалённого пользователя. Суть техники простое: у прокси открыты определённые порты, если при сканировании портов удалённого пользователя удалось найти стандартные для прокси порты, значит запрос пришёл через прокси. Этот сервис также сканирует несколько портов и выводит о них информацию. Пример удачно найденного порта прокси:
Заголовки запроса браузера Tor
Tor это тоже SOCKS5 прокси. Но SOCKS5 не добавляет какие-либо заголовки. Правда, сам браузер Tor удаляет (точнее, не отправляет) некоторые заголовки для повышения анонимности. Такое поведение выдаёт запросы от браузера Tor:
Сканирование портов тоже может дать намёки на использование Tor’а:
Но, самое главное — список IP адреса Tor общедоступен.
Заключение
Как мы увидели, в проверке анонимности прокси нет ничего сложного — достаточно просмотреть заголовки, которые приходят на удалённый сервер.
SOCKS прокси ничего не добавляют и не выдают IP адреса пользователя. Но при использовании прокси всегда нужно помнить о HoneyPots.
Также нужно понимать, что прокси сервер может вести журнал в котором хранятся IP адреса пользователей.
Защищённые прокси — практичная альтернатива VPN
В интернете есть достаточное количество информации по теме шифрования и защиты трафика от вмешательств, однако сложился некоторый перекос в сторону различных VPN-технологий. Возможно, отчасти он вызван статьями VPN-сервисов, которые так или иначе утверждают о строгом превосходстве VPN-решений перед прокси. При этом многие решения тех же VPN-провайдеров, не смотря на маркетинговое позиционирование в качестве VPN, технически являются прокси.
На практике прокси больше подходят для повседневной защиты веб-трафика, не создавая при этом неудобств в виде заметной потери скорости и неизбирательности туннелирования. То есть при использовании хорошего прокси не стоит необходимость его отключать для комфортного пользования интернетом.
В этой статье расказано о преимуществах защищённого прокси перед VPN и предложены различные реализации, готовые к использованию.
В чём различие между VPN и прокси?
VPN — это общее название технологий для объединения внутренних сетей на уровне сетевых пакетов или кадров через соединение, установленное поверх другой сети (чаще всего публичной).
Прокси — это серверное приложение, осуществляющее соединения или запросы от своего имени и сетевого адреса в пользу подключившегося к нему клиента, пересылая в результате ему все полученные данные.
VPN осуществляет пересылку полезной нагрузки, находящейся на третьем или втором уровне сетевой модели OSI. Прокси осуществляют пересылку полезной нагрузки между четвёртым и седьмым уровнями сетевой модели OSI включительно.
И VPN, и прокси могут иметь или не иметь шифрования между клиентом и сервером. Обе технологии пригодны для того, чтобы направить трафик пользователя через доверенный сервер, применяя шифрование по пути до него. Однако, подключение через прокси делает это более прямолинейным способом, не привнося дополнительную инкапсуляцию сетевых пакетов, серые адреса самой VPN сети и изменения таблицы маршрутизации, которые привносит VPN просто лишь для того, чтобы сетевой стек системы пользователя направил трафик через нужный сервер.
Преимущества прокси
Требования к прокси
Выбирая для себя реализацию защищённого прокси-сервера, я отметил несколько критериев, которым она должна удовлетворять:
Особенности obfs4
В спецификации протокола obfs4 есть места, которые вызывают вопросы. В рукопожатии со стороны клиента используется номер часа от начала эпохи UNIX, который потом участвует в HMAC-подписи. Сервер, принимая такой пакет от клиента проверяет его, подставляя номер часа по своему времени. Если всё верно, то отвечает своей частью рукопожатия. Для борьбы с разбросом часов сервер должен ещё проверять предыдущий и следующий час.
Зная такое характерное поведение, можно проверить сервер на границе следующего и послеследующего часа, воспроизведя одно из прошлых записанных рукопожатий со стороны клиента. Если сервер перестанет отвечать своей частью рукопожатия в это самое время, то это достаточное основание, чтобы судить, что сервер обслуживает протокол obfs4.
Судя по всему, автор со временем осознал эту проблему и в коде obfs4 реализована защита от обнаружения через воспроизведение. В спецификации она нигде не описана.
Однако, такая защита наоборот упрощает работу по блокировке протокола: сетевому фильтру достаточно в случае сомнений задержать отправку рукопожатия от клиента, перехватив её, а затем отправить сообщение с рукопожатием первым. Таким образом он спровоцирует защиту от воспроизведения уже против клиента, вынуждая сам сервер блокировать клиента.
Следующий момент, вызывающий сомнения это формат «кадра» с данными. Выглядит он следующий образом:
Первые два байта каждого кадра это длина пакета, гаммированная с ключом, который вычисляется от предыдущих ключей. Как он вычисляется ключ не столь важно, главное, что настоящая длина пакета подвергается операции побитового исключающего ИЛИ каким-то ключом. Это значит, что можно инвертировать бит в этой части данных и подмена не будет сразу замечена. Если инвертировать младший значащий бит этого поля, то длина кадра станет либо на единицу меньше истинной, либо на единицу больше. В первом случае это приведёт к сбросу соединения через небольшое случайное время из-за ошибки распаковки NaCl secretbox.
Второй случай более интересный: сервер будет ждать ещё один байт для того, чтобы начать распаковку криптобокса. Получив ещё ровно один байт он также сбросит соединение из-за ошибки распаковки криптобокса. Это поведение можно считать специфичным для obfs4 и можно судить, что мы с высокой вероятностью имеем дело с ним. Таким образом, удачно разрушив одно из соединений клиента, можно с примерно 50%-ным шансом обнаружить obfs4.
Конечно, определение границ одного кадра в потоке тоже может представлять непростую задачу, но нет чётких гарантий, что нерешаемую. В случае обмена короткими сообщениями границы одного кадра могут совпасть с границами TCP-сегмента.
Ну и последняя особенность заключается в том, что сам по себе протокол внешне не похож ни на один из общепринятых. Он спроектирован с предположением, что DPI играет по правилам и незнакомые протоколы просто не трогает. Суровая реальность может показать, что это не так.
По всем этим соображениям я воздержался от использования obfs4.
TLS и SSH в качестве криптографического транспорта
Разумно было бы воспользоваться стандартными защищёнными сетевыми протоколами вроде TLS или SSH для обёртывания соединений с прокси. Действительно, к таким протоколам обычно не возникает претензий со стороны DPI, потому что ими может быть зашифрован легетимный трафик. Что же касается активных проб со стороны DPI, этот вопрос можно решить в частном порядке, в зависимости от конкретного протокола прокси.
Ниже будут представлены несколько готовых решений на базе этих протоколов, пригодных для повседневной постоянной защиты трафика.
SOCKS5 внутри SSH
Вариант с использованием функции dynamic port forwarding у OpenSSH рассматривался выше, но он имеет большие проблемы со скоростью. Единственный способ избавиться от мультиплексирования соединений — это использовать альтернативную реализацию клиента SSH, который обеспечивал бы каждое проксируемое соединение отдельной SSH-сессией.
Я проделал такую работу и реализовал его: Rapid SSH Proxy. Эта реализация обеспечивает каждое проксируемое соединение отдельной SSH-сессией, поддерживая пул подготовленных SSH-сессий для удовлетворения поступающих запросов подключения с минимальной задержкой.
Следует особо отметить ключевую особенность: никакого стороннего ПО не нужно устанавливать на сервер — rsp работает как ssh-клиент с обычным сервером OpenSSH. Сервером может быть любая unix-подобная операционная система, а так же Windows и Windows Server (в новых версиях OpenSSH теперь доступен в компонентах системы).
Приведу сравнение скорости через сервер в США:
SOCKS5 внутри TLS
В случае с TLS очевидным решением было бы использовать stunnel или аналогичную TLS-обёртку для TCP-соединений с SOCKS5-сервером. Это действительно вполне хорошо работает, но возникает следующая проблема: рукопожатие TLS для каждого нового соединения занимает дополнительное время и появляется заметная на глаз задержка при установлении новых соединений из браузера. Это несколько ухудшает комфорт при веб-серфинге.
Для того, чтобы скрыть эту задержку, я подготовил специализированную замену stunnel на клиенте, которая поддерживает пул уже установленных, готовых к запросу TLS-соединений. Даже целых два — первый из них послужил прототипом:
HTTP-прокси внутри TLS aka HTTPS-прокси
Есть небольшая путаница в отношении сочетания слов «HTTPS» и «прокси». Есть два понимания такого словосочетания:
Примечательно, что ни в одном браузере нет простой возможности задать в настройках HTTPS-прокси через пользовательский интерфейс (то поле HTTPS-прокси, которое там есть, как раз относится к первому случаю). Но это не представляет собой большой трудности.
Поперебирав различные готовые варианты, я решил написать свой HTTP(S) прокси-сервер: dumbproxy.
Ключевой особенностью получившегося решения является то, что современные браузеры (Firefox и семейство Chrome, включая новый MS Edge) могут работать с ним без какого-либо дополнительного ПО на клиенте (см. руководство по настройке клиентов).
Следует отметить особенности реализации в отношении противодействия активным пробам со стороны DPI. HTTP-прокси легко распознать, подключившись к нему и осуществив попытку какого-либо запроса стороннего ресурса. Если прокси имеет авторизацию, то по стандарту он должен отвергнуть запрос с кодом 407, специфичным именно для HTTP-прокси, и предложить возможную схему для авторизации. Если прокси работает без авторизации, то он выполнит запрос, чем так же себя выдаст. Есть как минимум два способа решения этой проблемы (и оба они реализованы в dumbproxy).
Первый способ заключается в том, чтобы использовать аутентификацию клиентов по сертификатам ещё на этапе TLS-рукопожатия. Это самый стойкий метод, и это действительно корректная причина, по которой любой обычный веб-сервер мог бы отвергнуть клиента.
Второй способ заключается в том, чтобы скрыть от неавторизованных клиентов код ответа 407, возвращая вместо него любой другой ответ с ошибкой. Это вызывает другую проблему: браузеры не смогут понять, что для прокси требуется авторизация. Даже если браузер имеет сохранённый логин и пароль для этого прокси, ответ 407 важен для определения схемы авторизации, по которой эти учётные данные должны быть отправлены (Basic, Digest и т. д.). Для этого нужно позволить прокси генерировать ответ 407 на секретный запрос, чтобы браузер мог запомнить схему авторизации. В качестве такого секретного запроса используется настраиваемый секретный домен (не обязательно реально существующий). По умолчанию этот режим выключен. Подробности можно посмотреть в разделе об аутентификации.
Заключение
Я пользуюсь этими решениями уже один год и в итоге они мне полностью заменили VPN, вместе с этим сняв все проблемы, с которыми сопряжено его использование.
Надеюсь, что эта статья добавит к арсеналу читателей новые подходы к защите трафика и будет им полезной.
Что такое SOCKS5 протокол и как он работает?
Прокси-сервер — это устройство или программа, которая действует как промежуточное звено для передачи данных в режиме онлайн. В более широком смысле, любое устройство между вами и сервером сайта, который вы посещаете, действует как прокси, но мы склонны применять термин прокси к устройствам, программам и серверам, которые принимают конкретные решения о том, как передавать данные.
Типы прокси
Сервер VPN также является своего рода прокси, как и программное обеспечение VPN, установленное на вашем компьютере. Большинство прокси созданы только для веб-трафика, например, по протоколу HTTP, но программное обеспечение VPN предназначено для перенаправления всех данных, отправляемых вашим компьютером. VPN-соединения обычно зашифрованы, но это может отличаться от поставщика к поставщику, и многие провайдеры предлагают несколько протоколов.
Также существуют разные протоколы для HTTP-прокси. Чаще всего веб-прокси используются для пересылки простых HTTP-запросов. Для тех, кто работает на собственном сервере, чаще всего выбирают apache или nginx — популярные веб-прокси, используемые для предоставления контента посетителям сайта. Примером такого веб-прокси тоже может служить сеть доставки контента.
Что такое протокол SOCKS?
SOCKS (Socket Secure) — очень распространенный прокси-протокол, используемый для маршрутизации пакетов. Он может запускаться в качестве приложения на локальной машине или удаленно на сервере. Его можно использовать для маршрутизации любых данных, но сначала необходимо установить HTTP-соединение между вами и сервером SOCKS.
В отличие от VPN, ваши приложения, такие как браузер или кошелек Bitcoin, должны поддерживать протокол SOCKS, чтобы иметь возможность его использовать. Также можно установить инструмент, который захватывает весь ваш сетевой трафик и отправляет его на прокси-сервер SOCKS, но такие инструменты используются нечасто.
SOCKS был запущен в 1992 году. Появление новых версий не заняло много времени, и его четвертая итерация под названием SOCKS4 используется до сих пор. Последняя версия, SOCKS5, была выпущена в 1996 году и с тех пор работает на бесчисленном количестве компьютеров.
SOCKS5: надежный стандарт
Наиболее вероятное место, где вы столкнетесь с настройками конфигурации SOCKS5, — это сетевые приложения, установленные на вашем компьютере, такие как инструменты обмена файлами, Dropbox, IP-приложения для голосовой связи, приложения для чата и кошельки Bitcoin. Самым распространенным приложением SOCKS5, которое вы могли установить, является Tor.
После запуска Tor на компьютере, вы можете настроить эти SOCKS5-совместимые приложения для маршрутизации всего трафика через сеть Tor, введя данные вашего прокси Tor SOCKS5 (IP и порт: 127.0.0.1:9050). Поскольку Tor работает на вашей локальной машине, вы, скорее всего, не будете настраивать его с помощью аутентификации, но для сервера SOCKS5, работающего на удаленном сервере, это важная функция.
На видео: Создаем свой прокси сервер SOCKS5 для обхода блокировок
SOCKS5 vs VPN
Многие VPN не предлагает прокси SOCKS5 на своих серверах или в приложениях, на самом деле в этом нет особого смысла. Хотя и SOCKS5, и VPN могут предоставить разные IP-адреса, чтобы скрыть ваше местоположение и личность, только VPN предлагает онлайн-безопасность, защищая ваши данные. Приложение VPN направляет весь трафик с вашего устройства через безопасный зашифрованный туннель на сервер VPN, откуда он достигает своего конечного пункта назначения.