El mayor portal de MU Online de Brasil — desde 2003
Tutorial Avanzado Infraestructura

Cómo monitorear intentos de invasión en tu servidor de MU Online

Detecta y responde a intentos de invasión en el servidor de MU Online monitoreando logs de SSH, intentos de fuerza bruta en el panel, inyección de SQL y accesos sospechosos a MySQL, con fail2ban, alertas automáticas y un plan de respuesta a incidentes.

GA Gabriel · Actualizado el 27 jul 2025 · ⏱ 17 min de lectura
Respuesta rápida

Los servidores privados de MU Online con economía activa — ítems raros, moneda premium, rankings disputados — son objetivos reales de intentos de invasión, desde fuerza bruta simple en cuentas de administrador hasta SQL injection en formularios del sitio y explotación de vulnerabilidades en el panel

Los servidores privados de MU Online con economía activa — ítems raros, moneda premium, rankings disputados — son objetivos reales de intentos de invasión, desde fuerza bruta simple en cuentas de administrador hasta SQL injection en formularios del sitio y explotación de vulnerabilidades en el panel de administración. A diferencia del lag o el disco lleno, una invasión exitosa puede significar duplicación de ítems, robo de cuentas de jugadores o incluso acceso total al servidor. Este tutorial cubre cómo monitorear logs de acceso (SSH, panel web, MySQL), configurar defensas automáticas con fail2ban y firewall, identificar señales de compromiso y armar un plan de respuesta a incidentes para actuar rápido cuando algo se sale de lo normal.

Por qué los servidores de MU Online son un objetivo

Un servidor privado popular mueve una economía real (venta de Zen, ítems raros, VIP), lo que atrae desde script kiddies probando exploits conocidos de paneles genéricos hasta individuos con motivación directa de sabotear a la competencia entre servidores. La superficie de ataque incluye el panel web (login de cuenta, tienda, registro), el SSH/RDP de administración del servidor, y el propio MySQL si está expuesto incorrectamente a internet.

Superficies de ataque más comunes

SuperficieVector típico de ataqueRiesgo
SSH/RDP del servidorFuerza bruta de contraseña, credenciales filtradasAcceso total al servidor
Panel web (login, registro)SQL injection, fuerza bruta de contraseñaRobo de cuentas, acceso a la base de datos
Tienda/pago del sitioInyección, manipulación de solicitudFraude, ítems generados sin pago
MySQL expuesto a internetPuerto 3306 abierto públicamenteAcceso directo a la base de datos sin pasar por el servidor
Cuenta de GM comprometidaPhishing, reutilización de contraseñaDuplicación de ítems, baneo indebido de jugadores

Paso 1 — Cerrar puertos innecesarios con firewall

Antes de monitorear, reduce la superficie de ataque. Expón públicamente solo los puertos realmente necesarios (ConnectServer, panel web en HTTPS), y mantén SSH y MySQL cerrados o restringidos por IP.

# Ejemplo con ufw
sudo ufw default deny incoming
sudo ufw allow 22/tcp   # restringe por IP si es posible
sudo ufw allow 443/tcp
sudo ufw allow 44405/tcp  # puerto estándar del ConnectServer, ajusta según tu emulador
sudo ufw deny 3306/tcp  # MySQL nunca expuesto públicamente
sudo ufw enable

Paso 2 — Instalar y configurar fail2ban contra fuerza bruta

Fail2ban monitorea logs de autenticación y banea automáticamente IPs tras un número de intentos fallidos en un intervalo corto:

sudo apt install fail2ban

# /etc/fail2ban/jail.local
[sshd]
enabled = true
maxretry = 5
findtime = 600
bantime = 3600

[nginx-limit-req]
enabled = true

Para el panel web, crea un filtro personalizado apuntando al log de intentos de login fallidos de tu sistema (Laravel, PHP puro, etc.), baneando IPs que exceden intentos de login en minutos.

Paso 3 — Monitorear logs de SSH y del panel web

Revisa regularmente (o automatiza con un script) los logs de autenticación en busca de patrones anómalos: muchos intentos en poco tiempo, intentos en horarios inusuales, o intentos provenientes de países fuera del público objetivo del servidor.

# Ver intentos de login SSH fallidos recientes
sudo grep "Failed password" /var/log/auth.log | tail -50

# Contar intentos por IP
sudo grep "Failed password" /var/log/auth.log | awk '{print $(NF-3)}' | sort | uniq -c | sort -nr | head

Paso 4 — Proteger el panel web contra SQL injection

Confirma que todo el código del panel use prepared statements/queries parametrizadas en lugar de concatenación directa de string SQL — la causa más común de SQL injection en paneles de MU Online hechos a medida. Revisa especialmente los formularios de login, registro, recuperación de contraseña y tienda, que son los objetivos más buscados.

// Incorrecto — vulnerable a SQL injection
$query = "SELECT * FROM MEMB_INFO WHERE memb___id = '$usuario'";

// Correcto — prepared statement
$stmt = $pdo->prepare("SELECT * FROM MEMB_INFO WHERE memb___id = ?");
$stmt->execute([$usuario]);

Paso 5 — Restringir y auditar cuentas de GM

Las cuentas de Game Master tienen poder total sobre ítems y personajes, lo que las convierte en el objetivo más valioso de cualquier invasión. Usa contraseñas fuertes y únicas, autenticación de dos factores en el panel si está disponible, y mantén un log de auditoría de todas las acciones de GM (creación de ítem, teletransporte, baneo) para detectar uso indebido rápidamente.

PrácticaPor qué
Contraseña fuerte y única por GMEvita la reutilización de una contraseña filtrada en otro servicio
2FA en el panel de administraciónBloquea el acceso incluso con contraseña comprometida
Log de auditoría de acciones de GMDetecta abuso o cuenta comprometida rápidamente
Revocación inmediata al salir del equipoEvita acceso residual de ex miembros

Paso 6 — Monitorear MySQL contra accesos anómalos

Aunque MySQL esté cerrado a internet, monitorea intentos de conexión provenientes de IPs internas inusuales y queries fuera del patrón esperado (por ejemplo, updates masivos en la tabla de ítems fuera de un evento programado). Activa el log general de MySQL temporalmente durante una investigación, pero evita dejarlo encendido de forma permanente por el impacto en el rendimiento y el espacio en disco.

-- Activar el log general temporalmente para investigación
SET GLOBAL general_log = 'ON';
SET GLOBAL general_log_file = '/var/log/mysql/general.log';

Paso 7 — Identificar señales de compromiso ya ocurrido

Algunas señales indican que una invasión ya ocurrió, incluso sin alerta en tiempo real: cuentas de GM creadas sin registro del equipo, Zen o ítems raros duplicados en cuentas específicas sin log de evento correspondiente, procesos desconocidos consumiendo CPU en el servidor, y entradas de acceso SSH en horarios fuera del patrón del equipo.

SeñalQué investigar
Cuenta de GM no reconocidaComparar con la lista oficial del equipo
Zen/ítems duplicados sin log de eventoAuditoría en la tabla de ítems y logs de GM
Proceso desconocido en el servidorps aux, top, comparar con procesos esperados
Login SSH en horario inusualCruzar con la escala del equipo de administración
Caída de rendimiento sin pico de jugadoresVerificar procesos de minería o backdoor

Paso 8 — Armar un plan de respuesta a incidentes

Ten un plan documentado antes de que ocurra la invasión, no durante el pánico. Como mínimo, define: quién tiene autoridad para aislar el servidor de la red, cómo preservar los logs antes de cualquier reinicio, y cómo comunicarte con la comunidad con transparencia sin exponer detalles que ayuden al invasor.

  1. Aislar el servidor de la red (o bloquear la IP de origen en el firewall).
  2. Preservar los logs actuales copiándolos antes de cualquier reinicio.
  3. Cambiar todas las credenciales de administración (SSH, MySQL, panel, GM).
  4. Investigar la extensión del daño (ítems duplicados, cuentas afectadas).
  5. Restaurar desde un backup íntegro anterior a la invasión, si es necesario.
  6. Comunicar a la comunidad con transparencia sobre lo ocurrido y las correcciones aplicadas.

Errores comunes y soluciones

SíntomaCausa probableSolución
Muchos intentos de login SSHServidor expuesto sin fail2banInstalar fail2ban y restringir por IP
Ítems duplicados sin explicaciónCuenta de GM comprometida o SQL injectionAuditar logs de GM y revisar queries del panel
MySQL accesible externamentePuerto 3306 abierto en el firewallBloquear el puerto y permitir solo localhost/VPN
Login en el panel sin 2FA siendo comprometidoContraseña débil o reutilizadaForzar contraseña fuerte y 2FA para cuentas de GM
Logs borrados tras el incidenteReinicio antes de preservar evidenciaCopiar siempre los logs antes de reiniciar servicios

Lista de verificación de seguridad y monitoreo de invasión

  • Firewall configurado, exponiendo solo los puertos necesarios.
  • Fail2ban activo para SSH y panel web.
  • Panel web revisado contra SQL injection (prepared statements).
  • Cuentas de GM con contraseña fuerte, 2FA y log de auditoría.
  • MySQL nunca expuesto directamente a internet.
  • Señales de compromiso revisadas periódicamente.
  • Plan de respuesta a incidentes documentado y conocido por el equipo.

Con las defensas básicas monitoreadas y activas, el siguiente paso es integrar estas alertas de seguridad al mismo panel donde sigues CPU, disco y jugadores en línea, para tener una visión única de la salud del servidor — revisa el tutorial de creación de servidor de MU Online para garantizar que la base de infraestructura ya nace con estas protecciones en mente.

Preguntas frecuentes

¿Los servidores privados de MU Online son un objetivo real de invasión?

Sí, con frecuencia. Los servidores con economía activa (ítems raros, moneda premium) atraen intentos de fuerza bruta en cuentas de GM, explotación de vulnerabilidades en el panel web e incluso SQL injection en formularios de registro/tienda, especialmente en servidores populares.

¿Qué es fail2ban y cómo ayuda contra invasiones?

Fail2ban es una herramienta que monitorea logs (SSH, panel web, etc.) y banea automáticamente IPs que exceden un número de intentos fallidos de login en un período corto. Es una de las defensas más simples y eficaces contra la fuerza bruta.

¿Cómo sé si mi servidor ya fue invadido en el pasado sin que me diera cuenta?

Las señales incluyen cuentas de GM creadas sin tu conocimiento, Zen/ítems duplicados en cuentas específicas sin log de evento correspondiente, procesos desconocidos corriendo en el servidor, y entradas extrañas en los logs de acceso SSH o del panel en horarios inusuales.

¿Necesito un firewall además de fail2ban?

Sí. Fail2ban reacciona después de los intentos, mientras que un firewall (ufw/iptables) bloquea por defecto los puertos que no necesitan estar expuestos públicamente, reduciendo la superficie de ataque antes incluso de que ocurra un intento.

¿Qué hacer en el primer minuto tras confirmar una invasión en curso?

Aísla el servidor de la red (o al menos bloquea la IP de origen en el firewall), preserva los logs actuales (cópialos antes de cualquier reinicio), y solo después investiga la extensión del daño. Reiniciar o borrar logs antes de preservar evidencia dificulta la investigación y la respuesta legal, si es necesaria.

GA
Editor de guías y builds

Gabriel cubre gameplay, builds de clases, PvP y progresión. Prueba cada estrategia en un servidor antes de publicar.

Sigue leyendo

Artículos relacionados