Что лучше: SOCKS или HTTP прокси?
В нашем блоге мы продолжаем говорить о прокси-серверах. Сегодня мы расскажем о классификации этих серверов.
HTTP прокси/proxy
Вы уже, несомненно, знаете, что же такое соединение через прокси. Однако в прошлой статье я не рассказал о классификации прокси по типу соединения. Самыми распространенными proxy-серверами являются HTTP proxy. Такой вид прокси работает только по HTTP-протоколу (HTTP – это сокращение от HyperText Transfer Protocol – протокол, изначально передававший документы в формате HTML, а в настоящее время используемый для передачи почти любых данных в Интернете). Через HTTP-прокси можно просматривать сайты, работать в онлайн-мессенджерах (например, ICQ) и скачивать файлы с файлообменников или торрент-трекеров. Почти все бесплатные и большинство платных прокси используют именно такой тип серверов.
SOCKS прокси/proxy
Второй тип – это SOCKS proxy. Эти прокси-сервера перенаправляют сетевой трафик не только от вашего браузера (как HTTP proxy), но и вообще от любой установленной на компьютере программы. Сервер SOCKS использует соединение по TCP протоколу – это сокращение от transmission control protocol, то есть «протокол управления передачей данных». Этот протокол осуществляет передачу данных от одной программы с любым адресом и любым портом (например, от клиента электронной почты) на вашем компьютере к другой такой же программе на прокси-сервере. Таким образом, передача трафика проходит незаметно для конечного сервера, и SOCKS позволяет обходить сервисы, скрытые за фаерволами. По сути, происходит синхронизация всего трафика между вашим устройством и сервером. Данный тип прокси работает с любыми видами протоколов, а не только с гипертекстом. SOCKS proxy постоянно совершенствуется и появляются разные его версии. Первой появилась socks 4 proxy, затем вышел протокол socks под номером 5, и в SOCKS 5 proxy была добавлена поддержка UDP-протокола и усиленная безопасность. При настройке вашего прокси-сервера важно помнить о различиях в версиях и обязательно указывать, какую именно версию Вы собираетесь использовать. Например, в браузере «Mozilla» требуется установить переключатель на версию сокс 5 прокси.
Преимущества SOCKS прокси против HTTP
Еще одним важным плюсом SOCKS proxy является возможность выстраивания нескольких таких серверов в цепочку произвольной длины. Это обусловлено тем, что SOCKS передает данные между несколькими компьютерами без изменения трафика. Однако не все программы могут работать с такими цепочками, поэтому может потребоваться установка специализированных утилит.
Разбор. Как работает SOCKS-прокси: плюсы, минусы, отличия от других технологий
В современном интернете, где все острее встает вопрос обеспечения анонимности, многие люди начинают задумываться о том, какие инструменты для этого им использовать. Здесь часто возникает путаница, поскольку не все разбираются в аспектах существующих технологий. А их огромное количество, и даже решение одной и той же задачи сокрытия реального IP-адреса может быть реализовано по-разному.
Сегодня мы расскажем о технологии SOCKS-прокси, принципах ее работы, преимуществах и отличиях от других инструментов обеспечения анонимности в интернете.
Примечание: это разбор для тех, кто не совсем в курсе деталей работы этой технологии и ее отличий от других инструментов, в данном топике мы не претендуем на глубокий анализ.
Что это такое
SOCKS – это интернет-протокол, который используется для передачи пакетов с данными от сервера к клиенту с помощью промежуточного прокси-сервера. На сегодня это наиболее продвинутая массовая технология для организации прокси. При ее использовании трафик проходит через прокси-сервер, который использует собственный IP-адрес, с которого уже идет финальное подключение к нужному адресату.
Наиболее свежая спецификация протокола – это SOCKS5. Она использует UDP- и TCP-соединения для пересылки трафика. Также в SOCKS5 используются несколько способов аутентификации:
Зачем используют SOCKS-прокси
Существует несколько причин применения SOCKS-прокси, вот две главных:
Обход блокировок
Самое очевидное применение прокси – сокрытие реального IP-адреса с какой-то целью, например для обхода блокировок. Например, если определенный IP-адрес попал в черный список какого-то сайта, до для доступа к нему будет достаточно использовать прокси.
В некоторых случаях таким способом можно преодолеть и блокировки, наложенные государственными органами. Однако здесь есть свои ограничения – при использовании технологии DPI (deep packet inspection), трафик будет блокироваться на уровне интернет провайдера еще до того, как он дойдет до сайта. В этом случае просто прокси не поможет.
Важный момент. Некоторые HTTP-прокси могут работать только с веб-страницами, а SOCKS5 умеет обрабатывать любой трафик. Такие прокси работают на более низком уровне
Повышение скорости и производительности
Другие разновидности технологии SOCKS работали с протоколом TCP, а новые прокси умеют обрабатывать и UDP-трафик.
TCP – это протокол с гарантированной доставкой сообщений между клиентом и сервером. TCP – это протокол с гарантированной доставкой сообщений между клиентом и сервером. Кроме того, это потоковый протокол. В UDP доставка всех пакетов не является гарантированным условием, и это пакетный протокол. Его использование позволяет пересылать трафик быстрее, поскольку не тратится время на повторную отправку недошедших пакетов, и разбор пакетов данных осуществляется быстрее, чем потоков.
SOCKS5-прокси никогда не изменяют заголовки пакетов с данными, что случается при использовании прокси других типов. Это позволяет улучшить производительность при пересылке трафика. Впрочем, здесь есть и свои минусы – заголовки могут содержать и персональные данные пользователей, а значит их, в теории, можно будет узнать.
SOCKS и VPN: в чем разница
Не все прокси-провайдеры пишут об этом, но основная разница при использовании SOCKS и VPN заключается в уровне анонимности, которого можно добиться. В случае VPN все передаваемые данные шифруются, чего нет в случае SOCKS-прокси.
Важно понимать, что прокси позволяют скрывать IP-адрес и решать ряд других задач (вроде обхода блокировок), но сами по себе они не являются инструментом обеспечения приватности. Пользователя прокси можно вычислить и перехватить его трафик.
Однако использование прокси в комбинации с VPN позволяет добиться хорошей скорости работы и лучше защитить чувствительную информацию.
SOCKS5 или HTTP, какой прокси выбрать?
Прокси, как это работает и для чего
Прокси-сервер – ваш посредник при работе в сети. Это программное обеспечение, позволяющее любому пользователю интернета обмениваться данными с целевым сервером не напрямую а через посторонний сервер, находящийся в любой точке мира. То есть запрос на сервер какого-либо интернет ресурса и получение ответа от него происходит от имени прокси, оставляя вас незаметным для конечного адресата.
Для чего это нужно? Главная цель использования прокси – маскировка реального IP адреса. При использовании прокси весь ваш трафик проходит от вашего устройства к одному или нескольким прокси серверам, они в свою очередь обмениваются данными с конечным адресатом так, как будто запрос идет напрямую от вас, получают ответ и перенаправляют его вам без изменений.
Все это позволяет использовать прокси для широкого круга задач: обход блокировок, моделирование нагрузки на разрабатываемые сайты, SEO продвижение и другие операции требующие некоторого уровня анонимности в сети.
Типы прокси
Если вы уже определились с необходимостью использования прокси для вашей работы, то следующим шагом для вас будет выбор подходящего именно вам типа. В сети можно найти большое количество предложений различного вида прокси для любых целей и на любой бюджет.
Прокси могут различаться по множеству параметров: типу носителя, геолокации, степени приватности, наличию закрытых для использования портов, но в этой статье мы рассмотрим важнейшую характеристику, которую обычно и имеют в виду, когда говорят о типе прокси, а именно тип используемого протокола передачи данных.
Типов протоколов передачи данных, которые могут использоваться прокси, довольно много, но в качестве самых популярных и широко использующихся можно назвать http(s) и socks протоколы. От них же и происходит название http и socks proxy.
Прокси HTTP
Самый распространенный тип прокси, предназначенный в первую очередь для посещения сайтов, загрузки и передачи файлов. Как следует из названия, прокси используют http протокол, что позволяет быстро и эффективно работать с веб-страницами, например, через браузер, используя следующие возможности:
Кроме того, существует три вида HTTP прокси, различающихся по степени анонимности: прозрачные, анонимные и элитные.
Прозрачные прокси предоставляют минимальный уровень анонимности, так как передают в http заголовках информацию о использовании прокси и о реальном IP адресе пользователя. Такой тип прокси не может использоваться для большинства задач, требующих более высокий уровень анонимности. Обычно этот вид можно встретить только в связке с другими типами прокси-серверов.
Анонимные прокси находятся посередине в линейке различных типов анонимности прокси-серверов. Их отличие от прозрачных прокси состоит в том, что они скрывают реальный IP адрес пользователя от конечного сервера. Это дает гораздо больший уровень анонимности, но информация об использовании прокси все же остается открытой, что несколько ограничивает область использования этого типа.
Элитные прокси предоставляют пользователю наибольший уровень анонимности, скрывая от конечного адресата реальный IP адрес и сам факт использования проксирования. Использовать такие прокси можно для всего перечня задач, в том числе требующих высокого уровня анонимности.
Лучше разобраться в особенностях различий между типами http прокси вам поможет таблица ниже.
Скрытие IP адреса пользователя
Скрытие факта использования прокси-сервера
В чем разница между HTTP и HTTPS
Прокси https фактически являются модификацией уже рассмотренных выше http прокси. Литера ‘s’ в названии протокола означает secure – безопасный. Такие прокси поддерживают шифрование трафика в целях повышения безопасности ваших данных в интернете. Это достигается использованием криптографических протоколов SSL и TLS.
Чаще всего защищенное соединение используется для обеспечения безопасности банковских и корпоративных сетей, проведения банковских операций, защиты паролей доступа к различным интернет ресурсам.
Шифрование передаваемых данных так же повышает уровень анонимности в сети. потому как при использовании http прокси без шифрования вся ваша деятельность в сети перехватывается и логируется вашим интернет-провайдером, что приводит к возможности доказательства любых ваших действий. Кроме того, информация передаваемая по незашифрованному каналу может быть перехвачена на самом прокси-сервере или другими способами.
При использовании https прокси отсутствует возможность контроля содержания передаваемой информации через прокси-сервер. При этом сам прокси-сервер не занимается дешифрацией трафика, то есть занимается только передачей информации, что так же повышает уровень безопасности и анонимности. Эта особенность https прокси открывает возможности использования любого TCP-протокола, например, SMTP, что активно используется в почтовых рассылках.
SOCKS5 прокси
Самыми современными из используемых на данный момент прокси-серверов, конечно, можно назвать Socks proxy. Наибольшей популярностью у пользователей сервисов прокси пользуются сервера, поддерживающие протокол socks5. При работе этих прокси не передаются http заголовки, что делает их анонимными по умолчанию, скрывая реальный IP адрес клиента и само использование прокси.
Изначально socks протокол разрабатывался с целью обеспечить передачу сетевого трафика не только через браузер, но и с помощью любого программного обеспечения. Особенностью работы этих прокси является незаметная для конечного сервера передача данных между софтом клиента и прокси-сервером, что открывает возможности пользоваться сервисами защищенными межсетевыми экранами (фаерволами). Эта особенность объясняется тем, что socks прокси никак не изменяют данные получаемые от клиента, тем самым лишая возможности идентифицировать использование прокси.
Прокси socks4 использовали TCP протокол, а с версии socks5 добавилась поддержка UDP соединения и возможность поддержки доменных имен и адресов IPv6. Socks proxy, кроме того, поддерживает все распространенные сетевые протоколы, включая HTTP, HTTPS, FTP, и все их возможности: кэширование, SSL соединение и другие.
Socks proxy от других типов выгодно отличает возможность использования цепочек прокси-серверов различной длинны, что может быть полезно при выполнении ряда задач.
Socks прокси обычно используют порт 1080.
И все таки SOCKS5 или HTTP
Разбираясь во множестве особенностей разных типов прокси, начинающий пользователь может испытывать затруднения в выборе подходящего сервиса для своих целей. В таблице ниже мы резюмировали основные характеристики для облегчения понимания особенностей двух наиболее распространенных видов прокси.
Первоначально предназначался для работы с html страницами
Первоначально разрабатывался для работы программного обеспечения с сетевыми ресурсами, работы через фаерволы
Прокси имеют различную степень анонимности
Прокси анонимны по умолчанию
Поддержка TCP соединения
Поддержка TCP и UDP
Поддержка защищенного SSL соединения
Поддержка SSL и других типов соединения
Передает http заголовки
Не передает http заголовки, информация не изменяется прокси-сервером
Предоставляет больше возможностей фильтрации трафика
Больше защита от идентификации использования прокси
Обычно используют порты 80 8080, 3128
Обычно используют порты 1080, 1081
Возможно использование SMTP протокола
Возможно использование SMTP протокола
Поддержка адресов IPv6
В целом, можно сказать что socks proxy более современный и универсальный инструмент для широкого круга задач в сети. Поэтому если у вас остались сомнения в выборе типа прокси, то можете без колебаний остановить свой выбор на сокс пятом, тем более, что socks5 все больше используется клиентами по всему миру. Возможно, настала и ваша очередь оценить высокое качество этого сервиса.
Защищённые прокси — практичная альтернатива 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, вместе с этим сняв все проблемы, с которыми сопряжено его использование.
Надеюсь, что эта статья добавит к арсеналу читателей новые подходы к защите трафика и будет им полезной.
