筛选器仲裁

筛选器仲裁是内置于 Windows 筛选平台 (WFP) 的逻辑,用于确定筛选器在做出网络流量筛选决策时如何相互交互。

筛选器仲裁行为

以下行为对筛选器仲裁系统具有特征:

  • 可以检查所有流量。 任何流量都不能绕过给定层的筛选器。
  • 即使优先级较高的筛选器允许,标注筛选器也可以通过 Veto 阻止流量。
  • 多个提供程序可以检查同一层上的流量。 例如,防火墙后跟入侵检测系统 (IDS) 筛选器,或 IPsec 后跟服务质量 (QoS) 筛选器可能全部检查同一层的流量。

筛选模型

每个筛选器层按优先级划分为子层, (也称为权重) 。 网络流量遍历从最高优先级到最低优先级的子层。 子层由开发人员使用 WFP API 创建和管理。

在每个子层中,筛选器按权重排序。 网络流量指示到从最高权重到最低权重的匹配筛选器。

筛选器仲裁算法将应用于一个层中的所有子层,并在评估所有子层后做出最终筛选决策。 这提供了多个匹配功能。

在子层中,按如下所示执行筛选器仲裁:

  • 计算按权重从高到低排序的匹配筛选器列表。
  • 按顺序评估匹配的筛选器,直到返回“允许”或“阻止”, (筛选器也可以返回“Continue”) 或直到列表用尽为止。
  • 跳过剩余的筛选器,并从上次计算的筛选器返回操作。

在层中,按如下所示执行筛选器仲裁:

  • 按从最高优先级到最低优先级在每个子层执行筛选器仲裁。
  • 评估所有子层,即使优先级较高的子层已决定阻止流量。
  • 根据下一部分所述的策略规则返回生成的操作。

下图演示了示例子层配置。 外框表示层。 内部框表示包含筛选器的子层。 筛选器中的通配符 (*) 表示所有流量都与筛选器匹配。

示例子层配置

绕过筛选器的唯一方法是,如果权重较高的筛选器允许或阻止同一子层中的流量。 相反,确保筛选器始终看到层内所有流量的一种方法是添加一个子层,其中包含与所有流量匹配的单个筛选器。

可配置的替代策略

下面所述的规则管理层内的仲裁裁决。 筛选器引擎使用这些规则来确定将哪一个子层操作应用于网络流量。

基本策略如下所示。

  • 操作按从最高优先级到最低优先级的子层的优先级顺序进行评估。
  • “阻止”重写“Permit”。
  • “阻止”是最终 (不能在) 重写并停止评估。 丢弃数据包。

基本策略不支持防火墙未覆盖的异常方案。 此类方案的典型示例包括:

  • 即使在存在第三方防火墙的情况下,也需要打开远程管理端口。
  • 需要打开端口才能正常运行的组件 (例如通用即插即用 UPnP) 。 如果管理员已显式启用组件,则防火墙不应以无提示方式阻止流量。

为了支持上述方案,必须通过管理操作替代权限,使筛选决策比另一个筛选决策更难替代。 此权限作为 FWPS_RIGHT_ACTION_WRITE 标志实现,并且基于每个筛选器进行设置。

评估算法将当前操作 (“Permit”或“Block”) 与 FWPS_RIGHT_ACTION_WRITE 标志一起保留。 标志控制是否允许优先级较低的子层替代操作。 通过在 FWPS_CLASSIFY_OUT0 结构中设置或重置 FWPS_RIGHT_ACTION_WRITE 标志,提供程序控制操作可以或不能重写的方式。 如果设置了标志,则表示可以重写操作。 如果标志不存在,则无法重写该操作。

操作 ) 设置允许替代 (FWPS_RIGHT_ACTION_WRITE 说明
允许 可以在另一个子层阻止流量。 这称为软许可。
允许 只能通过标注 “否决”在另一个子层阻止流量。 这称为硬许可。
阻止 可以在另一个子层允许流量。 这称为软块。
阻止 不能在另一个子层允许流量。 这称为硬块。

可以通过将结构中的类型成员FWPM_ACTION0设置为FWP_ACTION_BLOCKFWP_ACTION_PERMIT来设置筛选器操作。 除操作类型外,筛选器还 FWPM_FILTER_FLAG_CLEAR_ACTION_RIGHT公开标志。 如果清除此标志,则操作类型为硬操作类型,并且无法重写,除非当硬许可被 Veto 替代(如后面所述),否则它是软的,可由高优先级操作覆盖。

下表列出了筛选器和标注操作的默认行为。

操作 默认行为
筛选器许可 软许可
标注许可 软许可
筛选器块 硬块
标注块 软块

“否决”是在调用筛选器之前重置FWPS_RIGHT_ACTION_WRITE标志时筛选器返回的“阻止”操作。 否决将阻止使用硬许可允许的流量。

发出 “否决” 时,表示配置中存在冲突。 将执行以下操作来缓解冲突。

  • 流量被阻止。

  • 生成审核事件。

  • 生成通知。

    注意

    已订阅通知的所有实体都会收到通知。 这通常包括防火墙 (以检测) 配置错误,或应用程序 (以检测其特定筛选器是否) 被覆盖。

    注意

    在重写“硬允许”筛选器时, (UI) 实例化,不存在必需的用户界面。 替代通知将发送到注册接收通知的任何提供程序,这允许防火墙或创建“允许”筛选器的应用程序显示要求用户操作的 UI。 为这些替代事件提供平台 UI 通知没有价值,因为不希望无提示阻止的防火墙 ISV 可以通过在 WFP 的不同位置注册来执行此操作,或者 (不太喜欢) 在标注驱动程序中处理其所有逻辑。 认为提示用户是个好主意的 ISV 会希望拥有用户体验并创建自己的 UI。

上述缓解行为可确保“硬允许”筛选器不会被“阻止”筛选器无提示覆盖,并涵盖防火墙不允许远程管理端口阻止的方案。 为了以无提示方式替代“硬允许”筛选器,防火墙必须将其筛选器添加到优先级更高的子层中。

注意

由于没有跨层仲裁,因此“硬许可”允许的流量仍可能在另一层被阻止。 策略作者负责确保在必要时在每个层允许流量。

请求打开端口的用户应用程序将可重写筛选器添加到低优先级子层。 防火墙可以订阅筛选器添加通知事件,并在用户 (或策略) 验证后添加匹配的筛选器。

筛选器权重分配