分类: AI

  • Ollama 安全加固措施

    Ollama 安全加固措施

    为了保护在公网上运行的 Ollama 服务并限制访问,可以采取以下措施:

    方法一:通过防火墙限制

    Linux系统 使用 ufw 防火墙

    1. 检查 Ollama 默认监听的端口(通常是 11434)。
    2. 配置 ufw 只允许指定 IP 访问 11434 端口:
    # 允许指定 IP 访问 11434 端口
    ufw allow from <指定IP> to any port 11434 proto tcp
    
    # 拒绝其他所有 IP 访问 11434 端口
    ufw deny in to any port 11434 proto tcp

    <指定IP> 替换为允许访问的 IP 地址(如 192.168.1.100)。完成后,重新加载防火墙规则:

    ufw reload

    确保 ufw 已启用:

    ufw enable

    Windows 系统(使用 Windows 防火墙)

    1. 打开“Windows Defender 防火墙” -> “高级设置”。
    2. 创建一个新的“入站规则”,选择端口 11434,协议为 TCP。
    3. 在“范围”选项中,指定允许访问的远程 IP 地址。
    4. 保存并应用规则,其他未指定的 IP 将被阻止。

    方法二:修改 Ollama 监听地址(配合防火墙)

    默认情况下,Ollama 可能监听 0.0.0.0(所有接口)。你可以将其改为仅监听本地接口(127.0.0.1),然后通过反向代理(如 Nginx)控制访问。

    设置环境变量 OLLAMA_HOST

    Linux

    /etc/systemd/system/ollama.service 中添加:

    Environment="OLLAMA_HOST=127.0.0.1:11434"

    然后重启ollama服务

    systemctl daemon-reload
    systemctl restart ollama

    Windows

    在系统环境变量中添加 OLLAMA_HOST=127.0.0.1:11434,然后重启 Ollama 服务。

    通过配置Nginx反向代理,在代理层限制 IP:

    server {
        listen 80;
        location / {
            proxy_pass http://127.0.0.1:11434;
            allow <指定IP>;  # 替换为允许的 IP
            deny all;        # 拒绝其他 IP
        }
    }

    重启 Nginx:

    systemctl restart nginx

    方法三:使用 VPN 或内网访问

    将 Ollama 部署在本地网络中,通过 VPN连接到服务器,避免直接暴露在公网上。仅允许 VPN 内的 IP 访问服务。

  • LLM 的双重含义

    什么是LLM?它为什么有不同的意思?

    你可能在不同的场合听到过“LLM”这个词,但它的意思可能让你有点混淆。其实,LLM在不同的领域有不同的含义,今天我们就来聊聊它到底是什么意思,为什么它会有这么多不同的解释。

    LLM:法学硕士

    首先,LLM 在法学界是非常常见的缩写,它代表的是“法学硕士”(Master of Laws)。如果你知道有些人去大学读法律,学完之后可能拿到一个叫做“法学硕士”的学位,这个学位就叫做LLM。它是专门给那些已经获得法学本科学位的人,进一步深造的学位。

    举个例子:你读完法律本科后,决定继续学习法律,专攻某一方面的知识,比如国际法、商法等,这时候你就可以去申请法学硕士(LLM)学位。这种学位通常在一些国家很有用,能够帮助你在法律界获得更好的职位。

    所以,在法学领域,LLM 就是法学硕士的意思。

    LLM:大语言模型

    在人工智能(AI)领域,LLM有着完全不同的含义。在AI里,LLM代表的是“大语言模型”(Large Language Model)。这是一种专门用来处理语言的人工智能技术。它能够读懂和生成自然语言,比如你和智能助手对话,智能助手能理解你的问题并给出回答,这背后就可能是一个大语言模型在工作。

    这些大语言模型是通过大量的数据训练出来的,比如从互联网上抓取各种文章、书籍、对话记录等内容,它们学会了语言的规则和结构。所以,当你输入一句话,它就能根据学到的知识给你一个合适的回答。比如,像GPT-3GPT-4就是知名的大语言模型。

    简单来说,LLM 在AI领域是指用来做语言处理的强大程序,它可以帮助人们更好地理解、生成和使用语言。

    为什么LLM有两种不同的意思?

    那为什么“LLM”这个词会有两种完全不同的意思呢?其实这就是因为不同的领域使用这个缩写的时候,它们有各自的传统和需求。

    1. 法学界的历史 在法学界,LLM 作为法学硕士学位的缩写已经存在很久了,很多国家的法学院都习惯使用这个缩写。因此,当我们提到“LLM”时,大家首先会想到的是法学硕士。
    2. AI技术的快速发展 在人工智能领域,随着技术的发展,新的术语和缩写不断涌现。LLM 这个缩写被用来代表“大语言模型”,是因为这种技术需要处理大量的语言数据,而“LLM”也正好符合这个概念。

    由于两者的应用场景完全不同,虽然它们用的是同一个缩写,但人们根据讨论的上下文可以很容易区分是指哪个意思。

    如何避免混淆?

    虽然LLM在法学和AI领域有不同的含义,但只要你理解了它们各自的背景,基本上就不容易混淆了。这里有几个简单的方法帮助你区分它们:

    • 如果你在讨论法律、律师、法学教育等话题,LLM指的肯定是“法学硕士”。比如,你听到有人说“他刚刚拿到LLM学位”,那肯定是在说他获得了法学硕士学位。
    • 如果你在谈论人工智能、机器学习、语言处理等技术话题,LLM指的就是“大语言模型”。比如,当有人提到“这个AI是基于LLM构建的”,那肯定是在说它是使用了大语言模型来处理语言。

  • Debian12 安装Dify大语言模型(LLM) 应用开发平台

    Dify 是一款开源的大语言模型(LLM)应用开发平台。它融合了后端即服务(Backend as Service)和 LLMOps 的理念,使开发者可以快速搭建生产级的生成式 AI 应用。即使你是非技术人员,也能参与到 AI 应用的定义和数据运营过程中。

    Dify 内置了构建 LLM 应用所需的关键技术栈,包括对数百个模型的支持、直观的 Prompt 编排界面、高质量的 RAG 引擎、稳健的 Agent 框架、灵活的流程编排,并同时提供了一套易用的界面和 API。这为开发者节省了许多重复造轮子的时间,使其可以专注在创新和业务需求上。

    1. 安装 Docker 和 Docker Compose

    在服务器上运行以下命令安装 Docker:

    curl -fsSL https://get.docker.com -o get-docker.sh && sh get-docker.sh

    2. 安装 Dify

    2.1 克隆 Dify 源代码至本地环境

    git clone https://github.com/langgenius/dify.git --branch 1.0.1

    2.2 启动 Dify

    进入 Dify 源代码的 Docker 目录,并执行以下步骤:

    # 进入 Dify 源代码的 Docker 目录
    cd dify/docker
    
    # 复制环境配置文件
    cp .env.example .env
    
    # 启动 Docker 容器
    docker compose up -d
    
    # 最后检查是否所有容器都正常运行
    docker compose ps

    2.3 访问 Dify 进行安装

    在浏览器中访问以下地址,完成安装流程:

    http://your_server_ip/install

    3. 在 Dify 中接入模型

    在 Dify 控制面板中,进入 设置 > 模型供应商,然后点击 接入模型
    按照界面指引,输入模型供应商相关 API 信息,并完成模型的接入配置。

  • F5-TTS 安装与使用教程

    F5-TTS 安装与使用教程

    F5-TTS 是一个 高质量的文本转语音(TTS, Text-to-Speech) 开源项目

    1. 环境准备

    1.1 安装 Conda(如果未安装)

    F5-TTS 依赖 Python 3.10,建议使用 Conda 创建隔离环境。如果您的系统尚未安装 Conda,可以前往 Anaconda 官网Miniconda 官网 下载并安装合适的版本。

    1.2 创建 Conda 环境并激活

    # 创建 Python 3.10 的 Conda 环境
    conda create -n f5-tts python=3.10  
    
    # 激活环境
    conda activate f5-tts

    2. 安装 PyTorch

    NVIDIA-CUDA

    pip install torch==2.4.0+cu124 torchaudio==2.4.0+cu124 --extra-index-url https://download.pytorch.org/whl/cu124

    3. 下载 F5-TTS 源码并安装

    # 克隆 F5-TTS 仓库
    git clone https://github.com/SWivid/F5-TTS.git
    cd F5-TTS
    
    # 安装 F5-TTS
    pip install -e .

    4. 运行 F5-TTS

    F5-TTS 提供了一个 Gradio Web 界面,可用于进行文本转语音推理。运行以下命令即可启动 Web UI:

    f5-tts_infer-gradio

    启动后,终端会显示一个本地地址

    * Running on local URL:  http://127.0.0.1:7860

    打开浏览器访问该地址即可使用 F5-TTS 进行文本转语音转换。

    5. 音频处理

    使用 ffmpeg.m4a 文件转换为 .wav 并剪辑前 15 秒,可以使用以下命令:

    ffmpeg -i input.m4a -t 15 -acodec pcm_s16le -ar 44100 -ac 2 output.wav

    参数说明:

    • -i input.m4a :输入文件
    • -t 15 :剪辑前 15 秒
    • -acodec pcm_s16le :使用 PCM 16-bit little-endian 编码
    • -ar 44100 :设置采样率为 44100Hz
    • -ac 2 :输出为双声道
    • output.wav :输出文件名

    如果你需要从某个时间点(如 30 秒处)开始剪辑 15 秒,可以使用 -ss 选项:

    ffmpeg -i input.m4a -ss 30 -t 15 -acodec pcm_s16le -ar 44100 -ac 2 output.wav

    这样会从第 30 秒开始截取 15 秒音频并转换为 WAV 格式。

  • AI驱动的供应链污染及其安全隐患分析

    随着人工智能(AI)的发展,越来越多的开发者和企业依赖AI生成代码、优化软件和提升生产力。然而,AI在供应链中的应用也带来了严重的安全隐患,攻击者可以利用AI技术污染软件供应链,导致个人用户、开发者和企业面临各种安全风险。

    1. 小白用户下载第三方AI插件,导致系统被植入恶意代码

    案例描述

    • 小白用户在非官方渠道下载了一款“智能办公插件”或AI图像生成工具的扩展插件,但插件内嵌了恶意代码。
    • 恶意代码可能包含远程控制程序、键盘记录器、勒索软件等。
    • 用户未经检查直接运行插件,导致系统被感染。

    安全隐患

    • 个人数据泄露,账号密码、支付信息被窃取。
    • 电脑被远程控制,成为“僵尸网络”一部分。
    • 重要文件被加密,要求支付赎金解锁。

    防范措施

    • 只从官方渠道下载软件和插件。
    • 使用安全软件扫描插件,避免恶意代码感染。
    • 在沙盒或虚拟机环境中测试插件,确保安全性。
    • 提高安全意识,不随意运行来源不明的脚本。

    2. AI生成的代码未经审查上线,导致安全漏洞

    案例描述

    • 开发者使用AI代码生成工具加速开发,但未进行充分的安全审查。
    • AI生成的代码可能包含SQL注入、XSS(跨站脚本攻击)或未授权访问等漏洞。
    • 攻击者利用这些漏洞入侵系统,造成数据泄露或服务宕机。

    安全隐患

    • 敏感数据泄露,可能导致企业声誉受损。
    • 服务器被入侵,影响系统稳定性。
    • 面临法律诉讼,造成经济损失。

    防范措施

    • 对AI生成的代码进行严格安全审查。
    • 使用静态代码分析工具检测安全漏洞。
    • 进行安全测试,模拟攻击场景。
    • 建立代码审查流程,确保代码质量和安全性。

    3. AI联网搜索的恶意代码被直接复制到生产环境

    案例描述

    • 小白程序员在开发过程中使用AI联网搜索写代码进行快速开发。
    • AI提供的代码中隐藏了恶意后门,但程序员未仔细审查。
    • 该代码被部署到生产环境,导致服务器被入侵。

    安全隐患

    • 服务器长期被攻击者控制,可能导致数据泄露。
    • 攻击者窃取企业机密信息,造成商业损失。
    • 可能面临合规性问题和法律风险。

    防范措施

    • 仅信任权威的代码来源,不随意复制粘贴。
    • 使用代码审查工具检测潜在风险。
    • 在测试环境中进行严格测试,确保安全性。
    • 限制AI代码生成工具的访问权限。

    4. AI优化的开源项目隐藏恶意代码

    案例描述

    • 攻击者利用AI生成开源代码并提交到流行项目。
    • 由于代码较复杂,维护者未深入审查直接合并。
    • 受影响的开源项目被广泛使用,导致大量系统受到攻击。

    安全隐患

    • 供应链污染,影响范围广泛。
    • 恶意代码可能导致远程控制或数据窃取。
    • 企业使用该代码后,面临重大安全威胁。

    防范措施

    • 对开源贡献代码进行严格审查。
    • 监控开源库的维护动态,避免使用可疑代码。
    • 采用SBOM(软件物料清单)追踪供应链依赖。

    5. AI优化的编译器或代码压缩工具被污染

    案例描述

    • 开发者使用AI驱动的编译器或压缩工具进行代码优化。
    • 由于工具被污染,编译后的代码被植入恶意逻辑。
    • 该代码最终进入生产环境,影响用户。

    安全隐患

    • 恶意代码难以察觉,长期潜伏。
    • 可能窃取用户数据或劫持API请求。
    • 影响多个企业或开发团队。

    防范措施

    • 仅使用经过安全审计的编译工具。
    • 代码生成后进行额外的安全检查。
    • 监测应用行为,防止异常代码执行。

    6. AI生成的伪造开源项目欺骗开发者

    案例描述

    • 攻击者利用AI生成完整的开源项目,提供详细文档和示例代码。
    • 该项目被宣传为“创新的开源解决方案”,吸引开发者使用。
    • 实际上,该项目隐藏后门,允许远程控制。

    安全隐患

    • 受信任的开源平台被污染,影响开发者社区。
    • 企业误用后门代码,导致数据泄露。
    • 供应链信任体系受损。

    防范措施

    • 避免轻信新兴开源项目,优先使用知名软件。
    • 检查开源库的维护历史,确保代码安全。
    • 对第三方依赖进行安全扫描。

    AI在提高开发效率的同时,也带来了前所未有的安全挑战。为防范AI驱动的供应链污染,需要开发者、企业和安全研究人员共同努力:

    • 小白用户 提高安全意识,不随意下载和运行不明来源的代码,尤其是AI生成的插件和工具。
    • 开发者 加强代码审查,避免误用AI生成的恶意代码。
    • 企业 对供应链安全进行全面管理,防止供应链攻击。

    AI的安全问题不容忽视,只有建立完善的安全机制,才能在享受AI带来的便利的同时,避免潜在的安全风险。

  • Debian12安装 Immich 进行自托管照片和视频

    Immich 是一个强大的自托管照片和视频管理解决方案,允许用户在自己的服务器上存储、管理和浏览照片,同时提供智能搜索、面部识别等 AI 功能,保护您的隐私。

    1. 介绍 Immich

    Immich 的主要功能

    • 自动备份:支持手机和桌面端自动同步照片和视频。
    • 智能搜索:基于 AI 的搜索和标签功能,快速查找照片。
    • 面部识别:自动识别照片中的人物并进行分类。
    • 隐私保护:完全自托管,确保数据不会泄露到第三方服务器。
    • 高效存储:支持增量备份和重复数据删除,优化存储空间。
    • 跨平台支持:支持 Android、iOS、Web 和桌面端访问。

    2. 安装 Docker 和 Docker Compose

    在 Linux 服务器上运行以下命令安装 Docker:

    curl -fsSL https://get.docker.com -o get-docker.sh && sh get-docker.sh

    安装完成后,检查 Docker 版本:

    docker --version

    安装 Docker Compose:

    apt install -y docker-compose

    3. 下载 Immich 并配置环境变量

    3.1 创建 Immich 安装目录

    mkdir ./immich-app && cd ./immich-app

    3.2 下载官方 Docker Compose 文件

    # &nbsp;docker-compose.yml
    wget -O docker-compose.yml https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml
    
    # .env
    wget -O .env https://github.com/immich-app/immich/releases/latest/download/example.env

    docker-compose.yml文件

    #
    # WARNING: To install Immich, follow our guide: https://immich.app/docs/install/docker-compose
    #
    # Make sure to use the docker-compose.yml of the current release:
    #
    # https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml
    #
    # The compose file on main may not be compatible with the latest release.
    
    name: immich
    
    services:
      immich-server:
        container_name: immich_server
        image: ghcr.io/immich-app/immich-server:${IMMICH_VERSION:-release}
        # extends:
        #   file: hwaccel.transcoding.yml
        #   service: cpu # set to one of [nvenc, quicksync, rkmpp, vaapi, vaapi-wsl] for accelerated transcoding
        volumes:
          # Do not edit the next line. If you want to change the media storage location on your system, edit the value of UPLOAD_LOCATION in the .env file
          - ${UPLOAD_LOCATION}:/usr/src/app/upload
          - /etc/localtime:/etc/localtime:ro
        env_file:
          - .env
        ports:
          - '2283:2283'
        depends_on:
          - redis
          - database
        restart: always
        healthcheck:
          disable: false
    
      immich-machine-learning:
        container_name: immich_machine_learning
        # For hardware acceleration, add one of -[armnn, cuda, openvino] to the image tag.
        # Example tag: ${IMMICH_VERSION:-release}-cuda
        image: ghcr.io/immich-app/immich-machine-learning:${IMMICH_VERSION:-release}
        # extends: # uncomment this section for hardware acceleration - see https://immich.app/docs/features/ml-hardware-acceleration
        #   file: hwaccel.ml.yml
        #   service: cpu # set to one of [armnn, cuda, openvino, openvino-wsl] for accelerated inference - use the `-wsl` version for WSL2 where applicable
        volumes:
          - model-cache:/cache
        env_file:
          - .env
        restart: always
        healthcheck:
          disable: false
    
      redis:
        container_name: immich_redis
        image: docker.io/redis:6.2-alpine@sha256:148bb5411c184abd288d9aaed139c98123eeb8824c5d3fce03cf721db58066d8
        healthcheck:
          test: redis-cli ping || exit 1
        restart: always
    
      database:
        container_name: immich_postgres
        image: docker.io/tensorchord/pgvecto-rs:pg14-v0.2.0@sha256:739cdd626151ff1f796dc95a6591b55a714f341c737e27f045019ceabf8e8c52
        environment:
          POSTGRES_PASSWORD: ${DB_PASSWORD}
          POSTGRES_USER: ${DB_USERNAME}
          POSTGRES_DB: ${DB_DATABASE_NAME}
          POSTGRES_INITDB_ARGS: '--data-checksums'
        volumes:
          # Do not edit the next line. If you want to change the database storage location on your system, edit the value of DB_DATA_LOCATION in the .env file
          - ${DB_DATA_LOCATION}:/var/lib/postgresql/data
        healthcheck:
          test: >-
            pg_isready --dbname="$${POSTGRES_DB}" --username="$${POSTGRES_USER}" || exit 1;
            Chksum="$$(psql --dbname="$${POSTGRES_DB}" --username="$${POSTGRES_USER}" --tuples-only --no-align
            --command='SELECT COALESCE(SUM(checksum_failures), 0) FROM pg_stat_database')";
            echo "checksum failure count is $$Chksum";
            [ "$$Chksum" = '0' ] || exit 1
          interval: 5m
          start_interval: 30s
          start_period: 5m
        command: >-
          postgres
          -c shared_preload_libraries=vectors.so
          -c 'search_path="$$user", public, vectors'
          -c logging_collector=on
          -c max_wal_size=2GB
          -c shared_buffers=512MB
          -c wal_compression=on
        restart: always
    
    volumes:
      model-cache:

    .env文件

    # You can find documentation for all the supported env variables at https://immich.app/docs/install/environment-variables
    
    # The location where your uploaded files are stored
    UPLOAD_LOCATION=./library
    # The location where your database files are stored
    DB_DATA_LOCATION=./postgres
    
    # To set a timezone, uncomment the next line and change Etc/UTC to a TZ identifier from this list: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List
    # TZ=Etc/UTC
    
    # The Immich version to use. You can pin this to a specific version like "v1.71.0"
    IMMICH_VERSION=release
    
    # Connection secret for postgres. You should change it to a random password
    # Please use only the characters `A-Za-z0-9`, without special characters or spaces
    DB_PASSWORD=postgres
    
    # The values below this line do not need to be changed
    ###################################################################################
    DB_USERNAME=postgres
    DB_DATABASE_NAME=immich

    3.3 配置环境变量

    编辑 .env 文件:

    nano .env

    修改以下关键参数:

    # You can find documentation for all the supported env variables at https://immich.app/docs/install/environment-variables
    
    # The location where your uploaded files are stored
    UPLOAD_LOCATION=./library
    # The location where your database files are stored
    DB_DATA_LOCATION=./postgres
    
    # To set a timezone, uncomment the next line and change Etc/UTC to a TZ identifier from this list: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List
    # TZ=Etc/UTC
    
    # The Immich version to use. You can pin this to a specific version like "v1.71.0"
    IMMICH_VERSION=release
    
    # Connection secret for postgres. You should change it to a random password
    # Please use only the characters `A-Za-z0-9`, without special characters or spaces
    DB_PASSWORD=postgres
    
    # The values below this line do not need to be changed
    ###################################################################################
    DB_USERNAME=postgres
    DB_DATABASE_NAME=immich
    • 指定备份存储位置:
      • 请在UPLOAD_LOCATION中填写您希望存储备份文件的绝对路径。建议选择服务器上具有足够可用空间的新建目录,以确保备份顺利进行。
    • 设置数据库密码:
      • 强烈建议您修改DB_PASSWORD,为其设置一个自定义的强密码。由于PostgreSQL服务仅在本地Docker容器内运行,此密码用于本地身份验证。为避免Docker在解析密码时出现问题,请仅使用A-Za-z0-9范围内的字符。您可以使用pwgen等工具生成安全的随机密码。

    4. 启动 Immich

    运行 Docker Compose 启动 Immich

    docker-compose.yml 所在目录运行:

    docker compose up -d

    5. 访问 Immich Web 界面

    在浏览器中输入:

    http://<服务器IP>:2283

    首次访问时,需要注册一个管理员账户,登录后即可开始使用。