Fort Firewall:用WFP内核驱动精准拦截后台偷跑流量

📅 发布时间:2026/10/10 11:28:58
Fort Firewall:用WFP内核驱动精准拦截后台偷跑流量
不知道你有没有过这种经历电脑没干什么大事网速却像被人偷偷抽走了一截某天打开流量统计发现一个压根没主动打开的软件后台默默跑了1.2GB右下角还时不时冒出不知从哪里来的广告窗口。我就这么折腾过一次换了好几种工具才把问题真正解决。今天想拆解的 Fort Firewall就是我用下来觉得思路最正、也最值得讲清楚的一个开源防火墙。它跑在 Windows 的 WFP 内核驱动层拦截动作发生在数据包还没被应用层拿到之前可以精确到某个进程能统计流量、限制网速、按程序放行或拦截甚至从源头把远程下发的弹窗请求掐掉。如果你也在为后台偷跑流量、弹窗失控这类问题头疼或者想搞明白内核态防火墙和自己写的抓包工具差在哪这篇文章应该能给你一个可落地的答案。1. 后台流量为什么这么难管问题本质在“出站方向”1.1 我遇到的那次流量失踪案先讲一个具体的场景。大概三周前我发现电脑静置一晚后第二天开机风扇狂转、网卡指示灯一直闪。打开任务管理器里的资源监视器看到一个后台服务正以好几 MB/s 的速度往外发包累计已经传了 1.2GB。我完全不记得自己主动运行过它只知道它来自某个“安装后就没打开过”的普通软件目录。更让人火大的是右下角还频繁冒出某个“助手”的弹窗点关闭还会再弹。这类东西不会通过系统自带防火墙的默认入站拦截被挡住因为它是这台电脑自己主动发起连接往外跑。系统防火墙默认只关心“谁来访问你”不关心“你偷偷访问了谁”。后来我梳理了一下这类偷跑流量的常见来源软件内置的自动更新服务开机自启静默下载新版本崩溃上报模块出一次错就把日志和 dump 传到云端广告 SDK定期拉取弹窗配置和图片素材某些 P2P 加速组件把本机当节点给别人做中转输入法、浏览器、同步盘这类常驻工具各种遥测数据定时上传。这些流量的共同点是都由本机进程主动发起走的是“出站”方向。抓包能看到服务器地址但普通用户没有精力一个个手动封 IP更麻烦的是 IP 会变、域名会换签名机制也各不相同。用系统防火墙也可以做出站拦截但它的弹窗和规则管理方式说实话不太面向普通用户。1.2 系统自带防火墙只管“来”不太管“去”Windows 自带的防火墙默认策略用一句话概括就是入站默认拦截出站默认放行。这种设计是为了不让系统“自己卡死自己”否则装任何一个软件第一次联网都会全屏弹窗。但正因为出站默认放行后台程序想往外连基本一路绿灯。你当然可以把出站策略改成“默认阻止”然后手动给每个程序加允许规则。但问题是规则创建入口分散很多人在界面里找不到“某个可执行文件的路径”该填在哪里更关键的是它缺乏流量统计和时间维度你根本看不到“这个程序到底跑了多少流量”也就没法判断该不该拦。墙本身挺结实但仪表盘是空的。所以大多数人的实际情况是防火墙开着但后台偷跑的东西照样偷跑只是换了个端口或者换了个代理模式而已。1.3 用户态工具能看见但管不住很多人遇到偷跑流量的第一反应是装抓包软件。这个思路没错但抓包工具能告诉你“谁在连”却很难实时阻止“这个进程的所有连接”。更关键的是抓包工具通常工作在高层的 socket 或协议栈附近有些带保护机制的游戏或软件会主动检测这些挂钩导致程序启动异常。而且抓包工具一般不支持“按进程出站拦截 限速 统计”的完整闭环你抓完包还是得回到防火墙去配规则。要真正管住这种“出站偷跑”拦得越早越好。理想位置是系统网络栈的内核层在网络栈把数据包交给网卡之前就让过滤引擎决定“放行、丢弃、限速或记录”。这正是 WFPWindows Filtering Platform在做的事这也是 Fort Firewall 这类开源防火墙选择内核驱动的原因。2. WFP 内核驱动在数据包还没出网卡之前动手2.1 三道安检口连接层、数据包层、流层理解 WFP可以把它想象成机场安检但它在几道不同的关口都设了岗位。过机场时你先在值机柜台办手续应用层程序发起连接然后经过安检通道网络栈最后登机口工作人员再一次核验登机牌数据包上线。WFP 在不同位置都有检查点可以插入过滤逻辑。具体到 WindowsWFP 的分层大致可以分成三类连接层ALE发生在进程发起连接、接收连接、接受连接的时刻系统已经知道了是哪个进程在请求App ID、用户 SID 都齐全。这是“按程序拦截”最理想的位置Fort Firewall 的主力拦截就在这里。数据包层发生在数据包经过协议栈收发过程中可以对载荷进行检查、修改、丢弃。适合做内容层面的过滤但不容易直接识别是哪个进程发起的内核里还需要额外维护上下文映射。流层一条 TCP 连接建立后可以对这个连接做持续的速率整形和状态跟踪这也是限速功能的基础。所以如果你想实现“双击某个程序的开关立刻放行或禁止它联网”关键不是去字节流里翻内容而是在 ALE 连接层做进程识别。这就是 WFP 内核驱动能做得比很多应用层代理更精准的根本原因。2.2 过滤器与条件WFP 自己不带业务规则WFP 本身不包含任何业务规则它只提供一套底层的“过滤引擎框架”。你要拦什么、放什么得自己向这个引擎注册一堆过滤器。每个过滤器由若干条件组成常见的匹配条件包括可执行文件路径比如xxx.exe的完整路径用户 SID也就是当前登录用户的身份标识目的 IP 或 IP 段目的端口协议类型和方向出站或入站。Fort Firewall 做的事情就是把你在界面上配置的“程序规则”翻译成一组 WFP 过滤器再注册到对应的过滤层。规则之间存在优先级高权重过滤器的匹配结果先生效。举个例子“系统服务全部放行”和“某个指定路径阻止联网”同时存在时谁先匹配由权重决定。这也是为什么配置严格模式后系统服务还能正常工作而某个弹窗程序却被拦了下来。这里有一个很容易误解的点防火墙规则改动了已经建立的 TCP 连接会不会立刻断开实际上WFP 的 ALE 连接层主要拦“新连接”。如果一个程序在规则生效前已经握着一条连接这条旧连接可能继续跑直到它自然结束或被流层干预。Fort Firewall 的界面里能看到连接会话状态遇到“关了规则但流量还在走”的情况通常是旧连接没断开不是规则没生效。2.3 内核态与用户态的实时协作为什么界面操作能立即见效Fort Firewall 在用户态有一个 UI 程序和一个后台服务内核态有一个过滤驱动。UI 上点击“阻止”按钮后链路大致是UI 修改配置 → 通知后台服务 → 服务调用驱动提供的接口 → 驱动调用 WFP 的 API 添加或移除过滤器。WFP 的很多 API 需要管理员权限而且驱动和应用层之间还需要稳定的通信通道。把服务放中间是为了让驱动保持轻量也方便在系统启动早期就开始应用规则。反过来驱动捕获到某个程序的网络连接尝试时会生成事件通过共享缓冲区或事件通知发给用户态服务再汇总到 UI 的“连接日志”页。你看到的实时连接列表其实有一小段延迟通常几十到几百毫秒不影响普通判断但别拿它当严格的调试工具。3. 拆解 Fort Firewall 的三层结构驱动、服务、界面3.1 拦截逻辑全放在驱动里UI 只是遥控器第一次用的时候我特意把安装目录翻了一遍确认过滤逻辑是不是真的放在内核驱动里而不是用端口代理或者应用层 socket 拦截。结论是明确的关键拦截和限速逻辑都封装在驱动模块里UI 只负责配置和展示后台服务负责守卫生效状态。这个架构带来的好处有两个。第一即使 UI 被关闭已经注册的 WFP 过滤器依然留在内核里已生效的规则不会因为界面退出而失效。第二WFP 是系统网络栈的一部分普通进程很难从用户态把过滤条件摘掉。相比改 hosts 或者挂代理内核态拦截的约束力强得多很多“偷偷联网”的程序根本感知不到自己被过滤了自然也不会去尝试绕过。界面层给我印象最深的是“程序列表”视图每个正在运行或曾经连接过的程序都列出来带图标、路径和实时速度。它和系统防火墙那种“按端口、按协议建规则”的方式完全不同看到哪个程序不顺眼右键就能临时阻止。这种以程序为中心的设计对普通用户来说友好得多。3.2 一条规则从点击到生效的完整链路把规则流转过程拆开方便排查“为什么规则没生效”UI 层修改程序状态比如把某个程序从“允许”改成“阻止”。配置文件被更新本地会记录程序路径和对应的策略。后台服务监听到配置变更调用驱动的控制接口。驱动调用 WFP 的过滤引擎 API在 ALE 连接层注册或更新过滤器。新连接发起时WFP 匹配到新过滤器丢弃请求并把错误码返回给应用层。整个过程通常在毫秒级完成。如果你点完“阻止”程序还保持着之前建立的连接那界面会把旧连接标出来你需要手动断开或者等它自然超时。这也是很多人误以为“拦截失效”的真正原因。3.3 限速、流量统计、弹窗抑制分别靠什么实现下面这张表是我用下来对关键特性实现逻辑的理解特性底层实现实际体验按程序拦截ALE 连接层过滤器匹配可执行路径、用户 SID精确到进程UI 上按程序名操作全局/程序限速内核态速率整形基于时间窗口额度控制限速后速度稳定不会有应用层限速的抖动流量统计驱动在过滤处理时累计字节数定时同步到 UI统计较准包含上传和下载弹窗抑制阻断程序对远程广告/配置服务器的连接请求远程下发类弹窗消失本地弹窗无效端口/协议规则在过滤器中附加端口范围、地址范围条件适合目标服务器不固定的场景“限速”是 Fort Firewall 比系统防火墙强很多的功能。给某个下载器限到 2MB/s它的下载曲线基本是一条直线不像应用层限速那样忽高忽低。内核态直接节流数据流程序本身很难感知到“自己被限速了”只会觉得带宽不够。注意限速值设置得过低时某些程序会因为连接长期速度不足而主动重试或报错。这不一定是 bug调高一点一般就正常了。弹窗抑制的边界要特别说明一下。防火墙只能切断程序与远程服务器的通信。很多软件弹窗是先从服务器拉一段“弹窗配置和素材”再展示连不上服务器就拿不到内容自然弹不出来。但如果弹窗是程序本地写死的或者由系统计划任务唤起防火墙拦不住要去“任务计划程序”里禁用对应项目。这个边界不是缺点而是防火墙的职责范围限制。4. 实战配置指南从默认放行到严格管控4.1 安装后第一件事先观察别急着开全局拦截很多用户下载这类防火墙后第一反应是把“默认阻止所有程序”打开然后立刻发现系统变得不正常网页打不开、DNS 解析失败、应用商店下载报错。原因很简单svchost.exe进程承载了 DNS 客户端、DHCP、时间同步等系统服务你没法把svchost整个拉黑否则系统的核心网络功能也跟着废了。我建议的流程是先“观察”再“干预”。安装后保持默认放行用两三天时间看流量统计页记住哪些程序每天高频联网。把系统目录下核心进程C:\Windows\System32里的常见服务加入“允许”名单。再把浏览器、输入法、远程桌面这些你主动使用的工具加入“允许”名单。最后开启“默认阻止未知程序”。这个策略跑起来之后新装的、你不认识的软件第一次联网就会被拦你能在连接日志里看到它再决定是否放行。防火墙最重要的价值就在这里不是一开始就全网禁止而是建立一份“已知可信清单”未知默认拒绝。4.2 给某个程序单独限速限速最常见的两个需求一是防止下载器或同步盘把带宽吃光二是防止后台更新把流量悄悄耗尽。在 Fort Firewall 里操作路径很直白从程序列表找到目标程序右键打开规则设置把“限速”选项打开填一个速度值。我一般先填下行 512KB/s、上行 128KB/s观察几分钟再调整。我实测给某云盘客户端限到 256KB/s它后台跑了一下午总流量比不限速时少了大半同时在线会议没有再出现明显卡顿。限速的典型场景其实是“这个程序必须联网但我不希望它太放肆”这种半放行半管控的策略比直接一刀切拦住更符合日常需要。4.3 阻断远程弹窗与广告请求以及它的边界前面说过弹窗抑制的本质是切断数据源。实际使用里分两种做法按程序拦截直接禁止弹窗助手这类独立进程联网。最省事也最可靠程序连不上服务器拿不到弹窗内容。按目标地址拦截在规则里填写广告服务器的 IP 段或域名。适合弹窗不是由单独进程而是由正常主程序拉取的场景。我的习惯是先按程序拦不行再按地址拦。为了确认弹窗数据到底来自哪个服务器可以先看连接日志里该程序高频连接的地址再用抓包工具二次确认。这个过程其实就是流量可视化带来的排查红利比瞎猜靠谱得多。再次提醒边界如果某个弹窗是程序本地写死的不联网也会弹那要去“任务计划程序”里找对应的触发项禁用。防火墙管不了这一类别因为它没拦住本地弹窗就怀疑工具不行。4.4 用流量历史找出“偷跑证据”偷跑流量往往有固定特征半夜三点、开机后五分钟、空闲状态时。Fort Firewall 的统计历史可以按程序、按时间查看我一般这样用先按总流量倒序排列揪出流量大户再点进某个程序详情看它联网的频率和峰值时间如果发现它没有用户交互时每天固定时段必跑流量基本可以确定是后台偷跑。把证据截图保存然后去规则里把它设成“仅允许前台运行”或“默认阻止”。这个功能用熟以后很多以前觉得莫名其妙的弹窗和卡顿都能倒推到具体进程上。说句实在话排查效率比单看任务管理器高一个量级。5. 实测性能与避坑记录5.1 开了拦截之后网速到底掉了多少我拿一台测试机分别做了两轮对比看“未启用严格拦截”和“启用默认阻止未知 限速规则”的差异。测试环境是千兆局域网两台机器之间用常见命令行测速工具跑 60 秒命令差不多长这样iperf3 -c 192.168.1.10 -t 60 -P 2下面是大概的测试结果只做相对对比不同配置下会有浮动场景下行吞吐首包延迟未启用严格拦截约 940Mbps约 0.6ms启用严格拦截规则约 40 条约 920Mbps约 1.1ms启用严格拦截并开启路径校验约 900Mbps约 2.5ms几十条规则的情况下吞吐损失大约在 2% 到 5%日常使用几乎无感。如果规则数量膨胀到几百甚至上千条且每条都带程序路径校验性能会明显下滑。因为 WFP 每个数据包都要扫一遍过滤器集合过滤器越多匹配耗时越长。我的建议是保持规则精简把“临时放行”和“固定策略”分开别一看到不常连的程序就急着加规则。首次连接方面严格模式会增加几十毫秒延迟原因主要是驱动需要解析进程完整路径、判断用户会话状态。对普通上网、看视频完全无感对某些竞技游戏可能在瞬时操作上有细微影响但远不如网络自身的抖动明显。5.2 最容易踩的三个坑第一个坑把系统服务或 DNS 客户端一起禁了造成假断网。症状是浏览器打不开重启后短暂恢复因为重启后驱动加载顺序和网络栈初始化不同。排查方法很简单先把全局规则全部禁用确认网络恢复正常再逐条启用找到问题规则。我自己的经验是svchost.exe不能整体拦截要精确到具体服务DNS 客户端进程放行时间同步放行DHCP 在一般办公或家庭网络里放行。第二个坑杀毒软件、系统更新这类需要联网的可信进程被默认阻止。严格模式下杀毒软件更新特征库时如果被拦会显示组件失效让人误以为防火墙和杀软冲突。实际上只要在允许名单里把杀软主程序和更新程序加进去就行。这说明大多数“不兼容”其实是策略冲突不是驱动矛盾。第三个坑驱动更新与签名问题。Fort Firewall 安装时会安装内核驱动Windows 要求内核驱动必须有有效签名否则没法正常加载。如果遇到安装后提示驱动未签名或服务启动失败先检查系统是否关闭了驱动强制签名或者是否有其他安全软件抢先占用了驱动框架。这类问题在不同系统版本上表现不一样但处理思路一致查驱动服务状态、重新安装驱动模块、不要同时开太多带内核过滤功能的安全软件。5.3 这类工具适合什么场景不适合什么场景把边界搞清楚才不会用错方向。适合个人电脑防后台偷跑流量建立程序黑白名单给云盘、下载器、同步盘单独限速保障主力应用带宽阻断广告和弹窗类程序的远程请求快速查看某个程序的实时连接频率和累计流量。不适合企业级入侵防御它没有专业签名库和攻击规则集TLS 加密流量的内容审计WFP 能看到连接但解密内容需要额外中间人方案一般不建议局域网内其他设备的管控它只管本机对抗带内核级反检测能力的恶意程序那需要更专业的终端检测方案。明白边界之后你就不会指望一个防火墙解决所有安全问题。它真正擅长的是把“本机出口”的账单摊开给你看然后由你来决定谁走谁留。6. 我在使用中的真实体会用了两个月我最大的体会不是“装了个防火墙就风平浪静”而是“这台电脑的联网行为终于变得可审计、可干预了”。你不需要懂 WFP 的每一层细节但你知道有一条规则链路在系统启动早期就生效所有出站连接都要过一道不用天天维护的安检口。这份确定性比反复封 IP、改 hosts 踏实得多。最后分享两个小技巧。第一规则文件一定要定期导出备份。配置多台机器时把同一份规则文件导进去比一台台重复点省事得多。操作入口一般在设置里导出就是保存一份本地文件换机或重装后直接导入。第二把所有联网程序分成三档常驻可信、按需可用、默认禁止然后按这个分档去建规则。别看到连接日志就慌张地随手拦截分档清楚之后规则列表会长期保持稳定排查问题也会轻松很多。如果你也在为后台偷跑流量和弹窗失控头疼可以找一个安静的时间先把流量统计打开看两天再决定拦谁。相信我这比反复下载各种一键清理工具有效得多。