Цензура в интернете. Надо что-то делать

Я устал от того, что власть имущие упыри делают с нашим интернетом:

  1. Нас лишают доступа в интернет, когда им удобно

  2. Ресурсы лишают статуса СМИ

  3. Ресурсы блокируют

  4. Ресурсы называют экстремистскими за освещение реального положения дел

  5. Журналисты, выполняющие свою работу, получают реальные тюремные сроки

Увы, я не могу решать все эти проблемы. Но попробую сдвинуться с мёртвой точки в решении хотя бы части из них

Я планирую небольшой цикл статей, и это первая из них. Тут я расскажу, что можно сделать только браузером

Ликбез. Как работает интернет?

В протоколах TCP и UDP, поверх которых работает семейство протоколов HTTP, нет понятия «имя хоста» / «имя ресурса». Вместо этого они оперируют IP-адресами. Для того, чтобы преобразовать имя хоста в IP-адрес (или «отрезолвить имя хоста»), применяются DNS-сервера. Только после успешного преобразования имени хоста в IP-адрес происходит соединение с ресурсом

Схематично основные этапы установки соединенияСхематично основные этапы установки соединения

Цензура нарушает ход вещей. Механизмы цензуры атакуют инфраструктуру сети Интернет и нарушают доступность и работоспособность ресурсов

Как работает цензура?

Некоторые вектора атаки:

  1. DNS-сервер может вернуть совсем не то, что вы бы хотели. Это называется подменой DNS

  2. Допустим, мы смогли отрезолвить хост верно (или получили правильный IP-адрес целевого хоста). Далее происходит попытка подключения. На этом этапе ваш запрос может быть отфильтрован провайдером. Это называется фильтрацией по IP-адресу

  3. Допустим, соединение установлено. Провайдер может принять решение его оборвать на основании анализа вашего трафика

1. Подмена DNS

Классика — прописать вручную DNS-сервера google 8.8.8.8 и cloudflare 1.1.1.1. Но я отказался от такой конфигурации в пользу DoH — DNS-over-HTTPS, так как протокол DNS не защищён ни от прослушивания, ни от подмены, ни от фильтрации трафика по протоколу. Для DoH такое сделать сложнее — без cloudflare солидная часть интернета ляжет

Наконец, за реализацию механизма DNS-over-HTTPS в Британии компанию Mozilla назвали «злодеем года» — это о чём-то говорит

Firefox + DoH

Технология DNS-over-HTTPS впервые появилась в Firefox 73 в 2018 году. Убедитесь, что версия Вашего браузера Firefox не ниже 73

Со значением всех настроек можно подробнее ознакомиться в документации на support.mozilla.org и wiki.mozilla.org. Совет — обязательно проверяйте, какие именно настройки вы устанавливаете в соответствии с документацией. Я могу ошибиться, школьник Петя может накрутить отсебятины, работающей только в его богатом воображении, а товарищ майор Василий Мусоров может и вовсе написать крайне убедительную статью про настройку браузера, с предсказуемым для Вас финалом

  1. В адресной строке браузера набираем about: config

  2. В открывшемся окне в строке поиска настроек набираем network.trr

  3. Находим настройку network.trr.mode. Я её установил в значение 2

  4. Находим настройку network.trr.excluded-domains, и там указываем onion, i2p

Настройка DoH в FirefoxНастройка DoH в Firefox

2. Фильтрация по IP-адресу

Тут идея достаточно простая — пустить трафик не на заблокированный узел, а куда-нибудь в обход — через proxy-сервер. Хотелось бы сделать это по-умному, минимизировав объём трафика через дохлый proxy-сервер. Какой смысл гонять через proxy тот же youtube? Объём трафика просто положит proxy-сервер

SmartProxy — создаём эффективные правила проксирования

Хорошая новость для тех, кто пользуется Chrome: SmartProxy доступен как для Firefox, так и для Chrome

Устанавливаем SmartProxy. Разрешаем его работу в приватном режиме

Активация SmartProxyАктивация SmartProxy

Открываем панельку дополнения и активируем. После кликаем «Settings», и там находим «Прокси Сервера»

Proxy-сервераProxy-сервера

Ручное добавление Proxy сервера

Чуть дальше я расскажу об автоматическом добавлении серверов. Не торопитесь бросаться добавлять сервера руками. Понимание процесса Вам потребуется, а вот ручная работа — нет

Списки proxy-серверов можно найти, например, на hidemy.name или на free-proxy.cz. Это ни в коем случае не все сайты, где можно найти списки proxy-серверов

Обращаю Ваше внимание — если Вы включили DNS-over-HTTPS, вам хватит SOCKS4, которых очень много. В противном случае Вам остаётся использовать только SOCKS5, которые поддерживают резолв имени хоста на стороне proxy, а найти быстрый рабочий SOCKS5-прокси — квест

Следует понимать, что наличие proxy-сервера не гарантирует его работоспособность. Адрес можно просто добавить в список proxy и попытаться зайти на интересующий ресурс через него. Это работает. Но все эти манипуляции занимают кучу времени. Намного быстрее проверить proxy-сервер через curl:

$ curl --socks4 111.22.33.44:5555 api.ipify.org
Добавление нового proxy-сервераДобавление нового proxy-сервера

Важно: после нажатия на кнопку «Save» / «Сохранить» вы попадаете обратно к списку proxy-серверов. В самом низу нужно нажать синюю кнопку «Save Changes» / «Сохранить изменения». Если этого не сделать — изменения применены НЕ будут, и добавленные сервера исчезнут при закрытии вкладки

Автоматическое добавление Proxy серверов

Очень скоро ручное добавление proxy-серверов надоест. Я остановился на варианте, когда вручную добавлены только proxy-сервера специального назначения, а остальное я выгребаю через подписку

Гугление по запросу «socks4 txt» вывело меня на репозиторий. Это ни в коем случае не единственный список proxy-серверов в интернете

Подписки на списки proxy-серверовПодписки на списки proxy-серверовСоздаём подписку на список proxy-серверовСоздаём подписку на список proxy-серверов

Почему именно такие значения? URL написаны в README вот тут. 10080 минут для периода обновления — это раз в неделю. Я посчитал это достаточным, но это не значит, что это единственно правильное значение. Протокол — в имени файла со списком серверов

После добавления можно нажать кнопку «Test». Если всё настроено правильно — SmartProxy скажет, сколько серверов было добавлено. После сохранения не забываем нажать синюю кнопку «Save Changes» / «Сохранить изменения». Если этого не сделать — вы повторите мой подвиг «Так, а куда они пропали? Только что ж были»

Правила проксирования

Мы добавили сервера, но без правил проксирования эти сервера лежат просто мёртвым грузом. Перейдём на вкладку «Proxy Rules» / «Правила проксирования»

Список правил проксированияСписок правил проксирования

Давайте попробуем добавить lurkmore.to — он точно заблокирован

Добавляем правило для lurkmoreДобавляем правило для lurkmore

Немного объясню, почему правило именно такое. Поле «Rule Type» / «Тип Правила» определяет, что правило будет применяться для всех URL указанного сайта и всех его поддоменов. «Rule Source Domain» указывает, что правило действует только для домена lurkmore.to и его поддоменов, и ни на что больше. Поле «Proxy Server» имеет значение [General] — это значит, что для текущего ресурса lurkmore.to будет применён текущий активный proxy-сервер. О выборе активного сервера следующий раздел. Можно также указать конкретный proxy-сервер из списка proxy-серверов, который мы наполняли ранее руками или по подписке

После сохранения правила не забываем нажать синюю кнопку «Save Changes» / «Сохранить изменения». Иначе ну вы поняли

Пытаемся зайти на сайт

Тут немного нетривиальной магии. Я просто тыкаю рандомный IP из списка и пытаюсь зайти на сайт. Не удалось — следующий IP

Выбираем активный proxy-серверВыбираем активный proxy-сервер

Магии тут немного. Автор дополнения хотел разместить флаг страны, где располагается proxy-сервер, но столкнулся с некоторыми трудностями. Я попросил его разместить хотя бы трёхбуквенный код страны для каждого proxy-сервера. Математика проста — чем ближе страна, тем меньше задержка. Также будет очень глупо попасть на proxy-сервер страны, где ресурс заблокирован

3. Анализ вашего трафика

Шифрование сильно усложняет анализ трафика, но не делает его невозможным. По возможности, следите, чтобы использовался протокол https. Воспользуйтесь дополнением HTTPS Everywhere для Chrome и Firefox, который позволяет определить правила автомагического редиректа с протокола HTTP на протокол HTTPS

ESNI

Для шифрования HTTP-трафика и таким образом преобразования его в HTTPS применяется протокол TLS. Проблема протокола TLS в том, что он позволяет на одном сервере запустить лишь один HTTPS-сервер — прямо как старый добрый HTTP 1.0. Для решения этой проблемы разработан протокол SNI. И вот тут была допущена ошибка — имя хоста передаётся в открытом виде. Это имя хоста перехватывает DPI провайдера и принимает решение о разрыве соединения. Идея ESNI проста — зашифровать SNI

Firefox — первый браузер, реализовавший поддержку ESNI. Включаем:

  1. В адресной строке браузера набираем about: config

  2. В открывшемся окне в строке поиска настроек набираем network.security.esni.enabled

  3. Двойным кликом мышки устанавливаем в значение true

Включение ESNI в FirefoxВключение ESNI в Firefox

Проверить, работает ли ESNI в браузере, можно тут

ESNI очень не понравился власть имущим упырям, и его полностью блокируют в России и Китае — прям знак качества

© Habrahabr.ru