Reglas personalizadas para Azure Web Application Firewall en Azure Front Door
El firewall de aplicaciones web de Azure en Azure Front Door le permite controlar el acceso a sus aplicaciones web en función de las condiciones que defina. Una regla de firewall de aplicaciones web (WAF) personalizada consta de un número de prioridad, un tipo de regla, condiciones de coincidencia y una acción.
Existen dos tipos de reglas personalizadas: reglas de coincidencia y reglas de límite de frecuencia. Una regla de coincidencia controla el acceso en función de un conjunto de condiciones de coincidencia. Las reglas de límite de frecuencia controlan el acceso en función de las condiciones de coincidencia y las frecuencias de las solicitudes entrantes. Puede deshabilitar una regla personalizada para impedir que se evalúe, pero mantener la configuración.
Para más información sobre la limitación de velocidad, consulte ¿Qué es la limitación de velocidad para Azure Front Door?
Prioridad, tipos de acción y condiciones de coincidencia
Puede controlar el acceso con una regla WAF personalizada que defina un número de prioridad, un tipo de regla, una matriz de condiciones de coincidencia y una acción.
Prioridad
Un entero único que describe el orden de evaluación de las reglas WAF. Las reglas con valores de prioridad más bajos se evalúan antes que las reglas con valores más altos. La evaluación de reglas se detiene en cualquier acción de regla, excepto en Registrar. Los números de prioridad deben ser únicos entre todas las reglas personalizadas.
Acción
Define cómo enrutar una solicitud si coincide con una regla WAF. Puede elegir una de las siguientes acciones para que se aplique cuando una solicitud coincida con una regla personalizada.
- Permitir: el WAF permite que se procese la solicitud, registra una entrada en los registros de WAF y sale.
- Bloquear: la solicitud está bloqueada. El WAF envía una respuesta a un cliente sin reenviar la solicitud. El WAF registra una entrada en los registros de WAF y sale.
- Registro: el WAF registra una entrada en los registros de WAF y continúa evaluando la regla siguiente en el orden de prioridad.
- Redirigir: el WAF redirige la solicitud a un URI especificado, registra una entrada en los registros de WAF y se cierra.
Condición de coincidencia
Define una variable de coincidencia, un operador y un valor de coincidencia. Cada regla puede contener varias condiciones de coincidencia. Una condición de coincidencia se puede basar en la ubicación geográfica, las direcciones IP del cliente (CIDR), el tamaño o la coincidencia de cadenas. La coincidencia de cadenas puede ser en una lista de variables de coincidencia.
Variable de coincidencia
- RequestMethod
- QueryString
- PostArgs
- RequestUri
- RequestHeader
- RequestBody
- Cookies
Operador
- Any: a menudo se usa para definir la acción predeterminada si ninguna regla coincide. Any es un operador de coincidencia de todo.
- Igual
- Contains
- LessThan: restricción del tamaño
- GreaterThan: restricción del tamaño
- LessThanOrEqual: restricción del tamaño
- GreaterThanOrEqual: restricción del tamaño
- BeginsWith
- EndsWith
- Regex
Regex
No admite las siguientes operaciones:
- Referencias inversas y captura de subexpresiones
- Aserciones arbitrarias de ancho cero
- Referencias de subrutinas y patrones recursivos
- Patrones condicionales
- Verbos de control de retroceso
- Directiva de un solo byte \C
- Directiva de coincidencia de nueva línea \R
- Directiva de inicio de restablecimiento de coincidencia \K
- Llamadas y código insertado
- Agrupación atómica y cuantificadores de posesivos
Negate [opcional]
Puede establecer la condición
negate
para que sea true si el resultado de una condición debe negarse.Transformación [opcional]
Una lista de cadenas con los nombres de las transformaciones que se van a realizar antes de la coincidencia. Pueden ser las siguientes:
- Mayúsculas
- Minúsculas
- Trim
- RemoveNulls
- UrlDecode
- UrlEncode
Valor de coincidencia
Los valores del método de solicitud HTTP admitidos incluyen:
- GET
- POST
- PUT
- HEAD
- Delete
- LOCK
- UNLOCK
- PROFILE
- OPCIONES
- PROPFIND
- PROPPATCH
- MKCOL
- COPY
- MOVE
- PATCH
- CONNECT
Ejemplos
Considere los ejemplos siguientes.
Coincidencia basada en parámetros de solicitud HTTP
Supongamos que necesita configurar una regla personalizada para permitir solicitudes que coincidan con las dos condiciones siguientes:
- El valor del encabezado
Referer
es igual a un valor conocido. - La cadena de consulta no contiene la palabra
password
.
Esta es una descripción JSON de ejemplo de la regla personalizada:
{
"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"
}
Bloqueo de solicitudes HTTP PUT
Supongamos que necesita bloquear cualquier solicitud que use el método HTTP PUT.
Esta es una descripción JSON de ejemplo de la regla personalizada:
{
"name": "BlockPUT",
"priority": 2,
"ruleType": "MatchRule",
"matchConditions": [
{
"matchVariable": "RequestMethod",
"selector": null,
"operator": "Equal",
"negateCondition": false,
"matchValue": [
"PUT"
]
}
],
"action": "Block"
}
Restricción del tamaño
Un WAF de Azure Front Door permite crear reglas personalizadas que aplican una restricción de longitud o tamaño en una parte de una solicitud entrante. Esta restricción de tamaño se mide en bytes.
Supongamos que necesita bloquear las solicitudes en las que la dirección URL tiene más de 100 caracteres.
Esta es una descripción JSON de ejemplo de la regla personalizada:
{
"name": "URLOver100",
"priority": 5,
"ruleType": "MatchRule",
"matchConditions": [
{
"matchVariable": "RequestUri",
"selector": null,
"operator": "GreaterThanOrEqual",
"negateCondition": false,
"matchValue": [
"100"
]
}
],
"action": "Block"
}
Coincidencia basada en el URI de solicitud
Supongamos que necesita permitir solicitudes en las que el URI contiene "login".
Esta es una descripción JSON de ejemplo de la regla personalizada:
{
"name": "URIContainsLogin",
"priority": 5,
"ruleType": "MatchRule",
"matchConditions": [
{
"matchVariable": "RequestUri",
"selector": null,
"operator": "Contains",
"negateCondition": false,
"matchValue": [
"login"
]
}
],
"action": "Allow"
}
Copiar y duplicar reglas personalizadas
Las reglas personalizadas pueden duplicarse dentro de una misma directiva. Al duplicar una regla, es necesario especificar un nombre único para la regla y un valor de prioridad único. Además, las reglas personalizadas se pueden copiar de una directiva WAF de Azure Front Door a otra, siempre que ambas directivas estén en la misma suscripción. Al copiar una regla de una directiva a otra, debe seleccionar la directiva WAF de Azure Front Door en la que desea copiar la regla. Una vez seleccionada la directiva WAF, hay que dar a la regla un nombre único y asignarle un rango de prioridad.