RockxyApp/Shieldxy
GitHub: RockxyApp/Shieldxy
Shieldxy 是一款开源、可审计的 macOS 原生应用防火墙,通过签名身份验证和域名策略帮助用户监控并显式控制出站网络连接。
Stars: 0 | Forks: 0
Shieldxy
适用于 macOS 的开源、可审计应用防火墙。
通过原生 Swift 应用,根据已签名的应用程序、域名和策略查看出站连接并进行控制,
这是一款您可以审查、构建和信任的应用。
本地优先,无 payload,专为显式网络控制而设计。
## 核心亮点
- 感知签名者的应用身份可防止其他开发者通过重用 bundle identifier 来继承策略。
- 应用和域名规则支持精确匹配、通配符匹配、全局匹配以及应用范围内的匹配,且内存中的评估是有界的。
- 询问模式(Ask mode)会暂停未匹配的流量以待决策,同时保持显式的超时和队列耗尽行为。
- 连接历史、本地风险上下文、可选的离线地理位置以及安全的 CSV 导出被集成到一个原生工作流中。
- 发布流程会验证通用构建、签名、公证、装订(stapling)以及加密签名的 Sparkle 更新。
有关详细的变更,请参阅 [CHANGELOG.md](CHANGELOG.md)。
## 功能特性
Shieldxy 从负责连接的应用程序开始监控——而不仅仅是地址和端口。它将经过签名验证的身份与目标上下文、策略以及连接活动相结合,以回答三个实用问题:
**哪个应用程序发起了连接?连接到了哪里?是否应该允许?**
### 应用感知连接监控
根据已签名的应用程序、主机名或 IP、公司、国家/地区、判定结果以及传输的字节数,查看新建的 socket 流。Shieldxy 在其 Network Extension 启动后观察流量;它是一个连接监控器,而不是进程清单。
`已签名应用身份` · `主机与 IP` · `公司上下文` · `国家/地区` ·
`实时吞吐量` · `允许 / 拦截 判定`
### 应用与域名防火墙
使用应用程序的 bundle identifier 和经过验证的 Apple Developer 团队来允许或阻止该应用。全局添加精确主机或通配符域名规则,或者将其范围限定于单个经过签名验证的应用。
`应用规则` · `域名规则` · `通配符主机` · `签名者验证` ·
`应用范围策略` · `临时拦截`
### 四种连接模式
在整个系统之间切换:仅监控(Monitor Only)、全部允许(Allow All)、全部拦截(Block All)和询问新连接(Ask New Connection)。所选模式在多次启动之间保持不变,并在主应用程序和菜单栏中保持可见。
`仅监控` · `全部允许` · `全部拦截` · `询问新连接` ·
`持久模式`
### 连接前询问
暂停未匹配的新流量,并决定是否允许其继续。可见且未回答的提示会遵循配置的 fail-open 安全超时;如果提示无法进入有界决策队列,Shieldxy 将拦截该流量。
`单流量决策` · `记住选择` · `安全超时` ·
`有界队列` · `显式失败语义`
### 连接历史与安全导出
查看有界的本地网络活动时间线,并将其导出为电子表格安全的 CSV。历史记录写入操作会合并以避开判定热路径,从而保持策略评估的高响应性。
`本地历史` · `有界存储` · `CSV 导出` · `公式安全单元格` ·
`搜索与审查`
### 本地风险上下文
突出显示精选的追踪器或可疑域名以及异常的出站流量,而无需将目标地址发送到云信誉服务。风险评分是确定性、本地化且仅供参考的——它绝不会静默创建防火墙规则。
`追踪器信号` · `可疑域名` · `流量信号` ·
`本地评分` · `无自动拦截`
### 网络地图
使用可选的离线 GeoIP 数据和内置的公司-区域后备数据探索连接的地理位置。MapKit 可能会联系 Apple 获取地图内容,但 Shieldxy 不会发送观察到的主机名或 IP 来进行连接定位。
`离线 GeoIP` · `公司归属` · `MapKit` · `本地定位`
### 原生菜单栏控件
无需离开当前工作区,即可随时查看连接状态、当前模式和吞吐量。快速控件使用与主应用程序相同的策略状态。
`状态项` · `实时吞吐量` · `模式切换` · `快速访问`
### 在 Rockxy 中打开
将 HTTP 或 HTTPS 目标交给 [Rockxy](https://github.com/RockxyApp/Rockxy) 以进行更深度的协议感知检查。这种移交始终是显式的,且由用户主动发起。
`一键移交` · `HTTP / HTTPS`
## 安全设计
Shieldxy 控制着一个对延迟敏感的系统扩展。其信任模型保持了判定路径的紧凑性、经过身份验证以及有界性:
- **感知签名者的身份。** 应用范围规则绑定了 bundle identifier 和经过验证的 Apple Developer 团队。
- **经过身份验证的策略传递。** 应用程序通过同一团队的 XPC 通道发送经过验证、带有版本号的规则快照。无效的更新会保留上一个已接受的快照。
- **有界热路径。** 询问组、暂停的流量、聚合、统计、XPC 积压、导入的规则和持久化历史记录都具有明确的限制。
`handleNewFlow` 不执行任何阻塞式磁盘 I/O。
- **诚实的故障行为。** 全新的扩展在收到经过身份验证的快照之前会以 fail-open 状态启动,从而避免意外导致整个机器断网。
询问队列耗尽时以 fail-closed 失败;一个未回答的可见提示会遵循其配置的 fail-open 超时。
- **无 payload 访问。** Shieldxy 仅处理流元数据和字节数——而不是 HTTP body、TLS 明文、凭据或 API-key 值。
请通过 [GitHub Security Advisories](https://github.com/RockxyApp/Shieldxy/security/advisories/new) 私下报告漏洞。
有关支持的版本、范围和响应目标,请参阅 [SECURITY.md](SECURITY.md)。
## 快速开始
```
git clone https://github.com/RockxyApp/Shieldxy.git
cd Shieldxy
make build
make test
```
使用以下命令运行完整的发布级质量验证套件:
```
make verify-release
```
这将运行格式化和 lint 检查、Debug 和 Release 优化的单元测试、静态分析、通用的 `arm64`/`x86_64` Release 构建以及 bundle 元数据验证。
### 系统要求
| 要求 | 构建与测试 | 安装后的网络过滤器 |
| --- | ---: | ---: |
| macOS 14.0 或更高版本 | 必需 | 必需 |
| Xcode 16 或更高版本 | 必需 | 本地开发必需 |
| Apple Silicon 或 Intel Mac | 支持 | 支持 |
| 付费的 Apple Developer 账户 | 非必需 | NetworkExtension 和系统扩展 entitlement 必需 |
代码仓库的 lint 需要 SwiftLint 和 SwiftFormat。如果当前没有本地签名配置,标准的构建和测试命令将以未签名方式运行。
### 运行网络过滤器
安装和运行 Network Extension 需要付费的 Apple Developer 账户。签名配置是特定于机器的,并有意识地被排除在 Git 之外:
```
cp Configuration/Developer.xcconfig.template Configuration/Developer.xcconfig
```
添加您自己的 Apple Developer Team ID,然后按照 [CONTRIBUTING.md](CONTRIBUTING.md) 进行完整设置。切勿提交证书、provisioning profile、notarization 密钥或本地开发者配置。
首次启动时,macOS 会提出两个独立的批准环节:
1. 在 **系统设置 › 通用 › 登录项与扩展** 中启用 **系统扩展**。
2. 在 macOS 请求网络过滤权限时,允许 **内容过滤器**。
在实时过滤开始之前,必须获得这两项批准。
## 架构
Shieldxy 将面向用户的策略与对延迟敏感的执行分离开来:
```
┌──────────────────────────────────────────────────────────────────┐
│ Shieldxy app │
│ SwiftUI · rules · history · risk · local persistence │
└─────────────────────────────┬────────────────────────────────────┘
│
validated rule snapshots ↓ flow events ↑
authenticated, versioned XPC contract
│
┌─────────────────────────────▼────────────────────────────────────┐
│ Network Extension │
│ NEFilterDataProvider · signer identity · allow / drop / pause │
└──────────────────────────────────────────────────────────────────┘
```
| 组件 | 职责 |
| --- | --- |
| `Shieldxy/` | 原生界面、策略编写、历史记录、风险上下文、更新和持久化 |
| `ShieldxyNetworkExtension/` | NetworkExtension 判定路径上的单流量身份解析和执行 |
| `Shared/` | 带版本号的 IPC 模型、快照验证、规则匹配和运行时限制 |
| `ShieldxyTests/` | 策略、身份、导入、持久化、资源限制和发布强化覆盖范围 |
该扩展不拥有任何可编辑的策略。它评估内存中最新接受的快照,而应用程序仍然是用户编写的规则的唯一事实来源。
## 隐私
- 无账户、无 telemetry、无 analytics、无广告、无云信誉服务。
- 无 TLS 解密、无 payload 捕获、无 request-body 检查、无密钥扫描。
- 规则和连接历史保留在当前用户的 Application Support 目录中;偏好设置使用 macOS 的 `UserDefaults`。
- 可选的 GeoIP 和公司归属在本地运行。
- 官方构建可能会联系已签名的公共更新源。
- 打开网络地图可能会导致 Apple 的 MapKit 获取地图内容。
- 打开网站或使用“在 Rockxy 中打开”是由 macOS 或接收应用程序处理的显式用户操作。
阅读完整的 [Shieldxy 隐私政策](PRIVACY.md),了解观察到的元数据、存储、第三方数据和网络请求详细信息。
## 文档
| 指南 | 涵盖内容 |
| --- | --- |
| [Network Extension](docs/network-extension.md) | 安装、激活、IPC 和执行边界 |
| [规则](docs/rules.md) | 应用规则、主机匹配、临时拦截和询问行为 |
| [策略与限制](docs/policy-and-limits.md) | 社区默认值、技术上限和有界状态 |
| [风险与 DNS](docs/risk-and-dns.md) | 本地归属、风险评分和可选的 GeoIP |
| [菜单栏](docs/menu-bar.md) | 状态项、吞吐量和快速控件 |
| [外观](docs/appearance.md) | 主题和呈现设置 |
| [发布](docs/RELEASING.md) | 签名、公证、Sparkle 和 draft-release 工作流 |
## 发布版本
首个官方发布版本将是一个通用的 Apple Silicon 和 Intel 应用程序,使用 Apple Developer ID 证书签名,由 Apple 公证,以装订的 DMG(stapled DMG)形式分发,并通过加密签名的 Sparkle appcast 进行更新。
这些属性由发布流程强制执行。它们不适用于任意的本地构建。
## Rockxy 生态系统
- **[Rockxy](https://github.com/RockxyApp/Rockxy)** — 原生 HTTP、HTTPS、
WebSocket、GraphQL 和协议感知调试
- **Tracexy** — 网络分析和可观测性
- **Shieldxy** — 应用感知网络安全和连接控制
## 许可证
Shieldxy 基于
[GNU Affero General Public License v3.0](LICENSE) 提供。
版权所有 © 2026 Shieldxy 贡献者。
标签:Swift, 子域名枚举, 应用防火墙, 流量管控, 系统安全