如何通过CrowdSec缓解分布式拒绝服务 (DDoS) 攻击教程

如何通过CrowdSec缓解分布式拒绝服务 (DDoS) 攻击教程

AI 智能摘要
无论是为了直接损害业务、勒索,还是出于其他目的。这些攻击往往只需少量投入,却能造成巨大影响。主题铺今天将深入探讨DDoS攻击的本质、不同类型,并重点介绍CrowdSec如何通过其众筹式和先发制人的安全机制,成为抵御DDoS攻击的成功利器。

分布式拒绝服务(DDoS)攻击是网络犯罪分子常用的手段,旨在通过压倒性的流量使在线服务瘫痪,无论是为了直接损害业务、勒索,还是出于其他目的。这些攻击往往只需少量投入,却能造成巨大影响。主题铺今天将深入探讨DDoS攻击的本质、不同类型,并重点介绍CrowdSec如何通过其众筹式和先发制人的安全机制,成为抵御DDoS攻击的成功利器。

这里需要安装免费开源的WAF工具-CrowdSec,这里先介绍一下安装教程。

什么是分布式拒绝服务(DDoS)攻击?

DDoS攻击是一种网络犯罪策略,通过海量流量淹没在线服务,使其无法正常运行。这些流量通常来自被劫持的设备,如受感染的服务器、家用路由器或物联网设备,它们被组织成僵尸网络(botnet),受攻击者控制。这种分布式特性使得追踪攻击的真正来源变得极其困难。攻击者所需的流量大小与目标机器的性能成正比,通常需要多台设备协同作业才能使服务瘫痪。

图片[1]-如何通过CrowdSec缓解分布式拒绝服务 (DDoS) 攻击教程-主题铺

DDoS攻击的识别与分类

DDoS攻击的常见迹象包括:网站性能急剧下降、服务中断、设备或应用程序行为异常,以及CPU、内存、I/O等系统资源在没有明显原因的情况下达到峰值。最明显的迹象是服务或机器流量的突然激增,特别是来自不寻常的地理位置或IP地址。

然而,流量激增并非总是DDoS攻击的信号,有时也可能是正常的业务增长或配置问题。因此,仔细审查日志,尝试识别请求是否来自同一来源至关重要,但这本身就很有挑战性,因为攻击者可能从全球各地发起攻击——这正是“分布式”的含义。

理解DDoS攻击所针对的网络层至关重要。不同的攻击层需要不同的防御和阻止方法。这与“在正确的地方查找”有关,因为它有助于轻松识别攻击的来源和类型,并强调了确保所有层面都受到保护的重要性。

识别DDoS攻击时,关键在于理解其在OSI七层模型中的作用。最常见的DDoS攻击发生在第三层(网络层)第七层(应用层)

1. 第三层DDoS攻击(网络层)

  • 目标:网络设备和基础设施。
  • 特点:这些攻击是无连接的,即不需要建立TCP连接。
  • 原理:第三层负责在网络中路由信息块(数据包)。IP、IPSec和ICMP等协议在此层运行,它们负责数据分段和路由,但不负责建立连接或打开端口。
  • 举例:ICMP Flood(Ping Flood)是一种典型的第三层攻击。如果你的机器正在遭受ICMP Flood攻击,你可能会遇到连接问题,但检查Web服务器或SSH服务的日志却一无所获,因为攻击发生在更低的、你可能未曾怀疑的层面。
  • 重要提示:在第三层,攻击只会消耗网络资源。一个针对服务层面的防御机制(如Web应用防火墙WAF)不一定能保护你免受第三层攻击。
图片[2]-如何通过CrowdSec缓解分布式拒绝服务 (DDoS) 攻击教程-主题铺

2. 第七层DDoS攻击(应用层)

  • 目标:需要建立连接的服务,如HTTP/HTTPS服务。
  • 原理:攻击核心与第三层类似,即从多个设备向单一目标发送大量请求。但关键区别在于请求的处理者。例如,针对HTTP/HTTPS服务的Nginx服务器,它被设计用于尽可能多地利用机器资源来快速服务用户。然而,Nginx(或任何Web服务器)无法智能地区分正常流量和旨在使服务瘫痪的流量。在DDoS攻击中,Web服务器会耗尽所有可用资源,直到服务崩溃(因资源不足而丢弃所有连接,队列满,无法处理请求)。
图片[2]-如何通过CrowdSec缓解分布式拒绝服务 (DDoS) 攻击教程-主题铺

DDoS攻击的缓解

在某些轻微情况下,重启机器或服务可能提供暂时缓解,但如果没有适当的缓解措施(如阻止源IP地址),攻击很可能会卷土重来。如果攻击来自不同的来源,你的服务可能仍然无法访问,导致用户沮丧、信任丧失、负面评价和收入减少。

那么,有没有一种易于配置、确保防护且成本效益高的解决方案呢?答案正是我们前面提到的众筹式和先发制人安全

利用众筹力量抵御DDoS攻击:CrowdSec的哲学

“如果我们无法智取网络犯罪分子,为什么不试着以数量取胜呢?” 这正是CrowdSec所依赖的哲学。

CrowdSec安全引擎是一个开源的、基于行为的入侵检测与防御系统(IDPS),它由集体智能驱动,并与全球IP信誉网络相结合。它借鉴了 fail2ban 的理念,但兼容IPv6,并且解析日志和识别行为的速度快60倍。

图片[4]-如何通过CrowdSec缓解分布式拒绝服务 (DDoS) 攻击教程-主题铺

CrowdSec如何工作以缓解DDoS攻击

  1. 日志解析与场景识别
    • CrowdSec通过读取其监控的应用程序的日志输出。这些原始日志通常难以阅读和处理。
    • CrowdSec会解析这些日志,只提取必要的信息,使其更易于处理和阅读。
    • 场景(scenarios)是CrowdSec中的配置,它们描述了需要在你的系统上检测的有害行为,例如DDoS攻击、暴力破解、探测、爬虫扫描等。
  2. 决策生成与阻断器联动
    • 安全引擎根据场景识别恶意行为,并生成“决策”(例如,封禁某个IP)。
    • 阻断器(Remediation Components)是与安全引擎配合的应用特定配置。它们根据触发的场景采取行动,保护其配置的服务。
  3. 全球IP信誉网络
    • CrowdSec最特殊之处在于它能够将有害IP报告到中央数据库。全球(超过150个国家)的社区用户会报告这些IP以及他们从这些IP那里受到的攻击类型。
    • 这意味着,当CrowdSec安全引擎在你的机器上运行时,一个由CrowdSec网络报告的恶意IP列表会被预先阻止,从而在你的基础设施上建立了第一层防护。

CrowdSec的这种“集体智能”模式,使其在应对分布式、多源头的DDoS攻击时,展现出独特的优势。你无需等待自己的服务器被攻击,就已经可以利用全球用户的安全数据来防御已知的恶意IP。

实战演练:使用CrowdSec与Cloudflare缓解第七层DDoS攻击

第七层DDoS攻击处理起来非常复杂。每源一两个HTTP请求使得用简单的IP级别阻断几乎不可能缓解——从日志中封禁IP毫无意义,因为IP不会被重复使用。

一种解决方案是在反制措施中整合地理位置方面:攻击主要来自国家X和Y或自治系统(AS)X和Y。然而,封禁这些国家会导致误报和附带损害。来自攻击来源国的合法用户将被拒绝访问网站,这可能是不可接受的(例如,在电子商务网站的情况下)。

但别担心!使用像CAPTCHA这样简单的反制措施,而不是纯粹地阻止攻击者,可以允许合法的用户通过,并将恶意机器人拒之门外,同时成本合理。让我们看看CrowdSec如何与此配合。

模拟第七层DDoS攻击

为了演示安全引擎在处理DDoS攻击时的表现,我们模拟了一次攻击。我们使用了一台运行Apache2、MySQL和WordPress(带WooCommerce)的t2.medium实例(2个Xeon核心@2.4Ghz / 4GB RAM)。

我们使用第三方“攻击服务”来生成攻击。在发起20分钟的第七层DDoS攻击后,我们看到有一到两千个不同的IP参与攻击,一分钟左右,网站就崩溃了。

图片[5]-如何通过CrowdSec缓解分布式拒绝服务 (DDoS) 攻击教程-主题铺

攻击指标:

  • CPU使用率在整个测试过程中保持非常高。
  • 流量下降,因为网站不可访问。在攻击期间,我们看到了:
    • 7万个HTTP请求
    • 1,150个独立IP地址(在IPv4地址空间中分布相当均匀)
图片[6]-如何通过CrowdSec缓解分布式拒绝服务 (DDoS) 攻击教程-主题铺

CrowdSec的解决方案:结合Cloudflare的边缘防御

正如我们经常在“最先进”的第七层DDoS攻击中看到的那样,我们假设每个攻击IP只会发送一两个HTTP请求,并且我们需要能够在国家或AS层面做出决策。这正是Cloudflare阻断器发挥作用的地方。

为什么选择Cloudflare阻断器?
Cloudflare通过其API,允许我们设置不仅针对IP和IP段,还可以针对AS和国家的规则。这对于我们的用例非常方便,并且可用的补救措施包括Turnstile挑战(CAPTCHA)

图片[7]-如何通过CrowdSec缓解分布式拒绝服务 (DDoS) 攻击教程-主题铺

我们希望实现的效果:
在第七层DDoS攻击期间,攻击主要来源国(例如,中国、印度尼西亚和印度)的用户将面临CAPTCHA挑战,而其他国家(例如,法国和马来西亚)的用户则不受影响。然而,来自攻击来源国的合法用户仍然可以通过填写CAPTCHA来访问网站。

图片[8]-如何通过CrowdSec缓解分布式拒绝服务 (DDoS) 攻击教程-主题铺

实现原理:
CrowdSec安全引擎将读取Apache2日志,检测正在进行的DDoS攻击源,并发出决策。Cloudflare阻断器将接收这些决策,并指示Cloudflare(通过API)阻止攻击者。

关键步骤:创建CrowdSec场景以检测过度流量

我们将创建CrowdSec场景来检测来自特定国家、自治系统或任何给定IP/IP段的过度流量。然后,此场景将通过Cloudflare API对源国家/AS/IP/IP段应用CAPTCHA规则。

图片[9]-如何通过CrowdSec缓解分布式拒绝服务 (DDoS) 攻击教程-主题铺

主题铺提示: 为了正常工作,Apache2必须配置为处理 X-forwarded-for HTTP头,以显示真实的攻击者IP,而不是Cloudflare的IP。

场景示例:

以下是CrowdSec用于检测DDoS的场景示例,它们会同时计算来自同一IP段、国家或AS的IP数量:

type: leaky
#debug: true
name: crowdsecurity/http-ddos-by-ASN # 按ASN检测DDoS
description: "Detect and prevent applicative DDoS by leveraging CF-like bouncers"
filter: "evt.Meta.ASNNumber != '0' && evt.Meta.service == 'http' && evt.Meta.http_status == '200' && evt.Parsed.static_ressource == 'false'"
groupby: "evt.Meta.ASNNumber" # 按ASN分组
distinct: "evt.Meta.source_ip" # 统计独立IP
capacity: 20 # 桶容量
leakspeed: "10s" # 泄漏速度
blackhole: 5m # 封禁时长
labels:
  service: http
  type: scan
  remediation: true
scope:
  type: AS # 范围为AS
  expression: evt.Meta.ASNNumber
---
type: leaky
#debug: true
name: crowdsecurity/http-ddos-by-cn # 按国家检测DDoS
description: "Detect and prevent applicative DDoS by leveraging CF-like bouncers"
filter: "evt.Meta.IsoCode != '' && evt.Meta.service == 'http' && evt.Meta.http_status == '200' && evt.Parsed.static_ressource == 'false'"
groupby: "evt.Meta.IsoCode" # 按国家代码分组
distinct: "evt.Meta.source_ip" # 统计独立IP
capacity: 50 # 桶容量
leakspeed: "30s" # 泄漏速度
blackhole: 5m # 封禁时长
labels:
  service: http
  type: scan
  remediation: true
scope:
  type: Country # 范围为国家
  expression: evt.Meta.IsoCode

场景语法解析(以 crowdsecurity/http-ddos-by-cn 为例):

  • filter:过滤条件,只处理非静态资源的HTTP请求,且HTTP状态码为200,并确保有国家代码信息。
  • groupby:桶将按源国家(evt.Meta.IsoCode)对事件进行分组。
  • distinct:只计算独立IP的数量,因为目标是统计在给定时间内来自一个国家的唯一IP数量。
  • capacity:桶的容量为50,表示在 leakspeed 时间内允许50个独立IP。
  • leakspeed:泄漏速度为30秒。
  • blackhole:如果触发场景,将进行5分钟的封禁。
  • labelsremediation: true 表示如果场景被触发,将启动补救措施。
  • scope:补救措施的范围是国家(Country),作用于 evt.Meta.IsoCode
图片[10]-如何通过CrowdSec缓解分布式拒绝服务 (DDoS) 攻击教程-主题铺
图片[11]-如何通过CrowdSec缓解分布式拒绝服务 (DDoS) 攻击教程-主题铺
图片[12]-如何通过CrowdSec缓解分布式拒绝服务 (DDoS) 攻击教程-主题铺

配置 profiles.yaml 以支持非IP范围的决策

默认情况下,CrowdSec只会处理针对特定IP的决策。然而,在我们的案例中,我们需要能够应用针对自治系统(AS)甚至国家的决策。为此,我们需要编辑 /etc/crowdsec/profiles.yaml 文件,添加相应的配置块:

name: default_ip_remediation
#debug: true
filters:
 - Alert.Remediation == true && Alert.GetScope() == "Ip"
decisions:
 - type: ban
   duration: 4h
on_success: break
---
name: default_country_remediation
#debug: true
filters:
 - Alert.Remediation == true && Alert.GetScope() == "Country"
decisions:
 - type: ban
   duration: 4h
on_success: break
---
name: default_AS_remediation
#debug: true
filters:
  - Alert.Remediation == true && Alert.GetScope() == "As"
decisions:
 - type: ban
   duration: 4h
on_success: break

这些配置定义了当警报的范围是IP、国家或AS时,将采取 ban(封禁)类型的决策,持续时间为4小时。

边缘阻断:结合Cloudflare阻断器

一旦我们检测到攻击源,就可以直接在你的基础设施的边缘应用补救措施:通过CDN或防火墙设备。

Cloudflare阻断器的工作原理:

  1. 安装阻断器:在你的安全引擎所在的宿主机上安装Cloudflare阻断器。
  2. API权限:通过CrowdSec控制台生成一个权限令牌,允许阻断器与你的Cloudflare账户进行通信。
  3. Cloudflare Worker与KV存储:阻断器会创建一个Cloudflare Worker和一个KV(Key-Value)存储。
  4. 决策同步:阻断器从安全引擎接收决策(关于IP、国家或ASN号,以及所需的补救类型:封禁或CAPTCHA),并将这些决策推送到KV存储。
  5. 请求检查与执行:当有请求进入时,Cloudflare Worker会检查KV存储中是否有与源IP、国家或ASN匹配的决策,并应用适当的补救措施。值得注意的是,CAPTCHA将触发Turnstile挑战。
图片[13]-如何通过CrowdSec缓解分布式拒绝服务 (DDoS) 攻击教程-主题铺
图片[14]-如何通过CrowdSec缓解分布式拒绝服务 (DDoS) 攻击教程-主题铺

手动管理决策:

你也可以使用 cscli 命令手动添加或删除决策:

添加

sudo cscli decisions add -i 1.2.3.4 (封禁单个IP)
sudo cscli decisions add --scope country --value fr (封禁某个国家)

删除

sudo cscli decisions delete --value fr
sudo cscli decisions delete --value 1.2.3.4

你可以通过Cloudflare UI中创建的KV存储来验证这些决策是否生效。

图片[15]-如何通过CrowdSec缓解分布式拒绝服务 (DDoS) 攻击教程-主题铺
图片[16]-如何通过CrowdSec缓解分布式拒绝服务 (DDoS) 攻击教程-主题铺

通过将CrowdSec的智能检测与Cloudflare的全球边缘网络相结合,我们可以实现高度灵活且高效的DDoS防护。即使是复杂的第七层DDoS攻击,也能通过CAPTCHA挑战等方式,在不影响合法用户的前提下,有效过滤恶意流量。

将DDoS防护提升到更高水平:使用精选黑名单

CrowdSec还提供精选的恶意IP黑名单,例如“CrowdSec HTTP DDoS攻击者黑名单”。这个黑名单包含了被广泛报告用于执行大规模HTTP DDoS攻击的IP。主动阻止这些IP有助于预防DDoS攻击,并建立更安全的网络边界。

集成CrowdSec黑名单:

  1. 通过CrowdSec控制台生成一个CrowdSec服务API密钥
  2. 将“HTTP DDoS攻击者黑名单”作为自动化阻止规则,集成到你现有的防火墙或CDN中。
  3. 即可立即获得针对这些攻击的保护,并全面减少安全警报和运营成本。

最后总结

DDoS攻击是网站运营者必须面对的严峻挑战。CrowdSec通过其独特的众筹式安全引擎、灵活的阻断器以及与Cloudflare等CDN的深度集成,为我们提供了一个强大、智能且成本效益高的DDoS防护解决方案。主题铺认为,理解DDoS攻击的原理,并结合CrowdSec这样的前沿安全工具,是构建坚不可摧的网站防御体系的关键。通过本教程,希望你能为你的网站打造一个更安全、更稳定的运行环境!

© 版权声明
THE END
喜欢就支持一下吧
点赞7 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容