是否暴露在公网:从端口扫描到TaoToken配置加固)
1. 你的 openclaw 可能正在公网“裸奔”openclaw俗称“龙虾”是一款能自动处理文件、管理邮件、操作浏览器的开源 AI 智能体。它把能力做得很足代价是管理界面本身就是一个 Web 服务默认监听在 18789 端口。很多个人开发者图省事直接把它丢在有公网 IP 的云主机上配置一个字没改于是这个能操作你系统文件的“数字员工”就对着整个互联网敞开了大门。我见过太多这样的部署bind写着0.0.0.0认证没开防火墙规则一条没加。互联网上的自动化扫描器 24 小时不停地探测 18789一旦扫到就直接标记。更麻烦的是openclaw 作为新服务已经爆出过远程代码执行这类高危漏洞默认无密码加上公网可达等于把钥匙插在门上还贴了张“欢迎光临”。这篇内容不聊虚的就带你做一次可复现的安全自查先确认你的机器有没有公网 IP再查 openclaw 到底监听在哪个地址然后用端口扫描验证暴露面最后给出监听配置收敛和 TaoToken 统一 Key 接入的settings.json骨架。整套动作做完你能清楚知道自己的龙虾是关在笼子里还是在大街上溜达。适合谁看用 openclaw 自建服务、对网络配置不算精通、但又不想哪天醒来发现设备被控的个人开发者。全程命令可直接复制Windows 和 Linux 都覆盖。2. 自查第一步确认公网 IP 与监听地址2.1 先看机器有没有公网 IPWindows 下打开 PowerShell 或 CMDipconfig | findstr IPv4如果输出的是192.168.x.x、10.x.x.x、172.16.x.x到172.31.x.x这些网段说明你拿到的是局域网地址机器本身不直接暴露。但注意云服务器往往在 NAT 后面控制台里显示的“公网 IP”是映射出来的ipconfig里看不到。所以云主机用户要额外登录云厂商控制台在实例详情里找公网 IP。Linux 下用ip addr show | grep inet 或者直接查默认路由出口curl -s ifconfig.me这条命令会返回你当前出口的公网 IP。如果返回的 IP 和你云控制台看到的一致说明这台机器确实有公网出口。2.2 查 openclaw 监听在哪个地址这是整个自查里最关键的一步。Windowsnetstat -ano | findstr :18789Linuxss -tlnp | grep 18789看输出结果0.0.0.0:18789或:::18789服务监听在所有网络接口上。只要机器有公网 IP这个端口就从公网可达危险。127.0.0.1:18789只监听本地回环外部访问不到相对安全。192.168.x.x:18789只监听内网某张网卡公网进不来但同局域网的其他设备能访问。我实测下来大部分出问题的部署都是第一种。很多人装完 openclaw 直接启动根本没意识到默认配置就是全网监听。2.3 检查 openclaw.json 里的 bind 设置openclaw 的核心配置文件通常叫openclaw.json在安装目录下。Windows 常见路径是C:\Users\你的用户名\.openclaw\openclaw.jsonLinux 一般在~/.openclaw/openclaw.json。打开后找bind字段{ server: { bind: 0.0.0.0, port: 18789 } }危险设置就是bind: 0.0.0.0。安全设置是bind: loopback或bind: 127.0.0.1。如果你确实需要从其他机器访问也不要绑0.0.0.0而是绑具体的内网网卡地址再配合防火墙白名单。3. 用端口扫描验证暴露面光看配置还不够实际扫一遍才能确认。这里分本机扫描和外部扫描两种。3.1 本机快速验证Linux 下用ncnc -zv 127.0.0.1 18789返回succeeded说明本地能通。再试公网 IPnc -zv 你的公网IP 18789如果这条也通说明从公网方向能摸到这个端口。Windows 下可以用 PowerShell 的Test-NetConnectionTest-NetConnection -ComputerName 你的公网IP -Port 18789看TcpTestSucceeded是不是True。3.2 外部视角验证最直接的办法手机断开 WiFi用 4G/5G 流量浏览器输入http://你的公网IP:18789。如果页面能打开哪怕只是个登录框说明服务彻底暴露在公网。如果打不开说明当前相对安全。也可以用公开的网络空间测绘平台查自己的 IP。Shodan、ZoomEye、FOFA 这类工具能搜到某个 IP 上开放的服务。搜索语法类似ip:你的公网IP port:18789如果搜得到说明已经被外部索引到了。国内还有微步等平台提供类似能力。注意这些平台只是查询工具不要用它们去扫描别人的 IP那属于未授权访问。3.3 扫描结果对照表监听地址公网可达风险等级处理建议0.0.0.0:18789是高立即改 bind 为 127.0.0.1:::18789是高同上IPv6 也要收敛127.0.0.1:18789否低保持配合本地访问192.168.x.x:18789否公网中内网设备可访问加认证4. 收敛暴露面监听配置与防火墙4.1 改 bind 到本地回环编辑openclaw.json{ server: { bind: 127.0.0.1, port: 18789, auth: { enabled: true, token: 换成你自己的随机长字符串 } } }改完重启 openclaw 服务。再跑一次netstat -ano | findstr :18789确认输出变成127.0.0.1:18789。4.2 加防火墙规则即使 bind 改对了防火墙也建议加一层。Linux 用ufwsudo ufw deny 18789/tcp sudo ufw allow from 127.0.0.1 to any port 18789Windows 用 PowerShellNew-NetFirewallRule -DisplayName Block openclaw public -Direction Inbound -LocalPort 18789 -Protocol TCP -Action Block云服务器还要检查安全组把 18789 的入方向规则删掉只保留必要的管理端口。4.3 需要远程访问怎么办如果你确实要从外面访问 openclaw不要直接开公网端口。两个稳妥做法一是用 SSH 隧道。本地执行ssh -L 18789:127.0.0.1:18789 用户名你的服务器然后本地浏览器访问http://127.0.0.1:18789流量走加密隧道公网看不到 18789。二是把 openclaw 放在反向代理后面加 HTTPS 和认证。但这对个人开发者来说配置成本偏高SSH 隧道更省事。5. 用 TaoToken 统一 Key 接入加固openclaw 要调用大模型能力就得配 API Key。很多人的做法是把 Key 硬编码在配置文件里或者每个模型单独配一份散落各处。一旦配置文件泄露Key 也跟着泄露。更合理的做法是用 TaoToken 做统一接入一个 Key 管多个模型配置集中管理。5.1 获取 API Key访问 TaoToken 控制台创建 API Keyhttps://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi_keysutm_campaignrewrite创建后复制 Key形如sk-xxxxxxxx。这个 Key 只显示一次存好。5.2 settings.json 骨架openclaw 的模型接入配置通常放在settings.json里。下面是一个可复制的骨架把YOUR_TAOTOKEN_KEY换成你刚创建的 Key{ models: { default: { provider: openai-compatible, baseUrl: https://taotoken.net/api, apiKey: YOUR_TAOTOKEN_KEY, model: claude-sonnet-4-20250514 }, fallback: { provider: openai-compatible, baseUrl: https://taotoken.net/api, apiKey: YOUR_TAOTOKEN_KEY, model: gpt-4o } }, security: { bind: 127.0.0.1, authEnabled: true } }注意baseUrl用的是https://taotoken.net/api不带任何多余路径。TaoToken 兼容 OpenAI 接口格式所以provider写openai-compatible即可。5.3 为什么用统一 Key把 Key 集中到 TaoToken 之后你只需要在一个地方管理凭证。openclaw 的配置文件里不再散落多个厂商的 Key泄露面收窄。同时切换模型只改model字段不用重新配 Key。对于长期跑 Agent 任务的场景这种统一接入方式维护成本低很多。如果你要跑长时间的编码或 Agent 任务可以了解 Coding Planhttps://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding_planutm_campaignrewrite6. 验证请求与成功结果配置改完得实际发一次请求确认链路通。6.1 用 curl 验证curl https://taotoken.net/api/v1/chat/completions \ -H Content-Type: application/json \ -H Authorization: Bearer YOUR_TAOTOKEN_KEY \ -d { model: claude-sonnet-4-20250514, messages: [{role: user, content: 回复ok}] }如果返回 JSON 里choices数组有内容说明 Key 和接入地址都正确。如果返回 401检查 Key 有没有复制完整返回 404检查baseUrl是不是写成了https://taotoken.net/api/v1之外的多余路径。6.2 在 openclaw 里验证重启 openclaw 后在它的对话界面发一条测试消息。能正常返回模型回复说明settings.json里的模型配置生效了。同时再跑一次端口检查netstat -ano | findstr :18789确认监听地址是127.0.0.1。再用手机 4G 访问http://你的公网IP:18789应该打不开。这两步都通过说明暴露面已经收敛。6.3 暴露面收敛前后对照检查项收敛前收敛后监听地址0.0.0.0:18789127.0.0.1:18789公网访问可打开无法访问认证无已开启Key 管理散落多处TaoToken 统一防火墙无规则已阻断 18789 入站7. 本篇常见错排查7.1 改了 bind 但端口还是 0.0.0.0最常见的原因是改错了配置文件。openclaw 可能有多份配置比如安装目录一份、用户目录一份。确认你改的是实际加载的那份。启动时加--verbose看日志里加载的配置路径。另外改完必须重启服务热加载不一定生效。7.2 手机 4G 能打开但 netstat 显示 127.0.0.1这种情况通常是反向代理或端口转发在起作用。检查有没有 nginx、caddy 之类的服务把公网 443 转发到了本地 18789。如果有问题出在代理层要去代理配置里加认证或限制来源。7.3 curl 返回 401Key 复制时带了空格或者Bearer后面没加空格。重新从控制台复制一次注意不要带换行。也有可能是 Key 被禁用或额度用完去控制台确认状态。7.4 openclaw 启动报配置解析错误settings.json里多了逗号或少了引号。用python -m json.tool settings.json校验一下格式python -m json.tool settings.json能正常输出说明 JSON 合法报错就按提示的行号去改。7.5 防火墙规则加了但还是能访问云服务器有两层防火墙系统内的 ufw/iptables 和云厂商的安全组。安全组优先级更高如果安全组里 18789 还是放行状态系统防火墙拦不住。去云控制台把安全组里 18789 的入方向规则删掉。8. 把自查变成习惯整套流程走下来核心就三件事确认监听地址、收敛到本地回环、用统一 Key 管理凭证。我自己的做法是每次改完 openclaw 配置顺手跑一遍netstat和手机 4G 测试两分钟的事但能避免很多麻烦。如果你还想深入排查其他方面的安全问题可以看接入文档了解 TaoToken 的完整能力https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite想直接体验模型对话验证接入是否正常用这个入口https://taotoken.net/chat?utm_sourcetaotoken_aicg_blog_endutm_contentmodel_chatutm_campaignrewrite安全这件事没有一劳永逸但把基础动作做扎实就能挡掉绝大多数自动化扫描和 opportunistic 攻击。你的龙虾值得一个关好的笼子。