你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
为应用程序网关 WAF v2 创建速率限制自定义规则
速率限制使你能够检测并阻止流向应用程序的异常高流量。 速率限制的工作原理是计算与配置的速率限制规则匹配的所有流量,并为匹配该规则(超过配置阈值)的流量执行配置的操作。 有关详细信息,请参阅速率限制概述。
使用以下信息为应用程序网关 WAFv2 配置速率限制规则。
场景 1 - 创建规则,按客户端 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-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。
- 为“速率限制流量分组依据”选择“无”。
- 在“条件”下,为“匹配类型”选择“字符串”。
- 在“匹配变量”部分中,为“匹配变量”选择“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 应用程序防火墙规则