Cómo segmentar la red del GameServer para proteger tu servidor de MU Online
Aísla el GameServer, ConnectServer y base de datos de tu servidor de MU Online en segmentos de red separados, reduciendo la superficie de ataque contra DDoS, intrusiones y explotación de puertos expuestos.
Un servidor de MU Online privado típico expone, sin darse cuenta, mucho más de lo que debería: es común ver GameServer, ConnectServer, base de datos e incluso el panel administrativo web corriendo en la misma red plana, todos accesibles desde internet en los mismos puertos. Esto convierte cualquier
Un servidor de MU Online privado típico expone, sin darse cuenta, mucho más de lo que debería: es común ver GameServer, ConnectServer, base de datos e incluso el panel administrativo web corriendo en la misma red plana, todos accesibles desde internet en los mismos puertos. Esto convierte cualquier vulnerabilidad en un componente en una puerta de entrada para todos los demás. Segmentar la red —aislando cada componente en su propia zona, con reglas de firewall explícitas sobre quién puede hablar con quién— es una de las medidas de seguridad más efectivas y menos aplicadas por los administradores de servidores privados. Este tutorial muestra cómo planificar e implementar esa segmentación, desde el diseño de la topología hasta las reglas de firewall específicas.
Por qué la red plana es un riesgo
En una red plana, si un atacante compromete el servidor web (generalmente el componente más expuesto y más atacado, por correr un CMS o panel PHP), obtiene acceso de red directo a la base de datos y al GameServer, porque no hay ninguna barrera entre ellos. Una vulnerabilidad en un formulario de login del sitio se convierte, en pocos pasos, en un volcado completo de la base de cuentas e ítems. La segmentación de red rompe esa cadena: aunque un componente sea comprometido, el atacante no puede "saltar" lateralmente a los demás sin pasar por una regla de firewall explícita.
Componentes típicos de un servidor de MU y su exposición ideal
| Componente | Función | Exposición recomendada |
|---|---|---|
| ConnectServer | Punto de entrada del cliente del juego | Público (puerto ~44405) |
| GameServer | Lógica del juego, personajes, ítems | Solo red interna |
| Base de datos | Cuentas, personajes, ítems, log | Solo red interna, acceso restringido al GameServer |
| Panel web/sitio | Registro, ranking, tienda | Público (puertos 80/443), pero aislado del GameServer |
| DataServer (si aplica) | Intermediario entre GameServer y base de datos | Solo red interna |
La regla general: solo el ConnectServer y el sitio necesitan estar accesibles directamente desde internet. Todo lo demás debe vivir detrás de un firewall que bloquea por defecto y libera solo lo necesario.
Diseñando los segmentos de red
Una topología de referencia con tres segmentos:
[ Internet ]
|
[ Segmento Público ] -- ConnectServer, Sitio/Panel Web
| (regla: solo puertos específicos liberados)
[ Segmento de Aplicación ] -- GameServer, DataServer
| (regla: solo el GameServer habla con la base de datos)
[ Segmento de Base de Datos ] -- MSSQL/MySQL
Cada flecha representa una regla de firewall explícita, no una vía abierta. El tráfico entre segmentos debe ser una excepción documentada, nunca la norma.
Implementando con VPC y Security Groups (nube)
Si el servidor corre en un proveedor de nube (AWS, Azure, GCP, u otros proveedores con VPC), la segmentación se hace vía subredes privadas y grupos de seguridad. Un ejemplo de estructura en una VPC:
VPC: 10.0.0.0/16
├── Subred Pública: 10.0.1.0/24 → ConnectServer, Sitio
├── Subred Aplicación: 10.0.2.0/24 → GameServer, DataServer
└── Subred Base de Datos: 10.0.3.0/24 → MSSQL/MySQL
El ConnectServer en la subred pública tiene IP accesible desde internet (o detrás de un Load Balancer); GameServer y base de datos quedan en subredes privadas, sin ruta directa a internet, accesibles solo vía IP interna.
Reglas de firewall por segmento
La siguiente tabla resume las reglas mínimas necesarias entre segmentos:
| Origen | Destino | Puerto | Motivo |
|---|---|---|---|
| Internet | ConnectServer | 44405/TCP | El cliente del juego se conecta al ConnectServer |
| Internet | Sitio/Panel Web | 443/TCP | Acceso HTTPS al sitio |
| ConnectServer | GameServer | Puerto interno del protocolo | El ConnectServer redirige la sesión al GameServer |
| GameServer | Base de datos | 1433/TCP (MSSQL) o 3306/TCP (MySQL) | El GameServer consulta/escribe datos de cuenta y personaje |
| Sitio/Panel Web | Base de datos | Puerto de la base de datos, solo lectura si es posible | El sitio muestra ranking, datos de cuenta (sin escritura directa en ítem/personaje) |
| Cualquier otro origen | Base de datos | Ninguno | Bloqueo por defecto —nada más debe alcanzar la base de datos |
Nota que el sitio tiene su propio camino hasta la base de datos, idealmente con una cuenta de base de datos con permisos restringidos (solo SELECT en tablas de ranking, nunca UPDATE/DELETE).
Configurando con iptables (servidor Linux dedicado)
Si los componentes corren en servidores Linux propios (no en nube gestionada), iptables o nftables cumplen el mismo papel. Un ejemplo de reglas en el servidor de base de datos, aceptando conexiones solo desde la IP interna del GameServer:
# Política por defecto: bloquear todo
iptables -P INPUT DROP
# Permitir loopback
iptables -A INPUT -i lo -j ACCEPT
# Permitir solo al GameServer en el puerto de MySQL
iptables -A INPUT -p tcp -s 10.0.2.10 --dport 3306 -j ACCEPT
# Permitir SSH solo desde una IP de gestión conocida
iptables -A INPUT -p tcp -s 198.51.100.5 --dport 22 -j ACCEPT
# Log y drop del resto
iptables -A INPUT -j LOG --log-prefix "IPTABLES-DROPPED: "
iptables -A INPUT -j DROP
Guarda las reglas con iptables-save y asegúrate de que se restauren en el arranque, o un reinicio dejará al servidor sin protección.
Aislando el panel administrativo web
El panel administrativo (donde los GMs gestionan cuentas, ítems, eventos) es un objetivo particularmente sensible —generalmente tiene permisos de escritura directa en la base de datos. Nunca lo expongas en la misma URL/puerto público del sitio de jugadores. Recomendaciones:
- Coloca el panel en un subdominio o puerto separado, protegido por VPN o lista de IPs permitidas.
- Usa autenticación de dos factores para las cuentas de administrador.
- Restringe la cuenta de base de datos usada por el panel a las tablas estrictamente necesarias.
Segmentando también la red de gestión (SSH/RDP)
Un error común es segmentar bien los servicios del juego pero dejar el acceso administrativo (SSH, RDP, paneles de hosting) abierto a internet sin restricción. Trata el acceso de gestión como un segmento más: libera SSH/RDP solo desde una VPN de administración o una lista fija de IPs de confianza, nunca 0.0.0.0/0.
Monitoreando y auditando las reglas
La segmentación sin monitoreo es una falsa sensación de seguridad. Configura logs de firewall (bloqueos y liberaciones) y revísalos periódicamente:
| Qué monitorear | Frecuencia | Acción si es anómalo |
|---|---|---|
| Intentos de conexión bloqueados a la base de datos | Diaria (automatizada) | Investigar el origen; considerar bloqueo de IP |
| Nuevas reglas de firewall agregadas | Con cada cambio | Revisión por una segunda persona antes de aplicar en producción |
| Puertos abiertos en los servidores internos | Semanal (escaneo interno) | Cerrar puertos no documentados de inmediato |
| Accesos al panel administrativo | Diaria | Confirmar que todos los accesos vinieron de las IPs/VPN esperadas |
Probando la segmentación
Después de implementarla, valida activamente que la segmentación funciona como se espera, intentando conexiones que deberían fallar:
- Desde internet pública, intenta conectarte directamente al puerto de la base de datos —debe fallar (timeout o connection refused).
- Desde el segmento público (ConnectServer), intenta conectarte al puerto de la base de datos —debe fallar, porque solo el GameServer tiene permiso.
- Desde el GameServer, confirma que la conexión a la base de datos funciona normalmente.
- Corre un escáner de puertos (nmap) desde fuera de la red contra la IP pública —confirma que solo aparecen abiertos los puertos esperados (ConnectServer, sitio).
Errores comunes y soluciones
| Síntoma | Causa probable | Solución |
|---|---|---|
| Base de datos accesible directamente desde internet | Regla de firewall liberando el origen 0.0.0.0/0 en el puerto de la base de datos | Restringe el origen a la IP interna exacta del GameServer |
| El GameServer no se conecta a la base de datos tras la segmentación | Regla de firewall bloqueando también el tráfico legítimo | Confirma la IP interna correcta del GameServer en la regla de liberación |
| Panel administrativo comprometido expone toda la base de datos | Panel en la misma red/permisos que el sitio público | Aísla el panel en su propio segmento con VPN y cuenta de base de datos restringida |
| Las reglas de firewall se pierden tras un reinicio | Reglas no persistidas (iptables sin save) | Configura la persistencia vía iptables-save/servicio systemd equivalente |
| Ataque lateral tras comprometer el sitio | Red plana sin separación entre sitio y GameServer/base de datos | Implementa la segmentación en segmentos distintos según este tutorial |
Lista de verificación de segmentación de red
- Topología de segmentos diseñada (público, aplicación, base de datos).
- Solo ConnectServer y sitio expuestos directamente a internet.
- Reglas de firewall explícitas por origen/destino/puerto, bloqueo por defecto.
- Panel administrativo aislado con VPN o lista de IPs y 2FA.
- Acceso de gestión (SSH/RDP) restringido a VPN o IPs de confianza.
- Persistencia de las reglas de firewall configurada (sobrevive a reinicios).
- Pruebas activas de segmentación realizadas (intentos de conexión que deben fallar).
- Monitoreo y logs de firewall configurados con revisión periódica.
Con la red del GameServer debidamente segmentada, el siguiente paso lógico es aplicar el mismo rigor a la capa de datos —consulta el tutorial de segregación de red de la base de datos para profundizar específicamente en la protección del componente más sensible de todo el servidor.
Preguntas frecuentes
¿Segmentar la red protege contra DDoS?
No elimina el DDoS, pero reduce el impacto al concentrar la exposición pública solo en el ConnectServer y/o proxy, manteniendo el GameServer y la base de datos totalmente inaccesibles desde internet. Para mitigar el DDoS de verdad, combina la segmentación con un servicio de protección (Cloudflare Spectrum, OVH Anti-DDoS o similar) delante del punto de entrada público.
¿Necesito hardware de red caro para segmentar (VLANs físicas)?
No, en la mayoría de los casos. Con un proveedor de nube (VPS/cloud), la segmentación se hace vía redes privadas virtuales (VPC) y reglas de firewall/security groups, sin necesidad de switches gestionados físicos. Las VLANs físicas tienen más sentido cuando los componentes corren en hardware propio en la misma sala de servidores.
¿El ConnectServer realmente necesita estar expuesto a internet?
Sí, es el punto de entrada que el cliente del juego contacta primero para obtener la lista de servidores y redirigir la conexión. Por eso debe ser el único componente expuesto —todo lo demás (GameServer, base de datos, panel web administrativo) debe quedar detrás de él, inaccesible directamente desde internet.
¿Cómo se comunica el GameServer con la base de datos si están en segmentos diferentes?
A través de una regla de firewall específica que libera solo el puerto de la base de datos (ej. 1433 para MSSQL, 3306 para MySQL) y solo desde la IP interna del GameServer, nunca abierta a la red pública ni a otros segmentos. Esa es exactamente la definición de segmentación: comunicación permitida solo entre puntos específicos, con todo lo demás bloqueado por defecto.
¿La segmentación de red reemplaza el backup y otras prácticas de seguridad?
No. La segmentación reduce la superficie de ataque, pero debe combinarse con backups regulares, actualizaciones de seguridad del sistema operativo, contraseñas fuertes y monitoreo de logs. Es una capa de defensa, no la única.