标签: Linux

  • 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 访问服务。

  • Debian 12 上使用 Fail2Ban 来增强 SSH 的安全性

    使用 Fail2Ban 来增强 SSH 安全性是一个非常有效的选择,特别是针对暴力破解攻击。Fail2Ban 可以监控系统日志并自动封禁恶意 IP 地址,减少暴力破解的尝试。以下是配置 Fail2Ban 的步骤:

    1. 安装 Fail2Ban

    Debian 12 默认软件仓库中包含 Fail2Ban,可以通过以下命令安装:

    apt update
    apt install fail2ban

    安装完成后,Fail2Ban 会自动启动。你可以使用以下命令检查其状态:

    systemctl status fail2ban

    2. 配置 Fail2Ban

    Fail2Ban 的配置文件位于 /etc/fail2ban/ 目录下。默认的全局配置文件是 /etc/fail2ban/jail.conf,但建议不要直接修改该文件,而是创建一个本地配置文件 /etc/fail2ban/jail.local 或者在 /etc/fail2ban/jail.d/ 目录下添加自定义配置。

    创建本地配置文件

    首先,复制默认配置文件并编辑:

    cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
    nano /etc/fail2ban/jail.local

    配置 SSH 防护

    jail.local 文件中,找到 [sshd] 部分,或者添加以下内容:

    [sshd]
    enabled  = true
    port     = 22
    filter   = sshd
    logpath  = /var/log/auth.log
    maxretry = 5
    bantime  = 3600
    findtime = 600

    说明:

    • enabled = true:启用 SSH 防护。
    • port = 22:SSH 默认端口(如果更改过端口,请相应调整)。
    • filter = sshd:使用内置的 SSH 过滤器。
    • logpath = /var/log/auth.log:Debian 12 中 SSH 日志的默认路径。
    • maxretry = 5:如果超过 5 次登录失败,IP 将被封禁。
    • bantime = 3600:封禁时间为 1 小时(单位:秒,视情况调整)。
    • findtime = 600:统计失败登录尝试的时间窗口为 10 分钟。

    完成后保存并退出编辑器。

    3. 启动并测试 Fail2Ban

    配置完成后,重启 Fail2Ban 以应用配置:

    systemctl restart fail2ban

    检查 Fail2Ban 是否正常运行:

    fail2ban-client status

    查看 SSH 防护的具体状态:

    fail2ban-client status sshd

    4. 监控和解禁

    你可以随时查看被封禁的 IP 地址,并手动解禁:

    查看被封禁的 IP

    fail2ban-client get sshd banip

    手动解禁某个 IP(如果误封)

    fail2ban-client unban 目标IP

    注意事项

    • 确保 SSH 服务(sshd)已启用并正常运行。
    • 如果使用了非标准日志路径,需要调整 logpath
    • 定期检查日志文件 /var/log/fail2ban.log,确保规则已生效。
  • Linux发行版在日常使用与业务需求的最佳选择

    关于如何在日常使用和业务应用中选择合适的Linux发行版的实用指南。文章详细分析了不同Linux发行版的特性、优势以及适用场景,以便能够根据自身需求做出选择。

    一、日常使用(个人用户、开发者)

    适用于普通用户、开发者、开源爱好者等,关注易用性、社区支持、桌面体验和软件生态

    1. 适合桌面用户

    • Ubuntu(桌面版)
      • 优势:安装简单,默认支持大量硬件,应用商店丰富,长期支持(LTS)版本可用。强大的社区支持,丰富的文档。
      • 适用场景:办公、日常上网、影音娱乐、开发环境(VS Code、Docker、PyCharm等)。
      • 缺点:默认启用 Snap,有时会影响软件加载速度。
    • Linux Mint
      • 优势:基于 Ubuntu,界面类似 Windows,适合新手,默认带有更多开箱即用的软件。对老旧硬件兼容性更好。
      • 适用场景:替代 Windows 或 macOS,稳定性好,轻量级硬件支持更友好。
      • 缺点:社区活跃度略低于 Ubuntu。
    • Fedora Workstation
      • 优势:采用 GNOME 桌面,支持最新的 Linux 技术(如 Wayland、PipeWire),开发者友好,拥有较新的软件包。
      • 适用场景:开发者、喜欢尝鲜的人。
      • 缺点:生命周期较短(6 个月一次大更新)。
    • Manjaro
      • 优势:基于 Arch,安装方便,提供滚动更新但更稳定,拥有 AUR(Arch User Repository),软件资源丰富。
      • 适用场景:希望使用 Arch 但不想手动配置的用户。
      • 缺点:部分更新可能导致系统不稳定。
    • Elementary OS
      • 优势:注重美观和简洁,界面类似 macOS,用户体验良好。
      • 适用场景:追求美观和易用性的用户。
      • 缺点:软件生态相对较小。
    • Pop!_OS
      • 优势:由 System76 开发,对游戏和开发支持良好,特别是对NVIDIA显卡支持优化。
      • 适用场景:游戏玩家,开发者,特别是深度学习开发者。
      • 缺点:相对较新的发行版,社区规模小于Ubuntu。

    2. 适合开发者

    • Ubuntu(LTS)
      • 适合大多数开发环境(Python、Node.js、Go、Docker、Kubernetes)。
      • 强大的社区支持,问题易解决。
    • Debian
      • 更稳定,适合需要长期运行的开发环境(服务器、容器化部署)。
      • 默认仓库软件较旧,可手动添加 backports 或使用 Testing 版。
    • Arch Linux
      • 适合高级用户,完全定制化,提供最新的软件版本和内核。
      • 适合构建极简、个性化的开发环境。
    • openSUSE Tumbleweed
      • 优势:滚动更新模型,提供最新的开发工具和库,YaST 管理工具强大。
      • 适用场景:追求最新软件的开发者。
      • 缺点:滚动更新可能带来不稳定性。

    二、业务使用(服务器、企业、生产环境)

    适用于服务器、数据中心、云计算、企业内部系统等,关注稳定性、安全性、长期支持、软件兼容性

    1. 企业服务器

    • Ubuntu Server(LTS)
      • 适合云计算(支持 AWS、Azure、GCP)、容器化部署(Docker、K8s)。
      • 5 年 LTS + 可选 10 年扩展支持(Ubuntu Pro)。
    • Debian
      • 以稳定著称,适用于 Web 服务器、数据库等长期运行的应用。
      • 软件更新相对较慢,但非常可靠。
    • Rocky Linux / AlmaLinux
      • RHEL(Red Hat Enterprise Linux)的完全兼容替代品,适用于企业生产环境。
      • 长期支持,适用于需要稳定性的企业服务器。
    • Red Hat Enterprise Linux(RHEL)
      • 适用于企业级业务,提供商业支持(Red Hat 订阅)。
      • 大规模生产环境、企业 IT 部门使用较多。
    • Oracle Linux
      • 优势:与Oracle产品兼容性好,适合运行Oracle数据库等。
      • 适用场景:运行Oracle相关业务的企业。
      • 缺点:相对RHEL,社区规模较小。

    2. 高性能计算 / 数据中心

    • SUSE Linux Enterprise Server(SLES)
      • 适用于 SAP、大型企业应用,专注于企业级可靠性。
    • Amazon Linux
      • AWS 官方 Linux 发行版,针对 AWS 进行了优化,适用于云计算。

    3. 容器 / 云计算 / DevOps

    • Ubuntu Server
      • 适用于 Docker、Kubernetes,支持 cloud-init,兼容 AWS/GCP/Azure。
    • Debian
      • 轻量级,适用于自定义容器环境,基础镜像占用较小。
    • RHEL / Rocky Linux / AlmaLinux
      • 适用于企业级 Kubernetes 部署(如 OpenShift)。
    • Flatcar Container Linux
      • 专为容器化工作负载设计(类似于已停更的 CoreOS)。

    4. 嵌入式 / 轻量级服务器

    • Alpine Linux
      • 体积小,安全性高,适用于容器和嵌入式设备。
    • Raspberry Pi OS
      • 适用于树莓派、物联网(IoT)项目。
    • NixOS
      • 优势:声明式配置,可重复构建,适合构建高度定制化的嵌入式系统。
      • 适用场景:需要高度定制化和可重复构建的嵌入式系统。
      • 缺点:学习曲线陡峭。
  • Docker安装Nextcloud

    Nextcloud 是一款开源的私有云存储服务,通过 Docker 部署 Nextcloud 可以快速搭建私有云存储服务,适用于个人和小型团队使用。

    1. 创建工作目录

    在服务器上创建一个专门用于存放 Nextcloud 数据的目录,并进入该目录:

    mkdir nextcloud && cd nextcloud

    2. 编写 docker-compose.yml 配置文件

    创建 docker-compose.yml 文件,并填入以下内容:

    services:
      db:
        image: postgres
        restart: always
        volumes:
          - db:/var/lib/postgresql/data
        environment:
          - POSTGRES_DB=nextcloud
          - POSTGRES_USER=nextcloud
          - POSTGRES_PASSWORD=nextcloud
    
      app:
        image: nextcloud
        restart: always
        ports:
          - 8080:80
        volumes:
          - nextcloud:/var/www/html
        environment:
          - POSTGRES_HOST=db
          - POSTGRES_DB=nextcloud
          - POSTGRES_USER=nextcloud
          - POSTGRES_PASSWORD=nextcloud
        depends_on:
          - db
    
      cron:
        image: nextcloud
        restart: always
        volumes:
          - nextcloud:/var/www/html
        entrypoint: /cron.sh
        depends_on:
          - db
    
    volumes:
      db:
      nextcloud:

    2.1 说明

    • 数据库服务 (db): 使用 PostgreSQL 作为 Nextcloud 的数据库存储。
    • Nextcloud 应用 (app): 主要的 Nextcloud 服务,映射端口 8080
    • 定时任务 (cron): 运行 Nextcloud 的定期任务,如清理临时文件、维护数据库等。
    • 数据卷 (volumes): db 用于存储数据库数据,nextcloud 用于存储 Nextcloud 相关文件。

    3. 启动 Nextcloud

    使用 docker compose 命令启动 Nextcloud 容器:

    docker compose up -d

    4. 访问 Nextcloud

    在浏览器中打开以下地址访问 Nextcloud 界面:

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

    首次访问时,需要创建管理员账号并完成初始化。

  • Docker安装Stirling-PDF

    Stirling-PDF 是一款基于 Docker 容器的开源 PDF 处理工具,专为OCR设计,能够将扫描的 PDF 文件中的图像或文字转换为可编辑的文本。通过集成 Tesseract OCR 引擎,Stirling-PDF 使得用户能够轻松提取 PDF 文件中的文字,无论是扫描文档、图像还是其他类型的图文混合内容。

    该工具提供了一个简洁的 Web 界面,用户可以上传 PDF 文件进行批量处理、OCR 识别和文本提取。它支持多语言识别,适用于不同语言的 OCR 数据包,能够帮助用户处理多种语言的文档。

    1. 创建 stirling-pdf 目录并进入

    首先,我们需要在你的服务器上创建一个新的目录来存放相关文件,并进入该目录。

    mkdir stirling-pdf && cd stirling-pdf

    2. 下载 Tesseract OCR 库

    Stirling-PDF 使用 Tesseract OCR 库进行文字识别。因此,我们需要下载其相关的语言数据。

    git clone https://github.com/tesseract-ocr/tessdata.git

    3. 创建 docker-compose.yml 文件

    创建 docker-compose.yml 文件,以便使用 Docker Compose 部署 Stirling-PDF 服务。

    stirling-pdf 目录下,创建并编辑 docker-compose.yml 文件:

    services:
      stirling-pdf:
        restart: always
        image: frooodle/s-pdf:latest
        ports:
          - '8080:8080'  # 映射容器内的 8080 端口到宿主机的 8080 端口
        volumes:
          - ./tessdata:/usr/share/tessdata
          - ./extraConfigs:/configs
          - ./customFiles:/customFiles/
          - ./logs:/logs/
        environment:
          - DOCKER_ENABLE_SECURITY=false
          - INSTALL_BOOK_AND_ADVANCED_HTML_OPS=false
          - LANGS=en_GB

    4. 启动 Stirling-PDF

    创建完 docker-compose.yml 文件后,可以使用以下命令启动 Stirling-PDF 服务:

    docker compose up -d

    该命令会自动下载所需的 Docker 镜像并启动容器。启动完成后,Stirling-PDF 服务将开始运行。

    5. 使用浏览器访问 Stirling-PDF

    启动成功后,你可以在浏览器中通过以下地址访问 Stirling-PDF:

    http://<IP>:8080
    • 替换 <IP> 为你的服务器的 IP 地址,你就可以在浏览器中访问并使用 Stirling-PDF 进行 PDF 文件的处理了。
  • Debian 12 部署 HIDS Wazuh 指南

    Wazuh 是一款 开源的 SIEM(安全信息和事件管理)HIDS(主机入侵检测系统) 解决方案,能够实时监控系统日志、检测安全威胁、执行合规性审计,并提供可视化安全分析。
    Wazuh可用于入侵检测、日志分析、文件完整性监控、恶意软件检测、漏洞扫描等场景。Wazuh 适用于企业安全运营中心(SOC)、服务器与终端安全、DevSecOps 以及合规性管理,帮助企业和个人提升 IT 环境的安全性。

    1. 单节点部署 Wazuh

    首先,克隆 Wazuh 官方 Docker 仓库,并切换到指定版本:

    git clone https://github.com/wazuh/wazuh-docker.git -b v4.11.1

    进入 单节点部署目录

    cd wazuh-docker/single-node

    2. 配置 Wazuh

    Wazuh 由 管理器(Manager)索引器(Indexer)仪表板(Dashboard) 组成。

    2.1 调整内核参数

    在主机(Linux)上,提升 vm.max_map_count 以支持 Wazuh 索引器(需要 root 权限):

    sysctl -w vm.max_map_count=262144

    2.2 生成 SSL 证书

    运行以下命令,生成用于组件间通信的证书:

    docker compose -f generate-indexer-certs.yml run --rm generator

    2.3 启动 Wazuh

    完成配置后,启动 Wazuh 服务:

    docker compose up -d

    2.4 访问 Wazuh 仪表板

    部署完成后,在浏览器中访问:

    https://<Wazuh_IP>

    默认的登录凭据为:

    • 用户名admin
    • 密码SecretPassword

    3. 添加 Wazuh Agent

    要将受监控的主机接入 Wazuh,请在 Web 仪表板中进行操作:

    在 Wazuh 仪表板中添加 Agent

    1. 登录 Wazuh 仪表板。
    2. 导航到 HOME — OVERVIEW — Deploy new agent。
    3. 选择要监控的操作系统。
    4. 输入要监控的服务器地址、Agent 名称和分组。
    5. 复制生成的 Agent 安装命令,并粘贴到要监控的主机中执行。

    验证 Agent 连接
    返回到 HOME — OVERVIEW 页面,您应该能够看到新添加的 Agent。