Cómo configurar el firewall por puerto (game/connect/web) en MU Online
Aprende a mapear y liberar solo los puertos correctos de tu servidor de MU Online (ConnectServer, GameServer y Web), bloqueando el resto para reducir la superficie de ataque sin tirar a los jugadores.
Configurar el firewall por puerto es una de las tareas más importantes — y peor ejecutadas — en la administración de un servidor de MU Online. Muchos dueños de servidor simplemente apagan el firewall entero para "resolver" un problema de conexión, y con eso dejan abiertos de par en par el SQL Server
Configurar el firewall por puerto es una de las tareas más importantes — y peor ejecutadas — en la administración de un servidor de MU Online. Muchos dueños de servidor simplemente apagan el firewall entero para "resolver" un problema de conexión, y con eso dejan abiertos de par en par el SQL Server, el panel administrativo y los servicios internos a toda internet. El resultado es previsible: cuentas invadidas, base de datos filtrada y servidor caído. El enfoque correcto es el opuesto: negar todo por defecto y liberar solo los puertos que los jugadores y el sitio realmente necesitan. En esta guía vas a aprender a separar los puertos en tres grupos — game, connect y web — y a crear reglas quirúrgicas en el Windows Firewall que mantienen el servidor accesible y, al mismo tiempo, cerrado para lo que no debe exponerse.
Este tutorial asume un servidor Windows (Windows Server 2016/2019/2022 o Windows 10/11 en entorno de pruebas) con un MuServer ya instalado. Si todavía estás montando la base de tu proyecto, empieza por el paso a paso de cómo crear un servidor de MU Online y vuelve aquí cuando los procesos ya estén levantando correctamente.
Requisitos previos
Antes de tocar cualquier regla, asegúrate de tener:
- Acceso administrador al Windows del servidor (PowerShell o Símbolo del sistema elevado).
- Acceso alternativo al servidor vía consola KVM/VNC del panel del proveedor de VPS. Esto es innegociable: si te equivocas en una regla y pierdes el RDP, la consola es la única forma de recuperar el acceso sin llamar al soporte.
- La IP fija de tu computadora de administración (averíguala en sitios como "mi ip"). Se usará para restringir el RDP.
- Los archivos de configuración de tu MuServer a mano, principalmente el
ConnectServer.iniy el archivo de definición de los GameServers. - Un bloc de notas para documentar cada puerto antes de liberarlo.
Entendiendo los tres grupos de puertos
El error conceptual más común es tratar todos los puertos por igual. En la práctica, un servidor de MU tiene puertos con tres finalidades muy diferentes, y cada grupo pide una política distinta.
Connect es el punto de entrada. Cuando el jugador abre el cliente, el main.exe conecta al ConnectServer, recibe la lista de sub-servidores y el IP/puerto de cada uno. Ese puerto necesita estar abierto para el mundo entero, si no, nadie llega siquiera a ver la pantalla de selección de servidor.
Game son los sub-servidores propiamente dichos. Después de elegir el servidor en la lista, el cliente abre una nueva conexión directa al GameServer correspondiente. Cada sub-servidor suele tener su propio puerto. También necesitan estar públicos.
Web es el sitio/panel del servidor (registro de cuenta, ranking, tienda de donación). Solo hay exposición aquí si el sitio está en la misma máquina del juego. Es el grupo más sensible porque atrae ataques de aplicación (SQL injection, fuerza bruta en el login del admin).
Además de esos tres, existe un cuarto grupo que nunca debe exponerse: los puertos internos (DataServer, JoinServer, EventServer) y el SQL Server. Ellos conversan solo dentro de la propia máquina.
Etapa 1: mapear los puertos reales de tu servidor
No confíes en números "de memoria". Abre los archivos de configuración y anota lo que está realmente configurado. Las rutas y nombres varían por proveedor/versión de MuServer, pero la lógica es siempre la misma.
En el ConnectServer.ini (dentro de la carpeta del ConnectServer, algo como ConnectServer/Data/ConnectServer.ini) busca algo como:
[ConnectServerInfo]
ConnectServerPortTCP = 44405
MaxUserCount = 1000
En el archivo de lista de servidores que el Connect entrega al cliente (frecuentemente ServerList.dat o un .xml/.ini equivalente), comprueba los puertos de cada GameServer:
[Server1]
ServerName = ViciadosMU - Season 6
IP = 0.0.0.0
Port = 55901
[Server2]
ServerName = ViciadosMU - PvP
IP = 0.0.0.0
Port = 55902
Arma una tabla como esta con tus valores (los de abajo son solo un ejemplo, varían por proveedor/versión):
| Grupo | Componente | Puerto (ejemplo) | Protocolo | Exposición |
|---|---|---|---|---|
| Connect | ConnectServer | 44405 | TCP | Pública (internet) |
| Game | GameServer 1 | 55901 | TCP | Pública (internet) |
| Game | GameServer 2 | 55902 | TCP | Pública (internet) |
| Web | Sitio HTTP | 80 | TCP | Pública o redirect |
| Web | Sitio HTTPS | 443 | TCP | Pública |
| Interno | DataServer | 55960 | TCP | Solo localhost |
| Interno | JoinServer | 55970 | TCP | Solo localhost |
| Interno | SQL Server | 1433 | TCP | Solo localhost |
| Admin | RDP | 3389 | TCP | Restringida a tu IP |
Confirma qué puertos están de hecho a la escucha con:
netstat -ano | findstr "LISTENING" | findstr "44405 55901 55902 1433 3389"
Etapa 2: definir la política predeterminada de bloqueo
El principio de seguridad correcto es el default deny: bloquea todo lo que entra y libera solo lo necesario. Antes de aplicar, crea la regla de RDP (Etapa 3, paso 1) — pero conceptualmente la política va primero.
netsh advfirewall set allprofiles state on
netsh advfirewall set allprofiles firewallpolicy blockinbound,allowoutbound
El primer comando garantiza que el firewall está encendido en los tres perfiles (Dominio, Privado, Público). El segundo define la política: bloquear entrada, permitir salida.
Etapa 3: liberar los puertos en el orden correcto
Sigue este orden numerado. Fue pensado para que nunca te dejes fuera del servidor.
- Libera el RDP solo para tu IP (cambia
203.0.113.10por tu IP real):
netsh advfirewall firewall add rule name="ADMIN - RDP restrito" dir=in action=allow protocol=TCP localport=3389 remoteip=203.0.113.10
- Libera el ConnectServer (grupo connect) para todos:
netsh advfirewall firewall add rule name="MU - ConnectServer 44405" dir=in action=allow protocol=TCP localport=44405
- Libera los GameServers (grupo game). Una regla por puerto deja el log más legible:
netsh advfirewall firewall add rule name="MU - GameServer 1 (55901)" dir=in action=allow protocol=TCP localport=55901
netsh advfirewall firewall add rule name="MU - GameServer 2 (55902)" dir=in action=allow protocol=TCP localport=55902
Si tienes muchos sub-servidores en secuencia, un rango lo resuelve:
netsh advfirewall firewall add rule name="MU - GameServers 55901-55910" dir=in action=allow protocol=TCP localport=55901-55910
- Libera el grupo web — solo si el sitio está en la misma máquina:
netsh advfirewall firewall add rule name="WEB - HTTP 80" dir=in action=allow protocol=TCP localport=80
netsh advfirewall firewall add rule name="WEB - HTTPS 443" dir=in action=allow protocol=TCP localport=443
- Bloquea explícitamente los puertos internos y el SQL hacia internet. Como la política ya es block, esto es redundante en teoría, pero una regla de bloqueo explícita protege contra futuras liberaciones accidentales y sirve de documentación:
netsh advfirewall firewall add rule name="BLOCK - SQL 1433 externo" dir=in action=block protocol=TCP localport=1433
netsh advfirewall firewall add rule name="BLOCK - DataServer 55960 externo" dir=in action=block protocol=TCP localport=55960
netsh advfirewall firewall add rule name="BLOCK - JoinServer 55970 externo" dir=in action=block protocol=TCP localport=55970
Etapa 4: reforzar el SQL Server a nivel del servicio
Bloquear el 1433 en el firewall es bueno, pero la defensa en profundidad manda amarrar el propio SQL al loopback. Abre el SQL Server Configuration Manager → SQL Server Network Configuration → Protocols → TCP/IP → pestaña IP Addresses. Deja habilitado solo el IPAll/IP1 correspondiente a 127.0.0.1 y deshabilita las direcciones que apuntan al IP público. Así, aunque alguien libere el 1433 por error, el SQL no estará escuchando en la interfaz pública.
Etapa 5: hacer lo mismo por la interfaz gráfica (opcional)
Si prefieres hacer clic en vez de teclear, ejecuta wf.msc y sigue:
- Reglas de entrada → Nueva regla.
- Tipo Puerto → TCP → indica el puerto (ej.: 44405).
- Permitir la conexión.
- Marca los tres perfiles (Dominio, Privado, Público).
- Ponle un nombre estandarizado, como
MU - ConnectServer 44405.
Para restringir por IP (caso del RDP), después de crear la regla: clic derecho → Propiedades → pestaña Ámbito → en Dirección IP remota elige "Estas direcciones IP" y añade la tuya.
Etapa 6: probar de afuera hacia adentro
Probar desde el propio servidor engaña, porque el tráfico local no pasa por las mismas reglas de internet. Prueba desde afuera:
- Pídele a un amigo (o usa el celular en 4G, fuera del Wi-Fi) que abra el cliente y verifique si la lista de servidores carga (valida el Connect) y si entra al mundo (valida el Game).
- Desde otra máquina, confirma que el 1433 está cerrado. Una forma simple en PowerShell:
Test-NetConnection -ComputerName TU_IP_PUBLICO -Port 1433
El resultado esperado es TcpTestSucceeded : False. Si da True, el SQL está expuesto — detén todo y corrige antes de seguir.
Errores comunes y soluciones
| Síntoma | Causa probable | Solución |
|---|---|---|
| La lista de servidores no carga | Puerto del ConnectServer bloqueado o equivocado | Confirma el puerto en el ConnectServer.ini y la regla de entrada correspondiente |
| La lista aparece, pero se cuelga al entrar | GameServer sin regla de liberación | Crea la regla dir=in action=allow para el puerto del sub-servidor |
| Perdí el acceso RDP | Política de bloqueo aplicada sin liberar el 3389 | Entra por la consola KVM, ejecuta netsh advfirewall reset y rehaz en orden |
| SQL accesible desde internet | 1433 liberado o SQL escuchando en 0.0.0.0 | Bloquea el 1433 y amarra el SQL al 127.0.0.1 en el Configuration Manager |
| El sitio abre por HTTP pero no por HTTPS | Regla del 443 ausente o certificado no instalado | Crea la regla del 443 y verifica el binding SSL en IIS |
| Las reglas "desaparecen" tras reiniciar | El firewall fue apagado por otra app/servicio | Confirma netsh advfirewall show allprofiles y mantén el estado ON |
Lista de verificación de lanzamiento
- Todos los puertos reales mapeados a partir de los archivos
.ini(no de memoria) - Regla de RDP restringida a mi IP creada antes del bloqueo general
- Política predeterminada definida como
blockinbound,allowoutbound - ConnectServer liberado hacia internet
- Cada GameServer con su regla de entrada
- Puertos web (80/443) liberados solo si el sitio está en la misma máquina
- SQL (1433) y puertos internos explícitamente bloqueados
- SQL Server escuchando solo en 127.0.0.1
- Prueba hecha desde afuera (celular/amigo) validando Connect y Game
Test-NetConnectionconfirmando el 1433 cerrado- Backup de las reglas exportado con
netsh advfirewall export - Acceso KVM/VNC del proveedor probado y funcionando
Con este mapeo por grupo, tu servidor pasa a exponer exactamente lo que los jugadores necesitan y nada más. Es la base de seguridad sobre la cual vas a apilar después el anti-flood, el anti-DDoS y el hardening del panel web — pero todo empieza por saber, con precisión, qué puertos están abiertos y por qué.
Preguntas frecuentes
¿Necesito abrir el puerto 1433 de SQL Server en el firewall?
No. SQL Server solo es accedido por los procesos del propio servidor (DataServer, GameServer) en la misma máquina. Deja el 1433 bloqueado hacia internet y, preferentemente, configura SQL para escuchar solo en 127.0.0.1.
¿Qué puerto usan realmente los jugadores para entrar al juego?
El cliente conecta primero al ConnectServer (ejemplo común 44405 TCP) para recibir la lista de servidores y, luego, al GameServer elegido (ejemplo 55901 TCP). Los dos deben estar liberados hacia internet. Los números exactos varían por proveedor/versión y están en los archivos .ini de tu MuServer.
Bloqueé todo y ahora ya no puedo acceder por RDP. ¿Y ahora?
Usa la consola KVM/VNC del panel de tu proveedor de VPS, que funciona incluso con el puerto 3389 bloqueado. Ejecuta 'netsh advfirewall reset' para volver al estándar y reaplica las reglas empezando siempre por la liberación del RDP para tu IP.
¿Debo abrir el puerto 80 y el 443 del sitio junto con el juego?
Solo si el sitio está alojado en la misma máquina del juego. Si el panel web está en otro servidor, mantén 80/443 cerrados en la máquina del juego. Cuando abras, prefiere redirigir todo a HTTPS (443) y restringir el área /admin por IP.
Regla de entrada o de salida: ¿cuál configuro?
Para exponer el servidor a los jugadores configuras reglas de ENTRADA (inbound). El tráfico de salida normalmente puede quedar liberado. El foco de este tutorial es el inbound, que es lo que expone puertos hacia internet.