Azure Front Door 上的 Azure Web 应用程序防火墙的自定义规则

Azure Front Door 上的 Azure Web 应用程序防火墙允许根据定义的条件控制对 Web 应用程序的访问。 自定义 Web 应用程序防火墙(WAF)规则由优先级编号、规则类型、匹配条件和作组成。

有两种类型的自定义规则:匹配规则和速率限制规则。 匹配规则基于一组匹配条件控制访问。 速率限制规则基于匹配条件和传入请求速率控制访问。 可以禁用自定义规则以防止对其进行评估,但仍保留配置。

有关速率限制的详细信息,请参阅 Azure Front Door 的速率限制是什么?

优先级、作类型和匹配条件

可以使用定义优先级编号、规则类型、匹配条件数组和作的自定义 WAF 规则来控制访问。

  • 优先级

    描述 WAF 规则评估顺序的唯一整数。 在具有较高值的规则之前,先评估优先级较低的规则。 规则评估在 除 Log 之外的任何规则作上停止。 优先级数字在所有自定义规则中必须是唯一的。

  • Action

    定义如何路由请求(如果 WAF 规则匹配)。 可以选择以下作之一,以在请求与自定义规则匹配时应用。

    • 允许:WAF 允许请求处理、记录 WAF 日志中的条目以及退出。
    • 阻止:请求被阻止。 WAF 将响应发送到客户端,而无需进一步转发请求。 WAF 记录 WAF 日志中的条目并退出。
    • 日志:WAF 记录 WAF 日志中的条目,并继续按优先级顺序评估下一个规则。
    • 重定向:WAF 将请求重定向到指定的 URI,记录 WAF 日志中的条目,然后退出。
  • 匹配条件

    定义匹配变量、运算符和匹配值。 每个规则可以包含多个匹配条件。 匹配条件可能基于地理位置、客户端 IP 地址(CIDR)、大小或字符串匹配。 字符串匹配可以针对匹配变量的列表。

    • 匹配变量

      • RequestMethod
      • QueryString
      • PostArgs
      • RequestUri
      • RequestHeader
      • RequestBody
      • Cookies
    • 运算符

      • 任何:如果未匹配任何规则,则通常用于定义默认作。 Any 是匹配所有运算符。
      • 平等
      • 包含
      • LessThan:大小约束
      • GreaterThan:大小约束
      • LessThanOrEqual:大小约束
      • GreaterThanOrEqual:大小约束
      • BeginsWith
      • 以...结尾
      • 正则表达式
    • 正则表达式

      不支持以下作:

      • 反向引用和捕获子表达式
      • 任意零宽度断言
      • 子例程引用和递归模式
      • 条件模式
      • 回溯控件谓词
      • \C 单字节指令
      • \R 换行匹配指令
      • 匹配重置指令的 \K 开始
      • 标注和嵌入代码
      • 原子分组和拥有限定符
    • 反门 [可选]

      如果条件的结果应被否定,则可以将 negate 条件设置为 true

    • 转换 [可选]

      一个字符串列表,其中包含在尝试匹配之前要执行的作的转换名称。 这些转换可以是以下转换:

      • 大写
      • 小写
      • 修剪
      • RemoveNulls
      • UrlDecode
      • URL编码
    • 匹配值

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

      • 获取
      • 帖子
      • PUT
      • 头部
      • DELETE
      • 开锁
      • 轮廓
      • 选项
      • PROPFIND
      • PROPPATCH
      • MKCOL
      • COPY
      • 移动
      • 补丁
      • 连接

例子

请考虑以下示例。

基于 HTTP 请求参数匹配

假设需要配置自定义规则以允许满足以下两个条件的请求:

  • Referer标头的值等于已知值。
  • 查询字符串不包含单词 password

下面是自定义规则的示例 JSON 说明:

{
  "name": "AllowFromTrustedSites",
  "priority": 1,
  "ruleType": "MatchRule",
  "matchConditions": [
    {
      "matchVariable": "RequestHeader",
      "selector": "Referer",
      "operator": "Equal",
      "negateCondition": false,
      "matchValue": [
        "www.mytrustedsites.com/referpage.html"
      ]
    },
    {
      "matchVariable": "QueryString",
      "operator": "Contains",
      "matchValue": [
        "password"
      ],
      "negateCondition": true
    }
  ],
  "action": "Allow"
}

阻止 HTTP PUT 请求

假设你需要阻止使用 HTTP PUT 方法的任何请求。

下面是自定义规则的示例 JSON 说明:

{
  "name": "BlockPUT",
  "priority": 2,
  "ruleType": "MatchRule",
  "matchConditions": [
    {
      "matchVariable": "RequestMethod",
      "selector": null,
      "operator": "Equal",
      "negateCondition": false,
      "matchValue": [
        "PUT"
      ]
    }
  ],
  "action": "Block"
}

大小约束

使用 Azure Front Door WAF 可以生成自定义规则,这些规则在传入请求的一部分应用长度或大小约束。 此大小约束以字节为单位进行度量。

假设需要阻止 URL 超过 100 个字符的请求。

下面是自定义规则的示例 JSON 说明:

{
  "name": "URLOver100",
  "priority": 5,
  "ruleType": "MatchRule",
  "matchConditions": [
    {
      "matchVariable": "RequestUri",
      "selector": null,
      "operator": "GreaterThanOrEqual",
      "negateCondition": false,
      "matchValue": [
        "100"
      ]
    }
  ],
  "action": "Block"
}

根据请求 URI 匹配

假设需要允许 URI 包含“login”的请求。

下面是自定义规则的示例 JSON 说明:

{
  "name": "URIContainsLogin",
  "priority": 5,
  "ruleType": "MatchRule",
  "matchConditions": [
    {
      "matchVariable": "RequestUri",
      "selector": null,
      "operator": "Contains",
      "negateCondition": false,
      "matchValue": [
        "login"
      ]
    }
  ],
  "action": "Allow"
}

复制和重复自定义规则

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

后续步骤