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


Фильтрация арбитража

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    Заметка

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

    Заметка

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

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

Заметка

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

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

назначения веса