Ollama公网裸奔11434端口被扫描薅GPU算力完整复现
Ollama 默认在 11434 端口提供 API 服务,很多新手直接 ollama serve 后没做任何访问控制,服务器又被公网 IP 绑定,结果很快就被扫描器发现,GPU 算力被陌生人反复调用去做推理甚至挖矿。
下面我完整演示一下这个问题是怎么发生、怎么验证,以及普通人怎么把它防护住。
第一步:检查你的 Ollama 是否已经裸奔在公网
在服务器上执行下面几条命令,确认监听地址和端口状态:
ss -tlnp | grep 11434
如果输出显示 0.0.0.0:11434 或 *:11434,说明 Ollama 监听在所有网卡上,公网 IP 的 11434 端口是通的。
随后在自己电脑上访问:
curl http://你的服务器公网IP:11434/api/tags
只要返回类似 {"models":[]} 的 JSON,就说明端口已经暴露。
别人用扫描工具全网扫 11434 很容易命中。
完整复现:攻击者如何“薅”走 GPU 算力
扫描到端口后,攻击者不需要密码,直接调用 Ollama 的 api/generate 或 api/chat 接口,就能让服务器执行任意模型推理。
比如:
curl http://你的服务器公网IP:11434/api/generate -d '{"model":"llama3","prompt":"...","stream":false}'
如果你部署了较大的开源模型,对方可以反复提交长文本,把你的显存占满、显卡跑满,而你完全不知道。
更恶劣的还会利用 /api/pull 拉取模型,白白消耗你的带宽和磁盘。
防护实操:改监听、加防火墙、上认证
1. 只允许本机访问
最稳妥的是让 Ollama 只监听回环地址。
修改 Ollama 服务配置,设置环境变量:
export OLLAMA_HOST=127.0.0.1:11434
然后重启 Ollama 服务。
如果是 systemd 管理,编辑 /etc/systemd/system/ollama.service,在 [Service] 段加入:
Environment="OLLAMA_HOST=127.0.0.1:11434"
重载并重启:
systemctl daemon-reload
systemctl restart ollama
2. 用防火墙封掉非本机访问
即使不修改监听,也可以用防火墙把 11434 端口限制为仅本机可连。
以 firewalld 为例:
firewall-cmd --permanent --zone=public --remove-port=11434/tcp
firewall-cmd --permanent --zone=internal --add-port=11434/tcp
firewall-cmd --reload
如果你用宝塔面板,就在“安全”菜单中删除 11434 公网放行规则,只保留内网或本地。
3. 你确实需要外网访问时,加认证
如果必须从公网使用 Ollama,千万别直接裸奔。
用 Nginx 反代并加上 Basic Auth,或者给 Ollama 前端配接口密钥。
Nginx 配置片段如下:
location / {
proxy_pass http://127.0.0.1:11434;
auth_basic "restricted";
auth_basic_user_file /etc/nginx/.ollama_htpasswd;
}
生成密码文件:
htpasswd -c /etc/nginx/.ollama_htpasswd ollama
之后访问必须输入账号密码,扫描器直接请求会被 401 拦下。
验证加固效果 & 避坑提醒
执行 ss -tlnp | grep 11434,确认本地绑定生效;
再从外部 curl 时应该超时或返回 401。
有几个坑要留意:
- Docker 部署:
docker run -p 0.0.0.0:11434:11434会把端口映射到公网。应改成-p 127.0.0.1:11434:11434,或者不要映射端口。 - 代理软件:有些代理会绕过防火墙,检查 Nginx、Caddy 等是否有额外的公网监听。
- 云服务器安全组:阿里云、腾讯云的安全组也要放行规则,单靠系统防火墙不够。
- 日志排查:可以查看 Ollama 日志,如果发现有大量陌生 IP 的
/api/generate请求,这就是被薅的证据。
把 Ollama 收回到内网或加上认证以后,GPU 算力才算真正握在自己手里。
按本文步骤操作,基本能杜绝扫描器薅算力的问题。