woop/lulu-cli
GitHub: woop/lulu-cli
LuLu macOS 防火墙的命令行管理工具,专为 AI 智能体和自动化脚本设计,实现程序化的出站连接规则控制。
Stars: 0 | Forks: 0
# lulu-cli
通过命令行管理 [LuLu](https://objective-see.org/products/lulu.html) 防火墙规则。
[LuLu](https://objective-see.org/products/lulu.html) 是一款免费、开源的 macOS 防火墙,用于阻止未知的传出连接。它拥有 GUI 界面,但无法通过编程方式管理规则。此 CLI 正是为了填补这一空白——适用于需要管理自身网络访问的自动化任务、脚本和 AI 智能体。
## 系统要求
- macOS 13+
- 已安装 [LuLu](https://objective-see.org/products/lulu.html)
- 写入操作需要 `sudo` 权限
## 安装
```
# Homebrew (推荐,预编译 binary)
brew install woop/tap/lulu-cli
# 从源码构建 (需要 Swift)
git clone https://github.com/woop/lulu-cli
cd lulu-cli
make install # builds and copies to ~/.local/bin/
```
## 快速开始
```
# 拦截了什么?
lulu-cli recent 5
```
```
2026-03-15 09:12 | api.example.com:443 | passive
key=com.apple.curl uuid=A1B2C3D4-...
2026-03-15 09:10 | cdn.example.com:443 | passive
key=org.nodejs.node uuid=E5F6G7H8-...
2 total block rules, showing 2 most recent
```
```
# 允许
sudo lulu-cli add --key '*' --path '*' --action allow --addr api.example.com --port 443
sudo lulu-cli reload
```
这就是核心循环:检查拦截、添加允许、重新加载。
## 命令
所有写入操作都需要 `sudo` 权限。更改后务必运行 `reload`。
### `list [filter]`
列出所有防火墙规则。可选择按关键字筛选(匹配 key 或二进制路径)。
```
lulu-cli list # all rules
lulu-cli list curl # rules for curl
lulu-cli list '*' # global/wildcard rules only
```
### `recent [N]`
显示最近 N 条拦截规则,按最新排序。默认值:20。
```
lulu-cli recent # last 20 blocks
lulu-cli recent 5 # last 5
```
### `add`
添加一条新的防火墙规则。
| 标志 | 描述 | 默认值 |
|------|-------------|---------|
| `--key KEY` | 签名身份或 `*`(表示全局) | 必需 |
| `--path PATH` | 二进制路径或 `*`(表示全局) | 必需 |
| `--action allow\|block` | 规则动作 | 必需 |
| `--addr ADDR` | 域名、IP 或正则表达式 | `*` |
| `--port PORT` | 端口号或 `*` | `*` |
| `--regex` | 将 addr 视为正则表达式 | 关闭 |
```
# 全局允许域名
sudo lulu-cli add --key '*' --path '*' --action allow --addr example.com --port 443
# 允许域名 + 所有子域名 (regex)
sudo lulu-cli add --key '*' --path '*' --action allow \
--addr '^(.+\.)?example\.com$' --port '*' --regex
# 仅允许特定 app
sudo lulu-cli add --key "/usr/bin/curl" --path /usr/bin/curl \
--action allow --addr example.com --port 443
```
### `delete`
通过 key 和可选的 UUID 删除规则。如果不指定 `--uuid`,则删除该 key 的所有规则。
```
sudo lulu-cli delete --key "com.apple.curl" --uuid "UUID-HERE"
sudo lulu-cli delete --key "com.apple.curl" # deletes ALL rules for this key
```
### `delete-match`
删除匹配特定条件的规则。
```
sudo lulu-cli delete-match --key "com.apple.curl" --action block --port 53
```
### `enable` / `disable`
切换规则的启用状态。
```
sudo lulu-cli enable --key '*' --uuid UUID-HERE
sudo lulu-cli disable --key '*' --uuid UUID-HERE
```
### `reload`
重启 LuLu 系统扩展以应用更改。macOS 会在约 8 秒内自动重启它。
```
sudo lulu-cli reload
```
### `help`
```
lulu-cli help
```
## 工作原理
LuLu 将规则存储在 `/Library/Objective-See/LuLu/rules.plist` 中,使用 NSKeyedArchiver 二进制格式。此 CLI 直接读取和写入该文件,并使用与 LuLu 的 Objective-C 代码库相同的序列化格式。
LuLu 系统扩展仅在启动时加载规则。更改后,`reload` 会终止扩展进程,macOS 会自动重启它(耗时约 8 秒)。重启期间会有短暂的过滤间隙。
## 配合 AI 智能体使用
此 CLI 专为需要管理自身网络访问的 AI 智能体(如 [OpenClaw](https://openclaw.ai) 或 [Claude Code](https://docs.anthropic.com/en/docs/claude-code))设计。一种常见的设置是将 LuLu 置于被动模式,并将新连接默认为拦截,这样智能体就不会意外泄露数据。智能体随后使用 lulu-cli 来允许其需要的特定域名。
### AI 智能体技能
本仓库在 [`skills/lulu-cli/`](skills/lulu-cli/SKILL.md) 中附带了一个 [AgentSkills](https://agentskills.io)-兼容的技能。
**OpenClaw:** 通过 [ClawHub](https://clawhub.com) 安装或复制技能目录。
**Claude Code:** `.claude-plugin/` 清单使其可从市场安装。
## 许可证
MIT
标签:Awesome, CLI, Homebrew, LuLu, macOS安全, Objective-See, Swift, WiFi技术, 出站连接, 开源, 文档结构分析, 系统管理, 网络信息收集, 网络安全, 网络调试, 脚本, 自动化, 规则管理, 进程控制, 防火墙, 隐私保护