Azure 应用程序网关上 Web 应用程序防火墙 v2 的自定义规则

适用于: ✔️应用程序网关 V2

Azure 应用程序网关 Web 应用程序防火墙 (WAF) v2 包括一个预配置的平台托管规则集,可防范许多不同类型的攻击。 这些攻击包括跨站点脚本、SQL 注入和其他攻击。 如果你是 WAF 管理员,可能需要编写自己的规则来补充核心规则集 (CRS) 规则。 自定义规则可以根据匹配条件阻止、允许或记录请求的流量。 如果将 WAF 策略设置为检测模式和自定义阻止规则触发器,则会记录请求,并且不执行阻止操作。

使用自定义规则来创建您自己的规则,以便 WAF 在每个请求时进行评估。 这些规则的优先级高于托管规则集中的其余规则。 自定义规则包含规则名称、规则优先级和一系列匹配条件。 如果满足这些条件,WAF 会采取措施来允许、阻止或记录。 如果自定义规则触发并且 WAF 执行允许或阻止操作,则 WAF 不会从自定义或托管规则执行任何进一步操作。 在触发允许或阻止操作的自定义规则时,可能仍会看到来自已配置规则集(核心规则集/默认规则集)的规则匹配的一些日志事件,但这些规则不会强制执行。 这些日志事件之所以出现,仅仅是由于 WAF 引擎为实现并行规则处理而采用的优化,因此可以放心忽略。 可以按需启用或禁用自定义规则。

例如,可以阻止来自 192.168.5.0/24 范围内的某个 IP 地址的所有请求。 在此规则中,运算符是 IPMatch,matchValues 是 IP 地址范围 (192.168.5.0/24),操作是阻止流量。 还可以设置规则的名称、优先级以及启用或禁用状态。

自定义规则支持使用复合逻辑创建更高级的规则来解决安全需求。 例如,可以使用两个自定义规则创建以下逻辑((rule1:Condition 1 rule1:Condition 2) rule2:Condition 3)。 此逻辑意味着,如果满足条件 1 条件 2,或者满足条件 3,则 WAF 应执行自定义规则中指定的操作。

同一规则中的不同匹配条件始终使用 and 来组合。 例如,仅当发送方使用特定浏览器时,才阻止来自特定 IP 地址的流量。

如果要使用 介于两个不同的条件之间,则两个条件必须位于不同的规则中。 例如,阻止来自特定 IP 地址的流量,或阻止使用特定浏览器的流量。

自定义规则还支持正则表达式,就像在 CRS 规则集中一样。 有关示例,请参阅创建和使用自定义 Web 应用程序防火墙规则中的示例 3 和 5。

注意

最多可以创建 100 个 WAF 自定义规则。 有关应用程序网关限制的详细信息,请参阅 Azure 订阅和服务限制、配额与约束

注意

在应用程序网关级别应用的任何重定向规则都绕过 WAF 自定义规则。 有关详细信息,请参阅应用程序网关重定向概述

允许与阻止

可以使用自定义规则轻松允许或阻止流量。 例如,可以阻止来自一系列 IP 地址的所有流量。 如果请求来自特定浏览器,则可以创建另一个规则以允许流量。

若要允许某些内容,请将 -Action 参数设置为 Allow。 若要阻止某些内容,请将 -Action 参数设置为 Block

$AllowRule = New-AzApplicationGatewayFirewallCustomRule `
   -Name example1 `
   -Priority 2 `
   -RuleType MatchRule `
   -MatchCondition $condition `
   -Action Allow `
   -State Enabled

$BlockRule = New-AzApplicationGatewayFirewallCustomRule `
   -Name example2 `
   -Priority 2 `
   -RuleType MatchRule `
   -MatchCondition $condition `
   -Action Block `
   -State Enabled

上面的 $BlockRule 映射到 Azure 资源管理器中的以下自定义规则:

"customRules": [
      {
        "name": "blockEvilBot",
        "priority": 2,
        "ruleType": "MatchRule",
        "action": "Block",
        "state": "Enabled",
        "matchConditions": [
          {
            "matchVariables": [
              {
                "variableName": "RequestHeaders",
                "selector": "User-Agent"
              }
            ],
            "operator": "Contains",
            "negationCondition": false,
            "matchValues": [
              "evilbot"
            ],
            "transforms": [
              "Lowercase"
            ]
          }
        ]
      }
    ], 

此自定义规则包含名称、优先级、操作,以及执行该操作所要满足的一系列匹配条件。 有关这些字段的进一步解释,请参阅以下字段说明。 有关自定义规则的示例,请参阅创建和使用自定义 Web 应用程序防火墙规则

注意

WAF 自定义规则不支持基于文件名或文件类型允许或阻止请求。

自定义规则字段

Name [可选]

规则的名称。 它出现在日志中。

启用规则 [可选]

打开或关闭此规则。 默认情况下,自定义规则是启用的。

优先级 [必填]

  • 确定规则评估顺序。 该值越小,规则越早被评估。 允许的范围从 1 到 100。
  • 必须在所有自定义规则中保持唯一。 优先级为 40 的规则将在优先级为 80 的规则之前评估。

规则类型 [必填]

目前必须为 MatchRule

匹配变量 [必需]

必须是以下变量之一:

  • RemoteAddr - 远程计算机连接的 IPv4 地址或范围
  • RequestMethod - HTTP 请求方法
  • QueryString - URI 中的变量
  • PostArgs - 在 POST 正文中发送的参数。 仅当“Content-Type”标头设置为“application/x-www-form-urlencoded”或“multipart/form-data”时,才应用使用此匹配变量的自定义规则。 CRS 版本 3.2 或更高版本支持其他内容类型 application/json,以及机器人保护规则集和异地匹配自定义规则。
  • RequestUri - 请求的 URI
  • RequestHeaders - 请求的标头
  • RequestBody - 此变量包含整个请求正文。 仅当“Content-Type”标头设置为 application/x-www-form-urlencoded 媒体类型时,才应用使用此匹配变量的自定义规则。 CRS 版本 3.2 或更高版本支持其他内容类型 application/soap+xml, application/xml, text/xml,以及机器人保护规则集和地理匹配自定义规则。
  • RequestCookies - 请求中的 Cookie

选择器 [可选]

描述 matchVariable 集合的字段。 例如,如果 matchVariable 为 RequestHeaders,则选择器可以位于 User-Agent 标头中。

操作员 [必填]

使用以下运算符之一:

  • IPMatch - 仅在 Match 变量为 RemoteAddr 且仅支持 IPv4 时使用。
  • Equal - 当输入与 MatchValue 相同时使用。
  • Any - 当没有 MatchValue 时使用。 建议将其用于具有有效 Selector 的 Match 变量。
  • Contains - 仅当 MatchValue 是显式值时使用。 不支持通配符和正则表达式。
  • LessThan
  • GreaterThan
  • 小于或等于
  • GreaterThanOrEqual
  • BeginsWith
  • EndsWith
  • Regex
  • Geomatch

Negate condition [可选]

对当前条件取反。

Transform [可选]

一个字符串值列表,这些值指定在尝试匹配之前要应用的转换。 可用的转换包括:

  • 小写
  • 大写
  • 修剪
  • UrlDecode
  • URL编码
  • RemoveNulls
  • HtmlEntityDecode

匹配值 [必填]

要与之匹配的值列表,你可以将其视为 OR。 例如,列表可能包含 IP 地址或其他字符串。 值的格式取决于上一个运算符。

注意

如果 WAF 正在运行核心规则集 (CRS) 3.1 或任何其他早期 CRS 版本,则匹配值仅接受字母、数字和标点符号。 不支持引号"'和空格。

支持的 HTTP 请求方法值包括:

  • 获取
  • 头部
  • 帖子
  • 选项
  • 删除
  • 补丁

操作 [必填]

在 WAF 策略检测模式下,如果触发自定义规则,始终记录该操作,而不考虑在自定义规则上设置的操作值。

  • Allow - 授权该交易,并跳过所有其他规则。 指定的请求将添加到允许列表,并且一旦匹配,该请求将停止进一步的评估,并会被发送到后端池。 不会根据允许列表中的规则评估任何其他自定义规则或托管规则。
  • 阻止 - 基于 SecDefaultAction(检测模式或防护模式)对事务进行阻止或记录。 - 预防模式 - 基于 SecDefaultAction 阻止事务。 与操作一样 Allow ,在评估请求并将其添加到阻止列表后,评估将停止并阻止请求。 此后,任何满足相同条件的请求都不会再被评估,并会被阻止。
    • 检测模式 - 基于 SecDefaultAction 记录事务,之后评估会停止。 满足相同条件后的任何请求不会被评估,但会被记录。
  • Log - 允许该规则写入日志,但允许其他规则运行以进行评估。 其他自定义规则将按优先级顺序进行评估,然后再评估托管规则。

复制和重复自定义规则

可以在给定的策略中复制自定义规则。 复制规则时,需要为规则指定唯一的名称和唯一的优先级值。 此外,只要策略位于同一订阅中,就可以将自定义规则从一个应用程序网关 WAF 策略复制到另一个应用程序网关 WAF 策略。 将规则从一个策略复制到另一个策略时,需要选择要将规则复制到的应用程序网关 WAF 策略。 选择 WAF 策略后,需要为规则指定唯一名称,并分配优先级排名。

Geomatch 自定义规则

自定义规则允许创建定制的规则,以满足应用程序和安全策略的确切需要。 可以按国家或地区限制对 Web 应用程序的访问。 有关详细信息,请参阅 Geomatch 自定义规则

后续步骤