关于 crowdsec
面向 CrowdSec 运维的技能,用于配置基于日志的检测、检查告警与决策并验证处置组件。强调先进行只读排查、谨慎修改,并确认 bouncer 实际执行了决策。
主要功能
- 01日志采集与解析器检查
- 02使用 cscli 排查告警和决策
- 03配置 bouncer 并验证执行
- 04AppSec WAF 配置指导
- 05运维变更前的安全检查
适用场景
- 01诊断日志未采集或未解析
- 02以模拟模式测试场景
- 03验证 bouncer 是否拦截测试流量
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ magnus919/ agent-skills --skill crowdsec安装后在 Claude Code 中输入/crowdsec确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
README.mdevals/evals.jsonreferences/appsec-deep-dive.mdconfig-reference.mdcscli-command-reference.mddatabase-config.mddocker-deployment.mdhub-collections.mdnginx-bouncer.mdoperations-checklist.mdproduction-hardening.mdtraefik-bouncer.mdtroubleshooting.md详细介绍
CrowdSec
CrowdSec 会检测日志和 HTTP 请求中的恶意行为,然后通过 LAPI 暴露警报和决策。引擎本身不会阻止流量:在宣称提供保护之前,至少安装并验证一个补救组件(bouncer)。
安全检查
进行任何变更之前,请确认目标主机/容器、操作范围、备份或回滚方案以及维护窗口。优先进行只读检查和模拟。未经记录原因并准备撤销方案,切勿手动删除决策、集合或数据。创建 bouncer 密钥时请保存好;密钥只会显示一次。调优场景时使用 simulation: true,以便观察检测结果而不执行拦截,然后在启用实时拦截之前验证允许列表。
选择部署方式
对于 Debian/Ubuntu,请添加 CrowdSec 软件源,安装 crowdsec,然后安装一个补救软件包,例如 crowdsec-firewall-bouncer-iptables 或 -nftables。对于 Docker Compose,只向必需的网络开放 LAPI(127.0.0.1:8080)、指标(127.0.0.1:6060)和 AppSec(127.0.0.1:7422),以只读方式挂载 /etc/crowdsec、/var/lib/crowdsec/data 和日志,并固定为经过审查的镜像版本。持久化数据目录,这是 v1.7.0+ 的强制要求。加载Docker 部署指南,查看完整的 compose 示例和远程 Agent 注意事项。
安装后,验证 systemctl status crowdsec(或容器健康状态),然后检查 cscli version、cscli collections list、采集指标和 bouncer 连接状态。未经明确的网络和身份验证设计,切勿将 LAPI 或 AppSec 暴露到公网。
从检测到拦截的工作流
- 根据实际日志格式选择集合,例如
crowdsecurity/linux、sshd、nginx、traefik或base-http-scenarios。 - 在
/etc/crowdsec/acquis.yaml或acquis.d/中配置采集;每个来源都需要labels.type,以便运行正确的解析器。对于不可靠的 NFS/SMB 或绑定挂载,请使用poll_without_inotify: true;对于缓冲日志,请使用use_time_machine: true。 - 使用
cscli metrics -o json检查解析器/场景命中情况和未解析的行。 - 使用配置文件将警报映射到决策。保留
profiles.yaml.local,并记住 YAML 序列会替换而非合并。 - 使用
cscli bouncers add NAME添加 bouncer,安全保存其一次性密钥,并通过cscli bouncers list和无害的测试决策进行验证。 - 确认反向代理/防火墙确实在执行决策;仅有警报或 LAPI 决策并不能证明请求已被拦截。
有关完整的配置指令、数据库选项和加固措施,请阅读 配置参考、 数据库配置和 生产环境加固。
cscli 基础知识
使用 cscli -o json 进行自动化,并保存命令输出、版本、主机和时间作为证据。只读排查通常会用到:
cscli version
cscli hub list
cscli collections list
cscli alerts list --contain "scenario:ssh-bf"
cscli decisions list -o json
cscli metrics -o json
cscli explain --file /path/to/sample.log
cscli hub update 会刷新本地 hub 索引,并可能更改本地状态。此操作是可选的,不属于只读排查流程,运行前需要通过上述安全检查。使用
collections|parsers|scenarios install/list/upgrade/inspect 管理 hub 项目;这些安装、升级和删除操作同样需要通过安全检查。使用 alerts list/inspect 和 decisions add/list/delete 管理警报和决策;变更命令需要通过上述安全检查。
使用 bouncers add/list/delete 和
machines add/list/delete 管理 bouncer 和机器。只有在确认目标地址和凭据后,才使用 console status、console enroll 和 lapi register。加载
完整的 cscli 参考,查看标志、输出模式和较少使用的命令。
采集与 AppSec WAF
最简文件采集配置如下:
filenames: [/var/log/nginx/*.log]
labels: {type: nginx}
对于 AppSec,请安装相关的虚拟补丁/CRS 集合,并添加一个监听 7422 的
appsec 采集源,配置为 appsec_config: crowdsecurity/appsec-default 和
labels.type: appsec。将来自代理的请求路由到 AppSec,并审慎决定故障时的行为:
故障时放行可保持服务可用,但可能绕过防护;故障时拒绝可提供更强的保护,
但可能导致服务中断。在启用拦截前,使用正常流量样例进行测试并检查
AppSec 指标。带内规则会拦截当前请求或要求进行验证码验证;带外规则会生成事件,
供后续场景处理。请阅读AppSec 深入介绍以及相关的
拦截器指南或
nginx 拦截器。
运维与故障排查
依次检查服务日志、cscli metrics、解析器/未解析计数、场景命中情况、
生效中的决策,以及拦截器的上次拉取时间。区分“未采集到日志”、“已采集日志但未解析”、
“已解析但未命中场景”、“已存在决策但拦截器数据过期”,以及“拦截器已执行但代理路由错误”。
不要将告警查询结果为空视为安全的证明。请使用故障排查指南和
运维检查清单进行范围明确的验证。
审慎使用配置文件和通知。使用 cscli notifications test NAME 测试通知插件;示例中
绝不要放入 Webhook 密钥或 CTI 密钥。在跨越信任边界时,为 LAPI 启用 TLS/mTLS,
并在依赖社区或拦截列表拉取的数据前进行审查。