OpenCloudOS9部署 CrowdSec 全流程(由z.ai提供)

这份教程基于我们刚才的实际对话整理,针对 OpenCloudOS 9(基于 RHEL 9)2GB 小内存宝塔面板/Nginx 环境量身定制。

OpenCloudOS 9 部署 CrowdSec 全流程实战方案

环境说明:

  • 操作系统:OpenCloudOS 9
  • 内存配置:2GB(需优化 Swap 及服务资源限制)
  • Web 环境:宝塔面板 + Nginx
  • 目标:部署 CrowdSec 主程序 + Nginx 日志采集 + 防火墙封禁

第一阶段:系统基础优化(Swap 扩容)

由于机器内存较小(2G),建议先将 Swap 从默认配置调整为 2G,防止后续服务崩溃。

  1. 查看当前 Swap 状态
    swapon -s
    free -h
    
  2. 关闭现有 Swap
    swapoff /www/swap
    # 或者关闭所有 swapoff -a
    
  3. 重建 2G Swap 文件
    注意:此处以 /www/swap 为例,请根据实际路径调整
    rm -f /www/swap
    dd if=/dev/zero of=/www/swap bs=1M count=2048 status=progress
    chmod 600 /www/swap
    mkswap /www/swap
    swapon /www/swap
    
  4. 验证结果
    free -h
    # 此时 Swap Total 应显示为 2.0G
    
    注:/etc/fstab 若已正确配置 /www/swap 则无需修改。

第二阶段:CrowdSec 仓库配置(绕过安装脚本限制)

由于 OpenCloudOS 9 尚未被 CrowdSec 官方自动脚本完全支持,需手动配置 RPM 仓库。

  1. 手动创建仓库文件
    vi /etc/yum.repos.d/crowdsec_crowdsec.repo
    
    写入以下内容:
    [crowdsec_crowdsec]
    name=crowdsec_crowdsec
    baseurl=https://packagecloud.io/crowdsec/crowdsec/rpm_any/rpm_any/$basearch
    repo_gpgcheck=1
    gpgcheck=1
    enabled=1
    gpgkey=https://packagecloud.io/crowdsec/crowdsec/gpgkey
           https://packagecloud.io/crowdsec/crowdsec/gpgkey/crowdsec-crowdsec-EDE2C695EC9A5A5C.pub.gpg
           https://packagecloud.io/crowdsec/crowdsec/gpgkey/crowdsec-crowdsec-C822EDD6B39954A1.pub.gpg
           https://packagecloud.io/crowdsec/crowdsec/gpgkey/crowdsec-crowdsec-FED78314A2468CCF.pub.gpg
    sslverify=1
    sslcacert=/etc/pki/tls/certs/ca-bundle.crt
    metadata_expire=3600
    
  2. 刷新缓存并检查包
    dnf makecache --enablerepo='crowdsec_crowdsec'
    dnf list crowdsec*
    

第三阶段:安装 CrowdSec 主程序与场景

  1. 安装 CrowdSec
    dnf install -y crowdsec
    systemctl enable --now crowdsec
    
  2. 安装 Nginx 和 ModSecurity 场景集合
    注意:在 RHEL 系中,不需要安装 crowdsec-nginx 包,而是通过命令安装集合并配置日志。
    cscli collections install crowdsecurity/nginx
    cscli collections install crowdsecurity/modsecurity
    

第四阶段:配置 Nginx 日志采集(宝塔适配)

OpenCloudOS 9 版本通常使用 /etc/crowdsec/acquis.d/ 目录进行分片配置,而不是单一的 acquis.yaml

  1. 创建采集配置文件
    vi /etc/crowdsec/acquis.d/bt_nginx.yaml
    
  2. 填入配置内容
    ---
    filenames:
      - /www/wwwlogs/*.log
    labels:
      type: nginx
    
    解释:指定宝塔默认日志路径,并标记类型为 nginx。
  3. 重载服务
    systemctl reload crowdsec
    
  4. 验证采集状态
    cscli metrics
    
    查看 Acquisition 部分的 Lines read 是否大于 0,如果数值在增加,说明日志读取成功。

第五阶段:安装并配置防火墙 Bouncer

由于是小内存机器,推荐使用 Firewall Bouncer(直接封 IP),而不是 Nginx Bouncer(消耗内存)。

  1. 查找可用的 Bouncer 包
    包名通常带后缀,需区分 iptablesnftables
    dnf list crowdsec* | grep firewall
    
  2. 安装对应包(二选一)
    • 推荐(nftables 版本):
      dnf install -y crowdsec-firewall-bouncer-nftables
      
    • 备选(iptables 版本):
      dnf install -y crowdsec-firewall-bouncer-iptables
      
  3. 修改 Bouncer 配置
    vi /etc/crowdsec/bouncers/crowdsec-firewall-bouncer.yaml
    
    修改 mode 参数以匹配你安装的版本:
    mode: nftables       # 如果装的是 iptables 版本,这里改为 iptables
    update_frequency: 10s
    deny_action: DROP
    
  4. 启动 Bouncer
    systemctl enable --now crowdsec-firewall-bouncer
    

第六阶段:资源限制优化(防 OOM)

为防止 CrowdSec 在 2G 内存机器上占用过高,建议添加内存限制。

  1. 限制 CrowdSec 主程序
    systemctl edit crowdsec
    
    输入以下内容:
    [Service]
    MemoryLimit=512M
    CPUQuota=50%
    
    systemctl daemon-reload
    systemctl restart crowdsec
    
  2. 限制 Firewall Bouncer
    systemctl edit crowdsec-firewall-bouncer
    
    输入以下内容:
    [Service]
    MemoryLimit=128M
    
    systemctl daemon-reload
    systemctl restart crowdsec-firewall-bouncer
    

第七阶段:功能测试与验证

  1. 检查服务状态
    systemctl status crowdsec
    systemctl status crowdsec-firewall-bouncer
    
  2. 模拟攻击测试
    添加一个测试 IP,观察是否被封禁:
    cscli decisions add --ip 1.2.3.4 --duration 1m --reason "test"
    
  3. 验证封禁结果
    • 查看 CrowdSec 决策列表:
      cscli decisions list
      
    • 查看防火墙规则(根据你选择的模式):
      # nftables 模式:
      nft list table inet crowdsec
      
      # iptables 模式:
      iptables -L -n | grep crowdsec
      

常见问题排查

  • Q: yum install crowdsec-nginx 提示找不到包?
    • A: RHEL 系不需要此包,请使用 cscli collections install crowdsecurity/nginx 并配置 acquis.d 即可。
  • Q: 报错 This system is not supported
    • A: 请使用第二阶段的“手动创建仓库文件”方法绕过脚本检测。
  • Q: cscli metrics 显示 Lines read 为 0?
    • A: 检查 /etc/crowdsec/acquis.d/ 下的路径是否正确(宝塔通常是 /www/wwwlogs/*.log),并检查 YAML 缩进是否正确(不要用 Tab 键)。
posted @ 2026-02-10 16:33  总统先生  阅读(4)  评论(0)    收藏  举报