Шаги:
- Открываем браузер (Internet Explorer, Chrome, Firefox, Safari)
- Вводим “medium.com” в адресной строке
- Нажимаем на Enter
Звучит легко, да? Но что, если ресурс заблокирован государством без ведомой нам причины?
Бывает так, что блокировка происходит по соображениям безопасности, на законном основании, по политическим причинам, цензура и тд.
Но я не смог найти соответствующую причину бана для этого сайта, а почитать статью на медиуме очень хотелось.
В тот вечер захотелось узнать, как происходит блокировка и как можно обойтись без всякого VPN.
Как сайты блокируются?
Блокировать доступ могут многие: владелец кафе с бесплатным интернетом, администрация школы/универа, админ с работы, государство и интернет-провайдер.
Давайте посмотрим на базовые варианты блокировки:
Фильтрация по DNS
Чтобы зайти на medium.com, мы должны знать IP адрес данного сайта. Для этого устройство запрашивает у DNS сервера IP адрес медиума. По умолчанию, ваш компьютер подключается к DNS серверу, который был задан вашим интернет провайдером, если вручную вы не указали другой. Обычно это 8.8.8.8 от Google или 1.1.1.1 от Cloudflare .
Государство может поручить основным интернет-провайдерам настроить DNS сервера так, чтобы они возвращали пустые или фейковые IP адреса для заблокированных сайтов
Это можно обойти, настроив DNS сервера на доверенные.
Обычно все DNS запросы незащищены и незашифрованы. Любой злоумышленник может увидеть запрос, находящийся между вами и DNS сервером, и даже модифицировать его. Это может быть кто угодно: люди на вашей wi-fi сети, интернет-провайдер, транзитные провайдеры.
Вы можете защифровать ваш DNS запрос через DoH и DoT .
Фильтрация по IP
Другой метод блокировки - это бан по IP адресу. В данном случае, интернет-провайдеры настраивают свои сети так, чтобы обрывать все подключения к заблокированному IP адресу. У этого метода достаточно много негативных последствий. Одним из них может быть такой случай, когда множество веб-ресурсов имеют один и тот же IP адрес и в блок попадает большое количество несвязанных сайтов.
Если заблокируют someblockedwebsite.xyz по IP 104.16.123.127, то заблокируется goodwebsite.com и заодно anothergoodwebsite.com.
DPI (Deep packet inspection)
Согласно википедии, Deep packet inspection (DPI — технология накопления статистических данных, проверки и фильтрации сетевых пакетов по их содержимому. В отличие от брандмауэров, Deep Packet Inspection анализирует не только заголовки пакетов, но и полное содержимое трафика на уровнях модели OSI со второго и выше. Deep Packet Inspection способно обнаруживать и блокировать вирусы, фильтровать информацию, не удовлетворяющую заданным критериям.
DPI - это такая технология, которая анализирует трафик и может блокировать по заданным критериям. Например, блокировать все торренты, VPN, Tor и другие.
Эксперимент
Давайте посмотрим, как заблокирован medium.
curl -v https://medium.com
* Trying 104.16.123.127...
* TCP_NODELAY set
* Connected to medium.com (104.16.123.127) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* successfully set certificate verify locations:
* CAfile: /etc/ssl/cert.pem
CApath: none
* TLSv1.2 (OUT), TLS handshake, Client hello (1):
* LibreSSL SSL_connect: SSL_ERROR_SYSCALL in connection to medium.com:443
* Closing connection 0
curl: (35) LibreSSL SSL_connect: SSL_ERROR_SYSCALL in connection to medium.com:443
DNS возвращает IP 104.16.123.127 для medium.
Проверим на DNS фильтрацию. Берем IP адрес medium через Google Public DNS (8.8.8.8)
dig @8.8.8.8 medium.com +short
104.16.122.127
104.16.124.127
104.16.121.127
104.16.120.127
104.16.123.127
104.16.123.127 в списке. IP адрес указывает на Cloudflare и, похоже, тут нет DNS фильтрации.
Проверим на IP фильтрацию. Открываю 104.16.123.127
Значит, здесь нет блокировки по IP.
Возможно, блокировка происходит засчет использования технологии DPI.
Для этого быстро рассмотрим, как работает сайт по защищенному протоколу https
- Клиент запрашивает IP адрес сервера у DNS
- Устанавливается TCP соединение с сервером
- Идет обмен ключами для безопасного соединения с сервером
- Соединение переходит в TLS
- Дальше клиент и сервер обмениваются данными безопасно
Чтобы узнать более подробно, я установил Wireshark
Wireshark — это инструмент для анализа трафика, который помогает захватывать сетевые пакеты и более подробно отображает данные пакета.
Подключил и начал анализировать запрос на medium.com
- Клиент (192.168.0.116) делает DNS запрос для medium.com к роутеру (192.168.0.1), и от роутера дальше к DNS серверу.
- Роутер возвращает IP адрес 104.16.123.127 для medium.com
- Потом начинается TCP соединение > SYN
- < SYN ACK
- > ACK
- Идет переход в TLS соединение > Client Hello
- Клиент выполняет несколько неудачных повторных передач
- Сервер завершает TCP-соединение
Итак, как же DPI понял, что мы пытаемся подключиться к medium.com?
Так как множество доменов могут хоститься на одном IP адресе, клиент уточняет имя сервера при подключении, чтобы получить верный сертификат. Имя хоста отправляется в процессе Client Hello и называется Server Name Indication
Имя сервера незашифровано и легко попадает под фильтр.
Как обойти фильтр
ESNI
Вместо того, чтобы отправлять имя сервера в открытом виде, давайте отправим его в зашифрованном виде. Еще одно шифрование перед шифрованием. Тут длинная история получения открытого ключа, шифрования, где задействованы такие функции DNS: DoH и DoT .
Вместо:
Server name: meduim.com
будет:
Encrypted server name: 3d16c20b27f88e13c74089169bcfbe…
На картинке выше вы можете видеть, как вместо server_name используется encrypted_server_name.
Недостаток этого метода в том, что он требует поддержки браузера и сервера TLS версии 1.3, ESNI, безопасного DNS, DNSSEC.
Этот метод пока не получил широкого распространения. Но, по крайней мере, у меня есть доступ к medium.
Вы можете проверить, работает ли у вас ESNI по этой ссылке .
Сегментация пакетов
Давайте создадим петицию, чтобы все сайты поддерживали ESNI. Откроем www.change.org .
К сожалению, сайт заблокирован и не поддерживает ESNI.
Но есть еще один способ обойти фильтрацию.
Я нашел программу под названием GreenTunnel , чтобы обойти DPI системы.
Главная идея - разделить пакет client hello на несколько частей. Это заставит примитивный DPI не фильтровать этот тип пакетов.
Как видно на картинке выше, наш client hello пакет отправлен двумя частями.
Можете скачать GreenTunnel по этой ссылке .
В этой статье я постарался как можно проще и лаконичнее рассказать вам об этих непростых технологиях. Если вам интересно углубиться в эту тему и узнать все в деталях, вот ссылка на хороший ресурс на хабре
Теперь попробуй зайти на заблокированный сайт, как насчет joycasino.com ?