# 17. Фильтр: настройка DPI [← Оглавление](../README.md) · [← Раздел 16: Фильтр: ACL и пулы](16.md) --- Модуль DPI (Deep Packet Inspection) — ключевая подсистема фильтра, отвечающая за анализ и фильтрацию трафика. Настройки DPI включают общие параметры модуля, конфигурацию работы с реестром Роскомнадзора, параметры деградации протоколов и индивидуальные настройки DPI-листов. > **Примечание:** формат секции DPI различается между пилотным проектом (Урал) и федеральным проектом. В пилотном проекте настройки реестра Роскомнадзора находятся внутри DPI-листа 0. В федеральном проекте они вынесены в отдельную секцию, а все DPI-листы (0–15) стали абсолютно идентичными по структуре. ## 17.1. Общие настройки модуля DPI Общие настройки расположены в корне секции `dpi` конфигурации фильтра. ### 17.1.1. Включение/выключение DPI | Значение | Поведение | | ----------- | --------------------------------------------------------- | | **enable** | Модуль DPI активен, трафик анализируется и обрабатывается | | **disable** | Модуль DPI выключен, весь трафик пропускается прозрачно | В рабочем режиме DPI должен быть **включён**. Выключение модуля DPI может использоваться для **диагностики**: если выключить DPI и убедиться, что фильтр больше не влияет на трафик — значит, проблема была именно в DPI-обработке. ### 17.1.2. Send RST off: отключение TCP Reset при блокировке протоколов Параметр **send RST off** — важная настройка, определяющая поведение фильтра при блокировке распознанных протоколов. | Значение | Поведение | | -------- | -------------------------------------------------------- | | **off** | TCP Reset при блокировке протоколов **не отправляется** | | **on** | TCP Reset отправляется абоненту и серверу при блокировке | В проекте ТСПУ параметр **всегда должен быть в режиме `off`**. **Почему отправка TCP Reset опасна:** Когда приложение абонента (например, Telegram) пытается установить TCP-соединение и получает в ответ TCP Reset, оно воспринимает это как временный сбой и **немедленно** пытается установить новое соединение. Этот цикл повторяется непрерывно и с высокой частотой: 1. Приложение отправляет TCP SYN; 2. Фильтр распознаёт протокол и отправляет TCP Reset; 3. Приложение мгновенно пытается установить новое соединение; 4. Цикл повторяется бесконечно. На практике наблюдались случаи, когда мобильные устройства начинали **тормозить** из-за того, что Telegram непрерывно пытался переустановить заблокированную сессию. Количество генерируемых сессий создаёт **избыточную нагрузку** на фильтр. При отключённой отправке Reset соединение **отбрасывается молча** — приложение пытается установить сессию, сессия «висит» и обрывается только по **тайм-ауту**. Это значительно снижает количество повторных попыток и нагрузку на фильтр. ### 17.1.3. Functionality mode: normal (не double mirror traffic) | Значение | Описание | Применение в ТСПУ | | ------------------------- | -------------------------------------------- | ----------------- | | **normal** | Стандартный режим работы фильтра | **Всегда** | | **double mirror traffic** | Режим для работы с копией (зеркалом) трафика | Не используется | Параметр **всегда должен быть `normal`**. Режим `double mirror traffic` предназначен для сценариев, когда фильтр получает зеркалированную копию трафика, что в проекте ТСПУ не применяется. В секции DPI также присутствует устаревшая команда `extra analysis off` — она не используется и не требует внимания. ## 17.2. Настройка реестра РКН Секция настройки реестра Роскомнадзора определяет параметры скачивания и обработки списков блокировки, предоставляемых Роскомнадзором. > **Примечание:** в федеральном проекте эта секция вынесена в отдельный раздел конфигурации. В пилотном проекте (Урал) настройки находятся внутри DPI-листа 0. ### 17.2.1. Источник: RKN или ГРФЦ | Источник | Описание | | -------- | ----------------------------------------------------------------------- | | **RKN** | Оригинальный формат выгрузки с серверов Роскомнадзора | | **ГРФЦ** | Новый формат выгрузки (оптимизированная база данных, уменьшенный объём) | Роскомнадзор предложил новый источник списков — **ГРФЦ**. По сравнению с оригинальным форматом RKN, база данных ГРФЦ оптимизирована и уменьшена в объёме. Рекомендуется переключаться на выгрузку с ГРФЦ. ### 17.2.2. Логин/пароль для доступа к серверу РКН Для скачивания реестра с сервера Роскомнадзора требуется **авторизация**. Логин и пароль задаются в секции настройки реестра. Учётные данные выдаются Роскомнадзором. ### 17.2.3. Привязка к DPI-листу (list number) Параметр **list number** определяет, к какому DPI-листу будет привязан реестр Роскомнадзора. По умолчанию — **0**. В текущей конфигурации проекта ТСПУ фильтрация по реестру Роскомнадзора осуществляется в **DPI-листе 0**. ### 17.2.4. Proxy-сервер, dump server | Параметр | Описание | | ---------------- | --------------------------------------------------------------------------------- | | **Proxy server** | Промежуточный сервер для доступа к реестру РКН, если прямое соединение невозможно | | **Dump server** | Сервер, на который фильтр выгружает скачанный реестр для внешнего анализа | **Proxy server** используется, когда фильтр не может напрямую подключиться к серверу Роскомнадзора. **Dump server** полезен для диагностики: можно получить копию того же дампа, который скачал фильтр, и проанализировать его на внешнем сервере. Фильтр скачивает реестр, а затем выгружает его на указанный dump server. ### 17.2.5. Проблемы скачивания: минимальная скорость ~10 Мбит/с Сервер Роскомнадзора настроен таким образом, что **разрывает соединение** при низкой скорости скачивания. Эмпирически установлено, что минимальная скорость загрузки для успешного скачивания реестра составляет **~10 Мбит/с**. При более низкой скорости сервер Роскомнадзора обрывает соединение через некоторое время. **Типичные причины проблем со скачиванием:** - Недостаточная скорость management-интерфейса; - Ошибки на интерфейсе фильтра (в одном случае проблема решилась перезагрузкой фильтра); - Проблемы на стороне коммутатора или промежуточного оборудования. При диагностике проблем скачивания следует обращать внимание на скорость и ошибки на management-интерфейсе. Команда `dpi run` позволяет принудительно инициировать обновление всех DPI-листов (подробнее — в [разделе 18.13.4](18.md)). > **Примечание:** запуск `dpi run` не гарантирует, что реестр будет скачан — сервер РКН может ответить, что обновлений нет, и в этом случае ничего скачано не будет. ## 17.3. Деградация протоколов (protocols capacity) Механизм деградации протоколов позволяет **частично ухудшить** работу распознанного протокола вместо полной блокировки. Настройка выполняется в секции DPI для каждого протокола индивидуально. ### 17.3.1. Шкала 0–100: 0 = полная блокировка, 100 = полный пропуск Для каждого протокола задаётся значение **capacity** в условных единицах от 0 до 100: | Значение | Поведение | | -------- | ------------------------------------------------- | | **0** | Полная блокировка — ничего не пропускается | | **100** | Полное пропускание — трафик не затрагивается | | **1–99** | Деградация — дроп пакетов с заданной вероятностью | ### 17.3.2. Дроп пакетов с заданной вероятностью Механизм деградации работает просто: с определённой вероятностью, зависящей от параметра capacity, фильтр **дропает пакеты** в рамках сессии распознанного протокола. Чем ниже значение capacity, тем больше пакетов отбрасывается. ### 17.3.3. Эффективная деградация: 2–10% пропускания На практике деградация становится **заметной для пользователя** только при значениях capacity в диапазоне **2–10**. Это объясняется свойствами TCP: - TCP обладает встроенным механизмом **повторной передачи** потерянных пакетов; - При низкой степени деградации (высоких значениях capacity) TCP успешно компенсирует потери, и пользователь практически ничего не замечает; - Только при высокой степени деградации (capacity ~2–10) потери становятся настолько значительными, что TCP не успевает их компенсировать. При значении capacity около **5** задержка отправки сообщений в приложениях может достигать **десятков секунд**. ### 17.3.4. Влияние на голосовые вызовы и мессенджеры Деградация протоколов особенно эффективна для **голосовых вызовов** и **видеозвонков**, где потеря пакетов непосредственно влияет на качество: - **Заикание** голоса и пропадание звука; - **Рассинхронизация** аудио и видео; - **Невозможность разговаривать** при высокой степени деградации; - Для текстовых сообщений — значительные **задержки доставки**. Деградация является альтернативой полной блокировке: вместо немедленного и очевидного отключения сервиса пользователь получает **постепенное ухудшение** качества связи. ## 17.4. Настройка DPI-листов (0–16) На фильтре может быть настроено до **16 DPI-листов** (номера 0–15). В будущих прошивках это количество может быть расширено — планируется возможность генерации DPI-листов по необходимости на уровне конфигурации. Все DPI-листы имеют **одинаковую структуру** настроек (в федеральном проекте). Каждый лист настраивается индивидуально. ### 17.4.1. Enable/disable каждого листа Каждый DPI-лист может быть **включён или выключен** независимо от остальных: ```text dpi list enable ← включить лист disable ← выключить лист ``` ### 17.4.2. BitTorrent UTP detection | Значение | Описание | | -------- | ----------------------------------------------- | | **on** | Включено распознавание протокола BitTorrent UTP | | **off** | Распознавание BitTorrent UTP выключено | Если требуется распознавание и блокировка BitTorrent, параметр должен быть включён (`on`). ### 17.4.3. WH List Mode: blacklist (по умолчанию) / whitelist Параметр **WH list mode** определяет логику работы DPI-листа: | Режим | Поведение | Применение в ТСПУ | | ------------- | ----------------------------------------------------------------- | ----------------- | | **blacklist** | Всё, что совпало со списком — блокируется; остальное пропускается | **По умолчанию** | | **whitelist** | Пропускается только совпавший трафик; всё остальное блокируется | Не используется | В проекте ТСПУ режим whitelist **не используется** из-за риска **случайной блокировки всего трафика**. Этот режим применяется в других сценариях, например, при использовании BRAS-функциональности на устройстве. ### 17.4.4. Behavior: block / ignore / color / redirect Параметр **behavior** определяет, что происходит с трафиком, совпавшим со списком данного DPI-листа: | Значение | Описание | Применение в ТСПУ | | ------------ | -------------------------------------------------------- | ---------------------------- | | **block** | Трафик блокируется (дропается) | Основной рабочий режим | | **ignore** | Совпадение фиксируется и логируется, трафик пропускается | Для распознавания протоколов | | **color** | Совпавший трафик «окрашивается» | Не используется | | **redirect** | Трафик перенаправляется | Не используется | **Режим block** — основной для блокировки по реестру Роскомнадзора и по очищенным протокольным спискам. При срабатывании блокировки: - Для **HTTP**: абоненту отправляется HTTP-редирект (302) на страницу-заглушку; - Для **HTTPS**: абоненту и серверу отправляется TCP Reset, разрывающий соединение (поскольку содержимое зашифровано и подмена ответа невозможна). **Режим ignore** — используется для **первой стадии двухстадийной блокировки**: фильтр распознаёт протоколы и отправляет логи на SPFS, но сам трафик не блокирует. Данные передаются в ЦСУ для формирования очищенных списков (подробнее — в [разделе 8](08.md)). Также в секции DPI-листа присутствует параметр **logs on/off** — включение журналирования срабатываний данного списка. В проекте ТСПУ эта функциональность, как правило, используется. ### 17.4.5. Redirect URL — страница-заглушка для заблокированных HTTP-ресурсов Параметр **redirect URL** задаёт адрес страницы-заглушки, на которую перенаправляется абонент при блокировке **HTTP-ресурса** по реестру Роскомнадзора. Типичное содержимое страницы-заглушки: уведомление абонента о том, что запрошенный ресурс заблокирован в соответствии с требованиями законодательства. > **Важно:** redirect URL работает **только для HTTP-трафика**. Для HTTPS-трафика перенаправление невозможно (содержимое зашифровано), поэтому используется TCP Reset. Также в секции DPI-листа присутствуют параметры, связанные с redirect behavior (redirect interval и др.) — в проекте ТСПУ они **не используются**. ### 17.4.6. Download URL — источник списков, update schedule | Параметр | Описание | | ------------------- | -------------------------------------------------------------------- | | **Download URL** | URL, откуда фильтр скачивает список фильтрации для данного DPI-листа | | **Update schedule** | Интервал обновления списка (например, 30 минут) | Download URL задаёт источник списков для DPI-листов, **не связанных** с реестром Роскомнадзора (скачивание реестра РКН настраивается отдельно — см. [раздел 17.2](#172-настройка-реестра-ркн)). Типичный источник — ресурс в **центральной системе управления** (ЦСУ), откуда загружаются очищенные протокольные списки. **Update schedule** определяет частоту обновления: | Значение | Поведение | | ------------ | -------------------------------------------------- | | Время (мин.) | Список обновляется с заданным интервалом | | **never** | Список **никогда не обновляется** и не скачивается | > **Внимание:** значение `never` — частая причина проблем. Если всё настроено корректно, но update schedule установлен в `never`, списки просто не будут скачиваться. Необходимо задать конкретный интервал обновления. ### 17.4.7. Protocols — список распознаваемых протоколов В секции **protocols** каждого DPI-листа указываются протоколы, по которым будет осуществляться распознавание и последующее действие (блокировка, игнорирование и т.д.). Список протоколов задаётся перечислением названий: Telegram, WhatsApp, Viber, BitTorrent и др. Набор поддерживаемых протоколов определяется версией прошивки фильтра. ### 17.4.8. No IP / IP — исключение/включение адресов для обработки Параметры **IP** и **No IP** определяют, какой трафик подлежит обработке данным DPI-листом: | Параметр | Описание | | ---------------------- | --------------------------------------------------------------------- | | **IP** | Подсети и адреса, которые **должны обрабатываться** данным DPI-листом | | **No IP** | Локальные адреса абонентов, **исключённые** из обработки | | **No IP Remote** | Удалённые адреса (серверы), **исключённые** из обработки | | **IPv6** / **No IPv6** | Аналогичные параметры для IPv6-трафика | По умолчанию параметр **IP** должен содержать сеть `0.0.0.0/0` для всех VLAN — тогда весь трафик, попавший в DPI, будет обрабатываться данным листом. **Использование No IP для диагностики:** Параметр **No IP** — ключевой инструмент траблшутинга. Чтобы проверить, влияет ли данный DPI-лист на конкретного абонента: 1. Добавить локальный IP-адрес абонента в **No IP** данного DPI-листа; 2. Выполнить `apply`; 3. Проверить, изменилось ли поведение у абонента; 4. Если приложение у абонента **заработало** — данный DPI-лист действительно блокировал его трафик; 5. Если **ничего не изменилось** — проблема не в данном DPI-листе. Параметр **No IP Remote** работает аналогично, но исключает из обработки удалённый IP-адрес (адрес сервера). ### 17.4.9. QUIC list Параметр **QUIC list** определяет список ресурсов, для которых должен распознаваться протокол **QUIC** (Quick UDP Internet Connections) — протокол, разработанный Google для оптимизации доставки контента. Фильтр **умеет распознавать** QUIC, но для этого необходимо внести ресурсы, которые планируется обрабатывать, в QUIC list. ## 17.5. Формат списков фильтрации Списки фильтрации (кроме реестра Роскомнадзора, который скачивается в специальном формате) представляют собой **текстовые файлы**, где на каждой строке перечислены ресурсы для обработки. ### 17.5.1. IP-адреса, подсети, диапазоны, URL Поддерживаемые форматы записей в списках: | Формат | Пример | Описание | | ------------------- | ------------------------- | ---------------------- | | IP-адрес | `1.2.3.4` | Конкретный IP-адрес | | Подсеть | `10.0.0.0/8` | Подсеть в CIDR-нотации | | Диапазон IP | `1.2.3.4-1.2.3.10` | Диапазон адресов | | URL | `http://example.com/page` | Конкретный URL (HTTP) | | Домен | `example.com` | Домен (HTTP и HTTPS) | | Домен с поддоменами | `*.example.com` | Домен и все поддомены | Если в начале URL стоит **звёздочка** (`*`), обрабатываются **все протоколы** (HTTP и HTTPS) и **все поддомены** данного домена. Если протокол **не указан явно**, обрабатываются и HTTP, и HTTPS. ### 17.5.2. HTTP: блокировка конкретного URL Для **HTTP**-трафика возможна блокировка **конкретного URL** — вплоть до отдельной страницы. Это обусловлено тем, что при HTTP-соединении URL передаётся **в открытом виде** в заголовке запроса, и фильтр может его проанализировать. Пример: запись `http://example.com/specific/page.html` в списке заблокирует **только эту конкретную страницу**, остальные страницы на `example.com` останутся доступными. ### 17.5.3. HTTPS: блокировка только по домену (SNI/Client Hello) Для **HTTPS**-трафика блокировка возможна **только на уровне домена**. Это фундаментальное ограничение, связанное с механизмом установления HTTPS-соединения: 1. При установлении HTTPS-соединения клиент отправляет **Client Hello**; 2. В Client Hello содержится поле **SNI** (Server Name Indication), указывающее доменное имя сервера; 3. Поле SNI содержит **только домен** (например, `ru.wikipedia.org`) — **без пути и URL**; 4. Всё остальное содержимое HTTPS-соединения **зашифровано** и недоступно для анализа. **Практическое следствие:** если в списке указана строка вида `https://ru.wikipedia.org/wiki/Конкретная_статья`, фильтр заблокирует **весь домен** `ru.wikipedia.org` целиком, а не конкретную страницу. Поле SNI не содержит пути URL, поэтому фильтр видит только домен и блокирует все обращения к нему. | Протокол | Точность блокировки | Причина | | --------- | --------------------------- | ------------------------------------- | | **HTTP** | До конкретного URL/страницы | URL виден в открытом виде в заголовке | | **HTTPS** | Только весь домен целиком | В SNI (Client Hello) только домен | --- [← Оглавление](../README.md) · [← Раздел 16: Фильтр: ACL и пулы](16.md) · [Раздел 18: Фильтр: мониторинг и диагностика →](18.md)