Народный

Технологии цензуры

Wirefilter — DSL правил DPI от Cloudflare

Open-source движок Cloudflare для описания правил фильтрации сетевого трафика декларативным языком похожим на Wireshark display-filter; используется в Firewall Rules и в OSS-проектах для DPI-правил.

Определение

Wirefilter — это движок и язык декларативных правил для фильтрации сетевого трафика, разработанный Cloudflare и опубликованный как Rust-библиотека wirefilter в 2018 году. Синтаксис намеренно похож на display-filter Wireshark (http.host eq "example.com" and ip.src in {1.2.3.4 5.6.7.8}), что снижает порог входа для сетевых инженеров.

Хотя сам Wirefilter не является цензурным инструментом, синтаксис и подход стали де-факто референсом для описания DPI-правил в whitelist/blacklist режимах, поэтому он часто упоминается в публикациях о государственной фильтрации и в OSS-форках для ТСПУ-подобных систем.

Как работает

Wirefilter — это два слоя: грамматика и execution-engine. Грамматика описана PEG-парсером и поддерживает примитивные типы (IP, integer, string, bool, byte-array), операторы сравнения, логические and/or/not, set-membership in, и regex-match matches. Execution-engine компилирует AST в bytecode и выполняет его на пакете с гарантированно константной памятью на правило.

Ключевые свойства:

  • Type-safe. Каждое поле имеет жёсткий тип (ip.src: ipv4, http.host: string), смешение типов — ошибка парсинга, не runtime.
  • Field providers. Wirefilter не парсит пакеты сам — он работает поверх scheme, который описывает доступные поля. Для HTTP-фильтрации scheme поднимает поля от Cloudflare-NGINX, для DPI-форков — от eBPF-парсера TCP/TLS.
  • Constant-time evaluation. Каждое правило компилируется отдельно; их можно гонять параллельно на разных ядрах.
  • JSON-AST export. Правило http.host eq "x.com" сериализуется в JSON, что используется для интеграций (например, передача правил на edge-ноды).

В контексте DPI движки типа nDPI и custom-форков ТСПУ используют похожий по форме DSL для описания того, что попадает в drop-action: tls.sni matches "(amneziavpn|outline).*".

Применение в России 2026

ТСПУ оперирует похожим декларативным языком правил, хотя его внутренняя реализация не публикуется. Внешние исследователи восстанавливают синтаксис по наблюдаемому поведению — пакеты блокируются по комбинациям полей TLS SNI, IP, длины пакета и JA3-fingerprint’а. Структура «AND-цепочки нескольких признаков» сильно напоминает Wirefilter-стиль.

OSS-проекты обхода используют Wirefilter в обратную сторону — для описания whitelist’а трафика, который НЕ нужно перенаправлять в VPN-туннель: not (tls.sni matches "(yandex|vk|sberbank).ru$"). Такие правила живут в sing-box и xray-core routing-блоках, синтаксис другой, но идея та же.

Юзеру: знание Wirefilter полезно если читаешь публикации Roskomsvoboda, GFW Report или OONI о структуре блокировок. Описания типа «правило фильтра отвергает пакет если tls.sni.suffix in {protonvpn.ch, nordvpn.com}» — это Wirefilter-нотация.

Связанные термины

DPI — слой, над которым работают Wirefilter-правила. TSPU и GFW — государственные имплементации DPI с похожими DSL. SNI-блокировка — первое применение wirefilter-стиля правил в реальной цензуре. JA3 — fingerprint, который часто фигурирует в условиях правил.

Источники