公网扫描器批量探测Open‑WebUI未鉴权实例威胁现状
Open-WebUI 是一个流行的本地大模型交互界面,很多人习惯用 Docker 一键部署。
但如果直接映射到公网且没有启用登录认证,扫描器在几分钟内就能发现你的实例,并立即尝试调用接口、消耗算力,甚至盗取对话记录。未鉴权的 Open-WebUI 实例相当于把后台管理页和 API 同时裸奔在公网上,后果远超“被人蹭一下”这么简单。 本文先帮你确认是否中招,再给出可直接照做的加固流程。
为什么 Open-WebUI 会成为扫描靶子
Open-WebUI 默认使用 8080 端口,启动时若设置了 WEBUI_AUTH=False 或漏掉了创建管理员账号的步骤,任何人都能直接进入聊天界面。
公网扫描器会持续遍历常见端口和 Docker 容器特征,一旦发现 HTTP 响应里带有 open-webui 或特定 API 路径,就立即标记为“可用实例”。
这类扫描不依赖漏洞利用,
纯粹是撞“未鉴权”配置。只要实例暴露公网且未开启认证,
扫描器就能批量收割。 你会在日志里看到大量来自陌生 IP 的 POST /api/chat/completions 请求,
这就是被外部调用的最直接证据。
先自查:你的实例是否已经暴露
登录服务器,执行下面两条命令,快速确认端口监听范围。
ss -tlnp | grep 8080
curl -I http://127.0.0.1:8080
如果 ss 输出中监听地址是 0.0.0.0:8080 或 [::]:8080,说明服务对所有网卡开放;
再用 curl 访问本地,若返回 200 OK 且没有跳转登录页,基本可以判断为未鉴权状态。
接着检查容器日志:
docker logs open-webui --since 24h | grep "POST /api/chat" | head -20
这里 open-webui 换成你的容器名。
如果看到大量来自非本机 IP 的请求,说明已经被外部扫描或调用过。即使日志里暂时没有异常,也不代表安全,因为扫描器可能只做轻量探测,不一定会立即发起完整请求。
三步加固:认证、反向代理和防火墙
第一步:强制启用登录认证
在 Docker 启动命令中,去掉 WEBUI_AUTH=False 参数,并确保首次启动时通过 docker exec -it open-webui python create_admin.py(或 Web 界面引导)创建管理员账号。
确认环境变量里没有 WEBUI_AUTH=False,重启容器:
docker stop open-webui && docker start open-webui
第二步:用 Caddy 或 Nginx 做反向代理并加密码
不要直接把 8080 端口映射到公网。
推荐用 Caddy 自动配置 HTTPS,并在反向代理层再加一层 Basic Auth。
Caddyfile 示例:
chat.example.com {
basic_auth {
admin $2a$14$... # 用 caddy hash-password 生成
}
reverse_proxy 127.0.0.1:8080
}
这样即使 WebUI 认证被绕过,外部请求也会被代理层拦截。
第三步:在云安全组和防火墙层面收紧端口
如果只是自己或团队使用,云控制台安全组里只放行 443/80 端口,删除 8080 的公网放行规则。
同时服务器防火墙执行:
sudo ufw allow 443/tcp
sudo ufw allow 80/tcp
sudo ufw deny 8080/tcp
如果必须保留 8080 公网访问,把它限制在办公 IP 段内。
验证加固效果并持续监控
加固后重新执行 ss -tlnp | grep 8080,确认监听地址变为 127.0.0.1:8080,说明外部无法直接访问。
再用手机流量(断开局域网)访问 https://chat.example.com,应出现登录页或认证弹窗。
建议添加一个简单的监控:每天查看一次 Docker 日志中的异常请求,或用 fail2ban 对反复尝试的 IP 做自动封禁。
如果你用的是云厂商的日志服务,也可以直接检索 api/chat 的访问来源。
常见误区:这样配置不等于安全
有些人以为加了 --network host 然后只在 WebUI 里设置密码就安全了,实际上 WebUI 本身的登录认证无法抵御暴力破解和接口直接调用。
只要底层 API 路径暴露,攻击者可以绕过前端直接发包。
另一个误区是把服务隐藏在某个随机路径下,比如 /chat,扫描器仍能通过 robots.txt、SSL 证书信息或端口指纹发现真实路由。
最稳妥的做法是默认不向公网开放任何非必要端口,并始终把认证放在反向代理层。
对于已经暴露过的实例,建议重置所有账号密码、清理对话记录,并检查服务器上是否有异常进程或挖矿程序。
如果你正在处理公网扫描器批量探测 Open-WebUI 未鉴权实例的问题,先把当前实例断网隔离,然后按本文顺序完成自查和加固。
遇到登录反复跳转或代理配置不生效的报错时,优先检查环境变量和 Caddy 配置文件语法,确认 8080 端口没有被安全组或容器网络二次映射。