粮食计划署作
Windows 筛选平台(WFP)通过集成以下基本实体来执行其任务:层、筛选器、填充码和 标注。
层
层 是由筛选器引擎管理的容器,其函数是将筛选器组织成集。 层不是网络堆栈中的模块。 每个层都有一个架构,用于定义可添加到它的筛选器类型。 有关详细信息,请参阅每个筛选层 可用的 筛选条件。
层可能包含子层来管理冲突的筛选器要求,例如“阻止 TCP 端口超过 1024”和“打开端口 1080”。 管理筛选冲突的规则由 筛选仲裁确定。
WFP 包含一组 内置子层。 每个层都继承所有内置子层。 用户还可以添加自己的子层。
筛选器引擎层列表在 筛选层标识符的参考部分主题中提供。
过滤 器
筛选器 是与传入或传出数据包匹配的规则。 该规则告知筛选引擎如何处理数据包,包括调用标注模块进行深度数据包或流检查。 例如,筛选器可以指定“阻止 TCP 端口大于 1024 的流量”或“针对未保护的所有流量调用 IDS”。
启动时间筛选器是在 TCP/IP 堆栈驱动程序(tcpip.sys)启动时强制实施的筛选器。 BFE 启动时禁用启动时间筛选器。 调用 FwpmFilterAdd0 时,通过设置 FWPM_FILTER_FLAG_BOOTTIME 标志来标记筛选器。
运行时筛选器是在 BFE 启动时强制执行的筛选器。 运行时筛选器可以是静态的、动态的,也可以是永久性的,具体取决于它的创建方式。 有关不同类型的运行时筛选器及其生存期的详细信息,请参阅 对象管理。
垫片
填充码 是一个内核模式组件,通过针对筛选器引擎层进行分类来做出筛选决策。 每个填充码针对一个或多个层进行分类。 例如,传输层模块填充码针对入站传输层、出站传输层以及流的第一个数据包的 ALE 连接层和 Receive-Accept 层进行分类。
当数据包、流和事件遍历网络堆栈时,填充码会分析它们以提取可分类的条件和值,然后调用筛选器引擎来针对给定层中的筛选器对其进行评估。 筛选器引擎可以调用一个或多个标注作为分类的一部分。 填充码根据筛选器引擎执行的分类结果执行数据包、流和事件的实际删除。
标注
标注 是由驱动程序公开的一组函数,用于专用筛选。 它们用于对数据包进行分析和作,例如病毒扫描、家长控制扫描不当内容、数据包数据分析以监视工具。 某些标注(如网络地址转换(NAT)驱动程序内置于作系统中。 其他软件供应商(如 HTTP 家长控制标注或入侵检测系统 (IDS) 标注)可以由独立软件供应商(ISV)提供。 在给定层匹配相应的标注筛选器时,筛选器引擎将调用标注函数。
标注可以在任何内核模式 WFP 层中注册。 标注可以返回作(“阻止”、“允许”,在执行流检查时,“延迟”、“需要更多数据”、“删除连接”)并可以修改和保护入站和出站网络流量。
向筛选器引擎注册标注后,它可以接收要处理的网络流量。 流量可以是数据包、流或事件,具体取决于层。 应用程序或防火墙代理通过添加作为“标注”且标注 ID 为标注标识符的筛选器,将流量传递给标注。 标注可以指示筛选器引擎将“阻止”或“允许”返回到填充码。 标注还可以返回“继续”,以允许其他筛选器处理数据包。
多个标注可能由一个标注驱动程序公开。
需要添加标注(FwpmCalloutAdd0)并注册(FwpsCalloutRegister),然后才能使用它。 在创建引用标注的筛选器之前,需要调用 FwpmCalloutAdd0。 需要调用 FwpsCalloutRegister,才能在匹配标注筛选器时调用标注。 默认情况下,引用已添加但尚未注册到筛选器引擎的标注的筛选器被视为“阻止”筛选器。 调用 FwpmCalloutAdd0 和 FwpsCalloutRegister 的顺序并不重要。 每次实现标注的驱动程序启动时(例如,重新启动后),都需要只添加一次持久标注,并且需要注册该标注。
分类
分类是将筛选器应用于网络流量(数据包、流或事件)的过程,以便确定该流量的“允许”或“阻止”结果。 对于一个数据包、流或事件,每个层有一个分类调用。
在分类期间,数据包、流或事件的属性(例如源地址)与在调用分类的层的筛选器上设置的筛选器条件进行比较。 找到匹配项时,将使用 筛选器仲裁 算法来确定分类过程的结果。
分类请求由填充码触发。
分类作可以是:
- 许可证
- 块
- 标注
- 许可证
- 块
- 继续
- 推迟
- 需要更多数据
- 删除连接
粮食计划署作
在启动时,只要 TCP/IP 堆栈驱动程序(tcpip.sys)启动时,内核模式筛选器引擎就会通过启动时筛选器强制实施系统的安全策略。
基本筛选引擎(BFE)在用户模式下启动后,永久性筛选器将添加到平台,启动时间筛选器将被禁用,并将通知发送到使用 FwpmBfeStateSubscribeChanges0订阅的标注驱动程序。 完成 BFE 初始化后立即调度通知。 现在,平台已准备好注册标注和要添加的运行时对象。
从启动时间到持久性筛选器的转换可能是几秒钟,甚至更长的时间在较慢的计算机上。 它是原子的,因此,如果提供程序同时具有启动时间和持久性筛选器,则两者都没有生效时永远不会有一个窗口。
BFE 启动后,可以通过防火墙代理或自定义防火墙解决方案添加运行时筛选器。 BFE 处理这些筛选器,并将其发送到适当的筛选器引擎层,以便强制实施。 BFE 还接受身份验证设置,并将这些设置发送到 IPsec 密钥模块(IKE/AuthIP)。 有关详细信息,请参阅 IPsec 配置。
可以随时通过 BFE 公开的 RPC 接口在系统中添加、删除或更改筛选器和身份验证设置。 子层和标注模块也可以添加或删除。
数据流:
- 数据包进入网络堆栈。
- 网络堆栈查找并调用填充码。
- 填充码在特定层调用分类过程。
- 在分类期间,将匹配筛选器并执行生成的作。 (请参阅 筛选仲裁。
- 如果在分类过程中匹配任何标注筛选器,则调用相应的标注。
- 填充码作用于最终筛选决策(例如,删除数据包)。
出站数据流遵循类似的模式。
以下主题进一步介绍了粮食计划署的作。
相关主题