aws:tutoriales:challenges:waf
Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| aws:tutoriales:challenges:waf [2025/02/24 10:56] – [Parte 1: Teoría Básica] gepelbaum | aws:tutoriales:challenges:waf [2025/03/03 23:53] (current) – [Solución de Problemas Comunes] gepelbaum | ||
|---|---|---|---|
| Line 36: | Line 36: | ||
| ===== Parte 2: Ejercicios Prácticos ===== | ===== Parte 2: Ejercicios Prácticos ===== | ||
| + | ====== Challenge AWS WAF ====== | ||
| + | |||
| + | |||
| + | ===== Contexto del Problema ===== | ||
| + | La empresa **Troncoso Software** requiere proteger su aplicación web contra ataques de SQL Injection y XSS. Como administrador, | ||
| + | |||
| + | ===== Prerrequisitos ===== | ||
| + | * Cuenta de AWS con acceso **root**. | ||
| + | * (Opcional) Aplicación web existente. Si no, se creará un ALB de ejemplo. | ||
| + | |||
| + | ===== Solución: ===== | ||
| + | === Paso 1: Crear un Application Load Balancer(ALB) === | ||
| + | **En caso de ya haberlo creado, | ||
| + | |||
| + | 1. **Acceder a la consola de AWS**: | ||
| + | - Ingresa a [[https:// | ||
| + | 2. **Crear el ALB**: | ||
| + | - Ve a **EC2** > **Load Balancers** > **Create Load Balancer**. | ||
| + | - Selecciona **Application Load Balancer**. | ||
| + | - **Configuración básica**: | ||
| + | * Nombre: `alb-troncoso`. | ||
| + | * Esquema: **Internet-facing**. | ||
| + | * Listener: Puerto **80 (HTTP)**. | ||
| + | - **Security Group**: Crea uno nuevo permitiendo tráfico HTTP (0.0.0.0/ | ||
| + | - **Target Group**: Crea uno nuevo (`tg-troncoso`) con instancias ficticias si no hay servidores. | ||
| + | 3. **Finalizar**: | ||
| + | **#Lo mismo pero desde la CLI** | ||
| + | aws elbv2 create-load-balancer \ | ||
| + | --name alb-troncoseco \ | ||
| + | --subnets subnet-XXXXXXXX subnet-YYYYYYYY \ | ||
| + | --security-groups sg-XXXXXXXX \ | ||
| + | --scheme internet-facing \ | ||
| + | --type application \ | ||
| + | --ip-address-type ipv4 | ||
| + | |||
| + | |||
| + | === Paso 2: Crear un Web ACL en AWS WAF === | ||
| + | 1. **Acceder a AWS WAF**: | ||
| + | - Busca **WAF & Shield** en la barra de servicios. | ||
| + | 2. **Crear Web ACL**: | ||
| + | - **Nombre**: `waf-troncoso`. | ||
| + | - **Recurso asociado**: Selecciona el ALB `alb-troncoso`. | ||
| + | - **Región**: | ||
| + | |||
| + | === Paso 3: Añadir Reglas Personalizadas === | ||
| + | ==== Regla 1: Bloquear SQL Injection ==== | ||
| + | 1. **Crear regla**: | ||
| + | - En **Web ACLs** > `waf-troncoso` > **Add rules** > **Add my own rules**. | ||
| + | - **Nombre**: `block-sqli`. | ||
| + | - **Condición**: | ||
| + | * **Field to inspect**: Body. | ||
| + | * **Match type**: Regex. | ||
| + | * **Patrón**: | ||
| + | - **Acción**: | ||
| + | |||
| + | ==== Regla 2: Bloquear XSS ==== | ||
| + | 1. **Crear regla**: | ||
| + | - **Nombre**: `block-xss`. | ||
| + | - **Condición**: | ||
| + | * **Field to inspect**: Headers > User-Agent. | ||
| + | * **Match type**: Regex. | ||
| + | * **Patrón**: | ||
| + | - **Acción**: | ||
| + | |||
| + | === Paso 4: Priorizar Reglas === | ||
| + | 1. **Orden de evaluación**: | ||
| + | - Arrastra las reglas en este orden: | ||
| + | 1. `block-sqli`. | ||
| + | 2. `block-xss`. | ||
| + | 2. **Guardar**: | ||
| + | |||
| + | === Paso 5: Probar el WAF === | ||
| + | 1. **Obtener DNS del ALB**: | ||
| + | - Ve a **EC2** > **Load Balancers** > Copia el **DNS Name** de `alb-troncoso`. | ||
| + | 2. **Prueba SQLi**: | ||
| + | < | ||
| + | curl " | ||
| + | </ | ||
| + | * **Resultado esperado**: HTTP 403. | ||
| + | 3. **Prueba XSS**: | ||
| + | < | ||
| + | curl -A "< | ||
| + | </ | ||
| + | * **Resultado esperado**: HTTP 403. | ||
| + | |||
| + | === Paso 6: Habilitar Logs para Monitoreo === | ||
| + | 1. **Configurar logs en S3**: | ||
| + | - En **Web ACLs** > `waf-troncoso` > **Logging and metrics** > **Enable logging**. | ||
| + | - Selecciona un bucket S3 ([[https:// | ||
| + | |||
| + | 2. **Ver logs en CloudWatch**: | ||
| + | - Ve a **CloudWatch** > **Logs** > Busca `/ | ||
| + | |||
| + | === Paso 7: Limpiar Recursos (Opcional) === | ||
| + | 1. **Eliminar Web ACL**: | ||
| + | - **WAF & Shield** > **Web ACLs** > Eliminar `waf-troncoso`. | ||
| + | 2. **Eliminar ALB**: | ||
| + | - **EC2** > **Load Balancers** > Eliminar `alb-troncoso`. | ||
| + | |||
| + | ===== Notas Importantes ===== | ||
| + | * **Costos**: La capa gratuita incluye 1 Web ACL, 10 reglas, y 1M solicitudes/ | ||
| + | * **Seguridad**: | ||
| + | * **Pruebas**: | ||
| + | |||
| + | ===== Solución de Problemas Comunes ===== | ||
| + | * **Reglas no bloquean**: | ||
| + | - Verifica que el Web ACL esté asociado al ALB/ | ||
| + | - Usa la acción **Count** para probar sin bloquear. | ||
| + | * **Error 403 inesperado**: | ||
| + | - Revisa los patrones de las reglas (ej: regex demasiado amplia). | ||
| + | |||
| + | |||
| === Ejercicio 1 (Custom): Bloquear SQLi y XSS === | === Ejercicio 1 (Custom): Bloquear SQLi y XSS === | ||
| Line 42: | Line 154: | ||
| **Pasos**: | **Pasos**: | ||
| - **Crear Web ACL**: | - **Crear Web ACL**: | ||
| - | | + | |
| 1. En AWS WAF, ir a "Web ACLs" > " | 1. En AWS WAF, ir a "Web ACLs" > " | ||
| 2. Asociar a un ALB/ | 2. Asociar a un ALB/ | ||
| - | </ | + | |
| - **Regla SQLi**: | - **Regla SQLi**: | ||
| * **Field to inspect**: Body. | * **Field to inspect**: Body. | ||
| Line 92: | Line 204: | ||
| * **Capa Gratuita**: 1 Web ACL, 10 reglas, 1M solicitudes/ | * **Capa Gratuita**: 1 Web ACL, 10 reglas, 1M solicitudes/ | ||
| * **Pruebas**: | * **Pruebas**: | ||
| - | * **Mantenimiento**: | + | * **Mantenimiento**: |
| + | * | ||
| + | ====== Documentación y Soporte oficial ====== | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | |||
aws/tutoriales/challenges/waf.1740394589.txt.gz · Last modified: 2025/02/24 10:56 by gepelbaum
