肥仔教程网

SEO 优化与 Web 开发技术学习分享平台

Ollama 安全危机四伏?这份加强配置指南为你 “排雷”!

今天早上在上班的路上看到一篇关于ollama存在安全风险的文章。前面几篇文章都是使用ollama部署AI模型deepseek,文本嵌入模型等。Ollama 存在多种安全风险,涵盖网络、权限、数据和软件漏洞等多个层面,以下从这几个方面展开介绍:

网络访问风险

端口暴露风险:Ollama 默认监听端口 11434 ,若服务器防火墙配置不当,此端口暴露在公网,外部恶意用户可能借此发起攻击,如端口扫描、暴力破解等,以获取敏感信息或进行 DDoS 攻击,耗尽服务器资源。

未加密通信风险:若未配置 TLS/SSL 加密,Ollama 与客户端通信时,数据在网络传输过程中易被拦截和窃取,如用户输入的提示词、模型返回的结果等,涉及隐私或敏感业务时,危害极大。


权限管理风险

高权限运行风险:若 Ollama 以高权限用户(如 root)运行,一旦服务被攻陷,攻击者可利用高权限在服务器上肆意妄为,如删除重要文件、篡改系统配置、植入恶意软件等,严重破坏系统安全。

如root用户运行ollama:

权限滥用风险:如果 Ollama 的 API 密钥管理不善,被泄露或滥用,恶意用户可能会利用密钥无限制调用模型,导致资源被大量消耗,同时泄露业务数据。

数据安全风险

模型数据泄露风险:Ollama 存储的模型数据若未妥善保护,遭窃取后,攻击者可能分析模型架构和参数,用于恶意目的,如开发对抗性攻击工具、非法复制模型盈利等。

用户数据处理风险:在处理用户输入和输出数据时,若 Ollama 缺乏数据加密、脱敏机制,用户敏感数据易泄露,比如用户输入的身份证号、银行卡号等在日志记录或存储时未加密,可能导致隐私泄露。

ollama目录结构情况:

软件漏洞风险

已知漏洞风险:Ollama 存在多个已披露的安全漏洞,如 CVE-2024-39720(权限提升漏洞)、CVE-2024-39722(任意文件读取漏洞)、CVE-2024-39719(目录遍历漏洞)和 CVE-2024-39721(信息泄露漏洞)。这些漏洞若未及时修复,攻击者可利用其获取更高权限、读取敏感文件、遍历服务器目录或获取敏感信息,严重威胁系统安全。

未知漏洞风险:软件可能潜藏未知漏洞,随着 Ollama 使用量增加和研究深入,新漏洞可能被发现,在未修复前,存在被攻击者利用的风险

接下来介绍如何安全加固ollama,具体可行的措施如下:

系统防火墙不开放11434 端口:

在安装完dify后防火墙策略INPUT 链:默认策略为 ACCEPT,即允许所有符合后续规则的数据包进入系统。

那么就可以设置11434 端口不允许外部访问,具体规则如下:

iptables -I INPUT -p tcp --dport 11434 -j DROP
iptables -I INPUT -p tcp -s 127.0.0.1/8 --dport 11434 -j ACCEPT
iptables -I INPUT -p tcp -s 172.17.0.1/16 --dport 11434 -j ACCEPT
iptables -I INPUT -p tcp -s 172.18.0.1/16 --dport 11434 -j ACCEPT
iptables -I INPUT -p tcp -s 172.19.0.1/16 --dport 11434 -j ACCEPT
iptables -I INPUT -p tcp -s IP --dport 11434 -j ACCEPT    //系统本机IP地址

说明:172.17.0.1/16,172.18.0.1/16,172.19.0.1/16为容器使用的IP地址,大家可以根据具体实际更改,规则的详细意思是阻止系统外部访问11434端口,但是运行本机系统包括容器的网络访问11434端口。

如何确认本机有哪些网段和容器网段呢?如欧拉系统在登录的时候就会提示:

或者使用命令:ip a 查看:

通过如nginx代理等,限制白名单访问:

ollama监听地址修改为:127.0.0.1:11434

nginx可以根据情况是否启用ssl,如有ssl的配置参考:

yum -y install nginx
# pwd
/etc/nginx/conf.d
[root@localhost conf.d]# cat deepseek-uat.conf 
server {
listen 11435 ssl;
server_name deepseek-uat.byingfin.com;
ssl_certificate /etc/nginx/ssl/域名.pem;
ssl_certificate_key /etc/nginx/ssl/域名.key;
#ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_protocols TLSv1.3 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4;
ssl_prefer_server_ciphers on;
add_header Access-Control-Allow-Origin *; #如果有跨域问题,可以解除注释
add_header Strict-Transport-Security "max-age=31536000";
access_log /var/log/nginx/access.log main;
#location ~(WW_verify_)*\.(txt)$ {
# root html;
# index index.html index.htm;
#}
location / {
#ip 白名单配置
allow ip;   // 本机IP
allow 127.0.0.1/8;
allow 172.17.0.1/16;
allow 172.18.0.1/16;
allow 172.19.0.1/16;
deny all;
 #IP 白名单配置结束
root html;
index index.html index.htm index.jsp;
proxy_pass http://127.0.0.1:11434;
proxy_connect_timeout 200;
proxy_read_timeout 7200;
proxy_send_timeout 7200;
proxy_buffer_size 128k;
proxy_buffers 32 32k;
proxy_busy_buffers_size 128k;
proxy_redirect off;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_host;
# access_log off;
}
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
location ~ /\.well-known/pki-validation/ {
root html;
index index.html index.htm;
}
}

同理如果是没有ssl的配置也是类似主要是在location区域配置:

server {
    listen       80;   //根据实际更改监听端口
    server_name  your_domain.com;   //根据实际填写域名,也可以去掉域名
    location / {
       #ip 白名单配置
       allow ip;   // 本机IP
       allow 127.0.0.1/8;
       allow 172.17.0.1/16;
      allow 172.18.0.1/16;
      allow 172.19.0.1/16;
      deny all;
      #IP 白名单配置结束
       # 其他配置
       root html;
      index index.html index.htm index.jsp;
			proxy_pass http://127.0.0.1:11434;
      proxy_connect_timeout 200;
      proxy_read_timeout 7200;
      proxy_send_timeout 7200;
      proxy_buffer_size 128k;
      proxy_buffers 32 32k;
      proxy_busy_buffers_size 128k;
      proxy_redirect off;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
     proxy_set_header X-Real-IP $remote_addr;
     proxy_set_header Host $http_host;
    # access_log off;
    }
}

如果服务器是云服务器,那就更容易处理了,只需要在相应的ECS云服务器的安全配置面板不开放ollama的端口即可,这样外部就不能直接访问ollama端口了,还可以配置IP白名单等。

以上措施是实际可行的安全加固措施,欢迎大家互相交流分享。

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言