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、动态权限管理。
  • 深度定制 / 源码可控 :选 方案三(修改源码) ,但需维护代码更新。
  • 辅助加固 :任何场景都建议结合 方案四(网络控制) ,降低攻击面。

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

相关推荐
CODER03048 天前
ubuntu22.04部署完整deepseek局域网web服务全过程(RTX5090安装黑屏+web端多人并发)
pytorch·webui·ubuntu22.04·ollama·deepseek·rtx5090·自然语言模型
福大大架构师每日一题8 天前
agno v3.0.10发布:Azure OpenAI Responses、Elasticsearch、MCP 路由与一批关键稳定性修复全解析
ollama
All for pursuit.11 天前
FastAPI+Ollama 部署本地AI大模型对话助手
python·github·aigc·ollama
bamboolm15 天前
springboot+Ollama整合
java·ollama
虎虎(_ _)。゜zzZ18 天前
零基础本地部署Qwen2.5-7B:从环境准备到模型对话的完整实操
agent·ollama·本地大模型·qwen2.5·离线ai·llm部署
智嵌研习社23 天前
Ollama本地大模型部署实战指南:从环境搭建到生产级API调用全解析
ollama·本地大模型部署
每日出拳老爷子25 天前
【AI】Ollama 更新后 skipping CUDA 掉回 CPU
gpu·nvidia·cuda·ollama·本地大模型
beyond谚语1 个月前
六、LangChain——StrOutputParser和JsonOutputParser
langchain·rag·ollama
大模型真好玩1 个月前
大模型训练全流程实战指南实战篇(十四)——网络安全大模型数据获取
人工智能·ollama·deepseek
蜡台1 个月前
本地搭建 AI 大模型完整实战指南(2026)
人工智能·ollama