type
status
date
slug
summary
tags
category
icon
password
CrowdSec是一个免费的,开源的和协作的IPS。与Fail2Ban类似,CrowdSec读取日志并检测攻击,随后阻止/缓解这些攻击。除此之外CrowdSec还会与社区共享攻击者的信息,这意味着其他CrowdSec用户在类似环境中默认情况下将阻止攻击你的IP(反之亦然)。
📝 介绍
数据流
CrowdSec通过分析应用程序日志,将用户行为与场景进行匹配,如果发现攻击行为,则将该用户添加到阻止列表,阻止该用户的进一步访问。
例:用户使用Authelia短时间内多次认证失败,CrowdSec会暂时将用户IP封禁,并返回403错误。

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等设备。
💿 安装
Crowdsec安装
在主 appdata 文件夹中创建一个子文件夹,用于告诉服务和 Crowdsec 在其中写入日志文件。这些日志文件将被 Crowdsec 集中和分析。在本文中,这个子文件夹命名为“share/Crowdsec”(appdata/share/Crowdsec)。

Traefik-bouncer安装
traefik-bouncer的目标是为Traefik实现一个CrowdSec防火墙,以阻止恶意IP访问您的服务。为此,它利用Traefik v2 ForwardAuth中间件,并使用CrowdSec查询客户端IP。如果客户端IP在禁止列表中,它将收到HTTP代码403的响应。否则,请求将像往常一样继续进行。
启用保镖
进入 CrowdSec Docker 控制台并运行
请注意
这是唯一一次显示 API,请确保在安全的地方记下此 API 密钥。

⚙️ 配置
Traefik启用日志
编辑traefik静态配置文件:
/mnt/user/appdata/traefik/traefik.yml
。如果您的日志中没有显示命中Traefik代理的用户的外部IP,而只显示docker网关的IP(例如:在这种情况下为172.18.x.x),那么请编辑traefik.yml文件,并在受信任的IP下添加您的docker网关IP。
在 traefik 模板中创建路径映射,以便将日志文件写入以前创建的共享文件夹中。

添加CrowdSec中间件
再次编辑traefik静态配置文件(traefik.yml),然后编辑动态配置文件(fileConfig.yml)
appdata/traefik/traefik.yml
appdata/traefik/fileConfig.yml
重启CrowdSec和Traefik。
Authelia启用日志
首先,编辑Authelia docker模板,将Authelia日志输出文件夹映射到共享文件夹:

然后编辑Authelia的配置文件(appdata/authelia)中的
configuration.yml
文件,以启用日志记录(找到log部分,添加配置)。然后,编辑您的 docker crowdsec 模板以启用 Authelia 集合,方法是将
LePresidente/authelia
添加到 COLLECTIONS 变量:
最后,在crowdsec的appdata文件夹(appdata/crowdsec)中编辑
acquis.yml
文件以添加以下行:(不要留下任何空格)💻 常用命令
这些命令可以使用
docker exec crowdsec cscli [命令]
通过主机运行,也可以使用docker exec -it crowdsec /bin/bash
命令和普通cscli [命令]
从容器内运行。Metrics
这个命令将显示指标(解析的日志、存储桶(漏桶机制链接在这里)、各种统计信息)。如果您想在容器内运行这个命令,可以运行:
或者直接从主机运行:
Hub List
这个命令将让您看到部署了哪些解析器和场景。
Decision List
这个命令可以查看哪些IP被禁止访问,非常有用,可以检查是否在访问服务器时突然出现了“Forbidden”页面如果您想在容器内运行这个命令,可以运行:
Alerts List
通知列表将允许您查看和检查 CrowdSec 通知,即检测到对服务器的攻击。
Block IP
添加一个 IP 到阻止列表,你可以添加你的 IP 来测试它是否阻止请求。
Allow IP
从阻止列表中删除一个 IP,在某些情况下,这将有助于解除自己的禁令。
📎 参考文章
有关CrowdSec安装或者使用上的问题,欢迎您在底部评论区留言,一起交流~
- 作者:Biliko
- 链接:https://biliko.net/article/traefik-part6
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
相关文章