ghostpsalm/Firebreak
GitHub: ghostpsalm/Firebreak
一款无需驱动的 Windows 防火墙规则使用分析工具,通过关联 WFP 审计事件与防火墙规则,帮助用户识别并禁用未使用的规则、收紧过宽的规则。
Stars: 0 | Forks: 0
# 防火带
**先观察,再自信地执行。**
将真实的网络活动转化为最小权限的防火墙策略。
这是一款按需运行的工具(无需后台服务,无需驱动程序),专门解答:**哪些防火墙规则实际上被匹配了,被哪些应用程序使用,以及使用频率如何** —— 这样您就可以禁用未使用的规则,并对已使用但范围过宽的规则进行安全审查。
它的工作原理是将 Windows 自身的 WFP 审计事件(安全日志 5156 允许 / 5157 拦截)与实时的 WFP 过滤器表以及 `Get-NetFirewallRule` 进行关联比对。

## 下载
从 [**Releases**](https://github.com/ghostpsalm/firebreak/releases/latest) 页面获取最新的 `firebreak.exe` 并运行。Windows 可能会对未签名的二进制文件发出警告 —— SmartScreen → *更多信息 → 仍要运行*。Firebreak 也可以就地自动更新(**关于 → 检查更新**)。
**系统要求:** Windows 10 或更高版本 / Windows Server 2016 或更高版本,以及管理员权限。
## 尽早开始收集(非常重要)
Firebreak 不会捕获数据包 —— 它读取的是在启用“Filtering Platform Connection”审计后 **Windows 自身记录**的证据。默认情况下该审计处于关闭状态,并且**无法追溯历史数据**:只有在开启该功能之后,证据才会开始累积。请尽早启用它,过段时间再回来查看 —— 要得出可靠的“零命中”结论,收集窗口必须涵盖数周和数月的活动(如备份代理程序、许可证检查),因此请以**周为单位**来规划,而不是几小时。
有两种方法可以开始计时:
1. **运行 Firebreak** 并点击 **启用连接审计** —— 它会先记录下先前的状态(可通过 `--restore-audit` 还原),然后启用审计并增加安全日志的容量,这样历史记录就能一直保存,直到您再次回来查看。
2. **无需安装** —— 提前在目标机器上运行以下命令(需提权),当您第一次运行 Firebreak 时,它就会自动接入已累积的历史记录:
auditpol /set /subcategory:{0CCE9226-69AE-11D9-BED3-505054503030} /success:enable /failure:enable
wevtutil sl Security /ms:536870912
(第二行命令将安全日志容量增加到 512 MiB —— 默认的 20 MiB 在繁忙的主机上几小时内就会发生滚动覆盖,从而悄无声息地丢弃您的证据。)
## 从源码构建
在 Windows 上原生构建:`cargo build --release`
在 Linux 上交叉编译:`cargo build --release --target x86_64-pc-windows-gnu`
(需要 `mingw64-gcc` 和 rustup target)。`cargo test` 可以在任一平台上运行。
## 运行
双击 exe 文件 —— 内嵌的 `requireAdministrator` 清单会弹出 UAC 提示(Firebreak 需要管理员权限才能访问审计策略、安全日志和 WFP)。应用程序启动后会直接进入规则表界面;其他所有操作都在后台工作线程中执行:
1. **首次运行(审计关闭):** 标题栏会显示一个 **启用连接审计** 按钮。点击它会记录下现有的审计状态和日志大小(以便 `--restore-audit` 能将主机精确恢复原状),启用“Filtering Platform Connection”子类别,如果安全日志小于 512 MiB 则将其扩大,接着对规则集进行快照,并开始计时收集数据。由于无法追溯历史数据 —— 请尽早启用,然后等几天或几周后再回来查看。同时,界面上的表格已经展示了每条规则的作用域和当前的监听情况。
2. **审计已开启,但首次运行该工具:** 会自动接入并分析安全日志中保留的所有历史数据。
3. **正常运行:** 摄取自上次检查点以来的事件(通过安全通道的 EventRecordID 进行跟踪 —— 精确无误,不会重复读取或遗漏),将每条规则的使用情况聚合到 `%ProgramData%\firebreak\firebreak.db` 中,并显示报告。摄取过程是一个单一事务:一旦发生崩溃会干净地回滚,重新运行也不会出现重复计算的情况。
无头模式标志(附加到启动终端):`--enable-only`、`--no-ui`(文本报告)、`--dump-filters`(诊断)、`--restore-audit`(将审计策略和日志大小恢复为记录的 Firebreak 运行前状态)、`--ui-preview`(模拟数据 UI)、`--db `。
## 审计另一台 PC(离线)
Firebreak 可以审查您无法亲自在场的机器。在目标设备上(需提权),生成一个数据包 —— 将规则、网络配置文件以及过滤后的安全事件打包压缩在一起:
```
firebreak.exe --collect
```
无法在该机器上运行 exe?**设置 → 保存收集脚本 (.ps1)…** 会生成一个独立的 PowerShell 收集器,可产生相同的数据包。
将生成的 `firebreak-export--.zip` 带回,通过 **设置 → 导入 Firebreak 导出文件…** 打开。它会根据该设备自身的事件分析其规则 —— 这是一个**只读**的审查会话(您无法直接修改另一台机器的防火墙,因此“应用”功能将被禁用)。目标设备必须事先已开启连接审计(如上所述),否则将没有可供收集的事件。
## 界面说明
针对每条规则:配置文件标签(包含 域/专用/公用 视图筛选器 —— 默认视图**仅显示已启用的规则**)、作用域(协议/端口/程序)、允许/拦截命中次数、最后命中时间、观察到命中该规则的应用程序,以及**当前是哪个进程正在监听**入站规则的端口。底部可折叠的面板列出了所有处于活动状态的监听套接字,以及匹配到的 WFP 过滤器名称的未归属事件。
复选框用于设定预期的启用状态;**应用**操作会在后台线程中运行,并首先将完整的策略备份写入 `%ProgramData%\firebreak\backups\firewall-.wfw`(可使用 `netsh advfirewall import ` 恢复),然后才会通过 `Set-NetFirewallRule` 提交更改 —— 如果备份失败,则不会执行任何更改。
## 注意事项
- **零命中且已启用的规则** 是可禁用的候选对象 —— 但前提是收集窗口已经涵盖了每周/每月频率的活动(如备份代理程序、许可证检查)。请在标题栏查看“收集起始时间”。
- **覆盖范围间隙警告** 意味着日志中存留的最旧记录已经超过了检查点:可能是发生了日志滚动覆盖、日志被清空,或者有一段时期审计处于禁用状态。在出现此类间隙的情况下,“零命中”结论的可靠性会降低。
- **归属关系基于单次启动周期。** 为了实现严密的归属追踪,请在每次开机会话中至少运行一次 Firebreak。出现未归属事件是正常的 —— 对于被拦截的流量来说更是意料之中(端口扫描和其他未经请求的流量会匹配 WFP 内置的默认拦截过滤器,而这些并不属于防火墙规则)。
- 本地审计策略可能会在 **组策略 (Group Policy)** 刷新时被还原。如果事件摄取量意外降至零,请使用以下命令重新检查:
`auditpol /get /subcategory:{0CCE9226-69AE-11D9-BED3-505054503030}`
## Firebreak 不具备的功能
- 不是数据包捕获工具或 WFP 回调驱动程序 —— Windows 已经记录了所需的一切;本工具只是负责读取这些数据。
- 不是基于单包的统计:“Filtering Platform Connection”审计是基于单连接/单数据流的。单包级别的子类别(“Filtering Platform Packet Drop”)是故意保持未启用状态的。
标签:AI合规, WFP, 可视化界面, 最小权限原则, 端点可见性, 系统运维, 通知系统, 防火墙管理