当前位置: 首页 > news >正文

【Amazon 实验②】Amazon WAF功能增强之使用Cloudfront、Lambda@Edge阻挡攻击

在这里插入图片描述

文章目录

  • 一、方案介绍
  • 二、架构图
  • 三、部署方案
    • 1. 进入Cloud9 编辑器,新打开一个teminal
    • 2. 克隆代码
    • 3. 解绑上一个实验中Cloudfront 分配绑定的防火墙
    • 4. 使用CDK部署方案
    • 5. CDK部署完成
    • 6. 关联Lambda@Edge函数
  • 四、方案效果

一、方案介绍

  1. 采用 Lambda@Edge + DynamoDB 架构实现。

  2. Lambda@Edge,每次访问都会调用Lambda函数,判断是否符合设定的规则,是则进行计数,否则阻断访问。

  3. 客户端可能会访问任意一个 CloudFront 的 POP 点,所以需要在多个物理位置维护一份访问数据并且保证同步。这里利用了Amazon DynamoDB 的全局表,可以在毫秒级实现全球数据同步,保证Lambda@Edge的数据全局一致。

  4. DynamoDB维护两张全局表来作为数据存储,一张供 Lambda Edge 访问,存储必要的访问数据,一张存储被封禁的 IP 信息,更新WAF Rule 封禁违规IP。

二、架构图

image-20231222114939447

三、部署方案

1. 进入Cloud9 编辑器,新打开一个teminal

image-20231222115307479

2. 克隆代码

git clone https://github.com/awslabs/aws-cloudfront-extensions.git

image-20231222115415986

3. 解绑上一个实验中Cloudfront 分配绑定的防火墙

image-20231222115525527
image-20231222115618117

4. 使用CDK部署方案

cd ./aws-cloudfront-extensions/function/js/limit-request-rate/cdk/
npm install
cdk bootstrap
# cdk deploy --parameters cfDistId=<cloudfront 分配ID,类似:EP1GUKEQP43MF> --parameters rateLimit=10 --parameters urlRateLimit=5 --parameters urlList='/login,/info' RateLimitCfStackcdk deploy --parameters cfDistId=EU7NDIEB0KPVH --parameters rateLimit=10 --parameters urlRateLimit=5 --parameters urlList='/login,/info' RateLimitCfStack

注意,需要更换cfDistId为你创建的cloudfront 分配Id

参数说明:

  • cfDistId: Cloudfront分配Id
  • rateLimit: 全局每分钟限速次数
  • urlList:需要单独设置限速规则的URL
  • urlRateLimit:URL的每分钟限速次数

image-20231222121002931

image-20231222121134698

5. CDK部署完成

image-20231222121503919

6. 关联Lambda@Edge函数

  • 在lambda 控制台,找到对应的函数(名称:RateLimitCfStack-RateLimitLambdaEdge***),选择version:1,记录下ARN。

image-20231222121807567

image-20231222121939613

在cloudfront分配,打开行为标签,并编辑。 确认在最下方的function associate关联Lambda@Edge函数。

image-20231222140221578

image-20231222140424459

至此,配置完成。

四、方案效果

  1. 验证WAF的最小速率次数为10次/min。 请求语句:(注意:请在Cloud9中执行下面测试)
export JUICESHOP_URL=<Your Juice Shop URL>
export JUICESHOP_URL=https://djbryp4jxosx1.cloudfront.netfor ((i=0; i<12; i++)); do echo $i; curl -I  "${JUICESHOP_URL}";sleep 1;done

image-20231222140833149

  1. 达到规则后ip立即被阻断。 再次发送请求:
curl -I  "${JUICESHOP_URL}"

请求结果

WSParticipantRole:~ $ curl -I  "${JUICESHOP_URL}"
HTTP/1.1 403 Forbidden
Server: CloudFront
Date: Fri, 22 Dec 2023 06:09:11 GMT
Content-Type: text/html
Content-Length: 919
Connection: keep-alive
X-Cache: Error from cloudfront
Via: 1.1 6306947fb6ab60dc617ca2e025941652.cloudfront.net (CloudFront)
X-Amz-Cf-Pop: IAD50-C2
X-Amz-Cf-Id: AJN-UrMIQ9_YYtKWnbeDmWPOakVyZKY9lWgon-MnVIYkWbqXQXMRLw==

状态码为403,请求是被WAF防火墙所屏蔽。status code为429时,是被Lambda@Edge所屏蔽,是即时的立即屏蔽。 后续经过waf ipset的更新周期,此IP会在waf的黑名单列表内保持4小时。

  1. 达到限制条件的Ip被放入黑名单,封禁4小时。 验证Ipset 内的ip列表。 请求发起机器ip:
WSParticipantRole:~ $ curl ipinfo.io
{"ip": "3.226.47.2","hostname": "ec2-3-226-47-2.compute-1.amazonaws.com","city": "Ashburn","region": "Virginia","country": "US","loc": "39.0437,-77.4875","org": "AS14618 Amazon.com, Inc.","postal": "20147","timezone": "America/New_York","readme": "https://ipinfo.io/missingauth"
}
WSParticipantRole:~ $ 

WAF内黑名单Ipset: BlockIPSET_0

image-20231222141323644

  1. 特殊URL的速率为5次/min。 由于前面实验步骤,请求机器ip已经被封禁,首先需要解除封禁。
  • 删除DynamoDB table: RateLimitCfStack-BlackIpList 里的ip记录。
  • 删除WAF ipset 里的记录。

请求命令:

export JUICESHOP_URL=<Your Juice Shop URL>
export JUICESHOP_URL=https://djbryp4jxosx1.cloudfront.netfor ((i=0; i<6; i++)); do echo $i; curl -I  "${JUICESHOP_URL}/login";sleep 1;done

返回结果:

image-20231222141631625
可以看出,对关键URL的rate限制每分钟5次,也已经生效。

在这里插入图片描述

http://www.lryc.cn/news/269288.html

相关文章:

  • There are 4 missing blocks. The following files may be corrupted
  • 一起玩儿物联网人工智能小车(ESP32)——13. 用ESP32的GPIO控制智能小车运动起来(一)
  • D9741 PWM控制器电路,定时闩锁、短路保护电路,输出基准电压(2.5V) 采用SOP16封装
  • 【UE5.1】程序化生成Nanite植被
  • 【软件工程】漫谈增量过程模型:软件开发的逐步之道
  • Android Camera
  • Python开发雷点总结
  • Linux中磁盘管理与文件系统
  • Vue2+element-ui 实现select选择器结合Tree树形控件实现下拉树效果
  • LINUX 解决系统卡死:扩大内存交换分区
  • Vue项目Nginx代理F5刷新出现404问题解决
  • 关于MybatisPlus自动转化驼峰命名规则配置mapUnderscoreToCamelCase的个人测试和总结
  • css中的BFC
  • 音视频类App广告变现如何破局,最大化广告变现收益,让应用增收?
  • 基于llama-index对embedding模型进行微调
  • 如何本地搭建FastDFS文件服务器并实现远程访问【内网穿透】
  • spring基于Xml管理bean---Ioc依赖注入:对象类型属性赋值(2)----内部bean的引入(bean和bean之间的引入)、(3)级联方式注入
  • Python电能质量扰动信号分类(二)基于CNN模型的一维信号分类
  • 如何解决报错:Another app is currently holding yum lock?
  • electron使用electron-builder进行MacOS的 打包、签名、公证、上架、自动更新
  • RAD Studio 12 安装激活说明及常见问题
  • JavaScript实现视频共享
  • uniapp框架——vue3+uniFilePicker+fastapi实现文件上传(搭建ai项目第二步)
  • 一篇文章带你入门PHP魔术方法
  • 【数据库系统概论】第6章-关系数据库理论
  • 算法设计与分析实验报告-贪心算法
  • Unity读取服务器声音文件
  • 掌握ElasticSearch(一):Elasticsearch安装与配置、Kibana安装
  • 《剑指offer》Java版--13.机器人的运动范围(BFS)
  • 基于流程挖掘的保险理赔优化策略实践