直接向 Claude 等 AI 查询您 Mac / Linux 的安全状态
RoamSwitch 内置了只读的 MCP(Model Context Protocol)服务器。只需连接到 MCP 客户端,用自然语言询问“我的 Mac / Linux 现在安全吗?”“有哪些端口对外暴露?”,即可获得基于 RoamSwitch 自身精确诊断结果的回答,而非 AI 的臆测。它无法切换锁定级别、隔离端口或执行任何其他操作,与 AI 客户端之间的通信完全通过设备内的 stdio 完成(Zero Telemetry 方针的延伸)。
🔒 为什么是安全的
- 只读:仅提供安全诊断、端口监控、防护设置查询功能。未实现切换锁定、隔离端口、弹出设备等任何操作型工具。
- 完全本地:与 AI 客户端(Claude Desktop/Code 等)的通信仅通过标准输入输出(stdio)进行,只在客户端与 Mac / Linux 上的 RoamSwitch 进程之间完成。绝不发送任何遥测数据。只有默认关闭、需主动启用的功能才会使用网络(仅检查本机自身 127.0.0.1 的漏洞验证,以及向 npm 注册表查询的 npm 签名验证)。
- 防止误操作:由于不含任何操作型工具,因此不存在因提示注入等原因而误改防火墙或网络设置的风险。
两步完成设置
1二进制文件位置
已内置于 RoamSwitch.app 中,无需单独下载或安装。
/Applications/RoamSwitch.app/Contents/MacOS/RoamSwitchMCPServer
2a适用于 Claude Desktop
在 ~/Library/Application Support/Claude/claude_desktop_config.json 的 "mcpServers" 中添加以下内容,然后重新启动 Claude Desktop。
{
"mcpServers": {
"roamswitch": {
"command": "/Applications/RoamSwitch.app/Contents/MacOS/RoamSwitchMCPServer"
}
}
}
2b适用于 Claude Code
只需在终端中执行一次以下命令即可。
claude mcp add roamswitch /Applications/RoamSwitch.app/Contents/MacOS/RoamSwitchMCPServer
2c适用于 OpenAI Codex CLI
请在 ~/.codex/config.toml 中添加以下内容,或在终端中执行以下命令。
[mcp_servers.roamswitch] command = "/Applications/RoamSwitch.app/Contents/MacOS/RoamSwitchMCPServer"
codex mcp add roamswitch -- /Applications/RoamSwitch.app/Contents/MacOS/RoamSwitchMCPServer
2d适用于 OpenCode
在项目根目录下的 opencode.json(或全局配置 ~/.config/opencode/opencode.json)中添加以下内容:
{
"mcp": {
"roamswitch": {
"type": "local",
"command": ["/Applications/RoamSwitch.app/Contents/MacOS/RoamSwitchMCPServer"]
}
}
}
💡 本地大模型支持: 搭配Ollama或LM Studio等本地模型时,即使RoamSwitch因检测到威胁而实施紧急断网,也能在完全离线状态下即时查询安全建议与事件分析。
2e适用于 Antigravity
请在 ~/.gemini/config/mcp_config.json(或工作区根目录的 .agents/mcp_config.json)中添加以下内容。
{
"mcpServers": {
"roamswitch": {
"command": "/Applications/RoamSwitch.app/Contents/MacOS/RoamSwitchMCPServer"
}
}
}
* 注意:若在 Antigravity CLI (agy) 中执行工具时遇到 Hook Failure 或遥测错误,请在 ~/.gemini/config/plugins/.../hooks.json 中将 "enabled": false 以禁用该 Hook。
1二进制文件位置
已内置于 apt / rpm / AUR 软件包中,安装时会自动部署为 /usr/bin/roamswitch-mcp,无需单独下载或编译(客户端版与 Server Edition 通用)。
/usr/bin/roamswitch-mcp
Server Edition(无头运行模式)也可直接使用相同的二进制文件和相同的配置方法。详情请参阅《Linux Server 运维手册》中的「AI 代理 / MCP 集成运维」章节。
2a适用于 Claude Desktop
Claude Desktop 官方并未提供 Linux 版本。如果您使用的是非官方构建版本(例如 claude-desktop-debian 等),请在 ~/.config/Claude/claude_desktop_config.json 的 "mcpServers" 中添加以下内容后重启。
{
"mcpServers": {
"roamswitch": {
"command": "/usr/bin/roamswitch-mcp"
}
}
}
2b适用于 Claude Code
只需在终端中执行一次以下命令即可。
claude mcp add roamswitch /usr/bin/roamswitch-mcp
2c适用于 OpenAI Codex CLI
请在 ~/.codex/config.toml 中添加以下内容,或在终端中执行以下命令。
[mcp_servers.roamswitch] command = "/usr/bin/roamswitch-mcp"
codex mcp add roamswitch -- /usr/bin/roamswitch-mcp
2d适用于 OpenCode
在项目根目录下的 opencode.json(或全局配置 ~/.config/opencode/opencode.json)中添加以下内容:
{
"mcp": {
"roamswitch": {
"type": "local",
"command": ["/usr/bin/roamswitch-mcp"]
}
}
}
💡 本地大模型支持: 搭配Ollama或LM Studio等本地模型时,即使RoamSwitch因检测到威胁而实施紧急断网,也能在完全离线状态下即时查询安全建议与事件分析。
2e适用于 Antigravity
请在 ~/.gemini/config/mcp_config.json(或工作区根目录的 .agents/mcp_config.json)中添加以下内容。
{
"mcpServers": {
"roamswitch": {
"command": "/usr/bin/roamswitch-mcp"
}
}
}
* 注意:若在 Antigravity CLI (agy) 中执行工具时遇到 Hook Failure 或遥测错误,请在 ~/.gemini/config/plugins/.../hooks.json 中将 "enabled": false 以禁用该 Hook。
只读工具(目前 Mac 33 种 / Linux 38 种,持续增加中)
get_security_report
在 Mac 上进行 18 项综合诊断(FileVault、SIP、Gatekeeper、防火墙、Wi-Fi 加密强度、ARP 欺骗、外部暴露端口等),在 Linux 上进行客户端 27 项 / 服务器 34 项诊断(内核加固、Docker 套接字与特权容器保护、容器运行时隔离、已知漏洞等),并返回评分与改进建议。
get_exposed_ports
列出当前所有正在监听的端口,对外部暴露的端口返回包含已知高危服务(Redis/MongoDB 等)判定的详细审计结果。在 Mac 上,会对每个暴露端口向 127.0.0.1 发送 1 次 HTTP GET 以检查标头。
get_guard_status
返回未知端口拦截、ARP欺骗自动遏制、USB防护、蓝牙防护、网页/邮件下载保护、DNS威胁防护的开启状态及当前保护级别。
audit_url_safety
接收邮件链接或网页URL作为参数,完全在本地(Zero Telemetry)即时诊断钓鱼欺诈、Unicode同形异义伪装、仿冒子域名和高风险顶级域。
get_app_help
在本地即时检索涵盖RoamSwitch所有功能规范、底层机制、警报通知及故障排除的官方知识库,返回准确的技术说明与处置建议。
audit_security_logs
汇总近期安全日志(Mac:Sudo 认证失败、SSH 暴力破解尝试、Gatekeeper 拦截、XProtect 检测等 / Linux:Sudo 认证失败、SSH 暴力破解、防火墙拦截、AppArmor 拒绝、ClamAV 检测等),自动屏蔽 API 密钥、令牌等敏感信息,并返回基于日志模板化的新模式检测与频率异常(统计学突增)检测结果。在 Linux 上,如果无法读取 journal(例如超时),统计中的 0 条并不表示什么都没发生,此时 journalReadComplete 为 false,并在 journalError 中给出原因。
get_notification_history
返回 RoamSwitch 发送的通知(安全日志审计异常、ClickFix 检测等)历史记录,最近1周、最新在前。
roamswitch://docs/* (MCP Resources)
AI客户端可直接读取至上下文的官方文档资源(功能规范、警报处置指南、设置指南、故障排除)。
其他只读工具
| 工具 | 支持 | 概要 |
|---|---|---|
audit_secrets |
Mac / Linux | 从文本、文件或目录中检测泄露的 API Key 与私钥(检出值在输出时已脱敏)。 |
run_active_vuln_scan |
Mac / Linux | 仅限 127.0.0.1 的非破坏性实证型漏洞验证。不会连接其他主机,但属于会发送网络请求的工具,因此默认关闭,需在设置中主动启用。 |
get_vulnerability_scan_history |
Mac / Linux | 返回实证型漏洞诊断(run_active_vuln_scan)所记录的各项目最新结果及经过天数(pass_age)。 |
verify_security_findings |
Mac / Linux | 按当前状态重新评估 get_security_report 中的各项目(checkId),并为每个项目返回 stillPresent(仍然存在)、resolved(已解决,或按设计不适用)、inconclusive(无法判定)三者之一,以及与语言无关的原因代码。用于在修复之后确认问题是否真的消除;因权限不足、特权辅助程序未连接、无法访问 Docker 等原因而未能测量的项目,不会被报告为安全,而是返回 inconclusive。省略 checkIds 时检查所有项目(最多可指定 Mac 50 项、Linux 64 项;Linux 还可指定 isServer)。Mac 上的 host_firewall、network_stealth_mode、gateway_arp_lock、malware_scanning、dns_threat_guard、usb_zero_trust 由 RoamSwitch 应用内设置的值决定是否合格,因此这些项目反映的是应用内设置,而不是对操作系统实际状态的重新测量。只读,不会连接外部主机,也不会进行修复或更改任何设置。在 Linux 上也不会向局域网发送任何内容,只会从本地缓存读取网关。在 Mac 上,为查询网关的 MAC 地址,可能会向局域网内的网关发送 ICMP ping,通常 1 次(查不到 MAC 时最多数次)。 |
audit_mcp_configs |
Mac / Linux | 读取 AI 客户端的 MCP 配置文件(Claude Desktop、Claude Code、Cursor、Windsurf、VS Code、Cline、Gemini CLI,以及已登记项目文件夹中的 .mcp.json 等),指出有风险的设置。会检测无需逐次确认就自动批准的工具(auto_approve)、非 loopback 主机上的明文 http:// 服务器(不仅是 url 字段,像 --server http://… 这样通过启动参数传入的连接目标也包括在内。remote_plain_http)、以 shell 或解释器单行命令启动(shell_wrapper)、获取未固定版本的软件包或镜像的 npx / uvx / docker run 等启动方式(unpinned_package_launcher)、带有 --privileged 或挂载了 Docker 套接字、根文件系统的 docker run(container_host_access)、让进程在启动时加载额外代码的环境变量(如 LD_PRELOAD、NODE_OPTIONS 中的 --require;名称不区分大小写,不返回值;code_loading_env)、指向无认证攻击工具后端 HexStrike AI 的配置(hexstrike)、组或其他用户可写的配置文件(world_writable_config)Claude Code의 enableAllProjectMcpServers(auto_trust_project_servers), 웹 페이지·메일·채팅·Issue처럼 다른 사람이 쓴 글을 읽는 서버와 명령 실행·파일 변경이 가능한 서버가 한 설정 파일에 함께 있는 구성(간접 프롬프트 인젝션의 전제가 되는 조합. 잘 알려진 패키지 이름으로 판정하며 서버 도구의 내용은 보지 않음; injection_exposure)을 검출합니다.无参数、只读,不会向网络发送任何内容。不会返回环境变量或标头的值、参数和任何机密,只返回服务器名称、命令名、URL 主机,以及(为注册表名称时的)软件包或镜像名称。无法解析的文件会列在 unreadableFiles 中,表示未被审计。 |
audit_agent_setup |
Mac / Linux | 读取提供给 AI 智能体的指示文件和技能(~/.claude 下的 CLAUDE.md、commands、agents、skills,以及 ~/.codex、~/.cursor/rules、~/.gemini、~/.agents、~/.openclaw,和已登记项目文件夹中的 CLAUDE.md、AGENTS.md、.cursorrules 等)和 OpenClaw 的 openclaw.json,指出危险的内容和设置。对于指示和技能文件,会检测隐藏在不可见 Unicode 标签字符中的句子(hidden_tag_characters)、零宽字符和改变文字方向的控制字符(invisible_characters)、要求忽略先前指示或向用户隐瞒的措辞(override_instruction)、curl … | sh 这类下载后直接执行的写法(remote_script_exec)、解码后执行编码字符串(encoded_payload_exec)、对密钥和凭据存放位置的引用(credential_access)及其附近的外发或数据接收服务地址(credential_exfil_shape、exfil_endpoint)、设置重启后仍保留的机制(persistence_instruction)、技能中的已编译代码(skill_precompiled_code)和他人可写的文件(agent_file_writable)。HTML 注释中的内容渲染后会被隐藏,因此按更高风险处理。对于 OpenClaw,会检测认证被关闭(openclaw_auth_disabled)、可从网络访问的监听方式(openclaw_wide_bind)、不足 24 个字符的令牌(openclaw_weak_token)、允许所有来源(openclaw_origin_wildcard)、已开启的 dangerously… 开关(openclaw_dangerous_flag)、信任所有对象的代理设置(openclaw_broad_trusted_proxy、openclaw_proxy_trust_loosened)、对任何人开放的私信或群组策略(openclaw_open_dm)、mDNS 的 full(openclaw_mdns_full)、被隐藏的自检结果(openclaw_audit_suppressed)以及宽松的权限(openclaw_loose_permissions)。所有规则都是确定性的,匹配只表示“需要人来读一读”,并不断定为恶意。无参数、只读,不会向网络发送任何内容。不会返回文件正文或机密(令牌只报告长度),只返回规则名、行号、URL 主机和配置键路径。无法读取的文件会列在 unreadableFiles 中,表示未被审计。 |
run_package_cve_scan |
Mac / Linux | 将已安装的软件包(Mac:Homebrew / Linux:dpkg・dnf・zypper・pacman)与本地 CVE 映射进行比对。完全不产生任何网络通信。在 Linux 上,如果无法获取软件包列表或超时,不会报告“无匹配”,而是 complete 为 false,并在 incompleteReason 中给出原因(未完成的结果不等于没有问题)。 在 Ubuntu(20.04、22.04、24.04、26.04)上,使用 Ubuntu 专用数据,按源软件包名称和源版本比对,只检查 Ubuntu 已发布修复、CVSS 7.0 及以上的 CVE,因此“无匹配”不代表没有已知 CVE。结果中增加 ecosystem 和 release,每条检出带有 binary(已安装的二进制软件包名称);只有 Ubuntu Pro 才能修复的漏洞带有 proOnly。Ubuntu 衍生版(Linux Mint、Pop!_OS 等)和不支持的版本会返回 complete 为 false,并在 incompleteReason 中给出原因,不会改用 Debian 的数据。 |
run_package_cve_scan_languages |
Mac / Linux | 将 npm / PyPI / crates.io / RubyGems / Packagist / Go / Maven 等依赖锁定文件与同一本地 CVE 映射进行比对。完全不产生任何网络通信。 |
run_package_lifecycle_script_scan |
Mac / Linux | 列出项目 node_modules 中 package.json 的生命周期脚本(preinstall / install / postinstall / prepare)。仅读取文件,不执行任何内容,也不进行网络通信。每一项会附带是否符合危险模式(如 curl|sh)的参考标记,但这只是清单,并不是威胁判定。 |
run_typosquat_scan |
Mac / Linux | 检查项目 package.json 中的依赖包名称是否与知名 npm 包只相差 1~2 个字符(疑似 typosquatting,即仿冒包名)。仅读取本地文件,不会连接任何包注册表。这只是供参考的简易判断,可能出现误报。 |
run_npm_audit_signatures |
Mac / Linux | 这是会向 npm 注册表(registry.npmjs.org)发起查询的工具。它运行 npm audit signatures,验证已安装软件包的签名与来源。默认关闭,在设置中启用之前会拒绝执行(Mac 版仅限 Pro)。 |
get_quarantine_status |
Mac / Linux | 返回恶意软件隔离 Vault 的内容(原始路径、检出的威胁名称、隔离时间与大小)。 |
get_canary_status |
Mac / Linux | 返回勒索软件诱饵文件(Canary)的部署状态,以及最近 50 条检测事件。 |
get_ransomware_entropy_guard_status |
Mac | 返回通用熵值型勒索软件检测的启用状态,以及最近的熵值突发检测事件。 |
get_honeytoken_status |
Mac | 返回凭据蜜罐令牌的启用状态,以及最近的访问检测事件。 |
get_browser_credential_watch_status |
Mac | 返回浏览器凭据访问监控的启用状态,以及最近的访问检测事件。 |
get_forensic_evidence_bundles |
Mac | 返回紧急 Air-Gap 触发时保存的取证证据包(进程列表、网络连接、变更文件等)清单。 |
get_ransomware_recovery_snapshots |
Mac | 返回用于勒索软件恢复的 APFS 快照(事前、检测时、手动)列表、推荐的恢复来源、保留模式状态以及快照间隔设置。检测时的快照可能已包含被加密的文件。仅限 Pro。 |
search_exec_events |
Mac / Linux | 搜索进程执行记录。Mac 上搜索基于 eslogger 的记录,Linux 上搜索执行记录器的日志(带可发现篡改的哈希链),可按路径、参数等筛选,并会返回记录器状态以及日志是否可读。Mac 版仅限 Pro。Linux 的日志仅 root 可读,因此需要以 root 权限运行。 |
get_process_tree |
Mac / Linux | 根据执行记录重建指定进程的祖先与后代进程并返回。只能得知记录器实际看到的进程。Mac 版仅限 Pro。 |
get_port_anomaly_incidents |
Mac / Linux | 返回端口异常防护的基线状态、当前自动阻断的端口,以及最近 50 条事件。响应中明确注明:当前自动阻断的端口是不带时间戳的当前状态快照,与带时间戳的事件历史是两回事。 |
get_ssh_guard_incidents |
Mac / Linux | 返回 SSH 暴力破解防护的状态与记录。包括:是否执行封禁还是只做检测(例如另一个防御工具已在保护 sshd)、当前被封禁的来源地址与剩余时间,以及最近的记录(封禁、仅检测、失败累积的来源地址登录成功,三者之一,最多 200 条)。尝试过的用户名本身在 Linux 上不保存(只记数量),在 Mac 上经过无害化处理后最多返回 5 个。Mac 还会返回最近的 SSH 登录(来源地址、用户、认证方式、密钥指纹)。只读,没有解除封禁的 MCP 工具。Linux 上封禁列表只有 root 能读取,因此以普通用户运行时只返回数量。Linux 可用于 Server Edition,以及 sshd 正在运行的 Client Edition;Mac 仅限 Pro 版。 |
get_port_scan_incidents |
Linux | 返回针对本设备的端口扫描(侦察)检测日志,包括在短时间内触及大量端口的来源 IP、触及的端口数量及部分端口,以及是否已被自动封锁(及封锁时长)。 |
get_runtime_threat_status |
Mac | 返回是否因 XProtect 检出恶意软件而进入 Air-Gap 隔离,以及触发该隔离的事件。排查 Air-Gap 原因时应最先查看此工具。 |
verify_fim |
Linux | 对约 150 处关键系统文件重新计算哈希,并与基线比对以验证是否被篡改。以 root 运行时,结果中还会包含新增字段 recentIntrusionContext。对每次最近的变更,会给出做出修改的进程(账户、可执行文件、命令)、该进程所属的 SSH 登录(来源、登录时间、认证方式),或无法查明的原因。 |
get_file_scan_guard_status |
Linux (Server) | 返回文件扫描防护(ClamAV)的配置及其所用隔离 Vault 的状态(这是面向 Server Edition 的工具,不是客户端版恶意软件防护的设置)。 |
get_ebpf_incidents |
Linux (Server) | 返回 eBPF 运行时防护的当前隔离状态,以及触发隔离的事件历史。在 Server Edition 上,每条记录还会附带从检测到处置的时间(毫秒,detect_to_receive_ms、receive_to_action_ms、detect_to_action_ms),结果中还包含 Falco 心跳检测的状态(heartbeat)。 |
get_resource_guard_incidents |
Linux (Server) | 返回资源耗尽/进程异常检测防护的历史(内存泄漏、崩溃循环),并附置信等级(此防护属于 Server Edition。客户端版中不运行,因此结果始终为空)。 |
get_incident_timeline |
Mac / Linux | 将各防护模块的检测结果合并为单一时间线返回(含进程谱系与 MITRE ATT&CK 标签,实验性)。 |
get_network_history |
Mac | 记录每个已记住的 Wi-Fi 网络曾应答过的网关设备数量及最后一次出现的时间,并检测名称高度相似的其他网络(Evil Twin 疑似克隆热点)。也可用于确认是否曾经连接过某个网络。 |
get_vpn_status |
Linux (Client) | 返回在不受信任网络下 VPN(WireGuard / Tailscale)的启用设置、隧道的实际连接状态,以及防泄漏切换开关(kill switch)的启用状态。 |
get_link_guard_status |
Linux (Client) | 返回 Link Guard(通过 DNS / TLS SNI / HTTP Host 检测拦截钓鱼与恶意网站)的启用设置、工作模式(关闭 / 警告 / 拦截)、白名单,以及最近 7 天内的拦截 / 警告事件。 |
get_air_gap_status |
Linux (Client) | 返回紧急 Air-Gap 隔离(切断全部通信)当前是否处于激活状态、触发原因、距自动解除的剩余时间,以及所有被 SIGSTOP 冻结的进程。 |
get_sharing_services_status |
Linux (Client) | 返回在连接不受信任网络时自动停止 SSH、Samba、屏幕共享(GNOME 远程桌面 / VNC / xrdp)功能的设置,以及实际被停止与恢复的服务状态。 |
get_bluetooth_guard_status |
Linux (Client) | 返回在不受信任网络下强制关闭可被发现状态的蓝牙防护设置,以及控制器的实际状态(电源、可发现性、已连接设备)。 |
get_usb_guard_status |
Linux (Client) | 返回 USB 存储防护与 BadUSB 键盘防护(仅通过 evdev 抑制输入,绝不会在内核层面禁用设备)的设置,以及已连接设备与待批准设备列表。 |
get_fleet_status |
Linux | 返回 Fleet(面向组织的集中管理,为 RoamSwitch Business 准备中的功能)在本设备一侧的状态,包括是否已注册、当前应用的策略版本、签到状态等。不会返回注册码、令牌、密钥或许可证信息。Fleet 没有远程命令通道,管理员无法隔离或操作本设备。 |
get_sensor_audit_results |
Mac / Linux | 返回向已配对的 RoamSwitch Sensor(在同一局域网内、运行于您自己硬件上的独立产品)发起的外部主动审计的结果(待处理、已完成、失败)。它补充了从设备内部看不到的「从外部能否访问到」这一视角。无法通过此工具发起审计或进行配对。 |
上述工具中,仅读取本地状态的工具(隔离 Vault、诱饵文件、端口异常、运行时威胁、通知历史、事件时间线、网络历史、VPN / Link Guard / Air-Gap / 共享服务 / 蓝牙 / USB 防护状态等)即使在 RoamSwitch 因检测到威胁而紧急切断网络时也能继续工作。搭配本地 LLM,即可在断网期间当场排查原因。
verify_security_findings 的原因代码。两个平台共通的有 failing(仍然存在)、passing(没有问题)、not_applicable(在此环境中按设计不适用)、not_verifiable(无法用这种方式确认)、unknown_check_id(指定的 checkId 不存在)。仅 Mac 会返回 helper_unavailable(特权辅助程序未连接)、gateway_unknown(无法确定网关)、no_baseline(无法与已登记的受信任网络的网关 MAC 比对;若未登记受信任网络,通过 MCP 的 ARP 监控始终返回此值)、not_measured(端口列表尚未测量过;仅出现在应用内报告中,通过 MCP 通常不会出现)、location_unavailable(读取 Wi-Fi 需要位置信息权限)、tool_failed(系统命令没有返回结果,或输出无法断定启用与否,例如 SIP 显示 enabled (Custom Configuration))。仅 Linux 会返回 not_root(不是 root,无法读取)、daemon_unknown(无法获取守护进程状态)、tool_missing(缺少所需命令)、tool_timeout(外部命令未在时限内完成而被终止)、docker_unreachable(无法连接 Docker)、unconfirmed(该项目自身将结果标记为未确认)。返回 inconclusive 时,既不能说修复已生效,也不能说未生效,请补齐缺少的权限或连接后再次调用。
与外部主机通信的只有需主动启用(Mac 上仅限 Pro)的 run_npm_audit_signatures(npm 注册表)。run_active_vuln_scan(默认关闭)只向 127.0.0.1 发送探测,Mac 上的 get_exposed_ports 只会对每个暴露端口向 127.0.0.1 发送 1 次 HTTP GET 以检查标头。查询网关的 MAC 地址时,Mac 上的诊断类工具可能会向局域网内的网关发送 ICMP ping,通常 1 次(查不到 MAC 时最多数次)。Linux 上的 get_security_report 和 verify_security_findings 不会向局域网发送任何内容,只会从本地缓存读取网关(get_guard_status 等需要重新获取网关 MAC 的其他工具可能会发送 1 次 ping)。
日常办公与开发流程中的具体提问方式
涵盖本地开发端口审计、公共 Wi-Fi 安全检查、钓鱼 URL 诊断等真实场景的提示词与 AI 回复示例。可一键复制提示词直接发送给 AI。
本地服务器与数据库端口暴露审计
启动 Next.js、Vite、Python、Docker、Redis 等服务时,让 AI 审计是否存在意外绑定至 0.0.0.0 (全公开) 而暴露给局域网的危险端口。
• 🚨 端口 3000 (node / Next.js): 正在
0.0.0.0:3000 上向外暴露• 🚨 端口 6379 (redis-server): 正在
0.0.0.0:6379 上向外暴露(未设置密码认证,同一 Wi-Fi 内其他设备可直接访问)• ✅ 端口 5432 (postgres): 绑定至
127.0.0.1:5432(仅限 localhost,安全)💡 修复建议: 在 Redis 配置中修改为
bind 127.0.0.1,Next.js 建议使用 npm run dev -- -H 127.0.0.1 启动。外出连接公共 Wi-Fi 时的安全性检查
在咖啡厅或酒店连接公共 Wi-Fi 后,让 AI 进行全面的安全体检,确认防火墙、隐身模式和 ARP 防护是否已正常启用。
• 🛡️ 综合得分: 88 / 100 (Grade: A-)
• 📡 网络判定: 不信任网络(外出模式 / 数据包过滤已生效)
• ✅ 防火墙 / 隐身模式: 已开启(阻断外部探测数据包)
• ✅ ARP 欺骗自动隔离: 已开启(检测到流量劫持时自动隔离)
• ⚠️ 改进建议: FileVault 磁盘加密未启用,建议在“系统设置”中开启。
可疑邮件与聊天链接的安全性检测
收到冒充合作方的可疑邮件或 Slack/Discord 私信中的 URL 时,完全在设备端进行本地解析(Zero Telemetry),不将链接泄露给外部服务器。
• 🚨 风险判定: Dangerous (危险 / 安全得分: 8/100)
• ❌ 伪装知名品牌子域名: 伪装为
apple.com,实际主域名为 login-auth-verify.xyz。• ❌ 高危 TLD:
.xyz 是钓鱼欺诈活动中高频使用的一次性域名后缀。• 🔒 Zero Telemetry: 本地计算,未向外部服务器发送任何查询数据。
• 🛑 处置建议: 切勿点击该链接,请立即删除邮件并上报。
编码过程中的自主安全防护 (Safeguard)
让 Claude Code 或 Antigravity 部署后端或运行测试套件时,自主调用 MCP 工具作为防护栏,确保未意外开放多余端口。
1. 已在 8080 端口启动 Fastify 后端服务。
2. 🔍 RoamSwitch MCP 验证: 执行
get_exposed_ports 确认服务严格绑定在 127.0.0.1:8080 (仅 localhost),无局域网暴露。3. 环境安全已确认,正在继续执行集成测试。
工作开始前检查与公司提交报告生成
为满足企业安全合规要求、向 IT 部门汇报或个人日常自检,一键生成结构清晰的 Markdown 格式 Mac 安全体检报告。
## 🛡️ Mac Security Health Report (2026-08-28)
- 综合得分: 96 / 100 (Grade: A+)
- 核心防护状态:
• FileVault: ✅ 已开启 (APFS Encrypted)
• SIP (系统完整性保护): ✅ 已开启
• 防火墙 / 隐身模式: ✅ 已开启
• ARP 欺骗自动隔离: ✅ 已开启
• DNS 威胁防护: ✅ 已开启 (Quad9 Secure DNS)
- 待办建议: 无(系统处于极佳安全状态)USB、蓝牙与下载防护等各项 Guard 状态确认
确认未知 USB 存储接入防护、蓝牙设备监视、Web/邮件下载文件防护及安全 DNS 切换等各项实时防线是否正常运行。
• 🛡️ 当前保护级别: Balanced (标准防护模式)
• ✅ USB 存储防护: 运行中 (插入未登记 USB 时告警/阻断)
• ✅ 蓝牙防护: 运行中 (监视未配对设备的靠近)
• ✅ Web/邮件下载保护: 运行中 (自动使用 ClamAV 扫描带隔离属性的文件)
• ✅ DNS 威胁防护: 运行中 (自动拦截恶意 C2 与钓鱼域名)
咨询软件用法、功能规范与通知处理建议
针对出现的通知警告或具体功能细节(包过滤、FSEvents、ClamAV、USB防护等),让AI基于内置官方知识库提供权威解答与处置步骤。
• 🚪 拦截原因: 开发服务绑定了
0.0.0.0(全网公开),RoamSwitch已自动阻断外部局域网访问。• ⚙️ 安全处置:
1. 推荐(本地绑定): 使用
npm run dev -- -H 127.0.0.1 启动,仅限本机访问。2. 需局域网共享: 在RoamSwitch『端口审计』中放行3000端口。
• 🔍 事件分析: 局域网内存在恶意设备伪造ARP数据包冒充路由器网关,企图窃听您的网络流量(中间人攻击 / MITM)。
• 🛡️ RoamSwitch自动防护: 触发ARP自动隔离,实施物理隔离(AirGap)以阻断数据嗅探。
• 🛑 后续建议: 切勿重新连接该公共Wi-Fi,请继续在手机热点下安全作业,建议在『日志审计』中查看详情。
• 🔌 推出原因: 为防止未授权数据外泄及恶意BadUSB固件攻击,系统已自动将其卸载。
• ⚙️ 安全登记步骤: 1. 从菜单栏RoamSwitch图标打开『设置』 → 2. 选择『USB存储保护』标签页 → 3. 点击『从已连接设备添加』并选中该U盘 → 4. 将权限设为『只读(推荐)』并保存,下次连接即可安全挂载。
• ⚠️ 原因分析: 与负责数据包过滤(PF)控制的特权守护进程
RoamSwitchHelper 之间的XPC通信暂时中断。• 🛠️ 恢复步骤:
1. 打开终端并运行以下命令重启辅助程序:
sudo killall RoamSwitchHelper2. 重启RoamSwitch应用程序。
3. 在macOS『系统设置』>『通用』>『登录项与扩展』中确认已启用
RoamSwitchHelper。Air-Gap 触发后,使用本地 LLM + MCP 进行离线诊断
当检测到勒索软件等触发 Air-Gap(紧急网络隔离)时,Claude Desktop 等云端 AI 的通信也会同时被切断。但 RoamSwitch 的 MCP 服务器仅通过本地进程通信运行,只要搭配 Ollama 等本地 LLM,即便完全没有外部网络也能继续诊断。日志异常检测、篡改检测、已知 CVE 比对均完全在本地完成,因此恰恰是在网络无法使用的这一刻才真正发挥作用。
• 🐛 诱饵文件触发: 14:32:07 检测到
/var/www/decoy_invoice.pdf 被加密,进程 suspicious_enc(PID 8823)已立即冻结并隔离• 🔌 端口监控(Port Anomaly Guard): 近期事件记录中未发现新的自动阻断 — 入侵途径似乎仅为诱饵文件触发的这一起,未发现其他后门端口被开启
• 📜 日志关联(异常检测): 触发前12分钟起
sshd 认证失败激增(检测到频率激增,Z-score 5.2)——可能的入侵途径• 🔒 篡改检测(FIM): 约150处关键路径均未发现篡改——未确认入侵扩散至系统层
• 📦 已知漏洞比对: 已与本地 CVE 映射比对,相关软件包未发现严重已知漏洞
💡 建议操作: 入侵很可能仅限于 Web 根目录范围内。在从备份恢复之前,建议逐一检查该目录下的其他文件。
关于 MCP 集成
Q. 真的完全不与外部通信吗?
A. 是的。MCP 服务器是由 AI 客户端通过标准输入输出(stdio)直接启动的本地进程,不会发送任何遥测数据。诊断结果也是在这台 Mac / Linux 上即时计算得出的。与外部主机通信的只有需主动启用(Mac 上仅限 Pro)的 run_npm_audit_signatures(npm 注册表)。run_active_vuln_scan(默认关闭)只向 127.0.0.1 发送探测,Mac 上的 get_exposed_ports 只会对每个暴露端口向 127.0.0.1 发送 1 次 HTTP GET 以检查标头。查询网关的 MAC 地址时,Mac 上的诊断类工具可能会向局域网内的网关发送 ICMP ping,通常 1 次(查不到 MAC 时最多数次)。Linux 上的 get_security_report 和 verify_security_findings 不会向局域网发送任何内容,只会从本地缓存读取网关(get_guard_status 等需要重新获取网关 MAC 的其他工具可能会发送 1 次 ping)。
Q. 非 Pro 版也能使用吗?
A. Linux 版免费,可使用全部工具。Mac 版的免费版也能使用大部分工具,但 get_ransomware_recovery_snapshots、search_exec_events、get_process_tree、run_npm_audit_signatures 这 4 个仅限 Pro,未启用 Pro 时会返回错误。此外,各项自动防护的实际生效情况还取决于 Pro 版的授权状态,因此工具端只能确认设置中的开关状态。
Q. 支持哪些 AI 客户端?
A. 只要客户端支持 MCP(Model Context Protocol)的 stdio 传输方式,除上述之外的客户端基本上也可以使用。已在 Claude Desktop、Claude Code、OpenAI Codex CLI、OpenCode、Antigravity 上验证可用。
Q. 在 Antigravity 中出现 "Hook Failure" 或遥测错误导致无法执行工具?
A. 可能是 Antigravity 中安装的外部插件(如 Google Cloud 遥测等)的 PreToolUse Hook 阻止了工具执行。请打开 ~/.gemini/config/plugins/.../hooks.json 并将其设置为 "enabled": false。
Q. 网络被完全阻断时是否仍可进行AI查询?
A. 如果您通过OpenCode等工具搭配Ollama或LM Studio使用本地模型,所有处理均在 Mac / Linux 本地完成,因此即使在RoamSwitch实施网络紧急物理隔离期间,也能完全离线正常查询。若使用的是云端大模型(如Claude API),请在切换至手机热点等安全网络后再进行查询。