preston-peterson/sluice

GitHub: preston-peterson/sluice

Sluice 是一款面向 Ubuntu 桌面的应用防火墙与网络监控工具,通过 eBPF 和 nftables 实现出站连接实时决策与入站流量管控,并提供非特权桌面 UI 实现两次点击的允许/拦截工作流。

Stars: 0 | Forks: 0

# Sluice 一款专为 Ubuntu (GNOME) 打造的精致、现代的**应用防火墙与网络监控工具**。 Sluice 通过实时决策流和两次点击即可完成的允许/拦截工作流,监控并控制您机器上的**出站和入站**连接。 为什么需要它:在典型的桌面环境中,*很难查看出站连接*,也*很难找到并放行您真正需要的流量*。Sluice 将这些信息置于最显眼的位置。 ## 架构 Sluice 由两部分组成,具有清晰的权限分离: ``` ┌─ sluice-ui (unprivileged, your user) ─┐ ┌─ sluice-engine (root systemd service) ─┐ │ Tauri desktop app · live feed · │ gRPC │ eBPF cgroup/connect (outbound) · │ │ allow/block · history (SQLite) │◄──────►│ nftables + conntrack (inbound) · │ │ gRPC CLIENT │ UDS │ passive DNS snoop · gRPC SERVER │ └───────────────────────────────────────┘ └────────────────────────────────────────┘ enforces in-kernel; streams events to the UI ``` - **Engine** (`engine/`):一个小型的 **root daemon**,负责执行实际的强制策略 —— 一个 `cgroup/connect` eBPF 程序通过内核规则映射表拒绝出站连接(每次连接约耗时 1µs),一个 `nftables` 表控制入站,以及被动 DNS 嗅探 + `/proc`/容器信息丰富化来为事件添加标签。它通过经过严格安全加固的 Unix socket(权限为 `0600`,并通过 `SO_PEERCRED` 限制为所有者)为 UI 提供服务。 - **UI** (`crates/sluice-ui`):一个**非特权 Tauri 应用** —— 作为 Engine 的 gRPC *客户端*。它渲染数据流,编写规则(由 root Engine 执行特权操作),并保存本地历史记录。它绝不以 root 身份运行,自身也不发起任何网络调用。 ## 主要功能 - **数据流** — 聚合的实时活动,支持自由文本 + 判定 + 协议/类别过滤器、**时间窗口**视图(实时 / 小时 / 今天 / 7 天)、可逐行展开的详细信息(pid/uid、源/目的地址、协议、通过离线 geoIP 获取的目的地国家、按需 rDNS)、**进程解释器**(仅限本地)以及按启动应用划分的**项目分组**。 - **操作** — **两次点击允许/拦截**,配备范围 × 持续时间选择器、确认机制以及关键主机白名单;提供防火墙规则面板;针对 **IPv4 和 IPv6** 在内核中强制执行出站规则。 - **视图** — **应用**和**目的地**权限面板(显示真实的规则状态)、**使用情况**的最活跃发声者(top-talkers)、**安全**事件日志,以及**入站**控制(观察 ↔ 强制执行 + 允许列表,并支持按端口深入查看)。 - **集成** — 系统托盘、桌面通知、Engine 状态指示器、实时带宽图,以及**持久化历史记录**(SQLite),确保数据流在重启后依然存在。 - **默认安全** — 默认状态为监控(绝不拦截流量);Engine 采用默认允许 + 拒绝名单策略,因此不存在被锁定无法访问的风险。恢复方式始终为 `sudo systemctl stop sluice-engine`。 ## 仓库布局 | 路径 | 说明 | |---|---| | `crates/sluice-ui` | Tauri 桌面应用(非特权 gRPC 客户端)—— 包含数据流和允许/拦截 UI。 | | `crates/sluice-types` | UI 无关的值类型(feed/verdict/decision),由 UI 共享。 | | `crates/sluice-proto` | Engine↔UI gRPC 契约(`sluice.proto`)+ 生成的存根。 | | `engine/loader` | root Engine daemon:加载/附加 eBPF、规则存储、入站 nftables、gRPC 服务器。 | | `engine/ebpf` | `cgroup/connect{4,6}` eBPF 程序(基于 nightly 和 `bpf-linker` 构建)。 | | `engine/common` | 共享的 eBPF↔loader ABI。 | | `scripts/`, `justfile` | 开发引导和常见任务。 | ## 安装 **推荐 — 预构建包。** 从最新版本下载 `.deb` 并安装;**无需构建工具链**: ``` sudo apt install ./Sluice-Firewall__amd64.deb ``` 这是一个单一的组合包(名为 `sluice-firewall`),包含两部分 —— 桌面 UI 和预构建的 root Engine 及其 systemd 单元。`apt` 会自动拉取运行时库,并且该包的安装脚本会启用并启动 `sluice-engine` 服务,同时将授权所有者的 UID 记录在 `/etc/sluice/engine.env` 中。 **从源码构建。** 在代码检出目录中,只需一条命令即可构建这两部分并安装相同的组合包,并根据需要拉取构建工具链: ``` ./install.sh ``` 然后从您的应用菜单启动 **Sluice**(或运行 `sluice-ui`)。Engine 作为 root systemd 服务(`sluice-engine`)运行;UI 是按用户运行且非特权的。恢复方式始终为 `sudo systemctl stop sluice-engine`。若要更新,请安装新版本的 `.deb`(或运行 `git pull && ./install.sh`);若要卸载所有内容,请运行 `./uninstall.sh`(或执行 `sudo apt remove sluice-firewall`)。 有关详细信息和选项,请参阅 [`docs/INSTALL.md`](docs/INSTALL.md)。 ## 开发 ``` just setup # Rust toolchain + protoc + Tauri/WebKitGTK libs just check # fmt + clippy + tests just engine-build # build the eBPF object + the root loader (needs nightly + bpf-linker) just ui # run the desktop app against a running engine ``` ## 许可证 Sluice 是基于 **GNU General Public License v3.0 or later**(`GPL-3.0-or-later`)许可的免费软件 —— 参见 [`LICENSE`](LICENSE)。版权所有 © 2026 Preston Peterson。
标签:Docker镜像, nftables, Python工具, Tauri, 可视化界面, 应用防火墙, 桌面安全, 通知系统