你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

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

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

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

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

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

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

  • Priority

    用于说明 WAF 规则计算顺序的唯一整数。 具有较低优先级值的规则先于值较高的规则进行计算。 规则评估在除日志以外的任何规则操作上停止。 优先级编号在所有自定义规则中必须是唯一的。

  • 操作

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

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

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

    • 匹配变量

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

      • Any:通常用于定义默认操作(如果没有匹配的规则)。 Any 运算符表示全部匹配。
      • 等于
      • 包含
      • LessThan:大小约束
      • GreaterThan:大小约束
      • LessThanOrEqual:大小约束
      • GreaterThanOrEqual:大小约束
      • BeginsWith
      • EndsWith
      • 正则表达式
    • Regex

      不支持以下操作:

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

      如果条件的结果应为求反,可以将 negate 条件设置为 true

    • Transform [可选]

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

      • 大写
      • 小写
      • Trim
      • RemoveNulls
      • UrlDecode
      • UrlEncode
    • 匹配值

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

      • GET
      • POST
      • PUT
      • HEAD
      • DELETE
      • LOCK
      • UNLOCK
      • 配置文件
      • OPTIONS
      • PROPFIND
      • PROPPATCH
      • MKCOL
      • 复制
      • MOVE
      • 修补程序
      • CONNECT

示例

请考虑以下示例。

根据 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 策略。 将规则从一个策略复制到另一个策略时,需要选择要将规则复制到其中的 Azure Front Door WAF 策略。 选择 WAF 策略后,需要为规则指定唯一名称,并分配优先级排名。

后续步骤