Поделиться через


Арбитраж фильтра

Арбитраж фильтров — это логика, встроенная в платформу фильтрации Windows (ВПП), которая используется для определения того, как фильтры взаимодействуют друг с другом при принятии решений о фильтрации сетевого трафика.

Фильтрация поведения арбитража

Ниже описано поведение, характеризующее систему арбитража фильтров:

  • Можно проверить весь трафик. Трафик не может обходить фильтры на заданном уровне.
  • Трафик может быть заблокирован фильтром выноски с помощью права вето , даже если фильтр с более высоким приоритетом разрешил это.
  • Несколько поставщиков могут проверять трафик на одном уровне. Например, брандмауэр, за которым следуют фильтры системы обнаружения вторжений (IDS) или фильтры IPsec, за которыми следуют фильтры качества обслуживания (QoS), могут проверять трафик на одном уровне.

Модель фильтрации

Каждый слой фильтра делится на подслойки, упорядоченные по приоритету (также называемому весом). Сетевой трафик проходит через подуровневые уровни от самого высокого до самого низкого. Подслойные слои создаются и управляются разработчиками с помощью API ВПП.

В каждом подслое фильтры упорядочены по весу. Сетевой трафик обозначается соответствующими фильтрами от максимального к минимальному.

Алгоритм арбитража фильтра применяется ко всем подслойным слоям в слое, и окончательное решение о фильтрации принимается после оценки всех подслоек. Это обеспечивает возможность множественного сопоставления.

В подслое арбитраж фильтра выполняется следующим образом:

  • Вычислить список соответствующих фильтров, упорядоченных по весу, от самого высокого к минимальному.
  • Оценка соответствующих фильтров по порядку до тех пор, пока не будет возвращено значение "Разрешение" или "Блок" (фильтры также могут возвращать значение "Продолжить") или пока список не будет исчерпан.
  • Пропустите остальные фильтры и верните действие из последнего вычисляемого фильтра.

В слое арбитраж фильтра выполняется следующим образом:

  • Выполните фильтрацию арбитража на каждом подслое в порядке от наивысшего до самого низкого приоритета.
  • Оцените все подслойные уровни, даже если подслой с более высоким приоритетом решил заблокировать трафик.
  • Возвращает результирующее действие на основе правил политики, описанных в следующем разделе.

На приведенной ниже схеме показан пример конфигурации подуровневого уровня. Внешние поля представляют слои. Внутренние поля представляют подслои, содержащие фильтры. Подстановочный знак (*) в фильтре означает, что весь трафик соответствует фильтру.

Пример конфигурации подуровневого уровня

Единственный способ обойти фильтр — разрешить или заблокировать трафик в пределах одного подслоя. И наоборот, один из способов обеспечения того, чтобы фильтр всегда видел весь трафик в слое, заключается в добавлении подслойного слоя, содержащего один фильтр, соответствующий всему трафику.

Настраиваемая политика переопределения

Описанные ниже правила регулируют арбитражные решения в рамках слоя. Эти правила используются подсистемой фильтрации, чтобы решить, какое из действий подуровневого уровня применяется к сетевому трафику.

Базовая политика выглядит следующим образом.

  • Действия оцениваются в порядке приоритета вложенных слоев от самого высокого до самого низкого.
  • "Блокировать" переопределяет "Разрешить".
  • Значение "Блокировать" является окончательным (не может быть переопределено) и останавливает вычисление. Пакет удаляется.

Базовая политика не поддерживает сценарий исключения, не переопределенного брандмауэром. Типичные примеры такого сценария:

  • Порт удаленного администрирования должен быть открыт даже при наличии стороннего брандмауэра.
  • Компоненты, требующие открытия портов для работы (например, universal Plug and Play UPnP). Если администратор явно включил компонент, брандмауэр не должен автоматически блокировать трафик.

Для поддержки указанных выше сценариев необходимо сделать решение о фильтрации более трудным для переопределения, чем другое решение о фильтрации путем управления разрешением на переопределение действия. Это разрешение реализуется как флаг FWPS_RIGHT_ACTION_WRITE и устанавливается для каждого фильтра.

Алгоритм оценки поддерживает текущее действие ("Разрешить" или "Блокировать") вместе с флагом FWPS_RIGHT_ACTION_WRITE . Флаг определяет, разрешено ли подслою с более низким приоритетом переопределять действие. Устанавливая или сбрасывая флаг FWPS_RIGHT_ACTION_WRITE в структуре FWPS_CLASSIFY_OUT0 , поставщик определяет, как можно или невозможно переопределить действия. Если флаг установлен, это означает, что действие может быть переопределено. Если флаг отсутствует, действие нельзя переопределить.

Действие Разрешить переопределение (FWPS_RIGHT_ACTION_WRITE задано) Описание
Разрешение Да Трафик может быть заблокирован на другом подуровневом уровне. Это называется мягким разрешением.
Разрешение Нет Трафик может быть заблокирован на другом подслое только путем вето выноски. Это называется жестким разрешением.
Блокировать Да Трафик может быть разрешен на другом подуровневом уровне. Это называется мягким блоком.
Блокировать Нет Трафик не может быть разрешен на другом подуровневом уровне. Это называется жестким блоком.

Действие фильтра можно задать, задав для элемента типа в FWPM_ACTION0 структуры значение FWP_ACTION_BLOCK или FWP_ACTION_PERMIT. Наряду с типом действия фильтр также предоставляет флаг FWPM_FILTER_FLAG_CLEAR_ACTION_RIGHT. Если этот флаг снят, тип действия является жестким и не может быть переопределен, за исключением случаев, когда жесткое разрешение переопределяется с помощью вето , как описано далее, в противном случае это мягкое действие, которое может быть переопределено действием с высоким приоритетом.

В следующей таблице приведено поведение по умолчанию для действий фильтрации и выносок.

Действие Поведение по умолчанию
Разрешение на фильтрацию Мягкое разрешение
Разрешение выноски Мягкое разрешение
Блок фильтра Жесткий блок
Блок выноски Мягкий блок

Вето — это действие "Блокировать", возвращаемое фильтром при сбросе флага FWPS_RIGHT_ACTION_WRITE перед вызовом фильтра. Вето блокирует трафик, который был разрешен с жестким разрешением.

При выдаче вето это свидетельствует о конфликте в конфигурации. Для устранения конфликта выполняются следующие действия.

  • Трафик заблокирован.

  • Создается событие аудита.

  • Создается уведомление.

    Примечание

    Уведомление будет получено всеми сущностями, подписающимися на него. Обычно сюда входит брандмауэр (для обнаружения неправильных конфигураций) или приложения (чтобы определить, переопределен ли их конкретный фильтр).

    Примечание

    При переопределении фильтра "Жесткое разрешение" не создается обязательный пользовательский интерфейс. Уведомления о переопределении отправляются любому поставщику, который зарегистрировал их для получения, что позволяет брандмауэрам или приложениям, создающим фильтры "Разрешить", отображать пользовательский интерфейс, запрашивающий действия пользователя. Нет смысла получать уведомления пользовательского интерфейса платформы для этих событий переопределения, так как поставщики программного обеспечения брандмауэра, которые не хотят автоматически блокировать, могут сделать это, зарегистрировавшись в другом месте в ПППП или (менее предпочтительно) обработав всю свою логику в драйвере вызова. Независимым поставщикам программного обеспечения, которые считают, что запросы пользователей — это хорошая идея, захотят владеть пользовательским интерфейсом и создать собственный пользовательский интерфейс.

Описанное выше поведение по устранению рисков гарантирует, что фильтр "Жесткое разрешение" не переопределяется автоматически фильтром "Блокировать", и охватывает сценарий, в котором порт удаленного администрирования не может быть заблокирован брандмауэром. Чтобы автоматически переопределить фильтры "Жесткое разрешение", брандмауэр должен добавить свои фильтры в подслойке с более высоким приоритетом.

Примечание

Так как межуровневый арбитраж не существует, трафик, разрешенный с помощью "Жесткого разрешения", по-прежнему может быть заблокирован на другом уровне. Автор политики несет ответственность за обеспечение разрешения трафика на каждом уровне, если это необходимо.

Пользовательские приложения, запрашивающие открытие портов, добавляют переопределяемые фильтры в низкоприоритетный подслой. Брандмауэр может подписаться на добавление событий уведомлений фильтра и добавить соответствующий фильтр после проверки пользователем (или политики).

Назначение весов фильтрам