Cómo Configurar Firewall Avanzado para Servidor de MU Online
Guía técnica completa para configurar el Windows Firewall y reglas de puertos para proteger tu servidor privado de MU Online contra ataques y accesos no autorizados.
Por qué el Firewall es Crítico para Servidores de MU Online
Los servidores privados de MU Online son objetivos frecuentes de ataques DDoS, intentos de conexión no autorizada y escaneos de puertos. Una configuración incorrecta puede exponer SQL Server a internet, permitir acceso sin autenticación al panel de administración o tumbar el servidor con floods de paquetes. Esta guía cubre la configuración del Windows Firewall con Seguridad Avanzada en Windows Server 2012/2016/2019, los entornos de hospedaje más comunes para MuServer Season 6 hasta Season 13.
Paso 1: Mapear Todos los Puertos del MuServer
Antes de crear cualquier regla, documenta todos los puertos que usa tu servidor. La estructura estándar de MuServer es:
| Componente | Puerto | Protocolo | Exposición |
|---|---|---|---|
| ConnectServer | 44405 | TCP | Pública (jugadores) |
| GameServer 1 | 55901 | TCP | Pública (jugadores) |
| GameServer 2 | 55902 | TCP | Pública (jugadores) |
| GameServer N | 5590N | TCP | Pública (jugadores) |
| DataServer | 55980 | TCP | Solo interna |
| EventServer | 55960 | TCP | Solo interna |
| SQL Server | 1433 | TCP | Solo interna |
| RDP/Admin | 3389 | TCP | IP restringida |
| Panel Web | 80/443 | TCP | Pública o restringida |
Verifica los puertos exactos en el archivo de configuración de tu ConnectServer:
GameServer/Setup/ConnectServer.ini
[CONNECT_SERVER_INFO]
ServerPort=44405
ServerListenIP=0.0.0.0
[GAME_SERVER_GROUP]
ServerCount=2
Y en GameServer/Setup/GameServerInfo.cfg:
[GameServer_1]
ServerPort=55901
InternalPort=55901
Paso 2: Bloquear Todo el Tráfico Entrante por Defecto
El principio correcto es: bloquear todo por defecto, luego permitir solo lo necesario. Ejecuta los siguientes comandos como Administrador en PowerShell o Símbolo del sistema:
1. Configurar política predeterminada de bloqueo para tráfico entrante:
netsh advfirewall set allprofiles firewallpolicy blockinbound,allowoutbound
2. Asegurarse de que el firewall está activo en todos los perfiles:
netsh advfirewall set allprofiles state on
Paso 3: Crear Reglas de Entrada para los Componentes del MuServer
3. Permitir ConnectServer (puerto 44405 — acceso público):
netsh advfirewall firewall add rule name="MU - ConnectServer" dir=in action=allow protocol=TCP localport=44405 profile=any
4. Permitir GameServers (puertos 55901 y 55902):
netsh advfirewall firewall add rule name="MU - GameServer 1" dir=in action=allow protocol=TCP localport=55901 profile=any
netsh advfirewall firewall add rule name="MU - GameServer 2" dir=in action=allow protocol=TCP localport=55902 profile=any
Para múltiples GameServers, repite para cada puerto o usa el formato de rango:
netsh advfirewall firewall add rule name="MU - GameServers" dir=in action=allow protocol=TCP localport=55901-55910 profile=any
5. Permitir HTTP/HTTPS para el panel web:
netsh advfirewall firewall add rule name="MU - Web HTTP" dir=in action=allow protocol=TCP localport=80 profile=any
netsh advfirewall firewall add rule name="MU - Web HTTPS" dir=in action=allow protocol=TCP localport=443 profile=any
6. Permitir RDP solo desde tu IP de administración (reemplaza 203.0.113.10 con tu IP real):
netsh advfirewall firewall add rule name="Admin - RDP Restringido" dir=in action=allow protocol=TCP localport=3389 remoteip=203.0.113.10 profile=any
Paso 4: Bloquear Explícitamente los Puertos Internos
SQL Server y los componentes internos nunca deben ser accesibles desde internet:
7. Bloquear SQL Server externamente:
netsh advfirewall firewall add rule name="BLOCK - SQL Server Externo" dir=in action=block protocol=TCP localport=1433 profile=any
8. Bloquear DataServer y EventServer externamente:
netsh advfirewall firewall add rule name="BLOCK - DataServer Externo" dir=in action=block protocol=TCP localport=55980 profile=any
netsh advfirewall firewall add rule name="BLOCK - EventServer Externo" dir=in action=block protocol=TCP localport=55960 profile=any
127.0.0.1 en lugar de 0.0.0.0. Navega a: Administrador de configuración de SQL Server → Configuración de red de SQL Server → Protocolos de MSSQLSERVER → TCP/IP → Direcciones IP → deshabilita todas las entradas de IP excepto el loopback (127.0.0.1).Paso 5: Protección Anti-Flood con Límite de Conexiones
El Windows Firewall estándar no ofrece limitación de tasa nativa. Usa PowerShell para crear un script de monitoreo que bloquee IPs con conexiones simultáneas excesivas:
9. Crear el script anti-flood en C:\MuServer\Scripts\AntiFlood.ps1:
# AntiFlood.ps1 - Monitorea conexiones en el puerto 44405 y bloquea IPs excesivas
$puerto = 44405
$limiteConexiones = 15
$intervaloSegundos = 30
while ($true) {
$conexiones = Get-NetTCPConnection -LocalPort $puerto -State Established -ErrorAction SilentlyContinue
$grupoIPs = $conexiones | Group-Object -Property RemoteAddress | Where-Object { $_.Count -ge $limiteConexiones }
foreach ($grupo in $grupoIPs) {
$ip = $grupo.Name
$reglaExistente = Get-NetFirewallRule -DisplayName "AUTOBLOCK - $ip" -ErrorAction SilentlyContinue
if (-not $reglaExistente) {
New-NetFirewallRule -DisplayName "AUTOBLOCK - $ip" -Direction Inbound -Action Block -RemoteAddress $ip -Protocol TCP
Write-Output "$(Get-Date) - IP bloqueada: $ip ($($grupo.Count) conexiones)"
}
}
Start-Sleep -Seconds $intervaloSegundos
}
10. Registrar el script como tarea programada que se ejecuta al inicio del sistema:
schtasks /create /tn "MU AntiFlood Monitor" /tr "powershell -ExecutionPolicy Bypass -File C:\MuServer\Scripts\AntiFlood.ps1" /sc onstart /ru SYSTEM /f
Paso 6: Seguridad a Nivel de Base de Datos en SQL Server
Agrega una capa de seguridad dentro de SQL Server para registrar intentos de login sospechosos:
11. Habilitar auditoría de logins fallidos en SQL Server Management Studio:
-- Verificar configuración actual de auditoría
EXEC sp_configure 'show advanced options', 1;
RECONFIGURE;
-- Activar auditoría de login (2 = fallos y éxitos, 1 = solo fallos)
EXEC xp_instance_regwrite
N'HKEY_LOCAL_MACHINE',
N'Software\Microsoft\MSSQLServer\MSSQLServer',
N'AuditLevel',
REG_DWORD,
2;
12. Crear tabla de registro de seguridad en la base de datos MuOnline:
USE MuOnline;
GO
CREATE TABLE dbo.SecurityLog (
LogID INT IDENTITY(1,1) PRIMARY KEY,
LogDate DATETIME DEFAULT GETDATE(),
AccountID VARCHAR(10),
IPAddress VARCHAR(15),
EventType VARCHAR(50),
Details VARCHAR(255)
);
GO
13. Crear un trigger para registrar bloqueos automáticos de cuentas en la tabla MEMB_INFO:
USE MuOnline;
GO
CREATE TRIGGER trg_LoginFailed
ON dbo.MEMB_INFO
AFTER UPDATE
AS
BEGIN
SET NOCOUNT ON;
IF UPDATE(block_code)
BEGIN
INSERT INTO dbo.SecurityLog (AccountID, EventType, Details)
SELECT i.memb___id, 'ACCOUNT_BLOCKED',
'Cuenta bloqueada automáticamente - intentos excesivos fallidos'
FROM inserted i
INNER JOIN deleted d ON i.memb___id = d.memb___id
WHERE i.block_code <> d.block_code AND i.block_code = 1;
END
END;
GO
Paso 7: Verificar y Auditar Todas las Reglas
14. Listar todas las reglas de firewall creadas para MU Online:
netsh advfirewall firewall show rule name=all dir=in | findstr "MU\|BLOCK\|AUTOBLOCK\|Admin"
15. Comprobar los puertos en escucha para confirmar que solo los esperados están abiertos:
netstat -ano | findstr "LISTENING" | findstr "44405\|55901\|55902\|1433\|3389"
16. Exportar la configuración actual del firewall como copia de seguridad:
netsh advfirewall export "C:\MuServer\Backups\firewall-backup-%date:~-4,4%%date:~-10,2%%date:~-7,2%.wfw"
netsh advfirewall import "C:\MuServer\Backups\firewall-backup-AAAAMMDD.wfw"Paso 8: Configuración Alternativa por Interfaz Gráfica via wf.msc
Si prefieres la interfaz gráfica, abre wf.msc y:
- Ve a Reglas de entrada → Nueva regla
- Selecciona Puerto → TCP → ingresa el número de puerto específico
- Selecciona Permitir la conexión
- Marca todos los perfiles (Dominio, Privado, Público)
- Asígnale el nombre
MU - [NombreComponente]
Para restringir por IP en la GUI: tras crear la regla, clic derecho → Propiedades → pestaña Ámbito → en "Dirección IP remota" selecciona "Estas direcciones IP" y agrega las IPs permitidas.
Solución de Problemas
Los jugadores no pueden conectarse tras aplicar las reglas: Verifica que la regla del ConnectServer es correcta con netsh advfirewall firewall show rule name="MU - ConnectServer". Confirma que Action=Allow y Direction=In.
RDP bloqueado accidentalmente: Usa la consola KVM de tu proveedor de VPS. Ejecuta netsh advfirewall reset para restaurar los valores predeterminados, luego reaplica las reglas en el orden correcto, empezando siempre por la regla de RDP para tu IP.
El script AntiFlood bloquea jugadores legítimos: Aumenta el valor de $limiteConexiones (por ejemplo a 30), o agrega una lista blanca de IPs de confianza al inicio del script antes del bucle de bloqueo.
Perguntas frequentes
¿Qué puertos necesita abiertos MU Online?
ConnectServer usa el puerto 44405 (TCP). Cada GameServer usa 55901-55910 (TCP, uno por instancia de servidor). DataServer usa 55980 (TCP, solo comunicación interna). El panel web usa 80 y 443. Nunca expongas el puerto 1433 de SQL Server directamente a internet.
¿Cómo bloquear ataques de fuerza bruta al login?
Combina reglas de firewall con limitación de tasa: bloquea IPs que intenten más de 10 conexiones simultáneas en el puerto 44405 usando netsh advfirewall, y crea un trigger en SQL Server sobre la tabla MEMB_INFO para registrar fallos y opcionalmente llamar xp_cmdshell para banear el IP via netsh.
¿Qué hacer si el servidor queda inaccesible tras aplicar las reglas?
Accede al VPS mediante consola KVM/IPMI (no RDP) para no perder el acceso aunque se bloquee el puerto 3389. Ejecuta 'netsh advfirewall reset' para restaurar la configuración predeterminada y reaplica las reglas de una en una para identificar cuál causó el bloqueo.
¿Cómo proteger el panel web (webEngineNET/PHP) junto con el firewall?
Restringe el acceso al directorio /admin por IP en IIS (vía applicationHost.config o web.config con <ipSecurity>), habilita HTTPS con certificado autofirmado o Let's Encrypt, y bloquea el puerto 80 en el firewall externo dejando solo el 443 abierto.