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