Skip to main content

Приложение

Данный раздел предназначен для тех, кто хочет лучше разобраться в устройстве работы SkyDNS Zapret ISP.

Схема работы SkyDNS Zapret ISP

Общая информация

SkyDNS Zapret ISP в автоматическом режиме (по умолчанию раз в час) скачивает источники, которые включены в файле конфигурации (по умолчанию список Роскомнадзор и список URL, подготовленный SkyDNS, на основе списка экстремистских материалов Министерства юстиции РФ). Служба SkyDNS Zapret ISP - zi-update, постоянно разрешает доменные имена запрещенных ресурсов в IP-адреса. Полученные IP-адреса анонсируются на внутренний маршрутизатор. Трафик, идущий на эти IP-адреса, маршрутизируется на систему фильтрации.

Оставшийся трафик не меняет маршрут следования (см. раздел Схемы подключения SkyDNS Zapret ISP в сеть).

Попавший на SkyDNS Zapret ISP трафик классифицируется следующим образом:

Классификация трафика и действия с ним.
Тип Действие
Блокируемый http трафик Возврат страницы блокировки
Блокируемый https трафик Возвращается tcp-reset
Неблокируемый трафик Маршрутизируется без изменений

Ответы на пропущенный без изменений трафик идут через сеть напрямую к клиентам (осуществляется асимметричная маршрутизация).

Трафик, попавший на систему фильтрации, проходит через iptables, после чего попадает на Squid. Squid создаёт две своих копии - одна обрабатывает нешифрованный трафик и располагается на 3128 порту, вторая обрабатывает шифрованный и располагается на 3130 порту. Каждая из копий использует списки доступа (ACL), которые исходя из полученных аргументов принимают решение о том, что вернуть на запрос.

Проверки в ACL

ACL на 3128 порту (нешифрованный трафик), основываясь на составляющих http запроса: домен, порт, путь, аргументы, принимает решение о том пропустить трафик или вернуть страницу блокировки.

ACL на 3130 порту (шифрованный трафик), основываясь на составляющих https запроса: SNI, принимает решение о том пропустить трафик или вернуть tcp-reset.

Порядок проверок в ACL:

  1. Происходит проверка на то, является ли значение в заголовке Host IP-адресом, а также какой протокол используется. Если HTTP и в заголовке IP - возвращаем страницу блокировки.
  2. Происходит поиск набора параметров среди правил фильтрации из Белого списка, если находим - пропускаем запрос.
  3. Происходит поиск набора параметров среди правил фильтрации из Черного списка, если находим - возвращаем страницу блокировки.
  4. Происходит поиск по маске, если находим - возвращаем страницу блокировки.
  5. Пропускаем запрос.
Фильтрация HTTPS и IPv6 и их особенности

Фильтрация HTTPS

Механизм блокировки https трафика:

  1. Трафик поступает на систему фильтрации (443 порт), где посредством iptables перенаправляется на 3130 порт. На этом порте слушает Squid, который принимает входящий пакет.
  2. Squid использует технологию SSL Bump. Она включает в себя установление двунаправленного защищенного соединение - одно в сторону клиента (Squid представляется запрашиваемым сервером, используя самоподписанный сертификат), другое в сторону сервера.
  3. Если обнаруживается попытка установления соединения с блокируемым ресурсом, Squid закрывает туннель в сторону сервера, а клиенту возвращает tcp-reset.
  4. Иначе трафик идёт без изменений.

Фильтрация осуществляется только, если ресурс заблокирован по домену. В этом случае используется SNI, на основании которого и осуществляется проверка. Фильтрация по URL в случае https трафика не работает.

Фильтрация доступа к ресурсам в реестре по протоколу IPv6

SkyDNS Zapret ISP поддерживает фильтрацию по протоколу IPv6 но только в том случае, если провайдер предоставляет своим пользователям IPv6 префикс, на основании которого компьютер пользователя генерирует IPv6 адрес.

В случае если провайдер не предоставляет своим пользователям префикс, то последние версии ОС Windows пытаются настроить использование протокола IPv6 поверх IPv4 в автоматическом режиме - происходит создание туннеля IPv6 поверх IPv4. Осуществлять фильтрацию IPv6 в таком случае невозможно.

Фильтрующий DNS-сервер

В состав SkyDNS Zapret ISP также входит фильтрующий DNS-сервер (Unbound).

Он запущен на 127.0.0.2:53. Запросы на него перенаправляются посредством iptables. Перенаправление происходит если: порт назначения пакета - 53; IP-адрес, с которого пакет был отправлен, находится в фильтруемых сетях. Если IP-адрес источника находится в нефильтруемых сетях (сети, добавленные командой zi-ctl nets с опцией --bypass), запрос перенаправляется на обычный DNS-сервер, который располагается на 127.0.0.1:53.

Принцип работы: на основании таблиц с хостами и с IP-адресами формируются stub-зоны, тем самым гарантируется возврат того IP-адреса, который присутствует в таблице маршрутизации роутера. Такой подход гарантирует 100% перенаправление запросов к заблокированным ресурсам.

Кэш в Squid

В конфигурационном файле, поставляемом вместе с пакетом, кэш отключен.

cache deny all

Отключает кэширование данных, полученных от web-серверов (html страницы, иконки, картинки).

cache_dir aufs /var/spool/squid 20000 49 256

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

Squid использует ~1 Gb RAM, чтобы адресовать 10 Gb кэша.

maximum_object_size 32768 KB
minimum_object_size 3 KB

Размер максимального и минимального файлов в кэше.

cache_swap_low 80
cache_swap_high 90

Определяет процент заполнения кэша, после которого Squid будет его очищать.

cache_mem 2500 MB
maximum_object_size_in_memory 512 KB

cache_mem - объём RAM, который будет использоваться для кэширования.

maximum_object_size_in_memory - соответствует параметру maximum_object_size, но для RAM.

cache_mem - не жесткое ограничение для всего RAM, которое будет использовано Squid-ом. Squid использует помимо этого другие кэши, плюс на внутренние нужды.

Таблицы базы данных

Описание таблиц базы данных.

В базу данных входят следующие таблицы:

  • filter - содержит правила фильтрации. Ресурс может быть заблокирован по IP-адресу, URL, доменному имени, маски домена.
  • route - содержит маршруты, ассоциированные с доменами из таблицы host. В эту же таблицу попадают маршруты, поставляемые вместе с источником (например, IP-адреса, которые заблокировал Роскомнадзор).
  • host - содержит доменные имена записей из таблицы filter.
  • src_net - содержит сети, из которых на систему фильтрации будет поступать трафик.
  • user - содержит данные об учетных записях пользователей web-интерфейса.