Ollama 的“裸奔”大冒险:如何给你的 AI 穿上“安全裤”

Ollama 的"裸奔"大冒险:如何给你的 AI 穿上"安全裤"

如今人工智能(AI)已经像春天的野草一样,疯狂地在各个领域蔓延。而大模型工具 Ollama,无疑是这场 AI 狂潮中的"网红"。它就像一个超级智能的"管家",能够帮助用户在本地轻松部署和管理各种大模型,比如 DeepSeek-R1。然而,最近国家网络安全通报中心的一则警告,却让这个"网红"工具陷入了"裸奔"的尴尬境地。

Ollama 的"裸奔"危机

Ollama 默认配置下存在严重的安全隐患,这就好比一个超级智能的"管家"在没有任何衣服的情况下出门,结果被一群"不怀好意"的客户盯上了。具体来说,Ollama 在本地部署时会启动一个 Web 服务,并默认开放 11434 端口,而且没有任何身份验证机制。这意味着,任何路过的"坏人"都可以随意调用它的 API,获取模型信息,甚至窃取模型文件,就像在无人看管的超市里随意拿走商品一样。

更糟糕的是,如果这个服务暴露在公网,这些路人们就可以像"免费的午餐"一样,滥用服务器的算力,甚至发起 DDoS 攻击,让服务器瞬间瘫痪。这不仅会导致数据泄露,还会让辛苦训练的 AI 模型沦为他人的"嫁衣",甚至让服务器沦为"挖矿肉鸡",让用户的云服务器账单暴涨。

这个说法并不夸张,让我们进入搜索引擎搜索:Ollama is running,大批裸奔的 Ollama 服务暴露在公网上。

我们随机选择一个服务器,发送一个简单的请求:curl http://<host>:<port>//api/tags,获取 Ollama 已加载的模型:

调用这个"deepseek-r1:32b"模型小试一下:

要是直接通过 REST API 请求 Ollama 的 run 或 pull 接口,拉取大参数的模型去运行,那可就直接把服务器的负载打崩了。

如何给 Ollama 穿上"安全的外衣"?

面对如此严重的安全隐患,用户们该如何保护自己的服务器和数据呢?以下是一些"安全加固"的建议:

1.禁止公网访问

Ollama 如果设置了OLLAMA_HOST=0.0.0.0,这意味着它对所有网络接口开放,包括公网。为了避免这种情况,你需要让 Ollama 只在本地运行。启动 Ollama 时,加上--host 127.0.0.1参数,这样它就只能在本地访问了。

bash 复制代码
ollama serve --host 127.0.0.1

2.防火墙限制 IP 访问

如果你不小心把服务器暴露在公网,黑客还是有可能找到漏洞。这时候,防火墙就派上用场了。你可以使用 UFW(Uncomplicated Firewall)或 iptables 来限制外部访问。

如果你用的是 UFW,可以这样设置:

bash 复制代码
sudo ufw allow from 192.168.1.0/24 to any port 11434
sudo ufw enable

如果你用的是 iptables,可以这样设置:

bash 复制代码
sudo iptables -A INPUT -p tcp --dport 11434 -s 192.168.1.0/24 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 11434 -j DROP

这就好比在 Ollama 的"家"周围设置了一道"防火墙",只有来自特定 IP 段的"客人"才能进入。

3.Nginx配置Authorization校验

防止 Ollama 暴露在公网上最简单的方法是使用 Nginx 作为代理,并配置 Authorization 校验来确保只有经过授权的请求才能访问。

步骤 1:安装 Nginx

如果你还没有安装 Nginx,可以通过以下命令安装(以下为Centos7版本命令):

sh 复制代码
# 安装nginx所需要的依赖包,确保安装了必要的依赖项
yum install -y gcc-c++ zlib zlib-devel openssl openssl-devel pcre pcre-devel

cd /opt  # 进入根目录下的 opt 目录
wget https://nginx.org/download/nginx-1.26.3.tar.gz  # 下载tar包(如果没有wget命令,需要先安装,centos7版本命令:`yum install -y wget`)
tar -zxvf nginx-1.26.3.tar.gz -C /opt/module  # 解压到 /opt/module 目录下(module目录需自行创建)

cd /opt/module/nginx-1.26.3  # 进入 nginx-1.26.3 目录
./configure  # 执行 ./configure 命令
make && make install  # 编译并安装(可以组合成一个命令执行:`./configure && make && make install`)

# 编译安装完后,在 /usr/local/ 目录下会自动生成一个 nginx 目录,代表安装成功! 
(base) [root@root nginx-1.26.3]# whereis nginx
nginx: /usr/local/nginx

#启动脚本是在 /usr/local/nginx/sbin 目录下的 nginx 可执行文件启动
cd /usr/local/nginx/sbin/  # 进入 sbin 目录
./nginx  # 启动 Nginx(或直接执行 `/usr/local/nginx/sbin/nginx` )

步骤 2:配置 Nginx 代理和 Authorization 校验

编辑 Nginx 配置文件,通常位于/etc/nginx/nginx.conf/usr/local/nginx/conf/nginx.conf。以下是一个示例配置:

nginx 复制代码
# 定义API Key校验规则
map $http_authorization $api_auth {
    default 0;  # 默认拒绝
    "Bearer sk-wNssKJnXLiDPygfBUY4dc73e" 1;  # 仅允许此Key
}

server {
    listen 8080;
    server_name your_domain_or_ip;

    location / {
        # 校验Authorization头
        if ($api_auth = 0) {
            return 403 '{"status":403,"message":"Invalid API Key"}\n';  # 自定义错误响应
        }

        # 代理到后端服务
        proxy_pass http://127.0.0.1:11434;
        
        # (配置可选项...)
        proxy_set_header Authorization $http_authorization;
        proxy_set_header Host $host;
    } 
}

配置了 Authorization 校验后重启 Nginx:./nginx -s reload,这时请求则需要添加 Authorization 请求头参数,如下所示:

sh 复制代码
# curl 命令行授权请求
curl -H "Authorization: Bearer your_secret_token" http://your_domain_or_ip

# headers 请求头配置参考
headers = {
    "Authorization": "Bearer " + your_secret_token,  # 替换为实际校验的 API Key
    "Content-Type": "application/json"
}

如果配置正确,未授权请求将返回 403 Invalid API Key,而授权请求将返回正常响应。

4.Nginx配置身份认证

如果 Ollama 服务没有配置任何验证,这时候你需要给 Ollama 加上一层"安全防护"。常见的方法是使用 Nginx 作为代理,并配置 htpasswd 来进行身份验证。

首先,安装 Nginx 和 htpasswd:

bash 复制代码
sudo apt-get install nginx apache2-utils

然后,创建一个用户和密码文件:

bash 复制代码
sudo htpasswd -c /etc/nginx/.htpasswd your_username

接着,配置 Nginx 代理:

nginx 复制代码
server {
    listen 8080;
    server_name your_domain_or_ip;

    location / {
        proxy_pass http://127.0.0.1:11434;
        proxy_set_header Host $host;
        
        auth_basic "Restricted Access";
        auth_basic_user_file /etc/nginx/.htpasswd;
        
        # (配置可选项...)
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

Nginx 配置身份验证后,请求格式示例如下:

python 复制代码
# curl 命令行请求
curl -X POST -u <username>:<password> -H "Content-Type: application/json" -d '<json_data>' <url>

# requests 客户端请求
response = requests.post(url, auth=HTTPBasicAuth(username, password), json=data)

这样只有输入正确的用户名和密码的"客人"才能正常请求 Ollama 的模型。

5.关闭远程下载模型

Ollama 默认允许远程下载模型,为了避免这种情况,你需要关闭远程下载功能。启动 Ollama 时,加上--no-remote参数:

bash 复制代码
ollama serve --no-remote

通过关闭远程下载功能,从而增强系统的安全性、优化资源的管理,并确保对模型的完全控制。

6.监控异常连接

你还可以使用netstatlsof命令来监控网络,用于监控异常的连接,及时发现并阻止"坏人"。

bash 复制代码
sudo netstat -tuln
sudo lsof -i :11434

或使用其它更高级的网络监听工具,对不健康的网络流量进行监控及防范。

总结

Ollama 的"裸奔"危机给我们敲响了警钟:在享受 AI 技术带来的便利时,我们绝不能忽视安全问题。希望广大用户能够重视这些安全隐患,及时采取措施,给自己的服务器和数据穿上"安全的外衣",让 Ollama 在安全的环境中继续发挥它的"大模型智能管家"作用。

相关推荐
zdkdchao5 小时前
hbase资源和数据权限控制
大数据·数据库·hbase
归去_来兮5 小时前
知识图谱技术概述
大数据·人工智能·知识图谱
青春之我_XP6 小时前
【基于阿里云搭建数据仓库(离线)】Data Studio创建资源与函数
大数据·数据仓库·sql·dataworks·maxcompute·data studio
Mikhail_G8 小时前
Python应用函数调用(二)
大数据·运维·开发语言·python·数据分析
黑客笔记9 小时前
攻防世界-XCTF-Web安全最佳刷题路线
大数据·安全·web安全
软件测试小仙女9 小时前
鸿蒙APP测试实战:从HDC命令到专项测试
大数据·软件测试·数据库·人工智能·测试工具·华为·harmonyos
Elastic 中国社区官方博客10 小时前
Elastic 获得 AWS 教育 ISV 合作伙伴资质,进一步增强教育解决方案产品组合
大数据·人工智能·elasticsearch·搜索引擎·云计算·全文检索·aws
反向跟单策略10 小时前
期货反向跟单运营逻辑推导思路
大数据·人工智能·数据分析·区块链
Tom Boom11 小时前
Git常用命令完全指南:从入门到精通
大数据·git·elasticsearch·docker·自动化测试框架
不吃饭的猪12 小时前
记一次spark在docker本地启动报错
大数据·docker·spark