Azure 应用程序网关 Web 应用程序防火墙 (WAF) v2 附带了一个预配置的、由平台管理的规则集,用于防范多种不同类型的攻击。 这些攻击包括跨站点脚本、SQL 注入,等等。 如果你是 WAF 管理员,可能需要编写自己的规则来补充核心规则集 (CRS) 规则。 你的自定义规则可以根据匹配条件阻止、允许或记录请求的流量。 如果 WAF 策略设置为检测模式,并且触发了自定义阻止规则,则会记录请求并且不执行任何阻止操作。
自定义规则允许你创建自己的规则,用于对通过 WAF 的每个请求进行评估。 这些规则的优先级高于托管规则集中的其他规则。 自定义规则包含规则名称、规则优先级和一系列匹配条件。 如果满足这些条件,则需要采取操作(允许、阻止或记录)。 如果触发了自定义规则,并采取了允许或阻止操作,则不会执行自定义或托管规则的任何进一步操作。 如果存在触发允许或阻止操作的自定义规则,则可能仍会看到来自已配置规则集(核心规则集/默认规则集)的规则匹配的一些日志事件,但不会强制执行这些规则。 日志事件仅由于 WAF 引擎为并行规则处理强制执行的优化而显示,并且可以安全地忽略。 可以按需启用/禁用自定义规则。
例如,可以阻止来自 192.168.5.0/24 范围内的某个 IP 地址的所有请求。 在此规则中,运算符是 IPMatch,matchValues 是 IP 地址范围 (192.168.5.0/24),操作是阻止流量。 还可以设置规则的名称、优先级和启用/禁用状态。
自定义规则支持使用复合逻辑创建更高级的规则来解决安全需求。 例如,可以使用两个自定义规则创建以下逻辑((rule1:Condition 1 和 rule1:Condition 2)或 rule2:Condition 3)。 此逻辑意味着,如果满足条件 1 和条件 2,或者满足条件 3,则 WAF 应执行自定义规则中指定的操作。
同一规则中的不同匹配条件始终使用 and 来组合。 例如,仅当发送方使用特定浏览器时,才阻止来自特定 IP 地址的流量。
若要在两个不同的条件之间使用 or,这两个条件必须在不同的规则中。 例如,阻止来自特定 IP 地址的流量,或阻止使用特定浏览器的发送方的流量。
自定义规则还支持正则表达式,就像在 CRS 规则集中一样。 有关示例,请参阅创建和使用自定义 Web 应用程序防火墙规则中的示例 3 和 5。
注意
WAF 自定义规则的最大数目为 100。 有关应用程序网关限制的详细信息,请参阅 Azure 订阅和服务限制、配额与约束。
注意
在应用程序网关级别应用的任何重定向规则都将绕过 WAF 自定义规则。 有关重定向规则的详细信息,请参阅应用程序网关重定向概述。
允许与阻止
使用自定义规则可以方便地允许和阻止流量。 例如,可以阻止来自某个 IP 地址范围的所有流量。 可以创建另一个规则,以便在请求来自特定的浏览器时允许流量。
若要允许某种流量,请确保将 -Action
参数设置为 Allow。 若要阻止某种流量,请确保将 -Action
参数设置为 Block。
$AllowRule = New-AzApplicationGatewayFirewallCustomRule `
-Name example1 `
-Priority 2 `
-RuleType MatchRule `
-MatchCondition $condition `
-Action Allow `
-State Enabled
$BlockRule = New-AzApplicationGatewayFirewallCustomRule `
-Name example2 `
-Priority 2 `
-RuleType MatchRule `
-MatchCondition $condition `
-Action Block `
-State Enabled
上面的 $BlockRule
映射到 Azure 资源管理器中的以下自定义规则:
"customRules": [
{
"name": "blockEvilBot",
"priority": 2,
"ruleType": "MatchRule",
"action": "Block",
"state": "Enabled",
"matchConditions": [
{
"matchVariables": [
{
"variableName": "RequestHeaders",
"selector": "User-Agent"
}
],
"operator": "Contains",
"negationCondition": false,
"matchValues": [
"evilbot"
],
"transforms": [
"Lowercase"
]
}
]
}
],
此自定义规则包含名称、优先级、操作,以及执行该操作所要满足的一系列匹配条件。 有关这些字段的进一步解释,请参阅以下字段说明。 有关自定义规则的示例,请参阅创建和使用自定义 Web 应用程序防火墙规则。
自定义规则的字段
Name [可选]
规则的名称。 它显示在日志中。
启用规则 [可选]
打开/关闭此规则。 默认情况下,自定义规则是启用的。
Priority [必需]
- 确定规则评估顺序。 值越小,规则的评估顺序越靠前。 允许的范围为 1 到 100。
- 必须在所有自定义规则中唯一。 优先级为 40 的规则将在优先级为 80 的规则之前评估。
Rule type [必需]
目前必须为 MatchRule。
Match variable [必需]
必须是以下变量之一:
- RemoteAddr - 远程计算机连接的 IPv4 地址/范围
- RequestMethod - HTTP 请求方法
- QueryString - URI 中的变量
- PostArgs - 在 POST 正文中发送的参数。 仅当“Content-Type”标头设置为“application/x-www-form-urlencoded”和“multipart/form-data”时,才会应用使用此匹配变量的自定义规则。 CRS 版本 3.2 或更高版本、机器人保护规则集和异地匹配自定义规则支持
application/json
的其他内容类型。 - RequestUri - 请求的 URI
- RequestHeaders - 请求的标头
- RequestBody - 此变量包含整个请求正文。 仅当“Content-Type”标头设置为
application/x-www-form-urlencoded
媒体类型时,才会应用使用此匹配变量的自定义规则。 CRS 版本 3.2 或更高版本、机器人保护规则集和异地匹配自定义规则支持application/soap+xml, application/xml, text/xml
的其他内容类型。 - RequestCookies - 请求的 Cookie
Selector [可选]
描述 matchVariable 集合的字段。 例如,如果 matchVariable 为 RequestHeaders,则选择器可以位于 User-Agent 标头中。
Operator [必需]
必须是以下运算符之一:
- IPMatch - 仅当匹配变量为 RemoteAddr 时才使用,且仅支持 IPv4
- Equal - 输入与 MatchValue 相同
- Any - 它不应有 MatchValue。 建议用于包含有效 Selector 的 Match 变量。
- Contains
- LessThan
- GreaterThan
- LessThanOrEqual
- GreaterThanOrEqual
- BeginsWith
- EndsWith
- 正则表达式
- Geomatch
Negate condition [可选]
对当前条件求反。
Transform [可选]
一个字符串列表,其中包含尝试匹配之前执行的转换的名称。 这些转换可以是:
- 小写
- 大写
- Trim
- UrlDecode
- UrlEncode
- RemoveNulls
- HtmlEntityDecode
Match values [必需]
要匹配的值列表,可被视为采用 OR 运算符。 例如,它可以是 IP 地址或其他字符串。 值的格式取决于上一个运算符。
支持的 HTTP 请求方法值包括:
- GET
- HEAD
- POST
- OPTIONS
- PUT
- 删除
- PATCH
Action [必需]
在 WAF 策略检测模式下,如果触发自定义规则,始终记录该操作,而不考虑在自定义规则上设置的操作值。
- Allow - 授权事务,跳过所有其他规则。 指定的请求将添加到允许列表,并且一旦匹配,该请求将停止进一步的评估,并会被发送到后端池。 不会根据允许列表中的规则评估任何其他自定义规则或托管规则。
- Block - 基于 SecDefaultAction(检测/阻止模式)阻止或记录事务。
- 阻止模式 - 基于 SecDefaultAction 阻止事务。 与
Allow
操作一样,评估请求并将其添加到阻止列表后,将会停止评估并阻止请求。 然后,将不会评估满足相同条件的任何请求,而只会将其阻止。 - 检测模式 - 根据 SecDefaultAction 记录事务,之后停止评估。 然后,将不会评估满足相同条件的任何请求,而只会将其记录。
- 阻止模式 - 基于 SecDefaultAction 阻止事务。 与
- Log - 允许该规则写入日志,但允许其他规则运行以进行评估。 其他自定义规则按优先顺序进行评估,后跟托管规则。
复制和重复自定义规则
自定义规则可以在给定的策略中重复。 复制规则时,需要指定规则的唯一名称和唯一的优先级值。 此外,只要策略位于同一订阅中,就可以将自定义规则从一个应用程序网关 WAF 策略复制到另一个应用程序网关 WAF 策略。 将规则从一个策略复制到另一个策略时,需要选择要将规则复制到的应用程序网关 WAF 策略。 选择 WAF 策略后,需要为规则指定唯一名称,并分配优先级排名。
Geomatch 自定义规则
自定义规则允许创建定制的规则,以满足应用程序和安全策略的确切需要。 可以按国家/地区限制对 Web 应用程序的访问。 有关详细信息,请参阅 Geomatch 自定义规则。