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

文章目录
- 一、方案介绍
- 二、架构图
- 三、部署方案
- 1. 进入Cloud9 编辑器,新打开一个teminal
- 2. 克隆代码
- 3. 解绑上一个实验中Cloudfront 分配绑定的防火墙
- 4. 使用CDK部署方案
- 5. CDK部署完成
- 6. 关联Lambda@Edge函数
- 四、方案效果
一、方案介绍
-
采用 Lambda@Edge + DynamoDB 架构实现。
-
Lambda@Edge,每次访问都会调用Lambda函数,判断是否符合设定的规则,是则进行计数,否则阻断访问。
-
客户端可能会访问任意一个 CloudFront 的 POP 点,所以需要在多个物理位置维护一份访问数据并且保证同步。这里利用了Amazon DynamoDB 的全局表,可以在毫秒级实现全球数据同步,保证Lambda@Edge的数据全局一致。
-
DynamoDB维护两张全局表来作为数据存储,一张供 Lambda Edge 访问,存储必要的访问数据,一张存储被封禁的 IP 信息,更新WAF Rule 封禁违规IP。
二、架构图

三、部署方案
1. 进入Cloud9 编辑器,新打开一个teminal

2. 克隆代码
git clone https://github.com/awslabs/aws-cloudfront-extensions.git

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


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的每分钟限速次数


5. CDK部署完成

6. 关联Lambda@Edge函数
- 在lambda 控制台,找到对应的函数(名称:RateLimitCfStack-RateLimitLambdaEdge***),选择version:1,记录下ARN。


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


至此,配置完成。
四、方案效果
- 验证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

- 达到规则后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小时。
- 达到限制条件的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

- 特殊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
返回结果:

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

相关文章:
【Amazon 实验②】Amazon WAF功能增强之使用Cloudfront、Lambda@Edge阻挡攻击
文章目录 一、方案介绍二、架构图三、部署方案1. 进入Cloud9 编辑器,新打开一个teminal2. 克隆代码3. 解绑上一个实验中Cloudfront 分配绑定的防火墙4. 使用CDK部署方案5. CDK部署完成6. 关联LambdaEdge函数 四、方案效果 一、方案介绍 采用 LambdaEdge DynamoDB 架…...
There are 4 missing blocks. The following files may be corrupted
There are 4 missing blocks. The following files may be corrupted Please check the logs or run fsck in order to identify the missing blocks. See the Hadoop FAQ for common causes and potential solutions. 步骤1,检查文件缺失情况 hadoop fsck /tmp/l…...
一起玩儿物联网人工智能小车(ESP32)——13. 用ESP32的GPIO控制智能小车运动起来(一)
摘要:本文更深入的讲述了GPIO的相关知识,并完成了导线连接工作,为下一步的软件开发做好了准备。 通用输入输出端口(GPIO:General Purpose Input/Output Port),在前面已经有了初步的介绍…...
D9741 PWM控制器电路,定时闩锁、短路保护电路,输出基准电压(2.5V) 采用SOP16封装
D9741是一块脉宽调制方三用于也收路像机和笔记本电的等设备上的直流转换器。在便携式的仪器设备上。 主要特点:● 高精度基准电路 ● 定时闩锁、短路保护电路 ● 低电压输入时误操作保护电路 ● 输出基准电…...
【UE5.1】程序化生成Nanite植被
目录 效果 步骤 一、下载Gaea软件和树林资产 二、使用Gaea生成贴图 三、 生成地形 四、生成草地 五、生成树林 六、生成湖泊 七、其它功能介绍 7.1 调整树林生成的面积 7.2 让植物随风飘动 7.3 玩家和植物互动 7.4 雪中树林 7.5 环境音效 效果 步骤 一、下载Ga…...
【软件工程】漫谈增量过程模型:软件开发的逐步之道
🍎个人博客:个人主页 🏆个人专栏: 软件工程 ⛳️ 功不唐捐,玉汝于成 目录 前言: 正文 增量过程模型(Incremental Process Model) 主要特点和阶段: 优点࿱…...
Android Camera
1. 相关的API Android有三套关于摄像头的API(库),分别是Camera、Camera2和CameraX,其中Camera已废弃,在Android5.0以后推荐使用Camera2和CameraX,Camera2推出是用来替换Camera的,它拥有丰富的API可以为复杂的用例提供…...
Python开发雷点总结
数值运算(加减乘除) 1. invalid value赋值 当变量本身具有数值属性(后续会参加数值运算),对invalid value设置应该为np.nan, 而非None;反之,容易抛出以下错误: TypeEr…...
Linux中磁盘管理与文件系统
目录 一.磁盘基础: 1.磁盘的结构: 2.硬盘的数据结构: 3.硬盘存储容量 : 4.硬盘接口类型: 二.MBR与磁盘分区: 1.MBR的概念: 2.硬盘的分区: 为什么分区: 2.表示&am…...
Vue2+element-ui 实现select选择器结合Tree树形控件实现下拉树效果
效果: DOM部分 : // 设置el-option隐藏的下拉选项,选项显示的是汉字label,值是value // 如果不设置一个下拉选项,下面的树形组件将无法正常使用 <el-form-item label"报警区域" prop"monitorId"…...
LINUX 解决系统卡死:扩大内存交换分区
最近电脑总是卡住,让我很是苦恼。运行程序时发现可能是内存占满之后导致界面卡住。下面是在我16G内存的电脑上折腾的过程与结果: 查看当前的交换内存大小free -m(单位:-m选项表示以兆字节(MB)为单位显示内…...
Vue项目Nginx代理F5刷新出现404问题解决
一.背景 项目用户反馈,F5刷新后,浏览器出现404。最近公司加强网络管理,我记得之前可以刷新,有点怀疑是跟加强网络管理有关。具体原因没有时间去深度跟踪,先百度找到了解决方法,记录一下。 二.解决办法 主…...
关于MybatisPlus自动转化驼峰命名规则配置mapUnderscoreToCamelCase的个人测试和总结
关于MybatisPlus自动转化驼峰命名规则配置mapUnderscoreToCamelCase的个人测试和总结 测试一:没有添加 自动转化的配置,且domain中的属性名称和数据库的字段名称一致测试二:没有添加自动转化配置i,domain属性名userPassword和数据…...
css中的BFC
定义 BFC(Block formatting context)直译为"块级格式化上下文"。它是一个独立的渲染区域,只有Block-level box参与, 它规定了内部的Block-level Box如何布局,并且与这个区域外部毫不相干。 涉及概念 box Box 是 CSS 布局的对象…...
音视频类App广告变现如何破局,最大化广告变现收益,让应用增收?
音视频App已然成为了我们日常获取、发布和交换信息的重要方式,在音视频行业不断的拓展中,用户的渗透率提升。 据数据显示,我国网络视听用户的规模已达9亿人次,网民使用率也突破了90%。庞大的市场规模和用户需求吸引了大批开发者和…...
基于llama-index对embedding模型进行微调
QA对话目前是大语言模型的一大应用场景,在QA对话中,由于大语言模型信息的滞后性以及不包含业务知识的特点,我们经常需要外挂知识库来协助大模型解决一些问题。在外挂知识库的过程中,embedding模型的召回效果直接影响到大模型的回答…...
如何本地搭建FastDFS文件服务器并实现远程访问【内网穿透】
文章目录 前言1. 本地搭建FastDFS文件系统1.1 环境安装1.2 安装libfastcommon1.3 安装FastDFS1.4 配置Tracker1.5 配置Storage1.6 测试上传下载1.7 与Nginx整合1.8 安装Nginx1.9 配置Nginx 2. 局域网测试访问FastDFS3. 安装cpolar内网穿透4. 配置公网访问地址5. 固定公网地址5.…...
spring基于Xml管理bean---Ioc依赖注入:对象类型属性赋值(2)----内部bean的引入(bean和bean之间的引入)、(3)级联方式注入
bean创建对象类型赋值方式 第一:外部bean的引入 第二:内部bean的引入 第三:级联属性赋值 文章目录 bean创建对象类型赋值方式对象类型内部bean赋值代码分析总结 对象类型属性级联方式的赋值扩展知识 对象类型内部bean赋值 代码分析 <b…...
Python电能质量扰动信号分类(二)基于CNN模型的一维信号分类
目录 前言 1 电能质量数据集制作与加载 1.1 导入数据 1.2 制作数据集 2 CNN-2D分类模型和训练、评估 2.1 定义CNN-2d分类模型 2.2 定义模型参数 2.3 模型结构 2.4 模型训练 2.5 模型评估 3 CNN-1D分类模型和训练、评估 3.1 定义CNN-1d分类模型 3.2 定义模型参数 …...
如何解决报错:Another app is currently holding yum lock?
在运行yum 相关命令的时候,不知道怎么回事无法进行下载安装,报出 Another app is currently holding the yum lock; waiting for it to exit... 的错误提示。 Another app is currently holding the yum lock. 意思是另外一个应用正在锁住进程锁。 …...
VB.net复制Ntag213卡写入UID
本示例使用的发卡器:https://item.taobao.com/item.htm?ftt&id615391857885 一、读取旧Ntag卡的UID和数据 Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click轻松读卡技术支持:网站:Dim i, j As IntegerDim cardidhex, …...
Java 8 Stream API 入门到实践详解
一、告别 for 循环! 传统痛点: Java 8 之前,集合操作离不开冗长的 for 循环和匿名类。例如,过滤列表中的偶数: List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…...
Linux简单的操作
ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...
sqlserver 根据指定字符 解析拼接字符串
DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...
Matlab | matlab常用命令总结
常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...
OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 在 GPU 上对图像执行 均值漂移滤波(Mean Shift Filtering),用于图像分割或平滑处理。 该函数将输入图像中的…...
基于matlab策略迭代和值迭代法的动态规划
经典的基于策略迭代和值迭代法的动态规划matlab代码,实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...
IP如何挑?2025年海外专线IP如何购买?
你花了时间和预算买了IP,结果IP质量不佳,项目效率低下不说,还可能带来莫名的网络问题,是不是太闹心了?尤其是在面对海外专线IP时,到底怎么才能买到适合自己的呢?所以,挑IP绝对是个技…...
Razor编程中@Html的方法使用大全
文章目录 1. 基础HTML辅助方法1.1 Html.ActionLink()1.2 Html.RouteLink()1.3 Html.Display() / Html.DisplayFor()1.4 Html.Editor() / Html.EditorFor()1.5 Html.Label() / Html.LabelFor()1.6 Html.TextBox() / Html.TextBoxFor() 2. 表单相关辅助方法2.1 Html.BeginForm() …...
xmind转换为markdown
文章目录 解锁思维导图新姿势:将XMind转为结构化Markdown 一、认识Xmind结构二、核心转换流程详解1.解压XMind文件(ZIP处理)2.解析JSON数据结构3:递归转换树形结构4:Markdown层级生成逻辑 三、完整代码 解锁思维导图新…...
