OpenSnitch
OpenSnitch 是 Linux 上一款的交互式应用防火墙,灵感来自 macOS 上的 Little Snitch。它最特别的地方在于能监控并拦截应用程序发起的对外网络连接,
简介
核心组件
OpenSnitch 主要由两个核心部分组成,理解这两部分有助于后续的操作:
- 守护进程 (opensnitchd):这是运行在后台的核心服务,负责实际拦截网络连接并根据规则进行匹配。需要将其设置为系统服务,以实现开机自启。
- 用户界面 (opensnitch-ui):这是一个图形界面程序,用于显示网络请求弹窗、管理防火墙规则以及查看网络统计信息。它会在系统托盘区显示图标。
当某个尚未配置规则的进程尝试建立网络连接时,守护进程会拦截该连接,并向用户弹出一个对话框询问如何处理(允许或拒绝)。用户做出的选择会被保存为一条新规则,此后同一进程再次尝试连接时,规则将自动生效。
安装
Debian / Ubuntu 及衍生版
Ubuntu 23.04 及以上,直接使用apt安装。
sudo apt install opensnitch
Ubuntu 22.04 及更低版本:从 GitHub Releases 下载 .deb 软件包。访问 OpenSnitch 的 GitHub Releases 页面,下载最新版本。
安装完成后,启动并启用守护进程服务:
sudo systemctl enable --now opensnitch
其他发行版
- Fedora / RHEL 系:在 Releases 页面 下载
.rpm软件包,并使用sudo dnf install或sudo rpm -ivh命令进行安装。 - Arch Linux:可通过 AUR 安装,例如使用
yay -S opensnitch命令。 - NixOS:在
configuration.nix配置文件中添加services.opensnitch.enable = true;并重建系统。
基本使用方法
首次启动与初始设置
- 在应用菜单中找到并启动 “OpenSnitch UI”。程序窗口可能不会直接打开,但会在系统托盘区域出现一个图标。
- 右键点击系统托盘图标,选择 “Open main window”(打开主窗口)。
- 官方建议的策略是:在新系统上,先将默认动作设为“允许”,让 OpenSnitch 运行几天以学习正常的网络行为并记录规则。之后再切换至更严格的模式,手动审查并调整规则。
处理弹窗与创建规则
这是 OpenSnitch 最核心的交互方式。当某个尚未配置规则的应用发起网络连接时,会弹出如下的配置对话框:
- 动作 (Action):选择 Allow(允许)或 Deny(拒绝)。
- 持续时间 (Duration):
** Until restart:仅对本次会话有效,重启后失效。 ** For a session:在用户登出之前有效。 ** Always:创建永久规则,这是最常用的选项。
- 范围 (Scope):可以选择此规则仅应用于当前应用程序、该应用程序及其所有子进程,或是全局生效。
使用主窗口管理规则
主窗口是管理防火墙规则的控制中心。
- Events(事件)标签页:实时显示所有被拦截或允许的连接历史记录,可以清晰地查看哪个应用连接到了哪个 IP 地址和端口。
- Applications(应用)标签页:列出所有已配置规则的应用程序。在此可以双击某条规则进行修改,或点击左上角的 “+” 按钮手动添加新规则。
- Hosts(主机)标签页:按域名或 IP 地址聚合统计连接情况。
手动创建规则示例
假设需要永久阻止对 www.example.org 的所有访问,可以按以下步骤操作:
- 在主窗口点击 “+” 按钮。
- 为规则命名,例如
Block Example。 - 将 Action 设置为
Deny,Duration 设置为Always。 - 切换到 Network 标签页,在 “To this host” 字段中输入
www.example.org。 - 点击 Save 保存规则。
高级配置与技巧
配置文件位置
- 守护进程规则存储路径:
/etc/opensnitchd/rules/ - 守护进程配置文件:
/etc/opensnitchd/default-config.json - 系统防火墙规则(用于绕过 OpenSnitch):
/etc/opensnitchd/system-fw.json
可以通过编辑上述 .json 文件来批量导入或备份规则。例如,一条允许 tor 进程的规则示例如下:
{
"tor": {
"name": "tor",
"enabled": true,
"action": "allow",
"duration": "always",
"operator": {
"type": "simple",
"sensitive": false,
"operand": "process.path",
"data": "/nix/store/.../bin/tor"
}
}
}
进程监控方式
OpenSnitch 支持三种监控进程发起连接的方式,可以在配置文件中进行调整:
ebpf(推荐):性能最佳,功能最强,能够拦截由内核发起的连接。需要 Linux 内核版本 5.5 或更高。audit:利用 Linux 审计子系统,性能较好。proc:通过读取/proc文件系统获取信息,作为备选方案。
避免干扰(VPN 或信任服务)
如果希望某些流量完全不被 OpenSnitch 处理(例如 VPN 的守护进程),可以将其加入“系统防火墙规则”中。编辑 /etc/opensnitchd/system-fw.json 文件,添加相应的 iptables 或 nftables 规则。这样做可以提升性能并避免潜在的配置冲突。
故障排除
没有弹窗,应用直接被阻止?
- 这可能是因为之前创建了静默规则但已忘记。请检查组件中的规则列表。
- 也可以尝试在图形界面的 Preferences -> Nodes 选项中,启用 “Debug invalid connections” 功能。这能让未匹配到规则的连接也弹出提示,便于调试。
如何调试启动问题?
- 先停止后台服务:
sudo systemctl stop opensnitch。 - 在前台手动启动守护进程并开启调试输出,以便查看具体错误信息:
sudo /usr/bin/opensnitchd -debug。 - 如果图形界面崩溃,可以在终端中直接输入
opensnitch-ui命令,并观察输出的错误信息。
图形界面显示异常(如出现黑块)?
如果在使用 Wayland 显示服务器或某些窗口管理器时遇到界面渲染问题,可以尝试在启动图形界面之前设置以下环境变量:
export QT_QPA_PLATFORM=xcb
opensnitch-ui