近期Ollama未授權訪問漏洞Nginx反向代理解決方案
一、摘要
近期,國家信息安全漏洞共享平臺(CNVD)收錄了Ollama未授權訪問漏洞(CNVD - 2025 - 04094)。在此漏洞下,未經(jīng)授權的攻擊者能夠遠程訪問Ollama服務接口,進而執(zhí)行諸如敏感資產(chǎn)獲取、虛假信息投喂、拒絕服務等惡意操作。CNVD已建議受影響的單位和用戶盡快采取措施防范該漏洞攻擊風險。
近期互聯(lián)網(wǎng)上都是漏洞相關信息,常見的解決方案如封端口、限制遠程、限制IP訪問等,這些方式缺乏針對性且可操作性不強??紤]到將Ollama服務默認監(jiān)聽地址從127.0.0.1:11434改為0.0.0.0:11434是有業(yè)務需求的,采取“一刀切”的防范方式并不適宜。為了保障Ollama服務的安全性,本文提出使用Nginx作為反向代理,并通過設置認證頭信息的方式防止未授權訪問。
二、解決思路
為有效解決Ollama未授權訪問問題,確保其遠程調(diào)用的安全性,本文利用Nginx反向代理并結合認證頭信息進行驗證。在Nginx配置中,代理轉(zhuǎn)發(fā)請求至目標服務的同時,添加專門的認證邏輯。通過驗證請求頭中的認證信息(如Authorization: Bearer YOUR_SECRET_TOKEN),若認證失敗,返回401狀態(tài)碼;若認證成功,則將請求正常轉(zhuǎn)發(fā)給目標服務。以下為一個示例請求:
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進行遠程調(diào)用,為方便調(diào)試將相關設置代理到根目錄,若無需此功能,可刪除location / {}代碼塊。具體操作步驟如下:
- 安裝Nginx并編輯配置文件
首先安裝Nginx服務,隨后編輯Nginx配置文件nginx.conf,配置反向代理。以下是配置文件內(nèi)容:
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
# 禁用緩沖以支持流式響應
proxy_buffering off;
# 增大緩沖區(qū)設置,避免 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進行遠程調(diào)用,避免出現(xiàn)跨域問題,同時代理 LocalAPI.ai 到80端口根目錄
location / {
if ($request_method = 'OPTIONS') {
return 204; # 處理OPTIONS預檢請求
}
proxy_pass http://localapi.ai; # 代理到目標網(wǎng)站
}
# 代理 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服務,將會出現(xiàn)401錯誤頁,表明認證失敗。
?添加認證請求頭訪問:添加正確的認證請求頭后,則可以正常調(diào)用Ollama服務。
4. 實現(xiàn)遠程調(diào)用聊天功能
配置認證請求頭
成功配置后,即可實現(xiàn)通過遠程調(diào)用與Ollama進行聊天。
四、總結
Nginx支持多種認證方式,如基本認證(Basic Authentication)、OAuth2等。本文以認證頭為例,給出了解決Ollama未授權訪問問題的思路以及詳細的實際配置文件。通過Nginx反向代理為Ollama WEB API服務設置認證頭信息,能夠有效防止未授權訪問。
在進行Nginx配置過程中,需要特別注意將配置文件中的YOUR_SECRET_TOKEN替換為一個安全程度較高的字符串,以確保系統(tǒng)的安全性,避免認證令牌泄露帶來的風險 。
