From 39c3640477e7bec73535e8f0bc25c51b60b8d4c4 Mon Sep 17 00:00:00 2001 From: bol-van Date: Sun, 21 Dec 2025 23:18:49 +0300 Subject: [PATCH] update docs --- docs/manual.md | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/docs/manual.md b/docs/manual.md index 821e43a..cf42bd5 100644 --- a/docs/manual.md +++ b/docs/manual.md @@ -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. Тем самым экономятся ресурсы процессора.