zeo/iris

GitHub: zeo/iris

Iris 是一款跨 Windows/Linux 的应用级防火墙与网络监控工具,通过特权引擎强制执行联网规则并提供实时流量可视化。

Stars: 0 | Forks: 0

iris

适用于 Windows 和 Linux 的防火墙与网络监控工具。Iris 会监控应用程序的网络流量,让你完全掌控哪些程序允许联网:支持按应用配置的允许和拦截规则、实时查看每个进程的通信对象,以及每个应用流量使用情况的持续记录。

Activity: live per-app traffic
Graph: bandwidth over time, per adapter

原生构建:由一个小型的特权引擎(在 Windows 上为服务,在 Linux 上为 systemd unit)负责通过操作系统过滤层和内核网络事件执行核心任务,而一个无特权的 Tauri UI 则通过一个带有访问控制的本地 socket 来驱动它。即使窗口关闭,监控和规则依然会持续运行。修改防火墙规则时,会通过一个独立的管理员专用通道(在 Windows 上是 UAC 提示,在 Linux 上是 polkit 提示)请求提权,因此任何无特权进程都无法篡改系统强制执行的内容。 ## 主要功能 - **保护 (Protect)**:基于应用的允许和拦截规则,即使 UI 未打开,被拦截的应用也无法联网。Windows 在 Filtering Platform 层强制执行这些规则;Linux 则通过 nftables 队列在引擎内部决定每一个新连接的放行状态。添加、删除或切换规则均需提权。 - **活动 (Activity)**:实时表格,展示每个应用的上传和下载速率、打开的连接数以及通信的远程 endpoint。点开某个连接,可查看其主机名、网络作用域、所属国家,并支持一键断开。 - **图表 (Graph)**:随时间滚动的带宽图表,支持查看总量和按应用统计,提供实时和历史时间范围,并可按网络适配器(以太网、Wi-Fi、VPN)进行实时拆分。 - **使用量 (Usage)**:每个应用发送和接收数据的滚动历史记录,以及按适配器统计的总量。随着数据老化会进行降采样以保持存储占用极小,支持 CSV 导出和可选的流量计划上限预警。 - **警报 (Alerts)**:当新程序首次连接网络时,Iris 会对其进行标记并弹出托盘通知。对于受监控的地址,只要有任何程序尝试连接它们,就会立即触发警报。 - **插件 (Plugins)**:可选扩展程序会在受限的沙箱外运行,其权限仅限于你所批准的范围。插件可以标注 endpoint、触发警报、建议防火墙规则供你审查,并显示其专属的面板标签页。 - **设置 (Settings)**:吞吐量单位、通知、开机自启,以及一键安装或卸载后台引擎。 Endpoint 信息丰富化(目前包括网络作用域和监控列表,后续将通过插件支持更多内容)会在引擎中解析,并显示在连接详情抽屉中。 规则可以备份或恢复为 JSON 文件;恢复操作会像任何其他规则修改一样经过提权验证,整个文件只需一次提权提示。若要监控地址,请在监控列表文件(Windows 上为 `%ProgramData%\Iris\watchlist.txt`,Linux 上为 `/var/lib/iris/watchlist.txt`)中每行输入一个 IP 或 CIDR(支持 `#` 注释);匹配到的 endpoint 在首次连接时会显示危险徽章并触发警报。 ## 插件 Iris 通过进程外插件进行扩展,而不是在引擎中直接嵌入代码。插件是一个普通的可执行文件,安装在插件目录下(Windows 上为 `%ProgramData%\Iris\plugins\\`,Linux 上为 `/var/lib/iris/plugins//`),并附带一个 `plugin.json` 清单文件来声明其需求:权限(监控流量、标注 endpoint、触发警报、建议规则、显示面板)以及需要访问的确切主机。在用户于“插件”标签页中审查该声明并启用之前,插件不会执行任何操作。 该沙箱由服务强制执行,而非交由插件自行处理。在 Windows 上,每个子进程都在受限的低完整性 token 下运行,并剥离了所有权限;在 Linux 上,它以专用的无特权账户运行,且不能获取新权限并限制资源使用。其网络访问权限被严格锁定在已授权的 endpoint 上:Windows 通过 Filtering Platform 实现,Linux 则通过专用的 cgroup-v2 nftables 边界来实现。Linux 插件共享同一个沙箱账户,但保留各自独立的网络授权;如果出口列表为空,则完全禁止网络访问。 插件无法直接更改防火墙规则。其能做的最高权限操作仅是提交规则提案,该提案会停留在“保护 (Protect)”页面,直到用户像处理手动规则一样通过提权限验证来接受它。面板是声明式的:插件返回数据 widget,由 UI 使用自身的原生组件进行渲染,因此绝不会在界面中执行任何插件代码。 插件作者只需实现 `iris-plugin` crate 中的一个 trait 并调用 `run()`;SDK 会自动处理管道、握手和消息交付。 ## 布局 ``` crates/iris-core platform-neutral models, engine traits, aggregation crates/iris-ipc framed wire protocol shared by the service and UI crates/iris-platform-win Windows backend: ETW capture, WFP filters, connections crates/iris-platform-linux Linux backend: sock_diag, NFQUEUE, nftables, systemd crates/iris-plugin the SDK plugin authors build against crates/iris-store SQLite history, usage rollups, and alerts service the privileged Windows/systemd engine host app the Tauri v2 + SolidJS desktop UI ``` 引擎基于 `iris-core` 中的 trait 编写;Windows 和 Linux 在相同的服务接口之后提供了平台相关的具体实现。 ## 构建 需要最新的 Rust 工具链、Node 和 pnpm。 ``` cd app pnpm install pnpm tauri dev # run the UI against a dev build pnpm tauri build # produce an installer ``` ## 许可证 根据你的选择,在 [MIT](LICENSE-MIT) 或 [Apache-2.0](LICENSE-APACHE) 双重许可证下授权。内置的第三方数据已在 [NOTICE](NOTICE) 中致谢。 ## 状态 已实现并可用:仪表盘外壳;基于应用/进程的实时活动监控,支持连接钻取、主机名和 endpoint 信息丰富化;支持实时和历史时间范围且按适配器拆分的滚动带宽图表;在 Windows 和 Linux 上通过提权验证的 WFP 允许/拦截规则,支持 JSON 备份与恢复;使用量历史记录,包含按适配器统计的总量和 CSV 导出;首次连接与监控列表警报,带有托盘通知;沙箱化的插件运行时,支持权限许可、出口锁定、规则提案和面板标签页;设置界面;以及带有签名自动更新功能的自安装后台服务。
标签:Tauri, 可视化界面, 子域名枚举, 系统安全, 通知系统, 防火墙