type
status
date
slug
summary
tags
category
icon
password
 
😀
CrowdSec是一个免费的,开源的和协作的IPS。与Fail2Ban类似,CrowdSec读取日志并检测攻击,随后阻止/缓解这些攻击。除此之外CrowdSec还会与社区共享攻击者的信息,这意味着其他CrowdSec用户在类似环境中默认情况下将阻止攻击你的IP(反之亦然)。

📝 介绍

数据流

CrowdSec通过分析应用程序日志,将用户行为与场景进行匹配,如果发现攻击行为,则将该用户添加到阻止列表,阻止该用户的进一步访问。
例:用户使用Authelia短时间内多次认证失败,CrowdSec会暂时将用户IP封禁,并返回403错误。
notion image

CrowdSec的特点

CrowdSec与传统的IPS相比,最大的特点就是可以订阅社区封锁名单(默认也会共享本地的攻击记录到社区),在攻击者行动前阻止攻击行为。CrowdSec除了与Traefik配合使用,也可以直接用来保护Linux/Windows服务器、路由器等设备。
订阅管理
订阅管理

安全引擎(Security Engine)

安全引擎是CrowdSec的核心组件之一。它负责分析日志,并提供一个API端点,供修复组件获取引擎所做出的决策。
安全引擎运行时围绕几个简单的概念展开:
  1. 它通过数据源配置读取日志。
  1. 这些日志通过解析器进行解析,并最终进行丰富处理。
  1. 标准化后的日志与用户部署的场景进行匹配。
  1. 当一个场景被触发时,CrowdSec会生成一个警报,并可能生成一个或多个关联的决策:
      • 警报主要用于可追溯性,即使决策过期后仍然存在。
      • 决策则具有短暂的生命周期,告知针对违规的IP/范围/用户应采取的行动。
  1. 这些信息(信号、关联的决策)随后被发送到本地API并存储在数据库中。
  1. 正如你现在可能已经猜到的那样,安全引擎本身负责检测部分并存储这些决策。然后,修复组件可以通过相同的本地API“消费”这些决策,并应用修复措施。
💡
什么是解析器(Parsers)
解析器将日志格式分解为可读的信息,供CrowdSec应用程序使用。我们将使用Traefik解析器来获取Traefik访问日志,并将该信息传递给CrowdSec应用程序进行决策。
💡
什么是场景(Scenarios)
一个场景是一种行为,即正在发生的暴力攻击。您可以选择要针对哪些场景检查流量。在这个Traefik集合中,我们将使用典型的HTTP行为。

修复组件(Remediation Components)

修复组件是负责根据安全引擎提供的决策采取行动的软件包,一般被称为保镖(Bouncers)。
💡
什么是保镖(Bouncers)
保镖会对CrowdSec做出的决策做出反应。在这种情况下,Traefik保镖将根据CrowdSec做出的决策,决定是允许还是拒绝通过Traefik的流量。CrowdSec本身只会做出封禁IP的决策。它会通过连接到安全引擎获取所需的信息,以便在本地做出决策。请查看Hub上可用的bouncers。
  • blocklist mirror将通过HTTP服务器将阻止列表提供给pfsense、fortinet、untangle等设备。

💿 安装

Crowdsec安装

在主 appdata 文件夹中创建一个子文件夹,用于告诉服务和 Crowdsec 在其中写入日志文件。这些日志文件将被 Crowdsec 集中和分析。在本文中,这个子文件夹命名为“share/Crowdsec”(appdata/share/Crowdsec)。
 
notion image

Traefik-bouncer安装

😀
traefik-bouncer的目标是为Traefik实现一个CrowdSec防火墙,以阻止恶意IP访问您的服务。为此,它利用Traefik v2 ForwardAuth中间件,并使用CrowdSec查询客户端IP。如果客户端IP在禁止列表中,它将收到HTTP代码403的响应。否则,请求将像往常一样继续进行。

启用保镖

进入 CrowdSec Docker 控制台并运行
💡
请注意
这是唯一一次显示 API,请确保在安全的地方记下此 API 密钥。
 
notion image
 

⚙️ 配置

Traefik启用日志

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

添加CrowdSec中间件

再次编辑traefik静态配置文件(traefik.yml),然后编辑动态配置文件(fileConfig.yml)
appdata/traefik/traefik.yml
appdata/traefik/fileConfig.yml
重启CrowdSec和Traefik。

Authelia启用日志

首先,编辑Authelia docker模板,将Authelia日志输出文件夹映射到共享文件夹:
notion image
然后编辑Authelia的配置文件(appdata/authelia)中的 configuration.yml 文件,以启用日志记录(找到log部分,添加配置)。
然后,编辑您的 docker crowdsec 模板以启用 Authelia 集合,方法是将 LePresidente/authelia 添加到 COLLECTIONS 变量:
💡
什么是集合(Collections)
集合由一组解析器场景组成。通常每个应用服务有一个相应的集合,用来对不同结构的日志内容进行解析,如Nginx,sshdBitwarden等等。在Hub查看更多Collections。
notion image
最后,在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安装或者使用上的问题,欢迎您在底部评论区留言,一起交流~
 
Traefik 篇七:Cloudflare的使用Traefik 篇五:进阶的代理配置
  • Twikoo
  • Utterance