Skip to content
English

Ejercicio: Protección de WordPress con AWS WAF

Objetivo

Configurar AWS WAF para proteger una instalación de WordPress contra amenazas web comunes.

Arquitectura Base

  • WordPress hosteado en EC2
  • ALB (Application Load Balancer)
  • Base de datos RDS
  • ACM Certificate
  • Route 53 para DNS

Parte 1: Configurar Web ACL Básico

1. Crear Web ACL

  1. Ve a WAF & Shield Console
  2. Create web ACL:
Nombre: wordpress-protection
Región: (misma que tu ALB)
Resource type: Regional resources
Associated AWS resources: Tu ALB

2. Configurar Reglas Core

Regla #1: Limitar Velocidad de Requests

json
Nombre: rate-limit-rule
Tipo: Rate-based rule
Rate limit: 2000 requests per IP per 5 minutes
Scope: IP address
Action: Block

Regla #2: Bloquear IPs Maliciosas

json
Nombre: ip-reputation-list
Tipo: IP reputation list
Action: Block
Options: Enable Amazon IP reputation list

Regla #3: Protección SQL Injection

json
Nombre: sql-injection-protection
Tipo: AWS managed rule
Rule group: SQL database
Action: Block

Parte 2: Reglas Específicas para WordPress

1. Proteger wp-admin

json
Nombre: protect-wp-admin
Tipo: Custom rule
Condiciones:
  - URI path matches pattern: /wp-admin/*
  - NOT IP in whitelist set
Action: Block

2. Limitar Métodos HTTP

json
Nombre: limit-http-methods
Tipo: Custom rule
Condiciones:
  - HTTP method is not [GET, POST, HEAD]
Action: Block

3. Proteger wp-login.php

json
Nombre: protect-wp-login
Tipo: Rate-based rule
Rate: 100 requests per 5 minutes
URI path: /wp-login.php
Action: Block

Parte 3: Reglas Avanzadas

1. Configurar Protección contra XSS

json
Nombre: xss-protection
Tipo: AWS managed rule
Rule group: Core rule set
Reglas a habilitar:
  - XSS-ATTACK
  - XSS-PROTOCOL
Acción: Block

2. Configurar Bad Bot Protection

json
Nombre: bad-bot-protection
Tipo: Custom rule
Condiciones:
  - User-Agent contiene términos maliciosos
  - User-Agent está vacío
Action: Block

3. Protección de Archivos Sensibles

json
Nombre: protect-sensitive-files
Tipo: String match rule
URI path matches patterns:
  - *.sql
  - wp-config.php
  - readme.html
  - license.txt
Action: Block

Parte 4: Logging y Monitoreo

1. Configurar Logging

  1. Ve a Logging configuration en tu Web ACL
  2. Habilitar logging a CloudWatch:
Log destination: CloudWatch Logs
Log group name: /aws/waf/wordpress

2. Crear Métricas

  1. Configure metrics:
Nombre: WAFWordPressMetrics
Métricas a monitorear:
  - AllowedRequests
  - BlockedRequests
  - PassedRequests

3. Crear Alarmas CloudWatch

Alarma 1: Alto número de bloqueos
  - Métrica: BlockedRequests
  - Umbral: > 1000 en 5 minutos
  - Acción: Notificar SNS

Alarma 2: Intentos de acceso wp-admin
  - Métrica: BlockedRequests en wp-admin
  - Umbral: > 100 en 5 minutos
  - Acción: Notificar SNS

Parte 5: Testing

1. Pruebas Básicas

  • [ ] Verificar acceso normal al sitio
  • [ ] Confirmar bloqueo de IPs maliciosas conocidas
  • [ ] Probar límite de velocidad
  • [ ] Verificar protección wp-admin

2. Pruebas de Seguridad

bash
# Test SQL Injection
curl "https://tudominio.com/?id=1' OR '1'='1"

# Test XSS
curl "https://tudominio.com/?comment=<script>alert(1)</script>"

# Test Rate Limiting
ab -n 3000 -c 10 https://tudominio.com/

# Test wp-admin Protection
curl -X POST https://tudominio.com/wp-admin/

Verificación

Tu configuración está completa cuando:

  • Las reglas están activas y funcionando
  • Los logs se generan correctamente
  • Las métricas están disponibles en CloudWatch
  • Las pruebas básicas son exitosas
  • El sitio WordPress funciona normalmente

Limpieza

  1. Deshabilitar logging
  2. Eliminar alarmas CloudWatch
  3. Eliminar métricas personalizadas
  4. Desasociar ACL del ALB
  5. Eliminar Web ACL

Mejores Prácticas

  1. Revisar logs regularmente
  2. Ajustar reglas basadas en falsos positivos
  3. Mantener lista blanca actualizada
  4. Monitorear costos de WAF
  5. Actualizar reglas cuando se añadan nuevas funcionalidades

Conceptos Clave para el Examen

  • Diferencia entre reglas basadas en tasa y basadas en coincidencia
  • Tipos de ataques que WAF puede prevenir
  • Integración con otros servicios AWS
  • Costos asociados con WAF
  • Limitaciones del servicio