type
status
date
slug
summary
tags
category
icon
password
CrowdSec是一个免费的,开源的和协作的IPS。与Fail2Ban类似,CrowdSec读取日志并检测攻击,随后阻止/缓解这些攻击。除此之外CrowdSec还会与社区共享攻击者的信息,这意味着其他CrowdSec用户在类似环境中默认情况下将阻止攻击你的IP(反之亦然)。
📝 介绍
数据流
CrowdSec通过分析应用程序日志,将用户行为与场景进行匹配,如果发现攻击行为,则将该用户添加到阻止列表,阻止该用户的进一步访问。
CrowdSec的特点
CrowdSec与传统的IPS相比,最大的特点就是可以订阅社区封锁名单(默认也会共享本地的攻击记录到社区),在攻击者行动前阻止攻击行为。CrowdSec除了与Traefik配合使用,也可以直接用来保护Linux/Windows服务器、路由器等设备。
总体架构
安全引擎(Security Engine)
安全引擎是CrowdSec的核心组件之一。它负责分析日志,并提供一个API端点,供修复组件获取引擎所做出的决策。
安全引擎运行时围绕几个简单的概念展开:
- 它通过数据源配置读取日志。
- 这些日志通过解析器进行解析,并最终进行丰富处理。
- 标准化后的日志与用户部署的场景进行匹配。
- 当一个场景被触发时,CrowdSec会生成一个警报,并可能生成一个或多个关联的决策:
- 警报主要用于可追溯性,即使决策过期后仍然存在。
- 决策则具有短暂的生命周期,告知针对违规的IP/范围/用户应采取的行动。
- 这些信息(信号、关联的决策)随后被发送到本地API并存储在数据库中。
- 正如你现在可能已经猜到的那样,安全引擎本身负责检测部分并存储这些决策。然后,修复组件可以通过相同的本地API“消费”这些决策,并应用修复措施。
什么是解析器(Parsers)?
解析器将日志格式分解为可读的信息,供CrowdSec应用程序使用。我们将使用Traefik解析器来获取Traefik访问日志,并将该信息传递给CrowdSec应用程序进行决策。
什么是场景(Scenarios)?
一个场景是一种行为,即正在发生的暴力攻击。您可以选择要针对哪些场景检查流量。在这个Traefik集合中,我们将使用典型的HTTP行为。
修复组件(Remediation Components)
修复组件是负责根据安全引擎提供的决策采取行动的软件包,一般被称为保镖(Bouncers)。
什么是保镖(Bouncers)?
保镖会对CrowdSec做出的决策做出反应。在这种情况下,Traefik保镖将根据CrowdSec做出的决策,决定是允许还是拒绝通过Traefik的流量。CrowdSec本身只会做出封禁IP的决策。它会通过连接到安全引擎获取所需的信息,以便在本地做出决策。请查看Hub上可用的bouncers。
- Traefik-crowdsec-bouncer用于验证请求并根据CrowdSec做出的决策进行拒绝。
- firewall bouncer 会将IP添加到nftables/ipset集合中
- Cloudflare Bouncer将向Cloudflare防火墙添加IP。
- blocklist mirror将通过HTTP服务器将阻止列表提供给pfsense、fortinet、untangle等设备。
🆗简单来说
安全引擎
中有一个日志解析器
实时监控服务日志,并根据预设的场景
匹配如登录失败,未授权访问等条目,并对相应的IP做出决策。所以他需要部署在能够读取服务日志的地方。修复组件
将安全引擎
决策的IP下发到防火墙或其它带有访问控制的程序,它可以在多处部署,同时对决策IP进行处理。攻击者触发一处⚠️警报,所有
保镖
都会将ta🚫拉黑。更严重的可能导致全网CrowdSec用户将ta封禁。💿 安装
Crowdsec安装
在主 appdata 文件夹中创建一个子文件夹,用于告诉服务和 Crowdsec 在其中写入日志文件。这些日志文件将被 Crowdsec 集中和分析。在本文中,这个子文件夹命名为“share/Crowdsec”(appdata/share/Crowdsec)。
Bouncers
可以只安装对你有用的bouncer,它们分别在不同的地方起作用。
更多bouncer可在HUB - Remediation components中找到。
traefik-bouncer: 对决策IP返回403
OpenWRT-bouncer: 决策IP加入防火墙阻止列表,丢弃数据包
cloudflare-bouncer: 决策IP同步到cloudflare WAF进行托管质询(人机验证)
Traefik-bouncer安装
traefik-bouncer的目标是为Traefik实现一个CrowdSec防火墙,以阻止恶意IP访问您的服务。为此,它利用Traefik v2 ForwardAuth中间件,并使用CrowdSec查询客户端IP。如果客户端IP在禁止列表中,它将收到HTTP代码403的响应。否则,请求将像往常一样继续进行。
在Crowdsec容器运行以下命令获取API KEY:
cscli bouncers add traefik-bouncer
安装traefik-bouncer容器,CROWDSEC_BOUNCER_API_KEY填写上一步获得的API key。
使用
cscli bouncer list
查看状态bouncer状态openwrt-bouncer(可选)
在Crowdsec容器运行以下命令获取API key:
cscli bouncers add openwrt-bouncer
更新软件包列表并找到luci-app-crowdsec-firewall-bouncer安装
或使用下面的命令安装
opkg install crowdsec-firewall-bouncer
安装完成之后进行配置
或直接修改配置文件,位于/etc/config/crowdsec,然后重新加载bouncer
/etc/init.d/crowdsec-firewall-bouncer reload
查看防火墙状态
可以看到规则已生效
cloudflare-bouncer(可选)
创建API token并设置权限
在
crowdsec
容器运行下面的命令得到crowdsec_lapi_key
cscli bouncers add cloudflarebouncer
创建CF bouncer配置
修改其中的
crowdsec_lapi_key
, crowdsec_lapi_url
由于cloudflare免费计划最多只能使用一个IP列表,限制10000个IP,所以我们只同步本地决策列表。
安装并启动crowdsec-cloudflare-bouncer
⚙️ 配置
Traefik启用日志
在 traefik 模板中创建路径映射,以便将日志文件写入之前创建的共享文件夹中。
编辑traefik静态配置文件:
/mnt/user/appdata/traefik/traefik.yml
。添加受信任的IP
如果您的日志中没有显示命中Traefik代理的用户的外部IP,而只显示docker网关的IP(例如:在这种情况下为172.18.x.x),那么请编辑traefik.yml文件,并在受信任的IP下添加您的docker网关IP。
Authelia启用日志
和上面一样,编辑Authelia docker模板,将Authelia日志输出文件夹映射到共享文件夹:
然后编辑Authelia的配置文件(appdata/authelia)中的
configuration.yml
文件,以启用日志记录(找到log部分,添加配置)。启用集合
编辑docker crowdsec模板以启用 Authelia 集合,方法是将
crowdsecurity/traefik
LePresidente/authelia
添加到 COLLECTIONS 变量:同样,也可以使用命令:
cscli collections install crowdsecurity/traefik
cscli collections install LePresidente/authelia
最后,在crowdsec的appdata文件夹(appdata/crowdsec)中编辑
acquis.yml
文件以添加以下行:(不要留下任何空格)添加CrowdSec中间件
再次编辑traefik静态配置文件(traefik.yml),然后编辑动态配置文件(fileConfig.yml)在对应的节点位置添加
traefik.yml
fileConfig.yml
重启CrowdSec和Traefik。
☁️ 注册CrowdSec
注册账号
添加安全引擎
订阅黑名单
成功阻止坏蛋✨
💻 常用命令
这些命令可以使用
docker exec crowdsec cscli [命令]
通过主机运行,也可以使用docker exec -it crowdsec /bin/bash
命令和普通cscli [命令]
从容器内运行。Metrics
这个命令将显示指标(解析的日志、存储桶、各种统计信息)。如果您想在容器内运行这个命令,可以运行:
docker exec -it crowdsec /bin/bash
cscli metrics
或者直接从主机运行:
docker exec crowdsec cscli metrics
Hub列表
这个命令将让您看到部署了哪些解析器和场景。
cscli hub list
决策列表
这个命令可以查看哪些IP被禁止访问,非常有用,可以检查是否在访问服务器时突然出现了“Forbidden”页面如果您想在容器内运行这个命令,可以运行:
cscli decisions list
告警列表
告警列表将允许您查看和检查 CrowdSec 通知,即检测到对服务器的攻击。
cscli alerts list
阻止IP
添加一个 IP 到阻止列表,你可以添加你的 IP 来测试它是否阻止请求。
cscli decisions add --ip 1.2.3.4
允许IP
从阻止列表中删除一个 IP,在某些情况下,这将有助于解除自己的禁令。
cscli decisions delete -i 1.2.3.4
🤔问题(已解决):
以下内容作为备忘,不再有效
crowdsecurity/traefik-logs
日志解析器默认读取Traefik日志中ClientHost
字段作为源IP,如果客户端通过cloudflared访问,CrowdSec可能无法获取到真实客户端IP,这时可以修改日志解析器来获取真实IP。traefik访问日志保留
Cf-Connecting-Ip
,详细配置可以看这里。修改/crowdsec/hub/parsers/s01-parse/crowdsecurity/traefik-logs.yaml
将
traefik.ClientHost
修改为traefik["request_Cf-Connecting-Ip"]
或traefik["request_X-Real-Ip"]
运行下面的命令检查是否解析成功,复制一行Traefik的日志替换
**log**
应该能够看到remote_addr为客户端真实IP
📎 参考文章
有关CrowdSec安装或者使用上的问题,欢迎您在底部评论区留言,一起交流~
- 作者:Biliko
- 链接:https://biliko.net/article/traefik-part6
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
相关文章