使用 Azure Web 应用程序防火墙 (WAF) 保护 Web 应用程序

使用 Azure Web 应用程序防火墙 (WAF) 保护 Web 应用程序

2025年1月14日

本文旨在指导安全分析师、IT 管理员和系统工程师实施和配置 Azure Web 应用程序防火墙 (WAF),以保护 Web 应用程序免受常见攻击。在 Web 应用程序成为许多企业门户的数字环境中,它们已成为各种网络攻击的常见目标,例如 SQL 注入、跨站点脚本 (XSS) 和其他 OWASP Top 10 漏洞。 Azure WAF 提供了重要的保护层来减轻这些风险,确保数据可用性、完整性和机密性 [1]。

简介

Web 应用程序是几乎所有组织的 IT 基础架构的关键组件。然而,由于暴露在互联网上,他们很容易受到攻击,从而损害数据、中断服务并损害公司声誉。 Web 应用程序防火墙 (WAF) 充当反向代理,检查到达和离开 Web 应用程序的 HTTP/HTTPS 流量,在恶意请求到达应用程序服务器之前识别并阻止它们。 Azure WAF 作为 Azure 应用程序网关或 Azure Front Door 的一项功能提供,为 Azure 甚至混合环境中托管的 Web 应用程序提供集中且可扩展的保护 [2]。

本实用指南将涵盖 Azure WAF 的基本概念、其操作模式(检测和预防)、使用托管规则集(OWASP 核心规则集 - CRS)和自定义规则配置 WAF 策略。将提供使用 Azure 应用程序网关部署 WAF、测试其针对常见攻击的有效性并验证结果的分步说明,以及讨论最佳实践和故障排除技巧。目标是使读者能够自主、专业、可靠地配置和管理 Azure WAF,保护其 Web 应用程序免受最常见的威胁。

为什么 Azure WAF 对于 Web 应用程序保护至关重要?

  • 全面保护:防御常见的 Web 攻击,包括 SQL 注入、跨站脚本 (XSS)、文件包含、机器人攻击和其他 OWASP Top 10 漏洞 [3]。
  • 托管规则:使用由 Microsoft 自动更新的托管规则集(例如 OWASP CRS),确保在无需手动干预的情况下抵御最新威胁。
  • 自定义规则:允许创建自定义规则以满足特定于应用程序的安全要求、阻止特定流量模式或防止托管规则未涵盖的漏洞。
  • 灵活的操作模式:以“检测”模式(仅监视和记录攻击)或“预防”(主动阻止攻击)模式操作,允许逐步控制实施。
  • 与 Azure 的本机集成:与 Azure 应用程序网关(适用于内部应用程序)和 Azure Front Door(适用于全球应用程序)无缝集成,提供具有嵌入式安全性的完整应用程序交付解决方案。
  • 可扩展性和高可用性:受益于 Azure 应用程序交付服务的可扩展性和高可用性,确保保护始终处于活动状态和高性能。
  • 合规性:帮助组织满足需要保护 Web 应用程序的法规要求和安全标准。

先决条件

要实施 Azure WAF,您将需要以下项目:

  1. 活动 Azure 订阅:用于创建和管理资源的 Azure 订阅。
  2. 管理访问权限:具有创建和管理应用程序网关、前门和 WAF 策略等资源所需权限的帐户(例如“协作者”或“网络管理员”)。
  3. 现有 Web 应用程序:要保护的 Web 应用程序(托管在 Azure 或其他位置)。对于本指南,我们将假设一个通过应用程序网关访问的简单 Web 应用程序。
  4. 虚拟网络 (VNet) 和子网:为应用程序网关和 Web 应用程序配置的虚拟网络和子网。

分步:使用应用程序网关实施 Azure WAF

让我们配置 Azure WAF 来保护使用 Azure 应用程序网关的 Web 应用程序。

1. 使用 WAF 创建 Azure 应用程序网关

  1. 打开浏览器并导航到 Azure 门户:“https://portal.azure.com”。
  2. 使用具有必要权限的帐户登录。
  3. 在顶部搜索字段中,输入“应用程序网关”并从结果中选择它。
  4. 单击“+ 创建”。

  5. 基础知识

    • 订阅:选择您的订阅。
    • 资源组:创建一个新的资源组(例如rg-waf-appgw)或选择一个现有的资源组。
    • 应用程序网关名称:给出一个名称(例如:appgw-waf-01)。
    • 区域:选择区域。
    • :选择“标准 v2”(WAF 仅在层 v2 中可用)。
    • 启用 WAF:选择“是”。
    • WAF 策略名称:为 WAF 策略命名(例如“wafpolicy-appgw-01”)。
    • WAF 模式:从“检测”开始监控和调整规则,然后再转向“预防”。
  6. 单击“下一步:前端”。

  7. 前端

    • 前端 IP 地址类型:选择“公共”。
    • 公共 IP 地址:单击“+添加新”并为公共 IP 命名(例如:“pip-appgw-waf”)。
  8. 单击“下一步:后端”。

  9. 后端

    • 单击“+添加后端池”。
    • 后端池名称:为其命名(例如“app-backend-pool”)。
    • 添加没有目标的后端池:选择“否”。
    • 目标类型:选择“IP 地址或 FQDN”。
    • IP 地址/FQDN:输入 Web 应用程序的 IP 地址或 FQDN(例如:VNet 中 VM 的“10.0.0.4”,或应用服务的 FQDN)。
    • 单击“添加”。
  10. 单击“下一步:配置”。

  11. 设置

    • 路由设置:点击+添加路由规则
    • 规则名称:为其命名(例如:rule-http)。
    • 优先级:保留默认值。
    • 听众
      • 监听器名称:给出一个名称(例如:listener-http)。
      • 前端IP地址:选择创建的公共IP。
      • 协议:选择HTTP(首先,您可以稍后添加HTTPS)。
      • 端口80
    • 后端目标
      • 目标类型:选择“后端池”。
      • 后端池:选择“应用程序后端池”。
      • 后端配置:点击+新增
        • 后端设置名称:为其命名(例如“http-setting”)。
        • 后端协议HTTP
        • 后端端口80(或您的 Web 应用程序端口)。
        • 使用自定义探针:选择“否”(对于这个简单的示例)。
        • 单击“添加”。
    • 点击路由规则中的“添加”。
  12. 单击“下一步:标签”。

  13. 单击“下一步:查看 + 创建”。
  14. 检查设置并单击“创建”。

    • 说明:此过程创建具有关联 WAF 的应用程序网关。 WAF 将开始在“检测”模式下检查流量。

2. 配置托管和自定义 WAF 规则

部署完成后,您可以调整WAF策略。

  1. 在 Azure 门户中,导航到应用程序网关 (appgw-waf-01)。
  2. 在左侧导航窗格中的“设置”下,选择“Web 应用程序防火墙”。
  3. 单击您的 WAF 策略的名称 (wafpolicy-appgw-01)。

  4. 策略模式:在“概述”部分中,当您确信您的规则不会阻止合法流量时,可以将“模式”从“检测”更改为“预防”。

  5. 托管规则

    • 在 WAF 策略左侧导航窗格中,选择“托管规则”。
    • 确保“OWASP 默认规则集”(例如“OWASP_CRS/3.2”)为“已启用”。
    • 如果托管集中的特定规则导致误报,您可以禁用它们,但要谨慎执行,并且只有在仔细考虑之后才能执行。
  6. 自定义规则

    • 在 WAF 策略左侧导航窗格中,选择“自定义规则”。
    • 单击“+添加自定义规则”。
    • 规则名称:为其命名(例如:BloquearIPMalicioso)。
    • 优先级:设置优先级(数字越小优先级越高)。
    • 类型规则匹配
    • 条件
      • 变量类型RemoteAddress
      • 操作员IPMatch
      • :输入您要阻止的 IP 地址或 CIDR 范围(例如:192.168.1.10/32)。
    • 操作:选择“阻止”。

    • 说明:自定义规则允许您根据特定条件(例如 IP 地址、HTTP 标头、查询字符串等)定义阻止逻辑。

  7. 单击“添加”,然后单击“保存”到 WAF 策略。

3. 监控WAF并查看日志

监控对于了解 WAF 有效性和调整策略至关重要。

  1. 在 Azure 门户中,导航到应用程序网关 (appgw-waf-01)。
  2. 在左侧导航窗格中的“监控”下,选择“诊断日志”。
  3. 单击“+添加诊断配置”。
  4. 诊断配置名称:为其命名(例如:diag-waf)。
  5. 日志类别:检查“ApplicationGatewayAccessLog”和“ApplicationGatewayFirewallLog”。
  6. 目标详细信息:选择“发送到 Log Analytics 工作区”并选择你的工作区。
  7. 单击“保存”。

  8. 几分钟后,导航到 Log Analytics 工作区。

  9. 在左侧导航窗格中,选择“日志”。 10.使用KQL(Kusto查询语言)查询分析WAF日志:
    • 查看所有 WAF 事件: ``库斯托 Azure诊断 |其中 ResourceProvider ==“MICROSOFT.NETWORK” |其中类别==“ApplicationGatewayFirewallLog” |项目 TimeGenerate、主机名_s、requestUri_s、消息、操作_s、策略_s |按时间生成的 desc 排序 ````
    • 查看阻止的攻击(如果 WAF 处于“预防”模式): ``库斯托 Azure诊断 |其中 ResourceProvider ==“MICROSOFT.NETWORK” |其中类别==“ApplicationGatewayFirewallLog” |其中action_s ==“已阻止” |项目 TimeGenerator、hostname_s、requestUri_s、消息、ruleId_s |按时间生成的 desc 排序 ````

验证和测试

测试 WAF 对于确保其阻止预期攻击且不阻止合法流量(误报)至关重要。

1. 测试常见攻击(SQL注入、XSS)

  1. 场景:尝试通过应用程序网关(使用公共 IP 或 FQDN)访问您的 Web 应用程序,并模拟对 URL 或表单参数的 SQL 注入攻击。

    • 带有 SQL 注入尝试的示例 URL(未经授权请勿在生产环境中运行): http://<seu_ip_publico_appgw>/index.php?id=1' 或 '1'='1
    • 尝试 XSS 的 URL 示例: http://<seu_ip_publico_appgw>/search?query=<script>alert('XSS')</script>
  2. 预期操作(检测模式):如果 WAF 处于“检测”模式,则必须允许请求,但 Log Analytics 中的 WAF 日志必须记录攻击以及检测到攻击的规则。

  3. 预期操作(预防模式):如果 WAF 处于“预防”模式,则应阻止请求,并且浏览器应显示 WAF 错误页面(通常是 HTTP 403 Forbidden 错误)。

  4. 验证:检查 Log Analytics 中的 WAF 日志,以确认已检测到(在检测模式下)或已阻止(在预防模式下)攻击。

2. 测试自定义规则(IP 阻止)

  1. 场景:尝试从您在 IP 阻止自定义规则中配置的 IP 地址访问您的 Web 应用程序。
  2. 预期操作:访问应被阻止,浏览器应显示 WAF 错误页面。
  3. 验证:检查 Log Analytics 中的 WAF 日志,确认该 IP 被自定义规则阻止。

安全提示和最佳实践

  • 以检测模式启动:最初始终在“检测”模式下部署 WAF。在切换到“预防”模式之前,请仔细监控日志以识别误报并调整规则。
  • WAF 调优:微调至关重要。禁用生成误报(阻止合法流量)的特定规则或为特定参数添加排除规则。避免禁用整个规则集。
  • 自定义规则:使用自定义规则来处理应用程序的特定安全要求o 或在更新托管规则之前缓解新发现的漏洞。
  • CRS 更新:使您的托管规则集 (OWASP CRS) 保持最新,以确保防范最新威胁。 Azure WAF 通常会自动更新,但请检查版本。
  • 与 Azure Front Door 集成:对于全球 Web 应用程序或需要性能优化和高级路由的应用程序,请考虑在 Azure Front Door 上部署 WAF。这为 Microsoft 全球网络的边缘提供了保护。
  • 监视和警报:在 Azure Monitor 中配置 WAF 安全事件的警报,例如阻止的攻击或异常。将 WAF 日志与 SIEM(例如 Microsoft Sentinel)集成以获得集中视图。
  • 定期安全测试:定期对您的Web应用程序进行渗透测试和漏洞扫描,以识别新漏洞并验证WAF的有效性。
  • 最小权限原则:确保只有授权用户才有权配置和管理WAF策略。

常见故障排除

  • WAF 不会阻止预期的攻击
    • 检查WAF是否处于“预防”模式而不是“检测”模式。
    • 确保托管规则集 (OWASP CRS) 已启用。
    • 在 Log Analytics 中查看 WAF 日志,了解是否检测到攻击以及触发了哪个规则。您可能需要调整 CRS 敏感度或添加自定义规则。
    • 确保没有允许恶意流量的排除规则或白名单。
  • WAF 正在阻止合法流量(误报)
    • 首先在 Log Analytics 中分析您的 WAF 日志,以确定哪个规则正在阻止合法流量。
    • 对于识别出的规则,您可以:
      • 禁用特定规则(最后的手段)。
      • 为导致误报的特定参数或标头添加排除规则。
      • 调整异常评分阈值(如果在异常评分模式下使用 CRS)。
    • 考虑暂时返回“检测”模式来调整规则。
  • 启用WAF后应用程序性能下降
    • WAF 由于流量检查而增加了少量延迟。确保应用程序网关或前门的大小适当。
    • 在 Azure Monitor 中检查应用程序网关性能日志。
  • WAF 未与正确的应用程序关联
    • 验证 WAF 策略是否与正确的应用程序网关或前门关联。
    • 确保您的 Web 应用程序的流量实际上是通过启用了 WAF 的应用程序网关/前门。

结论

Azure Web 应用程序防火墙 (WAF) 是保护 Web 应用程序免受无数网络攻击的重要防御措施。通过在网络边缘提供一层流量检查和过滤,WAF 充当盾牌,防止已知漏洞和零日威胁。使用托管和自定义规则集的灵活性,以及​​与 Azure 应用程序交付服务的本机集成,使 Azure WAF 成为适合任何组织的强大且可扩展的解决方案。通过仔细实施、微调策略和持续监控,安全专业人员可以确保其 Web 应用程序保持安全、可用和合规,从而加强组织的整体安全态势,应对不断变化的威胁形势。


参考资料:

[1] 微软学习。 什么是 Azure Web 应用程序防火墙?。位于:https://learn.microsoft.com/pt-br/azure/web-application-firewall/overview [2] 微软学习。 Azure 应用程序网关上的 Web 应用程序防火墙 (WAF)。位于:https://learn.microsoft.com/pt-br/azure/web-application-firewall/ag/ag-overview [3] OWASP 基金会。 OWASP 前 10 名。网址:https://owasp.org/www-project-top-ten/ [4] 微软学习。 创建防火墙策略用于 Azure 应用程序网关 的 Web 应用程序网关 (WAF)。位于:https://learn.microsoft.com/pt-br/azure/web-application-firewall/ag/create-waf-policy-ag [5] 微软学习。 WAF CRS 规则和规则组。位于:https://learn.microsoft.com/pt-br/azure/web-application-firewall/ag/application-gateway-waf-collection-rules [6] 微软学习。 WAF 监控和日志记录。位于:https://learn.microsoft.com/pt-br/azure/web-application-firewall/ag/waf-diagnostics