Как Зайти На Medium.com?

Шаги:

  1. Открываем браузер (Internet Explorer, Chrome, Firefox, Safari)
  2. Вводим “medium.com” в адресной строке
  3. Нажимаем на Enter

Звучит легко, да? Но что, если ресурс заблокирован государством без ведомой нам причины?

Бывает так, что блокировка происходит по соображениям безопасности, на законном основании, по политическим причинам, цензура и тд.

Но я не смог найти соответствующую причину бана для этого сайта, а почитать статью на медиуме очень хотелось.

Website blocked

В тот вечер захотелось узнать, как происходит блокировка и как можно обойтись без всякого VPN.

Как сайты блокируются?

Блокировать доступ могут многие: владелец кафе с бесплатным интернетом, администрация школы/универа, админ с работы, государство и интернет-провайдер.

Давайте посмотрим на базовые варианты блокировки:

Фильтрация по DNS

Чтобы зайти на medium.com, мы должны знать IP адрес данного сайта. Для этого устройство запрашивает у DNS сервера IP адрес медиума. По умолчанию, ваш компьютер подключается к DNS серверу, который был задан вашим интернет провайдером, если вручную вы не указали другой. Обычно это 8.8.8.8 от Google или 1.1.1.1 от Cloudflare .

Государство может поручить основным интернет-провайдерам настроить DNS сервера так, чтобы они возвращали пустые или фейковые IP адреса для заблокированных сайтов

DNS request

Это можно обойти, настроив DNS сервера на доверенные.

Обычно все DNS запросы незащищены и незашифрованы. Любой злоумышленник может увидеть запрос, находящийся между вами и DNS сервером, и даже модифицировать его. Это может быть кто угодно: люди на вашей wi-fi сети, интернет-провайдер, транзитные провайдеры.

DNS request over wifi

Вы можете защифровать ваш DNS запрос через DoH и DoT .

Фильтрация по IP

Другой метод блокировки - это бан по IP адресу. В данном случае, интернет-провайдеры настраивают свои сети так, чтобы обрывать все подключения к заблокированному IP адресу. У этого метода достаточно много негативных последствий. Одним из них может быть такой случай, когда множество веб-ресурсов имеют один и тот же IP адрес и в блок попадает большое количество несвязанных сайтов.

IP block

Если заблокируют 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 и другие.

DPI

Эксперимент

Давайте посмотрим, как заблокирован 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 check

Значит, здесь нет блокировки по IP.

Возможно, блокировка происходит засчет использования технологии DPI.

Для этого быстро рассмотрим, как работает сайт по защищенному протоколу https

  1. Клиент запрашивает IP адрес сервера у DNS
  2. Устанавливается TCP соединение с сервером
  3. Идет обмен ключами для безопасного соединения с сервером
  4. Соединение переходит в TLS
  5. Дальше клиент и сервер обмениваются данными безопасно
tls ssl handshake

Чтобы узнать более подробно, я установил Wireshark

Wireshark — это инструмент для анализа трафика, который помогает захватывать сетевые пакеты и более подробно отображает данные пакета.

Подключил и начал анализировать запрос на medium.com

Wireshark
  1. Клиент (192.168.0.116) делает DNS запрос для medium.com к роутеру (192.168.0.1), и от роутера дальше к DNS серверу.
  2. Роутер возвращает IP адрес 104.16.123.127 для medium.com
  3. Потом начинается TCP соединение > SYN
  4. < SYN ACK
  5. > ACK
  6. Идет переход в TLS соединение > Client Hello
  7. Клиент выполняет несколько неудачных повторных передач
  8. Сервер завершает TCP-соединение

Итак, как же DPI понял, что мы пытаемся подключиться к medium.com?

Так как множество доменов могут хоститься на одном IP адресе, клиент уточняет имя сервера при подключении, чтобы получить верный сертификат. Имя хоста отправляется в процессе Client Hello и называется Server Name Indication

SNI

Имя сервера незашифровано и легко попадает под фильтр.

plaintext sni

Как обойти фильтр

ESNI

Вместо того, чтобы отправлять имя сервера в открытом виде, давайте отправим его в зашифрованном виде. Еще одно шифрование перед шифрованием. Тут длинная история получения открытого ключа, шифрования, где задействованы такие функции DNS: DoH и DoT .

encrypted sni

Вместо:

Server name: meduim.com

будет:

Encrypted server name: 3d16c20b27f88e13c74089169bcfbe…

ESNI

На картинке выше вы можете видеть, как вместо server_name используется encrypted_server_name.

Недостаток этого метода в том, что он требует поддержки браузера и сервера TLS версии 1.3, ESNI, безопасного DNS, DNSSEC.

Этот метод пока не получил широкого распространения. Но, по крайней мере, у меня есть доступ к medium.

Вы можете проверить, работает ли у вас ESNI по этой ссылке .

Сегментация пакетов

Давайте создадим петицию, чтобы все сайты поддерживали ESNI. Откроем www.change.org .

К сожалению, сайт заблокирован и не поддерживает ESNI.

Но есть еще один способ обойти фильтрацию.

Я нашел программу под названием GreenTunnel , чтобы обойти DPI системы.

Главная идея - разделить пакет client hello на несколько частей. Это заставит примитивный DPI не фильтровать этот тип пакетов.

Packets Packet split

Как видно на картинке выше, наш client hello пакет отправлен двумя частями.

Можете скачать GreenTunnel по этой ссылке .

В этой статье я постарался как можно проще и лаконичнее рассказать вам об этих непростых технологиях. Если вам интересно углубиться в эту тему и узнать все в деталях, вот ссылка на хороший ресурс на хабре

Теперь попробуй зайти на заблокированный сайт, как насчет joycasino.com ?