告别后台偷跑流量与弹窗失控:基于 WFP 内核驱动深入拆解开源 Fort Firewall 架构与流量管控实战

告别后台偷跑流量与弹窗失控:基于 WFP 内核驱动深入拆解开源 Fort Firewall 架构与流量管控实战

告别后台偷跑流量与弹窗失控:基于 WFP 内核驱动深入拆解开源 Fort Firewall 架构与流量管控实战

在日常开发与运维环境中,绝大多数工程师都曾遭遇过类似的困扰:明明没有主动打开大文件下载,系统网络却突发性卡顿;任务管理器中充斥着各类常驻后台的流氓辅助进程、软件自动升级程序以及五花八门的遥测(Telemetry)服务,在神不知鬼不觉地吞噬上行带宽并上传私密数据。然而,Windows 原生自带的 Defender 防火墙界面隐蔽、配置逻辑繁琐,对动态进程路径、多版本环境与临时目录程序近乎束手无策;而市面上常见的商业流量监控软件要么体积臃肿、过度常驻广告弹窗,要么核心过滤引擎闭源,无法建立真正的安全信任边界。

近期在开源安全社区备受瞩目的 Fort Firewall(GitHub: tnodir/fort),凭借其纯净轻量的 C++/Qt 架构以及对 Windows Filtering Platform (WFP) 内核级过滤驱动的深度整合,给出了优雅的破局方案。它不仅无需安装笨重的第三方虚拟网卡驱动即可实现发丝级进程流量嗅探,还提供了直观的实时带宽曲线、应用组分级策略、上下行独立限速以及 GeoIP 区域阻断能力。本文将带大家从 Windows 内核网络栈的 WFP 过滤分层机制出发,全面拆解 Fort Firewall 的底层架构与实战落地技巧。


一、传统主机防火墙的架构局限与现代终端安全诉求

在深入 Fort Firewall 的设计之前,我们有必要先复盘传统 Windows 防火墙治理中的三大经典痛点。

1.1 传统网络过滤手段的代际瓶颈

早期 Windows 平台上的网络过滤工具多采用以下两类实现路径: 1. LSP(Layered Service Provider,分层服务提供者):通过在 Winsock API 层面注入 DLL 进行劫持。这种方式侵入性极高,极易与杀毒软件、网络代理工具产生严重的 DLL 注入冲突,甚至引发系统崩溃(蓝屏 BSOD),微软早已将其全面废弃。 2. 虚拟网卡 / NDIS 过滤驱动:如 OpenVPN 依赖的 TAP/TUN 驱动或 WinPcap。这类方案需要部署独立虚拟网络设备,所有数据包都要经历上下文切换与内存拷贝,无法天然感知生成该网络连接的具体进程名、文件签名及用户会话上下文,导致排查异常连接如同盲人摸象。

架构维度 Windows 原生防火墙 商业闭源管家类工具 Fort Firewall (WFP 架构)
底层驱动依据 基础 WFP 预设规则 私有内核驱动 / LSP 钩子 原生 WFP Callout 驱动
进程感知能力 仅支持固定静态绝对路径 粗粒度进程识别 动态路径、通配符与子进程继承
流量整形与限速 不支持(需靠 QoS 组策略) 粗暴断网 细粒度上下行独立带宽整形 (Token Bucket)
隐私与遥测透明 默认放行所有微软遥测 自带广告与用户画像回传 100% 开源无广告,内置规则屏蔽遥测
内存与 CPU 负载 中等(服务依赖复杂) 极高(百兆内存占用常驻) 极轻(仅 10MB~20MB 内存)

1.2 现代开发终端的核心诉求:从“端口防御”到“应用意图治理”

现代攻击面与异常流量早已不再局限于“外部黑客扫描 3389/445 端口”,而是转变为由内部发起的正向反弹连接(Egress Traffic)。例如开发机上安装的 npm 恶意包后门、被供应链污染的 VS Code 插件、或者静默下载全量安装包的流氓工具。我们需要的是一个能够以应用为中心(Application-Centric)、具备状态机判定能力、并能毫秒级拦截未经授权外联的透明防火墙。


二、深入拆解 Windows Filtering Platform (WFP) 内核驱动机制

Fort Firewall 之所以具备极高的吞吐性能与近乎零开销的系统占用,根本原因在于其直接构建在微软官方推荐的 Windows Filtering Platform (WFP) 体系之上。

WFP 核心过滤分层机制架构图

2.1 WFP 的核心分层模型与 ALE 机制

WFP 是 Windows 内核中一套模块化的网络数据包过滤架构,允许开发者在协议栈的不同生命周期阶段注册“过滤层(Filter Layers)”。其中最为关键的即为 ALE(Application Layer Enforcement,应用层强制层)。

在传统四层路由拦截中,驱动只能看到源 IP、目标 IP、源端口与目标端口(四元组),根本无从知晓发起该连接的是 chrome.exe 还是木马程序伪装的 svchost.exe。而在 ALE 架构下: 1. ALE Connect / Listen 分层:当进程调用 connect() 或 listen() 时触发。内核会在此刻将发起系统调用的 EPROCESS 结构体指针、进程完整绝对路径、NT Token(安全标识符)直接打包作为过滤上下文传递给过滤引擎。 2. ALE Resource Assignment:在端口绑定与分配阶段完成预鉴权,杜绝端口劫持。

Windows Filtering Platform 过滤分层架构

2.2 Callout 驱动的高效判决通道

如上图所示,Fort Firewall 编写了自己的轻量级 Callout 内核驱动,挂载在 ALE 的 FWPM_LAYER_ALE_AUTH_CONNECT_V4/V6 与 FWPM_LAYER_DATAGRAM_DATA_V4/V6 层级上: - 快速放行(Direct Verdict):若命中既有白名单规则或已建立状态的 Flow,引擎以纯汇编级分支在几微秒内返回 FWP_ACTION_PERMIT,对网络吞吐与游戏延迟毫无负面影响。 - 动态阻断(Hard Drop):若命中了应用黑名单或处于“询问模式(Ask Mode)”,驱动会挂起该 SYN 请求并向用户态后台服务发送 LPC/IOCTL 异步通知,直到用户做出放行抉择或超时自动丢弃。


三、Fort Firewall 核心架构与工程实现

Fort Firewall 在工程架构上采用了经典的“内核过滤驱动 + 后台常驻中枢服务 + Qt 前端控制面板”三层解耦设计。

Fort Firewall 三层解耦系统架构图

3.1 规则组织体系:应用组(App Groups)与通配符

传统防火墙往往要求用户为每一个可执行文件配置一条规则,而面对现代开发环境动辄包含成百上千个小二进制工具(如 Node.js、Python venv、Go 编译临时文件),逐一配置会让人崩溃。Fort Firewall 引入了 应用组(App Groups) 机制: 1. 预置核心分组:将应用程序归纳为 Browsers(浏览器组)、Development(编译器与构建工具组)、Services(系统核心网络服务)以及 Untrusted(非受信任沙箱组)。 2. 通配符与正则表达式支持:支持配置 C:\Users\*\AppData\Local\Temp\*.exe 或通配特定项目目录,自动纳管其下所有临时子进程。

3.2 令牌桶流量整形(Traffic Shaping)算法

除了简单的“放行 / 拦截”两态控制,Fort Firewall 最具生产力价值的特性是支持为每个应用或应用组单独设置上传带宽与下载带宽硬性配额。

其核心采用基于高精度时间戳的令牌桶(Token Bucket)算法实现。在数据流传输层(FWPM_LAYER_STREAM_V4),驱动维护每个连接的已消费字节数与令牌刷新周期;当某进程的下载速率超过设定阈值时,驱动主动延迟或适度节流该连接的 TCP ACK 确认包回传,利用 TCP 拥塞控制窗口协议(Congestion Window)实现对上游发送端的背压抑制,从而保证关键业务(如远程会议、SSH 会话)的稳定延迟。

告别后台偷跑流量与弹窗失控:基于 WFP 内核驱动深入拆解开源 Fort Firewall 架构与流量管控实战

进程应用组流量整形与安全规则引擎


四、生产实战:从进程嗅探到精细化安全规则下发

为了让大家更加清晰地理解 Fort Firewall 的底层管控思想,我们在配套实战工程中编写了一个轻量级活跃连接审计与动态规则生成脚本 practice/demo_firewall_rule.py。该脚本可以在脱离复杂驱动编译的情况下,利用底层 API 快速实现流氓进程的识别与规则导出。

4.1 核心网络审计实战代码解析

以下为提取自 practice/demo_firewall_rule.py 的核心逻辑片段:

import psutil
import socket
from datetime import datetimedef inspect_active_connections(filter_status="ESTABLISHED"):"""嗅探当前系统中所有活跃进程的网络连接与归属程序"""results = []for conn in psutil.net_connections(kind='inet'):if conn.status != filter_status or not conn.raddr:continuepid = conn.pidproc_name, proc_path = "System / Unknown", "N/A"if pid:try:proc = psutil.Process(pid)proc_name = proc.name()proc_path = proc.exe()except (psutil.NoSuchProcess, psutil.AccessDenied):passresults.append({"pid": pid,"name": proc_name,"path": proc_path,"laddr": f"{conn.laddr.ip}:{conn.laddr.port}","raddr": f"{conn.raddr.ip}:{conn.raddr.port}","proto": "TCP" if conn.type == socket.SOCK_STREAM else "UDP"})return results

4.2 终端运行审计验证

在管理员终端下执行该脚本,可以即时输出类似 Fort Firewall 核心审计面板的结构化连接数据:

[00:03:20] 正在枚举系统网络连接 (状态: ESTABLISHED)...📊 共发现 18 个活跃对外网络连接:
--------------------------------------------------------------------------------
PID     进程名称              本地地址            远程目标地址        协议
--------------------------------------------------------------------------------
12404   chrome.exe            192.168.1.108:54210 142.250.190.46:443  TCP
8920    code.exe              192.168.1.108:54302 20.198.118.14:443   TCP
1532    python.exe            192.168.1.108:54318 104.26.12.18:443    TCP
3028    rogue_updater.exe     192.168.1.108:54401 198.51.100.22:80    TCP
--------------------------------------------------------------------------------🛡️ 针对进程 [rogue_updater.exe] 生成的推荐防火墙阻断指令 (需管理员权限运行):
>>> netsh advfirewall firewall add rule name="FortSec_PID_3028" dir=out action=block program="C:\ProgramData\RogueApp\rogue_updater.exe" enable=yes

五、Fort Firewall 深度使用指南与防坑避雷矩阵

在日常开发环境中使用 Fort Firewall 时,若配置不当可能会导致本地端口反向代理失效、微服务本地调试被阻断等问题。以下汇总整理了 4 项高频实战避坑建议。

5.1 本地回环(Loopback)白名单优先放行

在进行微服务联调、本地 Vite 开发服务器热更新或访问 127.0.0.1 / localhost 时,这些流量同样会流经 WFP 的 ALE 层。 - 避坑策略:切勿在全局规则中配置盲目的“阻断所有未明确允许的应用”。务必在 Fort Firewall 的首选项中勾选 “允许本地网络流量(Allow Local/Loopback Traffic)”,否则可能导致 Docker 端口映射、WSL2 与宿主机通信以及 IDE 调试端口全面被杀。

5.2 对 Windows 系统关键服务(svchost / ntoskrnl)的审慎对待

Windows 系统更新、DNS 客户端(Dnscache)与 DHCP 客户端均寄宿于 svchost.exe 进程池中。 - 避坑策略:千万不要直接右键将 svchost.exe 加入完全阻断组!正确的做法是使用 Fort Firewall 预置的 System Core 规则,仅限制其向外连接非标准 DNS 端口,保留合法的 53(DNS)与 67/68(DHCP)连接。

5.3 巧用 GeoIP 阻断高危境外恶意扫描

Fort Firewall 内置了离线 IP 归属地数据库。对于大部分个人办公和局域网开发机而言,极少需要与小众离岸地区的 IP 进行直接 TCP 通信。在“国家/区域过滤(GeoIP Blocking)”选项卡中,一键开启可疑海外网络区段过滤,能在网络层直接静默丢弃绝大多数无针对性的撞库扫描与恶意挂马连接。


六、总结与展望

在安全边界不断向终端收敛的今天,Fort Firewall 凭借其对 Windows 核心 WFP 机制的精妙驾驭,成功证明了:轻量级、零广告与极致的安全控制力完全可以在一款开源工具中实现大一统。

它摒弃了过往杀软类工具动辄上百兆守护进程的顽疾,以不到 20MB 的系统内存占用,为工程师提供了进程级透明防护、直观流量可视化与可定制的带宽塑形利器。无论是用于排查开发机上的顽固流量泄露,还是作为家庭多台 Windows 终端的纯净网络卫士,Fort Firewall 都值得每一位追求系统清爽与掌控感的极客深度体验。


本文首发于边学边练技术中台:https://www.skillup.host/bxbl/6276.html

文章版权声明:除非注明,否则均为边学边练网络文章,版权归原作者所有

相关阅读