Cómo hacer el hardening de Windows Server para MU Online
Blinda el Windows Server de tu MU Online: RDP seguro, cuentas endurecidas, superficie de puertos mínima, SQL protegido, logs y monitoreo contra intrusiones.
Los servidores de MU Online son objetivos frecuentes — de escáneres automatizados que barren internet en busca de RDP y SQL expuestos, y de rivales que atacan para sacar a la competencia del aire. Un Windows Server que arranca funcional después de la instalación todavía está lejos de estar seguro: p
Los servidores de MU Online son objetivos frecuentes — de escáneres automatizados que barren internet en busca de RDP y SQL expuestos, y de rivales que atacan para sacar a la competencia del aire. Un Windows Server que arranca funcional después de la instalación todavía está lejos de estar seguro: puertos abiertos de más, cuentas con nombres previsibles, RDP de par en par y SQL sin restricción son invitaciones a la intrusión. El hardening es el proceso de reducir esa superficie de ataque al mínimo necesario para que el juego funcione. Esta guía cubre RDP, cuentas, firewall, SQL, actualizaciones, logs y monitoreo, siempre con el cuidado de no perder el acceso durante el proceso. Los puertos, nombres y rutas son ejemplos y varían según el entorno y la versión.
Prerrequisitos
- Windows Server ya instalado y con el MuServer funcional (mira la guía de cómo crear un servidor de MU Online si aún no has llegado aquí).
- Acceso Administrador vía RDP.
- Acceso a la consola/VNC del proveedor de la VPS — esencial para recuperar el acceso si una regla de firewall bloquea el RDP.
- Capacidad de hacer un snapshot de la máquina antes de empezar.
- Una IP administrativa fija (la tuya, desde donde gestionas el servidor) para restringir el RDP y el SQL.
- SSMS instalado para las etapas de protección del SQL Server.
Parte 1 — Endurecer el acceso remoto (RDP)
El RDP es el punto de entrada más atacado en un Windows Server público. Los intentos de fuerza bruta en el puerto 3389 son constantes.
Paso 1: Restringir el RDP a tu IP administrativa
La defensa más eficaz es permitir el RDP solo desde tu red. Sustituye la IP de ejemplo por tu IP fija:
# Eliminar la regla genérica de RDP (si existe) y crear una restringida
Remove-NetFirewallRule -DisplayName "RDP-Custom" -ErrorAction SilentlyContinue
New-NetFirewallRule -DisplayName "RDP-Admin-Only" `
-Direction Inbound -Protocol TCP -LocalPort 3389 `
-RemoteAddress "203.0.113.10" -Action Allow
# Bloquear el RDP desde cualquier otro origen
New-NetFirewallRule -DisplayName "RDP-Block-All" `
-Direction Inbound -Protocol TCP -LocalPort 3389 `
-Action Block
Si tu IP es dinámica, usa una VPN con IP fija o un servicio de DDNS combinado con un script que actualice la regla.
Paso 2: Activar Network Level Authentication (NLA)
El NLA exige autenticación antes de establecer la sesión, cortando muchos ataques temprano:
# Exigir NLA para conexiones RDP
Set-ItemProperty -Path "HKLM:\System\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" `
-Name "UserAuthentication" -Value 1
Paso 3: Cambiar el puerto del RDP (ofuscación complementaria)
Cambiar el puerto no es seguridad de verdad, pero reduce el volumen de ruido de los escáneres. Hazlo junto con la restricción por IP, nunca en su lugar:
# Cambiar el puerto del RDP a un puerto alto (ejemplo: 33890)
Set-ItemProperty -Path "HKLM:\System\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" `
-Name "PortNumber" -Value 33890
# Abrir el nuevo puerto solo para tu IP y reiniciar el servicio después
New-NetFirewallRule -DisplayName "RDP-Alt-Admin" -Direction Inbound `
-Protocol TCP -LocalPort 33890 -RemoteAddress "203.0.113.10" -Action Allow
Parte 2 — Endurecer cuentas y contraseñas
Paso 4: Renombrar y desactivar cuentas previsibles
El nombre Administrator es el primer objetivo de cualquier ataque. Renómbralo y crea un administrador nombrado:
# Renombrar la cuenta Administrator integrada
Rename-LocalUser -Name "Administrator" -NewName "adm_mu_root"
# Desactivar la cuenta Guest, si está activa
Disable-LocalUser -Name "Guest"
Paso 5: Aplicar política de contraseña fuerte y bloqueo de cuenta
Define exigencias mínimas y bloqueo tras intentos fallidos para frenar la fuerza bruta:
# Tamaño mínimo, complejidad e historial vía net accounts
net accounts /minpwlen:14 /maxpwage:90 /uniquepw:5
# Bloqueo tras 5 intentos, por 30 minutos
net accounts /lockoutthreshold:5 /lockoutduration:30 /lockoutwindow:30
Habilita la complejidad en secpol.msc → Políticas de Cuenta → Política de Contraseñas → "La contraseña debe cumplir los requisitos de complejidad" = Habilitada.
Paso 6: Principio de mínimo privilegio
No ejecutes tareas del día a día como administrador. Crea una cuenta separada para operaciones rutinarias (reiniciar servicios, leer logs) sin poderes administrativos totales, y reserva la cuenta admin para cambios estructurales.
Parte 3 — Minimizar la superficie de puertos
Paso 7: Auditar lo que está expuesto
Antes de cerrar puertos, mira qué está realmente escuchando y en qué interfaces:
# Listar puertos en escucha y el proceso dueño de cada uno
Get-NetTCPConnection -State Listen |
Select-Object LocalAddress, LocalPort, OwningProcess |
Sort-Object LocalPort
Cruza cada puerto con el proceso esperado. Cualquier puerto escuchando en 0.0.0.0 que no sea del MU (44405, rango del GameServer, panel web) o del RDP restringido es candidato a ser cerrado.
Paso 8: Mantener abierto solo lo esencial
La tabla siguiente es un ejemplo de superficie mínima para un servidor de MU típico. Los puertos exactos varían según el paquete.
| Puerto | Servicio | Exposición recomendada |
|---|---|---|
| 33890 (RDP alt.) | Acceso remoto | Solo IP administrativa |
| 44405 | ConnectServer | Pública |
| 55901-55910 | GameServer | Pública |
| 55960 | DataServer | Pública (o local, si es posible) |
| 80 / 443 | Panel web | Pública |
| 1433 | SQL Server | Nunca pública — solo local |
# Garantizar que el SQL nunca acepte conexiones externas: bloquear el 1433 desde fuera
New-NetFirewallRule -DisplayName "SQL-Block-External" -Direction Inbound `
-Protocol TCP -LocalPort 1433 -RemoteAddress Any -Action Block
Recuerda replicar la política de mínimo en el firewall del proveedor, en el panel de la VPS.
Parte 4 — Proteger el SQL Server
El SQL guarda cuentas, objetos y la economía del servidor — comprometerlo es comprometerlo todo.
Paso 9: Desactivar o renombrar el login sa
El sa es el objetivo por defecto de los ataques al SQL. Si el servidor usa un login dedicado (como se recomienda), desactiva el sa:
-- Desactivar el login sa (usa un login dedicado en el MuServer)
ALTER LOGIN sa DISABLE;
GO
-- Si necesitas mantenerlo, al menos renómbralo
ALTER LOGIN sa WITH NAME = [adm_sql_bkp];
GO
Paso 10: Reforzar autenticación y permisos
Asegúrate de que el login del MuServer tenga solo los permisos necesarios y que las contraseñas sigan la política:
-- Forzar la política de contraseña en el login del servidor
ALTER LOGIN muserver_user WITH CHECK_POLICY = ON;
GO
-- Revisar quién tiene roles de servidor peligrosos (sysadmin)
SELECT p.name, p.type_desc, r.name AS role_name
FROM sys.server_role_members m
JOIN sys.server_principals p ON m.member_principal_id = p.principal_id
JOIN sys.server_principals r ON m.role_principal_id = r.principal_id
WHERE r.name = 'sysadmin';
GO
Paso 11: Confiar solo en conexiones locales
Si el GameServer y el SQL están en la misma máquina, fuerza al SQL a escuchar solo en 127.0.0.1 en el SQL Server Configuration Manager, o mantén el bloqueo externo del 1433 del paso 8. Así, aunque la contraseña se filtre, no hay forma de conectar desde fuera.
Parte 5 — Actualizaciones, logs y monitoreo
Paso 12: Mantener el sistema actualizado sin caídas
Las fallas de seguridad conocidas se explotan en masa. Aplica actualizaciones, pero controla el reinicio para no tumbar a los jugadores:
# Verificar updates pendientes (requiere el módulo PSWindowsUpdate)
# Aplica en ventana de mantenimiento anunciada a los jugadores
Get-HotFix | Sort-Object InstalledOn -Descending | Select-Object -First 10
Configura Windows Update para descargar y notificar, reiniciando manualmente en horario de bajo movimiento.
Paso 13: Activar auditoría de inicio de sesión
Habilita el registro de intentos de inicio de sesión para ver los ataques:
# Auditar éxito y fallo de inicio de sesión
auditpol /set /category:"Logon/Logoff" /success:enable /failure:enable
Paso 14: Revisar los logs de seguridad periódicamente
Monitorea los picos de fallo de inicio de sesión (evento 4625), que indican fuerza bruta:
# Contar fallos de inicio de sesión recientes (evento 4625)
Get-WinEvent -FilterHashtable @{LogName='Security'; Id=4625; StartTime=(Get-Date).AddHours(-24)} `
-ErrorAction SilentlyContinue | Measure-Object | Select-Object Count
Un volumen anormal desde una misma IP es señal de ataque; combina la restricción de firewall con el bloqueo de esa dirección. Considera también scripts que baneen automáticamente las IP con muchos fallos.
Paso 15: Backup regular y probado
La seguridad incluye la recuperación. Mantén backups automáticos de la base en un lugar separado de la VPS (almacenamiento externo o nube), y prueba la restauración periódicamente — un backup que nunca se restauró no es backup, es esperanza.
Errores comunes y soluciones
| Error | Riesgo | Solución |
|---|---|---|
| Cerrar el RDP sin acceso alternativo | Pérdida total de acceso | Asegurar consola del proveedor y snapshot antes |
| Solo cambiar el puerto del RDP | Falsa sensación de seguridad | Restringir por IP + NLA + contraseña fuerte |
Dejar sa activo con contraseña débil | SQL comprometido | Desactivar/renombrar sa, usar login dedicado |
| Exponer el 1433 a internet | Filtración de la base | Bloquear el 1433 externamente, escuchar en local |
| Apagar el antivirus | Mineros y backdoors | Mantener Defender con exclusiones puntuales |
| No actualizar Windows | Explotación de fallas conocidas | Actualizar mensualmente en ventana de mantenimiento |
| Ignorar los logs de inicio de sesión | Los ataques pasan desapercibidos | Activar auditoría y revisar el evento 4625 |
| Backup solo en la propia VPS | Pérdida total en un incidente | Backup externo y restauración probada |
Lista de verificación de lanzamiento
- Snapshot y acceso a la consola del proveedor asegurados
- RDP restringido a la IP administrativa
- NLA activado en el RDP
- Puerto del RDP cambiado (complemento) y probado
- Cuenta Administrator renombrada y Guest desactivada
- Política de contraseña fuerte y bloqueo de cuenta aplicados
- Cuenta de operación sin privilegios totales creada
- Puertos en escucha auditados
- Superficie de puertos reducida al mínimo (Windows y proveedor)
- Puerto 1433 bloqueado externamente
- Login
sadesactivado o renombrado - Permisos del SQL revisados
- Windows Update en modo descargar y notificar
- Auditoría de inicio de sesión activada
- Rutina de revisión de logs definida
- Backup externo automático y restauración probada
Conclusión
El hardening no es una tarea que se hace una vez y se olvida — es la disciplina de mantener la superficie de ataque pequeña mientras el servidor crece. Al restringir el RDP a tu IP, endurecer cuentas y contraseñas, cerrar todo puerto que no sea esencial, blindar el SQL Server y mantener los ojos en los logs, sacas tu MU Online de la lista de blancos fáciles que escáneres y rivales explotan a diario. Aplica cada etapa con cuidado, siempre con una vía de recuperación abierta, haz un snapshot antes de tocar el firewall y trata las actualizaciones, la revisión de logs y los backups como una rutina continua. Un servidor seguro es aquel que sigue en pie el día que llega el ataque — y siempre llega.
Preguntas frecuentes
¿Debo cambiar el puerto por defecto del RDP?
Cambiar el 3389 a un puerto alto reduce el ruido de los escáneres automatizados, pero es solo ofuscación, no seguridad real. Lo que realmente protege es restringir el RDP por IP en el firewall, exigir contraseña fuerte, activar el Network Level Authentication y, idealmente, poner el acceso detrás de una VPN. El puerto personalizado es un complemento, no la defensa principal.
¿Necesito antivirus si ya hice el hardening?
Sí. El hardening reduce la superficie de ataque, pero no sustituye la detección de malware. Mantén Windows Defender activo con exclusiones solo para las carpetas del MuServer. Apagar el antivirus para 'evitar falsos positivos' es un error común que abre la puerta a mineros y backdoors en VPS públicas.
¿Cómo bloqueo ataques de fuerza bruta en el RDP y en el SQL?
Restringe ambos por IP en el firewall para que solo tu red administrativa alcance esos puertos. Para el RDP, activa el bloqueo de cuenta tras intentos fallidos mediante política de contraseña. Para el SQL, nunca expongas el 1433 a internet y desactiva el login sa o renómbralo. Monitorea el Event Viewer en busca de picos de inicio de sesión denegado.
¿El hardening puede tumbar mi servidor por error?
Puede, si aplicas todo de una vez sin probar. El riesgo mayor es cerrar el puerto del RDP y perder el acceso. Asegura siempre el acceso vía consola del proveedor antes de tocar el firewall, aplica los cambios por etapas y valida la conexión en cada paso. Haz un snapshot antes de empezar.
¿Con qué frecuencia debo revisar la seguridad del servidor?
Aplica actualizaciones de seguridad mensualmente, revisa las reglas de firewall y las cuentas en cada cambio de equipo y lee los logs de inicio de sesión semanalmente. Tras cualquier incidente o pico anormal de intentos de acceso, haz una revisión completa. La seguridad es mantenimiento continuo, no una tarea única de lanzamiento.