Firewall de Aplicación Web (WAF) para proteger el sitio de tu servidor de MU Online
Configura un WAF (Web Application Firewall) delante del sitio, panel y API de tu servidor de MU Online, con reglas contra SQL injection, XSS, fuerza bruta de login y bots de scraping de ranking.
El sitio de un servidor de MU Online — con login de cuenta, ranking, tienda de donaciones y panel administrativo — es uno de los objetivos más buscados por competidores y jugadores malintencionados. Un Web Application Firewall (WAF) es la capa que se ubica delante de esa aplicación y filtra solicitu
El sitio de un servidor de MU Online — con login de cuenta, ranking, tienda de donaciones y panel administrativo — es uno de los objetivos más buscados por competidores y jugadores malintencionados. Un Web Application Firewall (WAF) es la capa que se ubica delante de esa aplicación y filtra solicitudes maliciosas antes de que lleguen a tu código: intentos de SQL injection contra el formulario de login, XSS en el chat del sitio, fuerza bruta en el área administrativa y bots que raspan el ranking para clonar tu servidor. Este tutorial muestra cómo planear, configurar y probar un WAF de punta a punta, tanto en la nube como autogestionado.
Por qué el sitio de MU necesita un WAF dedicado
A diferencia de un blog estático, el sitio de un servidor de MU tiene múltiples superficies sensibles: formulario de registro de cuenta, login (compartido con el juego, en muchos casos), panel de canje de código de donación, API de ranking consumida por terceros, y a veces un panel administrativo expuesto públicamente. Cada una de estas superficies es un vector de ataque distinto, y un WAF bien configurado las cubre todas con un único punto de control, sin necesidad de modificar el código de la aplicación cada vez que se descubre una nueva amenaza.
Tipos de ataque que un WAF bloquea
| Ataque | Cómo se manifiesta | Por qué el WAF ayuda |
|---|---|---|
| SQL Injection | Parámetro de login/búsqueda con sintaxis SQL | Bloquea patrones de sintaxis sospechosos antes del backend |
| XSS (Cross-Site Scripting) | Script inyectado en campo de comentario/chat | Sanitiza/bloquea etiquetas y scripts en el cuerpo de la solicitud |
| Fuerza bruta de login | Miles de intentos de contraseña por minuto | Rate limiting por IP/cuenta en el endpoint de login |
| Scraping de ranking | Bot golpeando la API de ranking cada segundo | Rate limiting + captcha en picos anómalos |
| Path traversal | Intento de acceder a ../../config.php | Bloquea patrones de navegación de directorio en la URL |
| Explotación de upload | Subida de archivo .php disfrazado de imagen | Valida el tipo real de archivo, no solo la extensión |
Eligiendo entre WAF en la nube y autogestionado
| Criterio | WAF en la nube (Cloudflare, Sucuri) | WAF autogestionado (ModSecurity/Nginx) |
|---|---|---|
| Facilidad de configuración | Alta, panel visual | Media/baja, requiere edición de reglas |
| Actualización de reglas | Automática por el proveedor | Manual, depende del administrador |
| Costo | Gratuito a moderado (planes pagos habilitan más) | Sin licencia, pero exige tiempo técnico |
| Protección contra DDoS volumétrico | Generalmente incluida | Necesita una capa adicional |
| Control fino por endpoint | Bueno en los planes pagos | Total, pero manual |
Para la mayoría de los servidores de MU, empezar con Cloudflare (incluso en el plan gratuito) ya cubre una parte grande de los ataques automatizados, dejando a ModSecurity como complemento para reglas muy específicas de tu panel.
Paso 1 — Poner el dominio detrás de un proxy con WAF
Si aún no lo usas, apunta el DNS del dominio a Cloudflare (o proveedor equivalente) y activa el proxy (nube naranja). Esto ya oculta la IP real del servidor web y habilita el WAF gestionado predeterminado. Confirma que el certificado SSL está en modo Full (strict), no solo Flexible, para evitar bucles de redirección y mantener el cifrado de extremo a extremo.
Paso 2 — Activar el conjunto de reglas gestionadas (OWASP)
En el panel de seguridad de Cloudflare (o WAF equivalente), activa el conjunto de reglas gestionadas basado en el OWASP Core Rule Set. Ejecútalo inicialmente en modo log durante 3 a 7 días, observando qué solicitudes serían bloqueadas, antes de cambiar al modo de bloqueo activo — esto evita tumbar tráfico legítimo por falso positivo.
Paso 3 — Crear reglas personalizadas para endpoints sensibles
Las reglas genéricas no lo cubren todo. Agrega reglas específicas para tu sitio de MU:
# Ejemplo de regla (sintaxis Cloudflare Rules)
(http.request.uri.path eq "/login" and rate(1m) > 20) => Block
(http.request.uri.path contains "/api/ranking" and rate(1m) > 60) => Challenge
(http.request.uri.path eq "/admin" and ip.geoip.country ne "BR") => Block
- Login: límite de intentos por IP en una ventana corta, bloqueando fuerza bruta.
- API de ranking: desafío (captcha) por encima de un volumen que solo un bot alcanzaría.
- Panel admin: restricción geográfica o por IP fija, si el equipo es conocido.
Paso 4 — Configurar ModSecurity como capa complementaria (opcional)
Para quien aloja su propio servidor web (Nginx/Apache), ModSecurity con el OWASP Core Rule Set agrega una segunda capa, útil incluso con Cloudflare al frente (defensa en profundidad):
# nginx.conf — habilitando ModSecurity
load_module modules/ngx_http_modsecurity_module.so;
server {
listen 443 ssl;
server_name painel.seuservidor.com;
modsecurity on;
modsecurity_rules_file /etc/nginx/modsec/main.conf;
location /admin {
modsecurity_rules '
SecRuleEngine On
SecRule REQUEST_URI "@streq /admin" "id:1001,phase:1,deny,status:403,chain"
SecRule REMOTE_ADDR "!@ipMatch 203.0.113.10"
';
}
}
Este ejemplo bloquea cualquier IP distinta de la IP fija del equipo al acceder a /admin, incluso si la solicitud pasa las reglas genéricas.
Paso 5 — Proteger el formulario de donación/pago
El panel de donaciones procesa datos sensibles incluso cuando el pago en sí se realiza por una pasarela externa (PagSeguro, Mercado Pago). Asegúrate de que el WAF valide: longitud máxima de campos, tipos de caracteres esperados (el nombre no debe aceptar etiquetas HTML), y rate limiting agresivo en el endpoint de confirmación de pago, que es un objetivo común de intentos de fraude por repetición de solicitud.
Paso 6 — Probar el WAF sin romper el sitio
- Ejecuta un escaneo básico con una herramienta de pruebas de seguridad (ej.: OWASP ZAP) apuntando a un entorno de staging, nunca a producción sin aviso.
- Envía manualmente un payload de prueba inofensivo (
' OR '1'='1en un campo de búsqueda) y confirma que sea bloqueado. - Prueba el flujo normal del jugador (registro, login, canje de código) para garantizar que ninguna regla legítima haya sido bloqueada por error.
- Monitorea el panel de eventos del WAF durante las primeras 48h después de activar el modo de bloqueo.
Ajustando falsos positivos
| Señal de falso positivo | Acción recomendada |
|---|---|
| Jugadores quejándose de error 403 al iniciar sesión | Revisa la regla de rate limiting del login, aumenta el umbral |
| Formulario de registro rechazando nombres con acento | Ajusta la regla de sanitización de caracteres especiales |
| El ranking no carga para usuarios legítimos | Separa la regla de bot de la API pública de lectura simple |
| Falla la subida de avatar/captura | Verifica la regla de validación de tipo de archivo |
Monitoreo continuo
Configura alertas (correo o webhook para Discord) cuando el WAF bloquee un volumen anormal de solicitudes en un período corto — esto frecuentemente indica un ataque en curso y no solo ruido de fondo. Revisa el log de eventos del WAF semanalmente en las primeras semanas tras el lanzamiento del servidor, período de mayor exposición a ataques de competidores.
Errores comunes y soluciones
| Síntoma | Causa probable | Solución |
|---|---|---|
| El sitio se vuelve lento tras activar el WAF | Reglas personalizadas mal optimizadas | Simplifica las reglas y usa caché antes del WAF |
| Jugadores legítimos bloqueados | Regla de rate limiting demasiado agresiva | Ejecuta en modo log antes de bloquear, ajusta el umbral |
| SSL roto tras el proxy | Modo Flexible en vez de Full (strict) | Configura un certificado válido en el servidor de origen |
| Panel admin todavía expuesto | Regla de restricción no aplicada al subdominio correcto | Confirma el hostname exacto en la regla |
| API de ranking siendo raspada aun con WAF | Regla de rate limiting no cubre el endpoint real | Verifica la ruta exacta usada por la API |
Lista de verificación de seguridad del WAF
- Dominio detrás de proxy con SSL Full (strict).
- Conjunto de reglas OWASP activado, probado en modo log antes del bloqueo.
- Reglas personalizadas para login, ranking y panel admin.
- ModSecurity como capa complementaria (si es autogestionado).
- Formulario de donación con validación y rate limiting.
- Pruebas de payload malicioso realizadas en staging.
- Alertas de bloqueo anómalo configuradas.
- Log de eventos del WAF revisado semanalmente en el lanzamiento.
Con el WAF activo protegiendo el sitio, el siguiente paso natural es revisar la seguridad de la infraestructura detrás de él — el propio GameServer y la base de datos — para cerrar el ciclo de protección completo, como se describe en el tutorial de creación de servidor de MU Online.
Preguntas frecuentes
¿Un WAF es lo mismo que un firewall de red común?
No. Un firewall de red (iptables, firewall del proveedor) filtra por IP y puerto. Un WAF analiza el contenido de la solicitud HTTP (parámetros, encabezados, cuerpo) para bloquear ataques específicos de aplicaciones web, como SQL injection y XSS, que pasarían inadvertidos por un firewall común.
¿Necesito un WAF si ya uso Cloudflare en el plan gratuito?
El plan gratuito de Cloudflare ya trae un WAF básico con reglas genéricas contra los ataques más comunes (OWASP). Para un servidor de MU con panel de donaciones y API de ranking, vale la pena evaluar el plan Pro, que habilita reglas personalizadas específicas para tus endpoints más sensibles.
¿El WAF también protege contra DDoS?
Parcialmente. Un WAF se enfoca en la capa de aplicación (L7) y ayuda contra ataques de flood de solicitudes HTTP. Para DDoS volumétrico (L3/L4, saturación de ancho de banda) necesitas protección en el borde de la red, generalmente incluida en el mismo proveedor (Cloudflare, por ejemplo) pero configurada por separado.
¿Reglas de WAF muy estrictas pueden bloquear jugadores reales?
Sí, es el principal riesgo de una configuración incorrecta — llamado falso positivo. Por eso todo WAF debe correr en modo 'solo log' durante algunos días antes de activar el bloqueo automático, permitiendo ajustar reglas que capturan tráfico legítimo del sitio o panel.
¿Vale la pena un WAF propio (ModSecurity) en vez de un servicio en la nube?
Depende de tu nivel técnico y presupuesto. ModSecurity en el propio servidor da control total y costo cero de licencia, pero exige mantenimiento manual de reglas. Un WAF en la nube (Cloudflare, Sucuri) actualiza las reglas automáticamente y es más simple para quien no tiene un equipo dedicado de seguridad.