Ollama 鉴权方案实现教程

Ollama 鉴权方案实现教程

一、背景与需求

Ollama 是一款轻量级本地大模型运行工具,默认情况下没有内置鉴权机制,直接暴露端口存在安全风险(如未授权访问、滥用资源等)。为保护服务安全,需通过额外手段实现访问控制。

方案一:反向代理层鉴权(推荐,适合中小规模部署)

通过 Nginx、Traefik 等反向代理工具在请求入口层拦截并验证权限,无需修改 Ollama 源码。

实现步骤:

  1. 安装 Nginx(以 Ubuntu 为例):

    bash 复制代码
    sudo apt update && sudo apt install nginx
  2. 配置 Basic Auth 认证

    • 安装 htpasswd 工具:sudo apt install apache2-utils

    • 创建用户密码文件(如用户名 ollama_user):

      bash 复制代码
      htpasswd -c /etc/nginx/ollama_auth.db ollama_user
      # 输入密码并确认
  3. 配置 Nginx 反向代理 :编辑 /etc/nginx/sites-available/ollama

    nginx 复制代码
    server {
        listen 80;  # 对外暴露的端口(避免直接使用 Ollama 默认的 11434)
        server_name localhost;
    
        # 开启 Basic Auth
        auth_basic "Ollama Access";
        auth_basic_user_file /etc/nginx/ollama_auth.db;
    
        # 反向代理到本地 Ollama
        location / {
            proxy_pass http://127.0.0.1:11434;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
        }
    }
  4. 启用配置并重启 Nginx

    bash 复制代码
    sudo ln -s /etc/nginx/sites-available/ollama /etc/nginx/sites-enabled/
    sudo nginx -t  # 验证配置
    sudo systemctl restart nginx
  5. 验证 :通过 curl -u ollama_user:密码 http://localhost/api/tags 测试,无密码或错误密码会返回 401。

方案二:API 网关鉴权(适合多服务集成场景)

使用 Kong、APISIX 等 API 网关,支持更灵活的鉴权策略(如 Token、JWT、IP 白名单等)。以 APISIX 为例:

实现步骤:

  1. 部署 APISIX (参考 官方文档)。

  2. 创建路由与上游

    • 上游指向 Ollama 服务(127.0.0.1:11434)。

    • 路由配置路径为 /api/*,并启用 JWT 插件:

      bash 复制代码
      # 通过 APISIX Admin API 配置
      curl "http://127.0.0.1:9180/apisix/admin/routes/1" -X PUT -d '
      {
          "uri": "/api/*",
          "upstream": {
              "type": "roundrobin",
              "nodes": {"127.0.0.1:11434": 1}
          },
          "plugins": {
              "jwt-auth": {
                  "key": "your_secret_key",  # JWT 密钥
                  "exp": 86400  # 令牌有效期(秒)
              }
          }
      }'
  3. 生成 JWT 令牌 :使用工具生成包含密钥的令牌(如 jwt.io),或通过代码生成。

  4. 验证:请求时在 Header 中携带令牌:

    bash 复制代码
    curl -H "Authorization: Bearer <your_jwt_token>" http://APISIX_IP:9080/api/tags

方案三:修改 Ollama 源码添加鉴权(适合深度定制)

通过修改 Ollama 源码,在 API 层添加鉴权逻辑(需 Go 开发基础)。

实现步骤:

  1. 克隆源码

    bash 复制代码
    git clone https://github.com/jmorganca/ollama.git
    cd ollama
  2. 添加 Token 验证中间件 :在 api/server.go 中,为路由注册添加鉴权中间件:

    运行

    go 复制代码
    // 定义鉴权中间件
    func authMiddleware(next http.Handler) http.Handler {
        return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
            // 从 Header 获取 Token
            token := r.Header.Get("X-Ollama-Token")
            if token != "your_secure_token" {  // 替换为实际密钥
                http.Error(w, "Unauthorized", http.StatusUnauthorized)
                return
            }
            next.ServeHTTP(w, r)
        })
    }
    
    // 在路由注册时应用中间件
    func setupRoutes(mux *http.ServeMux) {
        // 为所有 API 路径添加鉴权
        mux.Handle("/api/", authMiddleware(http.StripPrefix("/api", apiRouter())))
    }
  3. 编译 Ollama

    bash 复制代码
    go build -o ollama ./cmd/ollama
  4. 启动并验证

    bash 复制代码
    ./ollama serve  # 启动服务
    # 带 Token 请求
    curl -H "X-Ollama-Token: your_secure_token" http://localhost:11434/api/tags

方案四:网络层访问控制(辅助方案,建议与其他方案结合)

通过防火墙或网络策略限制访问来源,减少暴露面。

示例(UFW 防火墙):

bash 复制代码
# 只允许特定 IP 访问 11434 端口
sudo ufw allow from 192.168.1.100 to any port 11434
# 拒绝其他所有 IP
sudo ufw deny 11434

总结与选择建议

  • 中小规模 / 快速部署 :优先选 方案一(Nginx Basic Auth) ,配置简单且兼容性好。
  • 多服务集成 / 复杂策略 :选 方案二(API 网关) ,支持 JWT、动态权限管理。
  • 深度定制 / 源码可控 :选 方案三(修改源码) ,但需维护代码更新。
  • 辅助加固 :任何场景都建议结合 方案四(网络控制) ,降低攻击面。

根据实际安全需求和技术栈选择合适方案,生产环境建议至少采用两种以上鉴权手段(如反向代理 + 网络控制)。

相关推荐
York·Zhang5 天前
Ollama:在本地运行大语言模型的利器
人工智能·语言模型·自然语言处理·ollama
大模型教程8 天前
30分钟内搞定!在本地电脑上部署属于你自己的大模型
llm·agent·ollama
血小溅9 天前
Spring Boot 整合 Spring AI:接入 DeepSeek 与 Ollama 调用大模型
后端·ollama·deepseek
大模型教程22 天前
Windows系统本地知识库构建:Cherry Studio+Ollama
llm·agent·ollama
Qiuner22 天前
快速入门LangChain4j Ollama本地部署与阿里百炼请求大模型
语言模型·langchain·nlp·llama·ollama
景天科技苑23 天前
【AI智能体开发】什么是LLM?如何在本地搭建属于自己的Ai智能体?
人工智能·llm·agent·智能体·ai智能体·ollama·智能体搭建
尽兴-1 个月前
【10 分钟!M4 Mac mini 离线部署「私有 ChatGPT」完整实录】
macos·ai·chatgpt·大模型·ollama·私有化
成子不是橙子1 个月前
Langchain | Ollama | Python快速上手使用LLM的DEMO
开发语言·python·langchain·ollama
深色風信子1 个月前
SpringAI 本地调用 Ollama
rag·ollama·springai·springai ollama