You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何WFP配置多个FWP_MATCH_NOT_EQUAL远程IP条件仍触发标注?

WFP多IP排除失效问题排查与解决

问题描述

使用Windows Filtering Platform(WFP)基于远程IP地址过滤流量,配置FWPM_CONDITION_IP_REMOTE_ADDRESS条件并采用FWP_MATCH_NOT_EQUAL规则排除特定IP:

filter->filterCondition[0].conditionValue.uint32 = 0x614DE692; // 对应97.77.230.146
filter->filterCondition[1].conditionValue.uint32 = 0x614DE695; // 对应97.77.230.149

添加两个条件后,来自这两个IP的流量仍会触发标注,预期应因匹配FWP_MATCH_NOT_EQUAL被排除。

失效核心原因

WFP的多过滤条件默认采用**逻辑与(AND)**逻辑,当前配置的实际含义是:

远程IP不等于97.77.230.146 并且 远程IP不等于97.77.230.149

由于一个IP不可能同时等于两个不同值,所有流量(包括这两个目标IP)都会满足该条件,因此触发标注。

正确排除多个IP的实现方案

方案1:创建独立过滤规则(适合少量IP)

为每个需排除的IP单独创建过滤规则,使用FWP_MATCH_EQUAL匹配目标IP,并设置规则动作为允许/跳过标注,同时确保这些规则的优先级高于你的标注规则。

示例代码片段:

// 排除97.77.230.146的规则
FWPM_FILTER filter1 = {0};
filter1.filterCondition[0].fieldKey = FWPM_CONDITION_IP_REMOTE_ADDRESS;
filter1.filterCondition[0].matchType = FWP_MATCH_EQUAL;
filter1.filterCondition[0].conditionValue.type = FWP_UINT32;
filter1.filterCondition[0].conditionValue.uint32 = 0x614DE692;
filter1.action.type = FWP_ACTION_PERMIT; // 根据需求设置为跳过标注的动作
filter1.weight = FWP_UINT64_MAX; // 设置更高优先级,确保优先匹配

// 排除97.77.230.149的规则
FWPM_FILTER filter2 = {0};
filter2.filterCondition[0].fieldKey = FWPM_CONDITION_IP_REMOTE_ADDRESS;
filter2.filterCondition[0].matchType = FWP_MATCH_EQUAL;
filter2.filterCondition[0].conditionValue.type = FWP_UINT32;
filter2.filterCondition[0].conditionValue.uint32 = 0x614DE695;
filter2.action.type = FWP_ACTION_PERMIT;
filter2.weight = FWP_UINT64_MAX;

方案2:使用IP集合(适合大量IP)

通过WFP的IP集合对象批量管理需排除的IP,搭配FWP_MATCH_NOT_IN_SET条件实现批量排除:

  1. 创建包含所有目标IP的IP集合
  2. 配置过滤条件为FWPM_CONDITION_IP_REMOTE_ADDRESS + FWP_MATCH_NOT_IN_SET
  3. 将集合关联到过滤条件中

示例代码片段:

// 创建IPv4集合,包含需排除的IP
FWPM_IP_SET ipSet = {0};
ipSet.type = FWP_IP_V4;
ipSet.ipv4Count = 2;
ipSet.ipv4 = (FWP_UINT32*)malloc(2 * sizeof(FWP_UINT32));
ipSet.ipv4[0] = 0x614DE692;
ipSet.ipv4[1] = 0x614DE695;

// 创建过滤规则:仅非集合内的IP触发标注
FWPM_FILTER filter = {0};
filter.filterCondition[0].fieldKey = FWPM_CONDITION_IP_REMOTE_ADDRESS;
filter.filterCondition[0].matchType = FWP_MATCH_NOT_IN_SET;
filter.filterCondition[0].conditionValue.type = FWP_IP_SET;
filter.filterCondition[0].conditionValue.ipSet = &ipSet;
filter.action.type = FWP_ACTION_BLOCK; // 替换为你的标注动作

内容的提问来源于stack exchange,提问作者TienThanh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 02:24:58