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 策略后,需要为规则指定唯一名称,并分配优先级排名。