Интернет – это сложная распределённая, порой не очень устойчивая структура, обеспечивающая информационное взаимодействие между людьми, машинами и алгоритмами. Пользуясь своим любимым мессенджером, вы, вероятно, не догадываетесь какой путь, и в каком формате проделывают ваши данные: это действительно могло казаться сложным процессом, не требующим мыслительных усилий для его понимания. До настоящего момента. Важно знать, что всегда существуют силы и стороны, желающие контролировать информационное пространство, вмешиваться в него и видоизменять. К примеру, интернет-провайдер может фильтровать трафик к определённым ресурсам, стараясь избежать административной ответственности за невыполнение требований гос. органов. Или человек-посередине[2] может стремиться завладеть вашими разработками, внимательно отслеживая сетевую активность.
Имеет смысл описать механизм сетевого взаимодействия в общих чертах: как правило, некое устройство (клиент) отправляет запросы к другому удалённому устройству (серверу), и наоборот, сервер, возвращает ответы клиенту. Содержание сетевых запросов нас не сильно интересует: это может быть переписка, DDoS-атака, данные из мозгового датацентра Neuralink и многое другое. Гораздо важнее не то, что передаётся, а то, каким образом это передаётся. Сетевых протоколов существует великое множество, и каждый из них можно отнести к своему уровню общеизвестной модели OSI[3]. Обращаясь к ней, следует подчеркнуть одну важную деталь: никто не запрещает добавлять новые слои или опускаться ниже, если этого требует задача. Поэтому сейчас всё чаще встречаются проекты оверлейных сетей (которые лежат как бы поверх всего интернета): Tor, Yggdrasil, I2P, TON.
Почти всегда между клиентом и сервером находятся другие звенья сети, которые перебрасывают информацию дальше. Например, таким звеном является ваш интернет-провайдер или владелец WiFi-точки. Поскольку это звено сети перебрасывает через себя трафик, оно также имеет возможность этот трафик читать, и потому возникает необходимость в алгоритмах шифрования, которые не позволят человеку-посередине это делать. Более того, трафик может фильтроваться. Так, могут блокироваться сетевые запросы протокола OpenVPN, потому что их легко выделять из общего информационного потока посредством DPI[4]. Это приводит к потребности обфусцировать трафик или, говоря простым зыком, скрыть его истинную природу, смешать с общей массой. Также, иногда важно, чтобы конечный сервер не мог опознать, откуда именно на него приходят клиентские запросы.
Важно заметить ещё одну вещь: публичные WiFi точки, в частности, в РФ сейчас требуют регистрацию по номеру телефона. После регистрации устройство запоминается и идентифицируется в следующий по MAC-адресу[5]. Это позволяет пропустить процесс повторной авторизации и войти в систему, используя прежний механизм.
Рассмотрим актуальные решения на сегодняшний день. Учитывайте, что как правило решения являются общими, не затрагивающими индивидуальных особенностей проблемы. Это хорошо, потому что уменьшается входной порог - количество знаний, необходимое, чтобы правильно всё настроить. Однако если вы вдруг озаботились индивидуальными особенностями проблемы, это как минимум означает, что требуется крайне ответственный подход, в котором один неверный шаг может стоить вам... вам это наверняка лучше известно, поэтому лучше ничего не делать без понимания сути вещей.
---- HTTP ----
На всякий случай. Вы должны знать, что HTTP трафик не шифруется, а передаётся открытым текстом. Это значит, что все ваши пароли и прочие данные доступны каждому, кто берёт на себя ответственность их передавать (а эту ответственность можно злонамеренно перехватывать[6]).
---- TLS/HTTPS/SSL ----
На самом деле, базовые механизмы защиты пользователя уже встроены повсеместно. TLS даёт возможность клиент-серверным приложениям осуществлять связь в сети таким образом, что нельзя производить прослушивание пакетов и осуществить несанкционированный доступ. Ключевые особенности:
- трафик между клиентом и сервером шифруется.
- анализируя поток данных, можно понять, к какому серверу (доменному имени или IP адресу) он направлен, чем успешно пользуются кураторы людей-посередине, требуя блокировать неугодный трафик.
- подавляющее большинство трафика в сети приходится на этот протокол.
---- Tor ----
Пожалуй, самое популярное и дешёвое средство для обеспечения анонимности. Tor представляет собой систему прокси-серверов, позволяющую устанавливать анонимные сетевые соединения, защищённые от прослушивания посредством шифрования.
Характерные особенности:
- трафик между клиентом и сервером шифруется внутренними средствами Tor (так называемая луковая маршрутизация[7], в которой шифрование снимается на каждой ноде последовательно, подобно снятию слоёв луковицы). Поэтому прочитать даже HTTP трафик они не в состоянии. Исключение составляет выходная нода, снимающая последний слой шифрования с передаваемых данных.
- все узлы сети кроме последнего не имеют возможности определить, куда именно уходит ваш трафик. К примеру, таким образом вы скрываете от интернет-провайдера факт посещения даркнет-маркета по торговле оружием.
- конечный сервер, к которому вы отправляете запросы, не знает, с какого IP они изначально исходят. Но при этом существуют и другие механизмы идентификации пользователей[8], про которые не стоит забывать.
- Tor-трафик можно легко опознать и выделить среди общего потока данных. Это означает, что, к примеру, владелец WiFi-точки может видеть, что некий пользователь с определённым MAC-адресом (~ номером телефона ~ паспортными данными) пользовался Tor в определённый период времени и переслал подсчитанный объём информации. Сами по себе эти данные бесполезны, но если их с кое с чем сопоставить (в зависимости от ситуации), то полная анонимность может нарушиться. Хотя такие случаи могут возникнуть только, когда к вам проявлен особый интерес, а об этом было сказано ранее.
- дополнительная фича: позволяет посещать .onion ресурсы, на которых изредка можно найти что-нибудь полезное.
- сам по себе Tor не делает вас анонимным. Если через Tor вы залогинились в свой аккаунт в Одноклассниках, это безусловно лишает вас анонимности по отношению к Одноклассникам.
---- OpenVPN и WireGuard ----
Технологии для создания виртуальной частной сети. В некоммерческих целях со стороны пользователей используется, как средство для шифрования трафика с целью повышения конфиденциальности. Особенности:
- весь трафик шифруется, ваш провайдер неспособен его прочесть.
- провайдер знает вашего VPN-провайдера (вернее, сервер, к которому вы отправляете зашифрованные запросы).
- VPN-трафик легко отличить от любого другого трафика, поэтому он легко блокируется.
- как правило, VPN подключение более быстрое, чем подключение при использовании других технологий, описанных в этой статье.
---- Shadowsocks, ShadowsocksR, V2ray, Vmess, Fake TLS ----
Перечисленные технологии созданы специально для обхода блокировок и изначально разрабатывались в условиях Великого Китайского Фаерволла (неудивительно, что почти вся документация на китайском). Все эти средства работают немного по-разному, и потому, если не заработало одно из них, просто воспользуйтесь другим. Особенности:
- как и с другими технологиями, ваш трафик перенаправляется на прокси-сервер и уже потом пересылается в конечный пункт назначения.
- трафик между клиентом и прокси-сервером шифруется, трафик между клиентом и конечным сервером остаётся неизменным (если он изначально был зашифрован при помощи TLS, он таким и останется).
- прокси-сервер способен читать ваш трафик, как это делал бы интернет провайдер.
- трафик между клиентом и прокси маскируется под TLS. Для провайдера это выглядит так, словно вы просто посещаете какой-то сайт в интернете, поэтому чтобы заблокировать этот протокол, потребуется блокировать вообще весь TLS, что неприемлемо. Конечно, существуют механизмы более глубокого анализа трафика, но в СНГ они не очень развиты. Даже если так, существуют альтернативы (ShadowsocksR, V2ray, Vmess), которые справляются с этими проблемами по-своему.
- в свободном доступе можно найти тысячи бесплатных серверов (как и тысячи давно не рабочих)[9][10].
В заключение важно уточнить одну деталь: вы также должны доверять и провайдеру услуг проксирования трафика, будь то VPN или Shadowsocks, потому что, как было сказано в начале статьи, в интернете существует множество различных сторон, и они могут преследовать самые непредсказуемые цели. Вообще, выбор между представленными технологиями сделать несложно:
- если вы не желаете, чтобы вашу переписку читал товарищ майор, то вам ничего предпринимать не нужно: либо он уже давно её читает, в зависимости от площадки, на которой вы переписываетесь, либо он принципиально неспособен этого сделать, потому что конечная площадка уважает пользовательскую приватность. Это не вопрос сетевого взаимодействия, поскольку любой уважающий себя сервис обмена сообщениями имеет TLS-сертификат, а этого вполне достаточно для защиты от прослушивания между клиентом и сервером.
- если вам требуется любой ценой получить доступ к заблокированным сервисам, то выбирайте между VPN и Shadowsocks-подобными технологиями (к слову, для Telegram вообще существует собственный протокол прокси под названием MTProto, который решает вышеописанные проблемы, но исключительно для Telegram).
- если требуется сохранять анонимность, когда вы решаетесь на определённый риск, рекомендуется использовать Tor (Client -> Tor -> Server) или связку Client -> VPN -> Tor -> Server. Вообще, для такой задачи этого недостаточно, поэтому присмотритесь к операционным системам Whonix[11] и Tails[12], которые идеально подходят для проведения опасных операций в тылу врага. И не забудьте ознакомиться с материалом, описывающим многие из возможных рисков потерять анонимность в сети Tor[8].
Пример установки и настройки V2Ray для Android:
1. Загружаем приложение V2Ray с оф. сайта[13] или из Google Play[14], устанавливаем.
2. Не забудьте в настройках VPN Android выбрать приложение V2Ray в качестве "Постоянной VPN".
3. Находим списки бесплатных серверов. В нашем случае будет использоваться Telegram-канал @V2List[10].
4. Копируем любое понравившееся сообщение со ссылками типа vmess://, ss://, ssr:// и т.п.
5. Открываем приложение V2Ray, импортируем сервера из буфера обмена (в верхнем правом углу есть опция "Import config from Clipboard").
6. В приложении должен пополниться список доступных серверов. Для подключения достаточно один раз трогнуть запись из списка. Учитывайте, что некоторые сервера могут не работать.
7. После этого можно проверять свой текущий IP[15].