Ollama 的"裸奔"大冒险:如何给你的 AI 穿上"安全裤"
如今人工智能(AI)已经像春天的野草一样,疯狂地在各个领域蔓延。而大模型工具 Ollama,无疑是这场 AI 狂潮中的"网红"。它就像一个超级智能的"管家",能够帮助用户在本地轻松部署和管理各种大模型,比如 DeepSeek-R1。然而,最近国家网络安全通报中心的一则警告,却让这个"网红"工具陷入了"裸奔"的尴尬境地。
Ollama 的"裸奔"危机
Ollama 默认配置下存在严重的安全隐患,这就好比一个超级智能的"管家"在没有任何衣服的情况下出门,结果被一群"不怀好意"的客户盯上了。具体来说,Ollama 在本地部署时会启动一个 Web 服务,并默认开放 11434 端口,而且没有任何身份验证机制。这意味着,任何路过的"坏人"都可以随意调用它的 API,获取模型信息,甚至窃取模型文件,就像在无人看管的超市里随意拿走商品一样。
更糟糕的是,如果这个服务暴露在公网,这些路人们就可以像"免费的午餐"一样,滥用服务器的算力,甚至发起 DDoS 攻击,让服务器瞬间瘫痪。这不仅会导致数据泄露,还会让辛苦训练的 AI 模型沦为他人的"嫁衣",甚至让服务器沦为"挖矿肉鸡",让用户的云服务器账单暴涨。
这个说法并不夸张,让我们进入搜索引擎搜索:Ollama is running
,大批裸奔的 Ollama 服务暴露在公网上。
我们随机选择一个服务器,发送一个简单的请求:curl http://<host>:<port>//api/tags
,获取 Ollama 已加载的模型:
调用这个"deepseek-r1:32b"模型小试一下:
要是直接通过 REST API 请求 Ollama 的 run 或 pull 接口,拉取大参数的模型去运行,那可就直接把服务器的负载打崩了。
如何给 Ollama 穿上"安全的外衣"?
面对如此严重的安全隐患,用户们该如何保护自己的服务器和数据呢?以下是一些"安全加固"的建议:
1.禁止公网访问
Ollama 如果设置了OLLAMA_HOST=0.0.0.0
,这意味着它对所有网络接口开放,包括公网。为了避免这种情况,你需要让 Ollama 只在本地运行。启动 Ollama 时,加上--host 127.0.0.1
参数,这样它就只能在本地访问了。
bash
ollama serve --host 127.0.0.1
2.防火墙限制 IP 访问
如果你不小心把服务器暴露在公网,黑客还是有可能找到漏洞。这时候,防火墙就派上用场了。你可以使用 UFW(Uncomplicated Firewall)或 iptables 来限制外部访问。
如果你用的是 UFW,可以这样设置:
bash
sudo ufw allow from 192.168.1.0/24 to any port 11434
sudo ufw enable
如果你用的是 iptables,可以这样设置:
bash
sudo iptables -A INPUT -p tcp --dport 11434 -s 192.168.1.0/24 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 11434 -j DROP
这就好比在 Ollama 的"家"周围设置了一道"防火墙",只有来自特定 IP 段的"客人"才能进入。
3.Nginx配置Authorization校验
防止 Ollama 暴露在公网上最简单的方法是使用 Nginx 作为代理,并配置 Authorization 校验来确保只有经过授权的请求才能访问。
步骤 1:安装 Nginx
如果你还没有安装 Nginx,可以通过以下命令安装(以下为Centos7版本命令):
sh
# 安装nginx所需要的依赖包,确保安装了必要的依赖项
yum install -y gcc-c++ zlib zlib-devel openssl openssl-devel pcre pcre-devel
cd /opt # 进入根目录下的 opt 目录
wget https://nginx.org/download/nginx-1.26.3.tar.gz # 下载tar包(如果没有wget命令,需要先安装,centos7版本命令:`yum install -y wget`)
tar -zxvf nginx-1.26.3.tar.gz -C /opt/module # 解压到 /opt/module 目录下(module目录需自行创建)
cd /opt/module/nginx-1.26.3 # 进入 nginx-1.26.3 目录
./configure # 执行 ./configure 命令
make && make install # 编译并安装(可以组合成一个命令执行:`./configure && make && make install`)
# 编译安装完后,在 /usr/local/ 目录下会自动生成一个 nginx 目录,代表安装成功!
(base) [root@root nginx-1.26.3]# whereis nginx
nginx: /usr/local/nginx
#启动脚本是在 /usr/local/nginx/sbin 目录下的 nginx 可执行文件启动
cd /usr/local/nginx/sbin/ # 进入 sbin 目录
./nginx # 启动 Nginx(或直接执行 `/usr/local/nginx/sbin/nginx` )
步骤 2:配置 Nginx 代理和 Authorization 校验
编辑 Nginx 配置文件,通常位于/etc/nginx/nginx.conf
或/usr/local/nginx/conf/nginx.conf
。以下是一个示例配置:
nginx
# 定义API Key校验规则
map $http_authorization $api_auth {
default 0; # 默认拒绝
"Bearer sk-wNssKJnXLiDPygfBUY4dc73e" 1; # 仅允许此Key
}
server {
listen 8080;
server_name your_domain_or_ip;
location / {
# 校验Authorization头
if ($api_auth = 0) {
return 403 '{"status":403,"message":"Invalid API Key"}\n'; # 自定义错误响应
}
# 代理到后端服务
proxy_pass http://127.0.0.1:11434;
# (配置可选项...)
proxy_set_header Authorization $http_authorization;
proxy_set_header Host $host;
}
}
配置了 Authorization 校验后重启 Nginx:./nginx -s reload
,这时请求则需要添加 Authorization 请求头参数,如下所示:
sh
# curl 命令行授权请求
curl -H "Authorization: Bearer your_secret_token" http://your_domain_or_ip
# headers 请求头配置参考
headers = {
"Authorization": "Bearer " + your_secret_token, # 替换为实际校验的 API Key
"Content-Type": "application/json"
}
如果配置正确,未授权请求将返回 403 Invalid API Key,而授权请求将返回正常响应。
4.Nginx配置身份认证
如果 Ollama 服务没有配置任何验证,这时候你需要给 Ollama 加上一层"安全防护"。常见的方法是使用 Nginx 作为代理,并配置 htpasswd 来进行身份验证。
首先,安装 Nginx 和 htpasswd:
bash
sudo apt-get install nginx apache2-utils
然后,创建一个用户和密码文件:
bash
sudo htpasswd -c /etc/nginx/.htpasswd your_username
接着,配置 Nginx 代理:
nginx
server {
listen 8080;
server_name your_domain_or_ip;
location / {
proxy_pass http://127.0.0.1:11434;
proxy_set_header Host $host;
auth_basic "Restricted Access";
auth_basic_user_file /etc/nginx/.htpasswd;
# (配置可选项...)
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
Nginx 配置身份验证后,请求格式示例如下:
python
# curl 命令行请求
curl -X POST -u <username>:<password> -H "Content-Type: application/json" -d '<json_data>' <url>
# requests 客户端请求
response = requests.post(url, auth=HTTPBasicAuth(username, password), json=data)
这样只有输入正确的用户名和密码的"客人"才能正常请求 Ollama 的模型。
5.关闭远程下载模型
Ollama 默认允许远程下载模型,为了避免这种情况,你需要关闭远程下载功能。启动 Ollama 时,加上--no-remote
参数:
bash
ollama serve --no-remote
通过关闭远程下载功能,从而增强系统的安全性、优化资源的管理,并确保对模型的完全控制。
6.监控异常连接
你还可以使用netstat
或lsof
命令来监控网络,用于监控异常的连接,及时发现并阻止"坏人"。
bash
sudo netstat -tuln
sudo lsof -i :11434
或使用其它更高级的网络监听工具,对不健康的网络流量进行监控及防范。
总结
Ollama 的"裸奔"危机给我们敲响了警钟:在享受 AI 技术带来的便利时,我们绝不能忽视安全问题。希望广大用户能够重视这些安全隐患,及时采取措施,给自己的服务器和数据穿上"安全的外衣",让 Ollama 在安全的环境中继续发挥它的"大模型智能管家"作用。