crowdsec通过“检测—决策—响应—共享”四层逻辑构建分布式入侵防护:lapi为中心节点处理日志聚合与情报同步,agent采集日志并上报,bouncer执行封禁,社区情报双向流动实现闭环防护。

在Linux上用CrowdSec搭建基于社区威胁情报的分布式入侵防护系统,关键不是堆砌组件,而是理清“检测—决策—响应—共享”四层协同逻辑。它不像传统防火墙靠静态规则,而是靠全球用户实时喂养的恶意IP数据流驱动防护动作。
部署核心服务节点(LAPI)
分布式架构中必须有一个中心节点承担日志聚合、策略执行和情报同步职责,这个角色由Local API(LAPI)服务承担。
- 安装后修改 config/config.yaml:将 api.server.listen_uri 改为
0.0.0.0:8080,允许其他Agent连接 - 数据库必须切换为集中式后端(MySQL/PostgreSQL),避免SQLite在多节点下锁表或数据不一致;配置项 db_config.type 和连接参数需完整填写
- 在 api.server.trusted_ips 中加入所有参与节点的内网IP,确保只有可信节点能上报事件和拉取决策
- 启动服务:
sudo systemctl start crowdsec,确认sudo cscli metrics显示 LAPI 正常提供服务
配置边缘节点Agent并接入集群
每台受保护服务器运行一个Agent,负责采集本机日志、执行本地检测,并把结果发给LAPI。
- Agent配置文件 config/acquis.yaml 需明确指定日志源,例如SSH失败日志:
- /var/log/auth.log,Nginx访问日志:- /var/log/nginx/access.log - 确保 config/local_api_credentials.yaml 中的 api_url 指向主LAPI地址(如
http://lapi-ip:8080),且凭证有效 - Agent默认启用社区规则集,无需额外开启——只要联网,它每90分钟自动从CrowdSec官方CTI服务器同步最新恶意IP列表
- 验证连接:
sudo cscli machines list应显示本机状态为 running,且有活跃的API会话
部署Bouncer实现自动拦截
Bouncer是真正执行封禁动作的组件,它从LAPI获取决策(如“封禁IP X 4小时”),再落地到系统级防护载体。
- 根据环境选择对应Bouncer:轻量服务器用
crowdsec-firewall-bouncer(操作iptables/nftables);Web服务前置用crowdsec-nginx-bouncer(注入deny指令);K8s环境可用crowdsec-haproxy-bouncer - Bouncer配置中必须设置正确的 lapi_url 和本地凭证路径,与Agent指向同一LAPI
- 启动后,Bouncer会周期性轮询LAPI的
/v1/decisions接口,拿到新决策后立即生效;例如封禁一个IP,sudo iptables -L | grep f2b或sudo nginx -T | grep deny可观察到规则写入 - 注意:Bouncer本身不分析日志,只响应决策;所有检测逻辑都在Agent+LAPI侧完成
激活社区情报并验证闭环
社区威胁情报不是被动接收,而是双向流动:你用别人的数据,也贡献自己的发现。
- 确认 config/config.yaml 中 api.client.online_client.enabled 为
true,这是向CrowdSec中央服务器上传匿名化攻击事件的开关 - 触发一次测试攻击(如用curl反复请求不存在的PHP路径),观察
sudo cscli decisions list是否出现新封禁条目,sudo cscli alerts list是否生成对应告警 - 检查
/var/log/crowdsec.log,应看到类似Uploaded 1 decisions to Central API的日志,表示本地检测已成功回馈社区 - 等待约90分钟后,再次执行
sudo cscli hub update,确认社区块列表(crowdsecurity/sshd-bf等)版本号更新,说明情报已回流生效











