mirror of
https://github.com/bol-van/zapret2.git
synced 2026-03-14 06:13:09 +00:00
update docs
This commit is contained in:
@@ -45,7 +45,7 @@ nfqws2 работает не в ядре (kernel mode), а является пр
|
||||
Чем больше на этом этапе будет отсечено ненужного трафика, тем меньше будет нагрузка на процессор, поскольку передача пакетов из ядра в user mode и обратно сопряжена со значительными накладными расходами.
|
||||
|
||||
Пакет пришел в nfqws2. Первое, что он делает, это разбирает его по уровням OSI модели - выделяет ip , ipv6, tcp, udp заголовки и поле данных. Это называется диссекцией.
|
||||
Результатом диссекции является диссект - представление пакета в виде структур, которые можно адресовать по полям.
|
||||
Результатом диссекции является [диссект](#структура-диссекта) - представление пакета в виде структур, которые можно адресовать по полям.
|
||||
|
||||
Далее задействуется встроенная в nfqws2 подсистема conntrack - система отслеживания потоков поверх отдельно взятых пакетов.
|
||||
Ищется уже имеющаяся запись о потоке на основании данных L3/L4 пакета. Если ее нет - создается. Старые записи, по которым давно нет активности, удаляются.
|
||||
@@ -61,7 +61,7 @@ conntrack отслеживает логическое направление п
|
||||
и запрещает их немедленную отправку. После приема всех пакетов сообщения происходит реконструкция и при необходимости дешифровка составного пейлоада.
|
||||
Дальнейшие решения принимаются уже на базе полностью собранного пейлоада - [reasm](#особенности-приема-многопакетных-пейлоадов) или результата сборки и дешифровки - [decrypt](#особенности-приема-многопакетных-пейлоадов).
|
||||
|
||||
Когда необходимая информация о пейлоаде получена, наступает очередь системы классификации по профилям.
|
||||
Когда необходимая информация о пейлоаде получена, наступает очередь системы классификации по [профилям](#использование-множественных-профилей).
|
||||
Профили содержат систему фильтров и команды действия внутри профиля.
|
||||
Профили фильтруются по L3 - версия IP протокола, ipset-ы - списки IP адресов, L4 - порты tcp или udp, L6/L7 - тип протокола потока, списки доменов (хостлисты).
|
||||
Профили сканируются строго в порядке от первого к последнему. При первом совпадении условий фильтра профиля выбирается этот профиль, а сканирование прекращается.
|
||||
@@ -82,27 +82,27 @@ conntrack отслеживает логическое направление п
|
||||
позволяющих задать диапазон позиций внутри потока, который интересен для инстанса. Внутрипрофильные фильтры после их определения действуют на все последующие инстансы
|
||||
до их переопределения. Главный смысл наличия внутрипрофильных фильтров - сократить число относительно медленных вызовов LUA , принимая максимум решений на стороне C кода.
|
||||
|
||||
Пакет пришел в LUA инстанс. Функция имеет 2 параметра - ctx и desync. ctx - это контекст для связи с некоторыми функциями на стороне C кода.
|
||||
desync - таблица, содержащая множество параметров обрабатываемого пакета. Прежде всего это диссект - подтаблица `dis`.
|
||||
Информация из записи conntrack - подтаблица `track`. Еще целый ряд параметров, который можно увидеть, выполнив `var_debug(desync)` или просто вызвав готовый инстанс `pktdebug`.
|
||||
Пакет пришел в LUA инстанс. Функция имеет 2 [параметра](#прототип-lua-функции) - ctx и desync. ctx - это контекст для связи с некоторыми функциями на стороне C кода.
|
||||
[desync](#структура-таблицы-desync) - таблица, содержащая множество параметров обрабатываемого пакета. Прежде всего это [диссект](#структура-диссекта) - подтаблица `dis`.
|
||||
Информация из записи conntrack - [подтаблица track](#структура-track). Еще целый ряд параметров, который можно увидеть, выполнив [var_debug(desync)](#var_debug) или просто вызвав готовый инстанс [pktdebug](#pktdebug).
|
||||
|
||||
Если идет перепроигрывание задержанных пакетов ([replay](#особенности-приема-многопакетных-пейлоадов)), LUA инстанс получает информацию о номере части, количестве частей исходного сообщения, позиции текущей части, [reasm](#особенности-приема-многопакетных-пейлоадов) или [decrypt](#особенности-приема-многопакетных-пейлоадов) при наличии.
|
||||
|
||||
LUA код может использовать глобальное пространство переменных для хранения данных, не относящихся к конкретному обрабатываемому пакету. Ему доступна таблица `desync.track.lua_state`,
|
||||
LUA код может использовать глобальное пространство переменных для хранения данных, не относящихся к конкретному обрабатываемому пакету. Ему доступна таблица [desync.track.lua_state](#структура-таблицы-desync),
|
||||
в которой он может хранить любую информацию, связанную с записью conntrack. При каждом новом пакете потока в LUA выдается одна и та же таблица.
|
||||
Таблицу desync можно использовать для генерации и хранения временных данных, актуальных в цепочке обработки текущего пакета.
|
||||
Следующие LUA инстансы получают ту же таблицу desync и тем самым могут принимать данные от предыдущих инстансов.
|
||||
|
||||
LUA инстанс может создавать копии текущего диссекта, вносить в них изменения, генерировать собственные диссекты, отправлять их через вызовы C кода.
|
||||
LUA инстанс может создавать копии текущего диссекта, вносить в них изменения, генерировать собственные диссекты, [отправлять](#прием-и-отсылка-пакетов) их через вызовы C кода.
|
||||
Итогом работы каждого инстанса является вердикт - VERDICT_PASS - не делать ничего с текущим диссектом, VERDICT_MODIFY - в конце всей цепочки отослать модифицированное содержимое диссекта,
|
||||
VERDICT_DROP - дропнуть текущий диссект. Вердикты всех инстансов аггрегируются - MODIFY замещает PASS, а DROP замещает и PASS, и MODIFY.
|
||||
|
||||
LUA инстанс может сам себя отключить от получения дальнейших пакетов потока по направлению in/out - это назвается [instance cutoff](#instance_cutoff).
|
||||
Может отключить направление in/out текущего потока от всей LUA обработки - lua cutoff.
|
||||
Может запросить отмену всей дальнейшей цепочки вызовов LUA инстансов по текущему диссекту. Инстанс, принимающий такое решение, берет на себя функцию координации дальнейших действий.
|
||||
Такой инстанс называется оркестратором. Он получает от C кода план дальнейшего выполнения со всеми фильтрами профиля и параметрами вызова всех оставшихся инстансов
|
||||
Может отключить направление in/out текущего потока от всей LUA обработки - [lua cutoff](#lua_cutoff).
|
||||
Может запросить [отмену](#execution-plan-cancel) всей дальнейшей цепочки вызовов LUA инстансов по текущему диссекту. Инстанс, принимающий такое решение, берет на себя функцию координации дальнейших действий.
|
||||
Такой инстанс называется оркестратором. Он получает от C кода [план](#execution_plan) дальнейшего выполнения со всеми фильтрами профиля и параметрами вызова всех оставшихся инстансов
|
||||
и сам принимает решения когда и при каких условиях их вызывать или не вызывать, менять их параметры. Так реализуются динамические сценарии без модификации основных составлящих кода стратегии.
|
||||
Например, определение блокировки ресурса и смена стратегии, если предыдущая не сработала.
|
||||
Например, [определение](#детекция-удач-и-неудач) блокировки ресурса и [смена стратегии](#circular), если предыдущая не сработала.
|
||||
|
||||
Если все инстансы текущего профиля вошли в состояние cutoff по текущему потоку, либо текущая позиция потока находится за верхней границей range фильтров, значит по этому потоку больше не будет LUA
|
||||
вызовов. C код помечает такие потоки специальным признаком "lua cutoff", который проверяется максимально быстро без вызовов кода LUA. Тем самым экономятся ресурсы процессора.
|
||||
|
||||
Reference in New Issue
Block a user