通过速率限制,可以检测和阻止发往应用程序的流量异常高。 速率限制的工作原理是对与配置速率限制规则匹配的所有流量进行计数,并为超出配置阈值的规则匹配的流量执行配置的作。 有关详细信息,请参阅速率限制概述。
使用以下信息为应用程序网关 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。
- 选择组速率限制流量的地理位置。
- 在“条件”下,选择“匹配”类型的地理位置。
- 在“Match 变量”部分中,为 Match 变量选择 RemoteAddr。
- 选择 “不 用于 作”。
- 为国家/地区选择“美国”。
- 将作设置保留为 “拒绝流量”。
- 选择 “添加” ,将自定义规则添加到策略。
- 选择 “保存” 以保存配置,并使自定义规则对 WAF 策略处于活动状态。
$variable = New-AzApplicationGatewayFirewallMatchVariable -VariableName RemoteAddr
$condition = New-AzApplicationGatewayFirewallCondition -MatchVariable $variable -Operator GeoMatch -MatchValue "US" -NegationCondition $True
$groupByVariable = New-AzApplicationGatewayFirewallCustomRuleGroupByVariable -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。
- 对于组速率限制流量,请选择“无”。
- 在“条件”下,为匹配类型选择“字符串”。
- 在“Match 变量”部分中,为 Match 变量选择 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 应用程序防火墙规则