近期Ollama未授权访问漏洞Nginx反向代理解决方案

发布于 2025-3-7 10:37
浏览
0收藏

一、摘要
近期,国家信息安全漏洞共享平台(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 / {}代码块。具体操作步骤如下:

  1. 安装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;
        }
        
    }
 }
}

  1. 测试配置文件
    在完成配置文件的编辑后,通过命令nginx -t对配置文件进行测试,确保配置正确无误。
  2. 验证认证效果
    ​未添加请求头访问:在未添加请求头的情况下直接访问Ollama服务,将会出现401错误页,表明认证失败。

近期Ollama未授权访问漏洞Nginx反向代理解决方案-AI.x社区

​添加认证请求头访问:添加正确的认证请求头后,则可以正常调用Ollama服务。
近期Ollama未授权访问漏洞Nginx反向代理解决方案-AI.x社区
4. 实现远程调用聊天功能
配置认证请求头
近期Ollama未授权访问漏洞Nginx反向代理解决方案-AI.x社区
成功配置后,即可实现通过远程调用与Ollama进行聊天。
近期Ollama未授权访问漏洞Nginx反向代理解决方案-AI.x社区

四、总结
Nginx支持多种认证方式,如基本认证(Basic Authentication)、OAuth2等。本文以认证头为例,给出了解决Ollama未授权访问问题的思路以及详细的实际配置文件。通过Nginx反向代理为Ollama WEB API服务设置认证头信息,能够有效防止未授权访问。
在进行Nginx配置过程中,需要特别注意将配置文件中的YOUR_SECRET_TOKEN替换为一个安全程度较高的字符串,以确保系统的安全性,避免认证令牌泄露带来的风险 。

标签
已于2025-3-7 10:37:34修改
收藏
回复
举报
回复
相关推荐