# Web Application Firewall

## ¿Qué es?

AWS WAF es un firewall para aplicaciones web que ayuda a proteger aplicaciones web contra ataques al permitirle configurar reglas que habilitan, bloquean o monitorean (cuentan) las solicitudes web a partir de las condiciones que usted defina. Las condiciones incluyen direcciones IP, encabezados HTTP, cadenas URI, inyección de código SQL y scripting entre sitios.

<figure><img src="https://3716593425-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FghTUs02Gr2jdaFqpzAHM%2Fuploads%2Fgit-blob-ca80129cbbf9e8c98d1b88f90f7b833efc063cfe%2Fimage%20(71).png?alt=media" alt=""><figcaption></figcaption></figure>

### Condiciones

Las condiciones le permiten especificar qué elementos de la solicitud HTTP o HTTPS entrante desea que WAF supervise (XSS, GEO (filtrado por ubicación), dirección IP, restricciones de tamaño, ataques de inyección SQL, cadenas y coincidencia de expresiones regulares). Tenga en cuenta que si está restringiendo un país desde la nube, esta solicitud no llegará al waf. Puede tener 100 condiciones de cada tipo, como Geo Match o restricciones de tamaño, sin embargo, Regex es la excepción a esta regla donde solo se permiten 10 condiciones Regex, pero este límite es posible aumentar. Puede tener 100 reglas y 50 ACL web por cuenta de AWS. Está limitado a 5 reglas basadas en tarifas por cuenta. Finalmente, puede tener 10 000 solicitudes por segundo cuando usa WAF dentro del balanceador de carga de su aplicación.

### Reglas

Con estas condiciones, puede crear reglas: por ejemplo, bloquear la solicitud si se cumplen 2 condiciones. Al crear su regla, se le pedirá que seleccione un Tipo de regla: regla regular o regla basada en tarifas. La única diferencia entre una regla basada en tasas y una regla regular es que las reglas basadas en tasas cuentan la cantidad de solicitudes que se reciben de una dirección IP en particular durante un período de cinco minutos.

Cuando selecciona una opción de regla basada en tasas, se le pide que ingrese la cantidad máxima de solicitudes de una sola IP dentro de un marco de tiempo de cinco minutos. Cuando se alcanza el límite de conteo, todas las demás solicitudes de esa misma dirección IP se bloquean. Si la tasa de solicitudes vuelve a caer por debajo del límite de tasa especificado, entonces se permite el paso del tráfico y ya no se bloquea. Al establecer su límite de tasa, debe establecerse en un valor superior a 2000. Cualquier solicitud por debajo de este límite se considera una regla regular.

### Acciones

Se aplica una acción a cada regla, estas acciones pueden ser <mark style="color:green;">Permitir</mark>, <mark style="color:green;">Bloquear</mark> o <mark style="color:green;">Contar</mark>.

* Cuando se permite una solicitud, se reenvía a la distribución de CloudFront o Balanceador de carga de aplicaciones correspondiente.
* Cuando se bloquea una solicitud, la solicitud finaliza allí y no se realiza ningún otro procesamiento de esa solicitud.
* Una acción Contar contará el número de solicitudes que cumplen las condiciones dentro de esa regla. Esta es una muy buena opción para seleccionar cuando se prueban las reglas para asegurarse de que la regla está recibiendo las solicitudes como se esperaba antes de configurarla como Permitir o Bloquear.

Si una solicitud entrante no cumple con ninguna regla dentro de la ACL web, la solicitud realiza la acción asociada a una acción predeterminada especificada que puede ser Permitir o Bloquear. Un punto importante a tener en cuenta sobre estas reglas es que se ejecutan en el orden en que aparecen en una ACL web. Por lo tanto, tenga cuidado de diseñar correctamente este orden para su base de reglas, por lo general, se ordenan como se muestra:

* IP en la lista blanca como Permitir.
* Bloque de IP en la lista negra
* Cualquier mala firma también como bloque.

### CloudWatch

Las métricas de WAF CloudWatch se notifican en intervalos de un minuto de forma predeterminada y se conservan durante un período de dos semanas. Las métricas monitoreadas son AllowedRequests, BlockedRequests, CountedRequests y PassedRequests.
