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