<< Кликните, чтобы показать Содержание >> Основы фильтрации |
Ключевыми понятиями фильтрации перехваченных сообщений/объектов являются:
Критерий
Логическое выражение, состоящее из одного или более условий, объединённых логическими операторами OR, AND, XOR и NOT, проверяющее содержимое и/или метаданные сообщения и определяющее, подпадает ли данный конкретный объект под действие текущего правила.
Условие
Элементарное условие проверки сообщения и/или его метаданных. Проверяет одно или несколько полей сообщения или его метаданных единообразным способом на соответствие некому условию (равенству, неравенству, совпадению с паттерном и т.д.).
Действие
Описание действия, которое необходимо выполнить над сообщением в случае срабатывания правила. Более подробно о возможных действиях над сообщениями указано в разделе Действия.
Правило
Состоит из условий и действий. Если сообщение соответствует условиям, к нему применяются действия. Условий может и не быть — тогда неявно предполагается критерий "все сообщения" или "любое сообщение".
Таблица
Упорядоченная последовательность правил. Таблица должна иметь уникальное имя. Существует одна системная таблица с именем "main", она является точкой входа для проверки сообщения фильтром. Таблица "main" должна присутствовать в каждом фильтре. Более подробно таблицы рассматриваются в разделе Таблицы.
Принципы работы фильтров
Все сообщения проходят через таблицы фильтра, начиная с таблицы "main". При прохождении сообщением таблицы к нему последовательно применяются все правила этой таблицы в порядке их следования.
Под применением правила понимается:
▪Проверка сообщения (включая метаданные) на соответствие условиям
▪Применение к нему действий правила, если сообщение соответствует этому условию.
Под действием может подразумеваться как базовая операция (встроенное действие, например, ACCEPT, DROP, JUMP или RETURN), так и ориентированное на пользователя действие (это действия установки меток, тегов, изменения сообщения и/или его метаданных и т.п.). Базовые операции могут быть как терминирующими, то есть прекращающими обработку сообщения фильтром (это ACCEPT, DROP), так и нетерминирующими, то есть не прерывающими обработку сообщения (это JUMP и RETURN).
Таблица "main" всегда должна заканчиваться правилом с критерием "все сообщения" и одним из терминирующих действий (ACCEPT или DROP). Остальные таблицы всегда обязаны заканчиваться правилом с условием "все сообщения" и терминальным действием (ACCEPT или DROP), или же действием RETURN.
Для перехода сообщения из текущей таблицы в другую используется действие JUMP. В случае применения в этой таблице к сообщению действия RETURN, сообщение вернется в исходную таблицу и продолжит ее прохождение, начиная со следующего правила. Другие таблицы, кроме "main", и переходы в них могут понадобиться для минимизации количества правил, через которые необходимо пройти сообщению, чтобы для него было принято решение ACCEPT или DROP.
Также использование таблиц может быть полезно при объединении групп правил для обработки сообщений, объединяемых некими "глобальными" категориями, которые невозможно описать в контексте критерия одного правила.
Исходя из этого следует, что таблица main не может заканчиваться правилом с действием RETURN, так как из неё просто некуда возвращаться. Также в таблицу main невозможно сделать переход JUMP. |
---|
Следует особо подчеркнуть, что запрещено использовать явные или неявные "циклические" переходы, и это проверяется на этапе компиляции правил. Например, сценарий "таблица "main" -> jump -> таблица "boss-messages" -> таблица "shopping" -> таблица "spam" -> таблица "boss-messages" будет заблокирован на стадии компиляции фильтра.