
近期Ollama未授权访问漏洞Nginx反向代理解决方案
一、摘要
近期,国家信息安全漏洞共享平台(CNVD)收录了Ollama未授权访问漏洞(CNVD - 2025 - 04094)。在此漏洞下,未经授权的攻击者能够远程访问Ollama服务接口,进而执行诸如敏感资产获取、虚假信息投喂、拒绝服务等恶意操作。CNVD已建议受影响的单位和用户尽快采取措施防范该漏洞攻击风险。
近期互联网上都是漏洞相关信息,常见的解决方案如封端口、限制远程、限制IP访问等,这些方式缺乏针对性且可操作性不强。考虑到将Ollama服务默认监听地址从127.0.0.1:11434改为0.0.0.0:11434是有业务需求的,采取“一刀切”的防范方式并不适宜。为了保障Ollama服务的安全性,本文提出使用Nginx作为反向代理,并通过设置认证头信息的方式防止未授权访问。
二、解决思路
为有效解决Ollama未授权访问问题,确保其远程调用的安全性,本文利用Nginx反向代理并结合认证头信息进行验证。在Nginx配置中,代理转发请求至目标服务的同时,添加专门的认证逻辑。通过验证请求头中的认证信息(如Authorization: Bearer YOUR_SECRET_TOKEN),若认证失败,返回401状态码;若认证成功,则将请求正常转发给目标服务。以下为一个示例请求:
POST /api/generate HTTP/1.1
Host: your_domain_or_ip
Content-Type: application/json
Authorization: Bearer YOUR_SECRET_TOKEN
User-Agent: python-requests/2.26.0
Accept: */*
Connection: keep-alive
三、解决步骤
因作者使用LocalAPI.ai进行远程调用,为方便调试将相关设置代理到根目录,若无需此功能,可删除location / {}代码块。具体操作步骤如下:
- 安装Nginx并编辑配置文件
首先安装Nginx服务,随后编辑Nginx配置文件nginx.conf,配置反向代理。以下是配置文件内容:
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
# 禁用缓冲以支持流式响应
proxy_buffering off;
# 增大缓冲区设置,避免 502 Bad Gateway
proxy_buffer_size 256k;
proxy_buffers 4 256k;
proxy_busy_buffers_size 512k;
server {
listen 80; # 绑定80端口
server_name your_domain_or_ip; # 替换为你的域名或IP地址
# 由于这里使用LocalAPI.ai进行远程调用,避免出现跨域问题,同时代理 LocalAPI.ai 到80端口根目录
location / {
if ($request_method = 'OPTIONS') {
return 204; # 处理OPTIONS预检请求
}
proxy_pass http://localapi.ai; # 代理到目标网站
}
# 代理 Ollama 服务到 /api/,并进行请求头认证
location /api/ {
proxy_pass http://127.0.0.1:11434/api/; # 代理目标地址
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# 验证请求头中的认证信息
set $auth_header $http_authorization;
if ($auth_header != "Bearer YOUR_SECRET_TOKEN") { # 替换为你的认证令牌
add_header 'WWW-Authenticate' 'Bearer realm="Access to the API"'; # 提示客户端需要认证
return 401; # 如果认证失败,返回 401 Unauthorized
}
# 处理 OPTIONS 请求
if ($request_method = 'OPTIONS') {
add_header 'Access-Control-Max-Age' 1728000;
add_header 'Content-Type' 'text/plain charset=UTF-8';
add_header 'Content-Length' 0;
return 204;
}
}
}
}
- 测试配置文件
在完成配置文件的编辑后,通过命令nginx -t对配置文件进行测试,确保配置正确无误。 - 验证认证效果
未添加请求头访问:在未添加请求头的情况下直接访问Ollama服务,将会出现401错误页,表明认证失败。
添加认证请求头访问:添加正确的认证请求头后,则可以正常调用Ollama服务。
4. 实现远程调用聊天功能
配置认证请求头
成功配置后,即可实现通过远程调用与Ollama进行聊天。
四、总结
Nginx支持多种认证方式,如基本认证(Basic Authentication)、OAuth2等。本文以认证头为例,给出了解决Ollama未授权访问问题的思路以及详细的实际配置文件。通过Nginx反向代理为Ollama WEB API服务设置认证头信息,能够有效防止未授权访问。
在进行Nginx配置过程中,需要特别注意将配置文件中的YOUR_SECRET_TOKEN替换为一个安全程度较高的字符串,以确保系统的安全性,避免认证令牌泄露带来的风险 。
