前言
由于我用macmini m4在本地用ollama部署了几个大模型,并通过内网穿透到了公网,由oneapi分发,但是没有ollama没做鉴权,导致任何人都可以通过我的ip访问访问我本地大模型。还好我今天收到了天翼云的提醒才意识到这个问题,现在已经修复这个问题了,希望看到朋友赶快去检查一下。
一、问题的根源
已知漏洞如CVE-2024-37032(路径遍历导致RCE)、CVE-2024-39722(路径遍历暴露文件结构)等,可能被用于控制服务器或窃取敏感数据。
用FOFA这个网站扫描一下端口就能看到所有部署了ollama的云服务器,从下图可以看到还是有非常多的人不知道这个漏洞的:
随便找一个,竟然发现竟然部署了deepseek70b的模型,却不需要任何鉴权就能免费调用他的模型,并且可以窃取他的模型文件和数据。
原因
Ollama默认开启11434端口,若未配置防火墙或部署在公网环境(如云服务器),API接口将直接暴露。
后果
- 模型推理请求:通过
/api/generate
端点消耗GPU/CPU算力。 - 模型窃取:利用
/api/pull
下载私有模型文件。 - 拒绝服务攻击(DDOS):通过高频请求耗尽系统资源。
二、解决方案
1. 网络层隔离
限制监听地址:
修改Ollama服务仅绑定到本地回环地址,避免公网暴露:
# Linux/macOS
export OLLAMA_HOST=127.0.0.1:11434
# Windows(PowerShell)
$env:OLLAMA_HOST="127.0.0.1:11434"
对于Docker部署,添加--network host
并绑定到127.0.0.1
。
防火墙规则:
禁止11434端口的公网入站流量:
# Linux iptables
iptables -A INPUT -p tcp --dport 11434 -j DROP
# Windows防火墙(管理员权限)
New-NetFirewallRule -DisplayName "Block Ollama Port" -Direction Inbound -LocalPort 11434 -Protocol TCP -Action Block
2. 反向代理鉴权
- 反向代理+认证:
使用Nginx或Traefik添加Basic Auth:
server {
listen 80;
server_name ollama.example.com;
location / {
proxy_pass http://127.0.0.1:11434;
auth_basic "Ollama Access";
auth_basic_user_file /etc/nginx/.htpasswd;
}
}
- ollama本地运行+oneapi反代鉴权:
ollama不上公网,oneapi反代上公网并用oneapi调用本地的ollama服务,oneapi是有鉴权的,所以不用担心变成肉鸡,我现在就是用的这种方案。
3. 更新版本
- 升级至安全版本:
定期检查并升级Ollama至修复漏洞的版本(如≥0.1.34修复CVE-2024-37032)。 - 非特权运行:
避免以root权限运行Ollama,使用专用用户:
useradd ollama-user
chown -R ollama-user:ollama-user /path/to/ollama