写点什么

AWS WAF – Web 应用程序防火墙初体验

  • 2019-11-14
  • 本文字数:3474 字

    阅读完需:约 11 分钟

AWS WAF – Web 应用程序防火墙初体验

1. 背景介绍

AWS WAF ,全称是 Web Application Firewall ,即 Web 应用程序防火墙,可以帮助用户保护 Web 应用程序免受常见的 Web 漏洞攻击。通常这些攻击会损害 Web 应用的安全性,影响可用性,消耗过多的资源,增加成本,还降低响应速度和用户体验。


WAF 可以让用户创建定制规则进行流量筛选,阻隔恶意访问,保障正常请求。比如,可以根据 IP 地址、HTTP 标头、HTTP 正文或 URI 字符串来筛选 Web 请求,这样便能阻止诸如 SQL 注入或跨站点脚本等常见攻击模式。


和其它诸多 AWS 服务一样,WAF 的所有功能也可以通过 AWS 管理控制台或 API 进行配置。这便利了用户团队的不同角色,不论是开发人员、DevOps 工程师还是安全审查专家都可以方便使用,从开发到部署的全过程系统地管理 Web 应用的安全。


WAF 和 AWS 的 Web 相关服务紧密结合,目前支持 CloudFront 和 Application Load Balancer。AWS WAF 让您能够创建集中化的规则集合,而后部署到多个网站上。用户通常有多个网站和 Web 应用程序,使用 WAF 可以只定义一组规则并复用于多个应用程序上。WAF 也是 AWS 全托管的服务,用户无需担心其扩展和可用性。只需在正确的资源上启用 WAF,无需部署任何额外软件即可完成部署。并且只需要部署一次,即可以全球的边缘节点全部生效。


作为防火墙,WAF 当然也少不了监控和报警。WAF 可以让用户设置条件来监视哪些请求。提供准实时地 Web 流量监测报告,并以此信息来创建新的规则或使用 Amazon CloudWatch 的进行报警。


今天,我们以 WAF 实现防盗图这个常见应用场景,帮助大家快速上手,体验其强大和便捷。

2. 部署与配置 WAF

现在主流的 Web 应用都使用了无 cookie 域名来加速静态内容,我们这里也进行类似的部署,如网站域名是 example.com,图片服务使用另一个域名 example_img.com。禁止盗图的效果可以从下表来概述。


col 1col 2
调用图片的域名响应效果
*.example.com200 OK
其它非法域名403 Forbidden


WAF 目前支持 CloudFront 和 Application Load Balancer,我们这个例子中防盗图要保护的是图片服务器,这里我们所使用的就是 CloudFront 提供的 CDN。我们用一个现成的 CloudFront 分发来作演示,使用 AWS 的 DNS 服务 Route 53 配置了域名 imgtest.simg.cf。为了演示效果,我们还使用 EC2 配合搭建了一个简单的 Web 服务器,也使用 Route 53 配置了域名 allow.snowpeak.cf。有关 EC2、ClourFront 和 Route 53 的使用这里不再赘述,请参见各自相关文档。


现在已有了具体的 2 个域名,我们要实现前述的禁止盗图效果,把规则具体化为以下控制流程:


  • Referer 请求头包含“://allow.snowpeak.cf/”(不写具体的协议更简单,可以同时支持 HTTP 和 HTTPS 请求)则允许访问。

  • 其它情况下禁止访问。


登录 AWS WAF 管理控制台


https://console.aws.amazon.com/waf/home


在左侧导航菜单中点击 AWS WAF > Web ACLs,来到 Web ACLs 页,点击 Create Web ACL 按钮会前进到 Set up a web access control list (web ACL)向导。


如果前进到 Concepts overview 页,直接点击右下角 Next 按钮,前进到 Step 1: Name web ACL 页。

2.1 创建 Web ACL

  1. Web ACL name 输入 ImgAntiHotLink。

  2. CloudWatch metric name 会自动填上 ImgAntiHotLink。

  3. Region 保持默认的 Global (CloudFront)不变。

  4. AWS resource to associate 点击下拉,选择我们已有的 CloudFront 分发。

  5. 点击 Next 按钮。


2.2 创建字符串匹配条件

在 Step 2: Create conditions 页,下拉到页面最底部,找到 String match conditions,点击其右边的 Create condition 按钮创建字符串匹配条件。



在弹出的 Create string match condition 层中:


  1. Name 栏填写 referer_domain。

  2. Region 保持默认的 Global (CloudFront)不变。

  3. Filter settings 部分,Part of the request to filter on 在菜单中选择 Header,在随后出现的 Header 栏选择 Referer。

  4. Match type 选 Contains。Transformation 选 Convert to lowercase。

  5. Value to match 填写://allow.snowpeak.cf/。

  6. 点击 Add filter 按钮,最后点击右下角 Create 按钮完成创建。



创建完成后弹层关闭,回到 Step 2: Create conditions 页,点击右下角 Next 按钮。

2.3 创建规则

在 Step 3: Create rules 页,Add rules to a web ACL 下点击右边的 Create Rule 按钮,在弹出层 Create Rule 里如下填写:


  1. 在 Name 中填写 AntiHotlink,CloudWatch metric name 会自动填写上相同的值。

  2. Region 保持默认的 Global (CloudFront)不变即可。

  3. 在 Add Conditions 下,When a request 下的 3 个菜单依次选择


  • does

  • match at least one of the filters in the string match condition

  • referer_domain


  1. 点击“Add condition”,最后点击右下角 Create 按钮,完成创建。



创建完成后,弹层关闭,回到 Step 3: Create rules 页。


把 AntiHotLink 这条规则的 Action 选 Allow。


Default action 选 Allow all requests that don’t match any rules



点击右下角的 Review and create 按钮。


最后来到 Step 4: Review and create 页,点击右下角 Confirm and create 按钮完成创建。

3.4 查看配置结果

这时我们可以到 AWS WAF 下各个分项去看一下配置的结果,看看上述向导帮我们在 Web ACLs、Rules、和 String matching 下分别建立了记录并且做了关联。


在左侧导航菜单中点击 AWS WAF > Web ACLs,来到 Web ACLs 页。如果你从其它区分 region 的服务管理页来到 AWS WAF 页,可能出发现这里没有记录,提示“You don’t have any web ACLs in XXX region. Choose Create web ACL to get started.”,不用惊慌,是因为上面的 Filter 菜单默认选中了你常用的 region。我们刚刚创建的 WAF 是不区分 region 的,所以在这里点选“Global (Cloudfront)”,然后我们创建的记录就可以显示出来了。



再依次点击 AWS WAF > Rules 和 Conditions > String matching,查看到各有一条记录。


前述的向导已经帮我们创建了这些具体的分项,一方面方便我们可以逐个分别调整,另一方面,也方便我把把条件和规则复用到不同的站点上。


WAF 配置完毕后立刻生效,不用像 CloudFront 分发那样还需要等待一段时间。这一点在发生 Web 攻击时用于及时应对是很有意义的。

3. 效果验证

我们做一个简单的 HTML 页面,里面引用我们的图片文件,然后把它部署到我们在 EC2 上的 Web 站点上。当我们使用正常的域名访问时,比如https://allow.snowpeak.cf/imgtest.htm,图片都可以正常加载出来。下图是带 Firebug 请求详情的截图。



我们再使用 EC2 原始的域名来访问,http://ec2-xxxx.compute.amazonaws.com 就可以模拟非法域名引用我们的图片。可以看到图片都没有显示出来。下图是带 Firebug 请求详情的截图。


4. 监控

WAF 提供方便的常用监控,在 WAF 管理页面就可以查看,还可集成到 CloudWatch,使用更丰富的指标和图表。在左侧导航菜单中点击 AWS WAF > Web ACLs,来到 Web ACLs 页,在这里点击咱们已创建的这条记录 ImgAntiHotLink,页面右侧就会显示出监控详情。这个请求的数据归集有几分钟延迟,新建的 ACL 稍等一会可以看到结果。


首先是请求次数的图表。



右下方是请求的详情。



这里点击“View the graph in CloudWatch”,还可以跳转到 CloudWatch 去看更多详细的日志和图表。


更为强大的是,可以结合 CloudWatch Alarm 创建报警,比如当拦截的非法请求数高于一定阈值时通知我们,方便我们再人工干预。操作方法和其它 Alarm 一样,具体可参考 Alarm 的相关文档,这里不再赘述。

5. 小结

今天我们只是通过一条规则实现了一个常见场景的配置。实际的防盗图还要考虑到更多因素,比如允许移动端 App 访问,允许特定搜索引擎访问图片以便收录。我们可以灵活使用 String matching 和 Rule,配置出各种丰富的规则和效果,满足各种访问控制的需求。


在 Web 应用开发领域,防盗图是只个常见的小需求,在自建数据中心如果要实现防盗图,需要在所有 CDN 节点上逐个配置,开发和运维都很繁琐。在 AWS 上我们使用 WAF 可以非常方便的进行配置,还能享受其天然的高可用。对于各种 Web 攻击的防御,WAF 更是得心应手的工具,为我们 Web 应用保驾护航。


作者介绍:



薛峰,AWS 解决方案架构师,AWS 的云计算方案架构的咨询和设计,同时致力于 AWS 云服务在国内和全球的应用和推广,在大规模并发应用架构、移动应用以及无服务器架构等方面有丰富的实践经验。在加入 AWS 之前曾长期从事互联网应用开发,先后在新浪、唯品会等公司担任架构师、技术总监等职位。对跨平台多终端的互联网应用架构和方案有深入的研究。


本文转载自 AWS 技术博客。


原文链接:


https://amazonaws-china.com/cn/blogs/china/aws-waf-web-application-firewall/


2019-11-14 08:002418

评论

发布
暂无评论
发现更多内容

Post-Training on PAI (4):模型微调SFT、DPO、GRPO

阿里云大数据AI技术

人工智能 云计算 算法 模型微调 大模型微调实践

生产排产的逻辑是什么?一文讲通!

积木链小链

数字化转型 智能制造 生产管理

更新Mac软件有哪些方法 Mac软件如何管理待更新软件

阿拉灯神丁

appstore 应用程序 Mac软件 卸载清理软件 CleanMyMac X中文

时序数据库 TimechoDB V2.0.5 发布 | 新增树转表视图、模型微调等功能

Apache IoTDB

BI 数据可视化平台建设(3)—首页性能提升实践

vivo互联网技术

前端 性能调优 BI可视化

AI数字人开发的技术框架

北京木奇移动技术有限公司

软件外包公司 AI数字人 AI数字人开发

中烟创新入选2025全国企业“人工智能+”行动创新案例TOP100

中烟创新

CST软件无限平面圆孔RCS --- 单站, 单角多频,T和F求解器(远场),去耦平面

思茂信息

cst CST软件 CST Studio Suite

没有专业IT团队?灯塔低代码平台让中小企业自己当"开发者"

中烟创新

招商管理系统(源码+文档+讲解+演示)

深圳亥时科技

基于 Amazon Nova Sonic 和 MCP 构建语音交互 Agent

亚马逊云科技 (Amazon Web Services)

AI数字人开发的技术方案

北京木奇移动技术有限公司

软件外包公司 AI技术应用 AI数字人

教堂定制P4 LED屏幕安装:提升宗教体验

Dylan

数字化 LED显示屏 全彩LED显示屏 led显示屏厂家 户内led显示屏

嘉为蓝鲸DevOps平台:连续2年入选信通院数字化图谱,全链路赋能企业研发效能升级

嘉为蓝鲸

DevOps 智能运维 研运一体化

VMware ESXi 8.0U3f 发布 - 领先的裸机 Hypervisor

sysin

esxi

云测试提前定位和解决问题 萤火故事屋 上架流程

万少

HarmonyOS NEXT

微软发布安全公告2887505:IE远程代码执行漏洞分析与缓解方案

qife122

网络安全 浏览器安全

2015年9月微软安全更新汇总 - MS15-094至MS15-105漏洞修复

qife122

安全更新 Windows安全

百度视频云互动大模型SDK适配鸿蒙,让人机交互更智能、更开放

新消费日报

NocoBase CRM Demo 部署指南

NocoBase

开源 低代码 零代码 Demo CRM

AI数字人的开发流程

北京木奇移动技术有限公司

软件外包公司 AI技术应用 AI数字人

时序数据库 TDengine 开源之夏项目全中选!年轻人的热爱从不是说说而已

TDengine

tdengine 开源 时序数据库

VMware ESXi 9.0.0.0100 发布 - 领先的裸机 Hypervisor

sysin

esxi

全方位优化:智能化工器具库房管理综合解决方案

斯科信息

RFID解决方案 RFID工具库房 斯科信息 RFID技术

成功案例丨减重64%!Altair 解决方案助力3D打印铣削头实现轻量化

Altair RapidMiner

仿真 CAE hyperworks 3D打印 Radioss

HCI发布《2025年洞察报告》

财见

Golang基础笔记十二之defer、panic、error

Hunter熊

golang 后端 defer panic Error

Console 纳管 Elasticsearch 9(二):日志监控

极限实验室

elasticsearch console

大数据-43 Redis Lua脚本实战全解析 eval redis.call redis.pcall

武子康

Java lua redis 大数据 分布式

清华大学软件学院院长王建民教授:AI 时代,如何从采数到用数?

Apache IoTDB

AWS WAF – Web 应用程序防火墙初体验_语言 & 开发_亚马逊云科技 (Amazon Web Services)_InfoQ精选文章