Битва за Телеграм: как устроены блокировки в России и Китае

Статья взята из блога Вастрика. Публикуем материал с его разрешения.


Интернет тяжело заблокировать, проще отключить

Вы когда-нибудь задумывались насколько сложно выборочно блокировать интернет? Разберем на простом домашнем примере.

Помните свой прошлый роутер? Который верой и правдой служил вам лет пять, но внезапно стал так тормозить, что пришлось покупать новый, помощнее? Износился наверное. Нет, три новых смартфона в доме, умная кофеварка и подписка на порнхаб в HD никак с этим не связаны.

По сути всё, чем занимается ваш роутер — читает четыре байта из каждого пакета и решает кому отправить его содержимое. Простейшая работа, как кубики в формочки вставлять. Только пакетов этих проходит так много, что даже неплохой домашний роутер за $150 поднимает лапки на втором десятке устройств.

Теперь представьте сколько таких устройств во всём вашем городе. А во всей стране?

Из каждого пакета каждого устройства нужно не просто прочитать пару байтиков. Нужно сравнить их с базой «запрещенных байтиков», что невообразимо долго и несовместимо с нормальной работой сети. Когда так сделали в Китае, внешний интернет вообще перестал работать.

Как блокируют у нас и в Китае

В Китае потратили миллиарды долларов на оборудование и добились работы внешнего интернета со скоростью примерно один мегабит. Он как бы есть, но пользоваться им невозможно. В России пошли своим путём — начали ставить блокировку не на канал, а рядом.

Систему назвали DPI — Deep Packet Inspection. Если она стоит прям на канале провайдера — это активный DPI, если параллельно — пассивный. В Китае применяют оба варианта, в России — в основном пассивный.

Когда вы запрашиваете рутрекер, запрос без каких-либо проверок улетает на сервер рутрекера. Одновременно с этим он дублируется на коробочку с DPI, чья задача проверить заблокирован ли сайт. Если да — вернуть редирект на страничку «сайт заблокирован» быстрее, чем вам ответит сам рутрекер. Протупил — проиграл, рутрекер загрузился.

В Китае вместо редиректа используют флаг сброса соединения. Там не парятся с заглушками, просто показывают вечную загрузку.

Уже становится понятно насколько всё тупо. Ведь можно просто настроить свой компьютер отбрасывать все «редиректы» от пассивного DPI и смотреть любой запрещенный сайт. Кек.

DPI физически не успевает анализировать все пакеты, поэтому он выбирает только подозрительные. «Подозрительность» он определяет по словам «HTTP» и «Host» внутри. Причем именно в таком регистре. Если написать, скажем, «hoSt», что совершенно валидно для протокола HTTP, DPI даже не посмотрит на такой пакет. Снова кек.

Ладно, представим, что кто-то изобрел самый умный в мире DPI. Он ничего не отбрасывает, знает все тонкости HTTP и стоит полтора миллиарда. Зато ни один пакет, содержащий «Host: rutracker.org», не пройдет. Зато пройдут два пакета: «Hos» и «t: rutracker.org». Трипл кек.

Я думал не бывает цирка смешнее этого. Можете почитать подробнее в статье ValdikSS на хабре: Автономный способ обхода DPI и эффективный способ обхода блокировок сайтов по IP-адресу

Когда Роскомнадзор понял насколько нелепо были потрачены миллионы на всю эту затею с DPI, они озверели начали банить тупо по IP. В таком случае блокируется сама попытка отправить запрос и делается это обычным фаерволлом.

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

Самое смешное, что тот же Китай, на который они так равняются, прошел ровно те же этапы еще 10-15 лет назад.

Китай тоже не смог заблокировать интернет. Он сделал так, что сайтами «снаружи» стало мучительно невозможно пользоваться. И подождал 20 лет.

Раз уж Китай впереди планеты всей, заглянем на 10 лет вперед и посмотрим что нас ждет:

  • Активные DPI на граничных магистралях. Как виза в интернет. Китайцы не пользуются внешними сервисами потому что они практически не грузятся;
  • Полный запрет прокси и VPN. Китайский Роскомнадзор следит за всеми новыми VPN и заранее банит их;
  • Подмена DNS (DNS Hijacking). Еще с 2002 года Китай начал фильтровать ответы корневых DNS серверов и подделывать их. К 2007 году в стране не осталось DNS, которые бы не управлялись правительством. Все внутренние DNS провайдеров общаются только с доверенным списком серверов. Одно время даже домен google.com вёл на китайский поисковик Baidu, что нехило повысило его популярность;
  • Поиск запрещенных иероглифов в пакетах. Китайцам «помог» их собственный язык. Если даже на разрешенном сайте DPI увидит иероглиф, связанный с запрещенными политическими событиями, он разорвёт соединение и настучит куда надо. Как хорошо, что в русском и английском языках так не получится.;
  • Рандомные разрывы соединений. «Не можешь запретить — сделай жизнь невыносимой». Смотреть ролики на ютюбе китайцы бы не смогли, даже не будь он заблокирован. Их пассивный DPI просто рвет в случайных местах внешние UDP-потоки.

Вот хорошая статья 2017 года про историю и устройство блокировок в Китае. Автор собрал много источников: Золотая Цензура Китая.

Три модных способа запретить сайт этим летом

Заблокировать страничку можно по её адресу (URL), по домену сайта или по IP всего сервера. Роскомнадзор не регулирует какой способ будут использовать провайдеры, потому что сам понятия не имеет как они работают.

Когда сайт запрещают, он попадает в «выгрузку». Это табличка, в которой указаны URL, домен, IP и подсеть. Провайдеры должны за три дня заблокировать всё это любым способом, иначе штраф.

Всех провайдеров обязали купить специальную коробочку «Ревизор», которая проверяет заблокированы ли сайты и пишет доносы. Сделана она на базе самого дешевого роутера TP-LINK за 1500 рублей (на разработку потрачено 84 миллиона). Делали её настолько жопорукие кривозады, что местами там внутри очень смешно. Почитайте: Исследуем «Ревизор» Роскомнадзора.

Четыре дня назад, когда в выгрузку попало 18 млн IP, этот Ревизор у всех провайдеров офигел и завис. Роскомнадзор направил всем Официальное Требование перезагрузить его 😀

Вот три способа заблокировать сайт. Актуальны везде — в Иране, Сирии, Китае и, конечно, в России.

По URL

Самый ранний и наименее деструктивный способ. Позволяет не блокировать весь сайт (например YouTube), а запрещать только отдельные странички. Но вот незадача — при использовании протокола HTTPS, никто, кроме вас и сервера YouTube не видит адрес запрашиваемой странички. Он передается в зашифрованном виде и это основа всей безопасности в интернете. Иначе бы злоумышленники давно всё расшифровали и украли ваши кредитки.

Когда заблокированные сайты прочухали эту фишку, Роскомнадзор заставил провайдеров отказаться от этого способа и начать блокировать сайты целиком.

По IP

Способ, который применяют сейчас. В каждом пакете есть IP адрес отправителя — любой фаерволл может его прочитать и заблокировать. Проблема в том, что на одном IP может быть много всего. Если вы поднимаете сайт где-нибудь в облаке Amazon, у вас каждый раз новый IP.

Что тогда, блокировать весь амазон? Дааа!

Блокировка по IP жестока, но легко обходится через прокси или любой шифрованный туннель — VPN, SSH, etc. Но ваша бабушка точно не будет заморачиваться, она пойдёт смотреть Вести Недели.

По домену

Домен — это набор IP-адресов в DNS. Получив «выгрузку», провайдеры загружают этот список IP из публичных DNS и блокируют их все. Если сайт сменил сервер, новый IP тоже будет заблокирован.

В 2017 из-за этого произошел крупнейший сбой, когда кто-то выкупил старый заблокированный домен и добавил туда IP адреса Яндекса, Гугла, Сбербанка и еще 200 популярных сервисов. Провайдерам ничего не оставалось, кроме как заблокировать весь интернет. От блокировок по DNS отказались.

В Китае точно такая же история произошла еще в 2008 году. В роскомнадзоре даже википедию на этот счет прочитать не смогли.

Как Телеграм клал болт на это всё

У телеграма есть специальный тип пуш-уведомлений, который не отображается нотифом на экране вашего смартфона (как новое сообщение), а тихо обрабатывается самим приложением в фоне. Называется он DC_Update (DC — от Data Center), через него приложение получает IP адрес нового сервера, с которым отныне общается. Раньше его использовали для ускорения работы, но на прошлой неделе у него была минута славы.

Пуш-уведомления рассылаются с серверов Apple (APNS) или Google (GCM, Firebase). Так сделано, чтобы смартфон мог держать только одно фоновое соединение, не бегая по серверам каждого приложения отдельно. Телеграм говорит серверам Apple «пошли такой-то пуш такому-то пользователю» и Apple посылает.

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

Есть только два способа это прекратить:

  1. Запретить Apple и Google рассылать пуш-уведомления телеграма. Но это требование незаконно. Максимум на что они пойдут — удалят приложение из сторов для российских аккаунтов, но это никак не скажется на работе пуш-уведомлений.
  2. Заблокировать сами пуш-сервера. Тогда на всех телефонах в России перестанут работать все пуш-уведомления. Добро пожаловать в каменный век!

Телеграм может и дальше перебирать IP адреса пока они вообще не закончатся. 20 млн IP — это меньше 1% от их общего количества. Есть еще куда стремиться. Будет хуже.

Ещё интересное для вас:
Тест: какой язык программирования вам стоит выбрать для изучения?
Тест: как хорошо вы разбираетесь в Data Science?
Соревнования и бесплатная онлайн-школа для программистов