使用 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,您将需要以下项目:
- 活动 Azure 订阅:用于创建和管理资源的 Azure 订阅。
- 管理访问权限:具有创建和管理应用程序网关、前门和 WAF 策略等资源所需权限的帐户(例如“协作者”或“网络管理员”)。
- 现有 Web 应用程序:要保护的 Web 应用程序(托管在 Azure 或其他位置)。对于本指南,我们将假设一个通过应用程序网关访问的简单 Web 应用程序。
- 虚拟网络 (VNet) 和子网:为应用程序网关和 Web 应用程序配置的虚拟网络和子网。
分步:使用应用程序网关实施 Azure WAF
让我们配置 Azure WAF 来保护使用 Azure 应用程序网关的 Web 应用程序。
1. 使用 WAF 创建 Azure 应用程序网关
- 打开浏览器并导航到 Azure 门户:“https://portal.azure.com”。
- 使用具有必要权限的帐户登录。
- 在顶部搜索字段中,输入“应用程序网关”并从结果中选择它。
-
单击“+ 创建”。
-
基础知识:
- 订阅:选择您的订阅。
- 资源组:创建一个新的资源组(例如
rg-waf-appgw)或选择一个现有的资源组。 - 应用程序网关名称:给出一个名称(例如:
appgw-waf-01)。 - 区域:选择区域。
- 层:选择“标准 v2”(WAF 仅在层 v2 中可用)。
- 启用 WAF:选择“是”。
- WAF 策略名称:为 WAF 策略命名(例如“wafpolicy-appgw-01”)。
- WAF 模式:从“检测”开始监控和调整规则,然后再转向“预防”。
-
单击“下一步:前端”。
-
前端:
- 前端 IP 地址类型:选择“公共”。
- 公共 IP 地址:单击“+添加新”并为公共 IP 命名(例如:“pip-appgw-waf”)。
-
单击“下一步:后端”。
-
后端:
- 单击“+添加后端池”。
- 后端池名称:为其命名(例如“app-backend-pool”)。
- 添加没有目标的后端池:选择“否”。
- 目标类型:选择“IP 地址或 FQDN”。
- IP 地址/FQDN:输入 Web 应用程序的 IP 地址或 FQDN(例如:VNet 中 VM 的“10.0.0.4”,或应用服务的 FQDN)。
- 单击“添加”。
-
单击“下一步:配置”。
-
设置:
- 路由设置:点击
+添加路由规则。 - 规则名称:为其命名(例如:
rule-http)。 - 优先级:保留默认值。
- 听众:
- 监听器名称:给出一个名称(例如:
listener-http)。 - 前端IP地址:选择创建的公共IP。
- 协议:选择
HTTP(首先,您可以稍后添加HTTPS)。 - 端口:
80。
- 监听器名称:给出一个名称(例如:
- 后端目标:
- 目标类型:选择“后端池”。
- 后端池:选择“应用程序后端池”。
- 后端配置:点击
+新增。- 后端设置名称:为其命名(例如“http-setting”)。
- 后端协议:
HTTP。 - 后端端口:
80(或您的 Web 应用程序端口)。 - 使用自定义探针:选择“否”(对于这个简单的示例)。
- 单击“添加”。
- 点击路由规则中的“添加”。
- 路由设置:点击
-
单击“下一步:标签”。
- 单击“下一步:查看 + 创建”。
-
检查设置并单击“创建”。
- 说明:此过程创建具有关联 WAF 的应用程序网关。 WAF 将开始在“检测”模式下检查流量。
2. 配置托管和自定义 WAF 规则
部署完成后,您可以调整WAF策略。
- 在 Azure 门户中,导航到应用程序网关 (
appgw-waf-01)。 - 在左侧导航窗格中的“设置”下,选择“Web 应用程序防火墙”。
-
单击您的 WAF 策略的名称 (
wafpolicy-appgw-01)。 -
策略模式:在“概述”部分中,当您确信您的规则不会阻止合法流量时,可以将“模式”从“检测”更改为“预防”。
-
托管规则:
- 在 WAF 策略左侧导航窗格中,选择“托管规则”。
- 确保“OWASP 默认规则集”(例如“OWASP_CRS/3.2”)为“已启用”。
- 如果托管集中的特定规则导致误报,您可以禁用它们,但要谨慎执行,并且只有在仔细考虑之后才能执行。
-
自定义规则:
- 在 WAF 策略左侧导航窗格中,选择“自定义规则”。
- 单击“+添加自定义规则”。
- 规则名称:为其命名(例如:
BloquearIPMalicioso)。 - 优先级:设置优先级(数字越小优先级越高)。
- 类型规则:
匹配。 - 条件:
- 变量类型:
RemoteAddress。 - 操作员:
IPMatch。 - 值:输入您要阻止的 IP 地址或 CIDR 范围(例如:
192.168.1.10/32)。
- 变量类型:
-
操作:选择“阻止”。
-
说明:自定义规则允许您根据特定条件(例如 IP 地址、HTTP 标头、查询字符串等)定义阻止逻辑。
-
单击“添加”,然后单击“保存”到 WAF 策略。
3. 监控WAF并查看日志
监控对于了解 WAF 有效性和调整策略至关重要。
- 在 Azure 门户中,导航到应用程序网关 (
appgw-waf-01)。 - 在左侧导航窗格中的“监控”下,选择“诊断日志”。
- 单击“+添加诊断配置”。
- 诊断配置名称:为其命名(例如:
diag-waf)。 - 日志类别:检查“ApplicationGatewayAccessLog”和“ApplicationGatewayFirewallLog”。
- 目标详细信息:选择“发送到 Log Analytics 工作区”并选择你的工作区。
-
单击“保存”。
-
几分钟后,导航到 Log Analytics 工作区。
- 在左侧导航窗格中,选择“日志”。
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)
-
场景:尝试通过应用程序网关(使用公共 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>
- 带有 SQL 注入尝试的示例 URL(未经授权请勿在生产环境中运行):
-
预期操作(检测模式):如果 WAF 处于“检测”模式,则必须允许请求,但 Log Analytics 中的 WAF 日志必须记录攻击以及检测到攻击的规则。
-
预期操作(预防模式):如果 WAF 处于“预防”模式,则应阻止请求,并且浏览器应显示 WAF 错误页面(通常是 HTTP 403 Forbidden 错误)。
-
验证:检查 Log Analytics 中的 WAF 日志,以确认已检测到(在检测模式下)或已阻止(在预防模式下)攻击。
2. 测试自定义规则(IP 阻止)
- 场景:尝试从您在 IP 阻止自定义规则中配置的 IP 地址访问您的 Web 应用程序。
- 预期操作:访问应被阻止,浏览器应显示 WAF 错误页面。
- 验证:检查 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