你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
为应用程序网关 WAF v2 创建速率限制自定义规则
速率限制使你能够检测并阻止流向应用程序的异常高流量。 速率限制的工作原理是计算与配置的速率限制规则匹配的所有流量,并为匹配该规则(超过配置阈值)的流量执行配置的操作。 有关详细信息,请参阅速率限制概述。
使用以下信息为应用程序网关 WAFv2 配置速率限制规则。
场景一 - 创建规则,按客户端 IP 对超过配置阈值的流量进行速率限制,从而匹配所有流量。
- 打开现有的应用程序网关 WAF 策略
- 选择自定义规则
- 添加自定义规则
- 为自定义规则添加名称
- 选择“速率限制规则类型”单选按钮
- 为规则输入优先级
- 为速率限制持续时间选择 1 分钟
- 对速率限制阈值输入 200(请求)
- 为“速率限制流量分组依据”选择“客户端地址”
- 在“条件”下,为“匹配类型”选择“IP 地址”
- 对于“操作”,选择“不包含”单选按钮
- 对于匹配条件,在“IP 地址或范围”下输入 255.255.255.255/32
- 将操作设置保留为“拒绝流量”
- 选择“添加”,将自定义规则添加到策略
- 选择“保存”以保存配置,并使 WAF 策略的自定义规则处于活动状态。
$variable = New-AzApplicationGatewayFirewallMatchVariable -VariableName RemoteAddr
$condition = New-AzApplicationGatewayFirewallCondition -MatchVariable $variable -Operator IPMatch -MatchValue 255.255.255.255/32 -NegationCondition $True
$groupByVariable = New-AzApplicationGatewayFirewallCustomRuleGroupByVariable -VariableName ClientAddr
$groupByUserSession = New-AzApplicationGatewayFirewallCustomRuleGroupByUserSession -GroupByVariable $groupByVariable
$ratelimitrule = New-AzApplicationGatewayFirewallCustomRule -Name ClientIPRateLimitRule -Priority 90 -RateLimitDuration OneMin -RateLimitThreshold 100 -RuleType RateLimitRule -MatchCondition $condition -GroupByUserSession $groupByUserSession -Action Block -State Enabled
az network application-gateway waf-policy custom-rule create --policy-name ExamplePolicy --resource-group ExampleRG --action Block --name ClientIPRateLimitRule --priority 90 --rule-type RateLimitRule --rate-limit-threshold 100 --group-by-user-session '[{'"groupByVariables"':[{'"variableName"':'"ClientAddr"'}]}]'
az network application-gateway waf-policy custom-rule match-condition add --match-variables RemoteAddr --operator IPMatch --policy-name ExamplePolicy --name ClientIPRateLimitRule --resource-group ExampleRG --value 255.255.255.255/32 --negate true
场景二 - 创建速率限制自定义规则,以匹配除源自美国的流量之外的所有流量。 流量将根据客户端源 IP 地址的地理位置进行分组、计数和速率限制
- 打开现有的应用程序网关 WAF 策略
- 选择自定义规则
- 添加自定义规则
- 为自定义规则添加名称
- 选择“速率限制规则类型”单选按钮
- 为规则输入优先级
- 为速率限制持续时间选择 1 分钟
- 对速率限制阈值输入 500(请求)
- 为“速率限制流量分组依据”选择“地理位置”
- 在“条件”下,为“匹配类型”选择“地理位置”
- 在“匹配变量”部分中,为“匹配变量”选择“RemoteAddr”
- 对于操作选择“不是”单选按钮
- 为“国家/地区”选择“美国”
- 将操作设置保留为“拒绝流量”
- 选择“添加”,将自定义规则添加到策略
- 选择“保存”以保存配置,并使 WAF 策略的自定义规则处于活动状态。
$variable = New-AzApplicationGatewayFirewallMatchVariable -VariableName RemoteAddr
$condition = New-AzApplicationGatewayFirewallCondition -MatchVariable $variable -Operator GeoMatch -MatchValue "US" -NegationCondition $True
$groupByVariable = New-AzApplicationGatewayFirewallCustomRuleGroupByVariablde -VariableName GeoLocation
$groupByUserSession = New-AzApplicationGatewayFirewallCustomRuleGroupByUserSession -GroupByVariable $groupByVariable
$ratelimitrule = New-AzApplicationGatewayFirewallCustomRule -Name GeoRateLimitRule -Priority 95 -RateLimitDuration OneMin -RateLimitThreshold 500 -RuleType RateLimitRule -MatchCondition $condition -GroupByUserSession $groupByUserSession -Action Block -State Enabled
az network application-gateway waf-policy custom-rule create --policy-name ExamplePolicy --resource-group ExampleRG --action Block --name GeoRateLimitRule --priority 95 --rule-type RateLimitRule --rate-limit-threshold 500 --group-by-user-session '[{'"groupByVariables"':[{'"variableName"':'"GeoLocation"'}]}]'
az network application-gateway waf-policy custom-rule match-condition add --match-variables RemoteAddr --operator GeoMatch --policy-name ExamplePolicy --name GeoRateLimitRule --resource-group ExampleRG --value US --negate true
场景三 - 创建与登录页的所有流量匹配的速率限制自定义规则,并使用 GroupBy None 变量。 这将对与规则匹配的所有流量进行分组并计为一个流量,并将操作应用于与规则 (/login) 匹配的所有流量。
- 打开现有的应用程序网关 WAF 策略
- 选择自定义规则
- 添加自定义规则
- 为自定义规则添加名称
- 选择“速率限制规则类型”单选按钮
- 为规则输入优先级
- 为速率限制持续时间选择 1 分钟
- 对速率限制阈值输入 100(请求)
- 为“速率限制流量分组依据”选择“无”
- 在“条件”下,为“匹配类型”选择“字符串”
- 在“匹配变量”部分中,为“匹配变量”选择“RequestUri”
- 对于操作选择“不是”单选按钮
- 对于“运算符”,选择“包含”
- 输入匹配值的登录页路径。 在此示例中,我们使用 /login
- 将操作设置保留为“拒绝流量”
- 选择“添加”,将自定义规则添加到策略
- 选择“保存”以保存配置,并使 WAF 策略的自定义规则处于活动状态。
$variable = New-AzApplicationGatewayFirewallMatchVariable -VariableName RequestUri
$condition = New-AzApplicationGatewayFirewallCondition -MatchVariable $variable -Operator Contains -MatchValue "/login" -NegationCondition $True
$groupByVariable = New-AzApplicationGatewayFirewallCustomRuleGroupByVariable -VariableName None
$groupByUserSession = New-AzApplicationGatewayFirewallCustomRuleGroupByUserSession -GroupByVariable $groupByVariable
$ratelimitrule = New-AzApplicationGatewayFirewallCustomRule -Name LoginRateLimitRule -Priority 99 -RateLimitDuration OneMin -RateLimitThreshold 100 -RuleType RateLimitRule -MatchCondition $condition -GroupByUserSession $groupByUserSession -Action Block -State Enabled
az network application-gateway waf-policy custom-rule create --policy-name ExamplePolicy --resource-group ExampleRG --action Block --name LoginRateLimitRule --priority 99 --rule-type RateLimitRule --rate-limit-threshold 100 --group-by-user-session '[{'"groupByVariables"':[{'"variableName"':'"None"'}]}]'
az network application-gateway waf-policy custom-rule match-condition add --match-variables RequestUri --operator Contains --policy-name ExamplePolicy --name LoginRateLimitRule --resource-group ExampleRG --value '/login'
后续步骤
自定义 Web 应用程序防火墙规则