El mayor portal de MU Online de Brasil — desde 2003
Tutorial Intermedio Tutoriais

Cómo Configurar Anti-Bot en el Servidor de MU Online

Aprende a configurar protección anti-bot en tu servidor MU Online con ajustes en GameServer.ini, consultas SQL de detección y baneo automatizado via SQL Server Agent.

EQ Equipo ViciadosMU · Actualizado el 3 jul 2026 · ⏱ 12 min de lectura

Por Qué la Protección Anti-Bot es Esencial en MU Online

Los bots y trainers son una de las mayores amenazas a la economía y la experiencia de juego en servidores privados de MU Online. Acumulan Zen, ítems raros y experiencia de forma automatizada, desequilibrando completamente el servidor en cuestión de horas. Los servidores sin protección activa suelen ser invadidos masivamente en menos de 72 horas tras su apertura. Esta guía cubre la configuración completa del sistema anti-bot disponible en MuServer Season 6 — desde ajustes en archivos .ini hasta stored procedures SQL programadas automáticamente.


Requisitos Previos

  • Acceso al directorio de instalación del servidor (ej: C:\MuServer\)
  • SQL Server Management Studio (SSMS) conectado a la base de datos MuOnline
  • Agente SQL Server habilitado (para automatización de jobs)
  • Acceso de administrador al GameServer y ConnectServer
  • Copia de seguridad completa realizada antes de cualquier cambio
Atenção: Realiza siempre un backup completo de los archivos de configuración y la base de datos antes de modificar cualquier parámetro de seguridad. Una configuración incorrecta en el anti-bot puede causar desconexiones masivas o bloquear inicios de sesión de jugadores legítimos.

Parte 1 — Configuración del GameServer

Paso 1: Habilitar Filtros de Paquetes en GameServer.exe.cfg

Localiza el archivo de configuración principal del GameServer:

C:\MuServer\GameServer\GameServer.exe.cfg

Agrega o edita los siguientes parámetros en la sección [AntiBot] (si la sección no existe, créala al final del archivo):

[AntiBot]
AntiBotEnable        = 1
AntiBotCheckTime     = 60        ; Intervalo de verificación en segundos
AntiBotMaxRepeat     = 3         ; Máximo de acciones idénticas consecutivas
AntiBotKickEnable    = 1         ; Expulsar al detectar comportamiento de bot
AntiBotBanEnable     = 0         ; Baneo automático (activar con precaución)
AntiBotLogEnable     = 1         ; Registrar sospechosos en archivo de log
AntiBotLogPath       = Logs\AntiBot\
Atenção: Mantén AntiBotBanEnable = 0 las primeras 48 horas. Ejecuta el sistema en modo de registro para calibrar los umbrales antes de activar baneos automáticos. La activación prematura puede banear jugadores legítimos y generar reclamaciones.

Paso 2: Configurar AntiBot.ini (Season 6+)

En servidores Season 6 Episode 1 en adelante, existe un archivo de configuración dedicado para el anti-bot:

C:\MuServer\GameServer\Data\AntiBot.ini

Configuración recomendada para Season 6:

[Config]
Enable              = 1
QuestionEnable      = 1           ; Activa preguntas CAPTCHA en el chat del juego
QuestionInterval    = 1800        ; Pregunta cada 30 minutos (en segundos)
QuestionTimeout     = 120         ; Tiempo para responder antes de expulsión (segundos)
QuestionPunishment  = 1           ; 0=Expulsión, 1=Baneo temporal, 2=Baneo permanente
WrongAnswerLimit    = 3           ; Intentos incorrectos antes del castigo
MoveDetect          = 1           ; Detecta movimiento en patrones de ruta repetidos
MoveDetectRange     = 5           ; Variación mínima de posición esperada (celdas)
MoveDetectTime      = 300         ; Ventana de tiempo para análisis de movimiento (segundos)
KillSpeedMax        = 800         ; Kills por hora máximas antes de generar alerta

Paso 3: Definir las Preguntas CAPTCHA

El archivo de preguntas se encuentra en:

C:\MuServer\GameServer\Data\AntiBotQuestion.txt

Formato de cada línea: Pregunta,Respuesta_Correcta

De que color es el cielo durante el dia?,azul
Cuantas patas tiene un perro?,4
Que mes sigue a marzo?,abril
Cuanto es 7 mas 8?,15
Cual es la capital de Argentina?,Buenos Aires
Cuantos dias tiene una semana?,7
Cual es el oceano mas grande?,pacifico
Dica: Usa preguntas simples y directas adaptadas a tu comunidad. Configura el servidor para procesar respuestas como insensibles a mayúsculas/minúsculas para evitar fallos por diferencias de capitalización. Evita caracteres especiales como tildes en las respuestas esperadas.

Parte 2 — Detección vía SQL Server

Paso 4: Crear la Tabla de Registro de Sospechosos

Ejecuta lo siguiente en SSMS conectado a la base de datos MuOnline:

USE MuOnline;
GO

CREATE TABLE dbo.AntiBot_SuspectLog (
    LogID            INT IDENTITY(1,1) PRIMARY KEY,
    AccountID        VARCHAR(10)    NOT NULL,
    CharacterName    VARCHAR(10)    NOT NULL,
    SuspectReason    VARCHAR(200)   NOT NULL,
    KillsPerHour     INT            NULL,
    OnlineHours      DECIMAL(5,2)   NULL,
    PositionVariance INT            NULL,
    DetectedAt       DATETIME       DEFAULT GETDATE(),
    ReviewStatus     TINYINT        DEFAULT 0
    -- 0 = Pendiente, 1 = Bot Confirmado, 2 = Falso Positivo
);
GO

Paso 5: Crear el Procedimiento Almacenado de Detección

USE MuOnline;
GO

CREATE PROCEDURE dbo.SP_AntiBot_DetectSuspects
AS
BEGIN
    SET NOCOUNT ON;

    -- Detectar personajes con kills por hora por encima del umbral humano
    INSERT INTO dbo.AntiBot_SuspectLog
        (AccountID, CharacterName, SuspectReason, KillsPerHour, OnlineHours)
    SELECT
        a.memb___id,
        c.Name,
        'KillsPerHour superior a 1000 - posible bot de grinding',
        c.PkCount,
        DATEDIFF(MINUTE, s.ConnectTM, GETDATE()) / 60.0
    FROM
        Character c
        INNER JOIN MEMB_STAT s ON c.AccountID = s.memb___id
        INNER JOIN MEMB_INFO a ON c.AccountID = a.memb___id
    WHERE
        -- Kills por hora calculados desde el inicio de sesión
        (c.PkCount / NULLIF(DATEDIFF(HOUR, s.ConnectTM, GETDATE()), 0)) > 1000
        AND DATEDIFF(HOUR, s.ConnectTM, GETDATE()) >= 2
        AND c.AccountID NOT IN (
            SELECT AccountID FROM AntiBot_SuspectLog
            WHERE CAST(DetectedAt AS DATE) = CAST(GETDATE() AS DATE)
              AND ReviewStatus = 2  -- No reinsertar falsos positivos confirmados
        );

    -- Detectar cuentas en línea más de 22 horas consecutivas
    INSERT INTO dbo.AntiBot_SuspectLog
        (AccountID, CharacterName, SuspectReason, OnlineHours)
    SELECT
        s.memb___id,
        c.Name,
        'Sesion continua superior a 22 horas - posible bot 24/7',
        DATEDIFF(MINUTE, s.ConnectTM, GETDATE()) / 60.0
    FROM
        MEMB_STAT s
        INNER JOIN Character c ON s.memb___id = c.AccountID
    WHERE
        s.ConnStatus = 1
        AND DATEDIFF(HOUR, s.ConnectTM, GETDATE()) > 22
        AND s.memb___id NOT IN (
            SELECT AccountID FROM AntiBot_SuspectLog
            WHERE SuspectReason LIKE '%22 horas%'
              AND CAST(DetectedAt AS DATE) = CAST(GETDATE() AS DATE)
        );

    PRINT 'Escaneo AntiBot completado: ' + CAST(GETDATE() AS VARCHAR);
END;
GO

Paso 6: Programar el Procedimiento en el Agente SQL Server

  1. Abre SSMS → expande Agente SQL Server → clic derecho en TrabajosNuevo trabajo
  2. Nombre: AntiBot_Escaneo_Automatico
  3. En la pestaña PasosNuevo paso:
  • Nombre del paso: Ejecutar Deteccion
  • Tipo: Script Transact-SQL (T-SQL)
  • Base de datos: MuOnline
  • Comando: EXEC dbo.SP_AntiBot_DetectSuspects;
  1. En la pestaña ProgramacionesNueva programación:
  • Nombre: Cada_30_minutos
  • Frecuencia: Diaria
  • Subfrecuencia: Cada 30 minutos
  • Hora de inicio: 00:00:00, Hora de fin: 23:59:59
Nota: El Agente SQL Server debe estar corriendo como servicio de Windows. Verifica en Servicios de Windows (services.msc) que Agente SQL Server (MSSQLSERVER) tenga el estado En ejecución antes de probar el trabajo.

Parte 3 — Configuración del ConnectServer

Paso 7: Limitar Conexiones por IP en ConnectServer

Edita el archivo C:\MuServer\ConnectServer\ConnectServer.ini:

[ServerInfo]
MaxConnectionPerIP      = 3      ; Máximo de cuentas simultáneas por IP
ConnectionFloodLimit    = 10     ; Intentos de conexión por segundo antes de bloquear
ConnectionFloodBanTime  = 300    ; Duración del bloqueo en segundos (5 minutos)
PacketFloodProtection   = 1      ; Habilitar protección contra flood de paquetes
MaxPacketsPerSecond     = 50     ; Paquetes por segundo máximos por conexión
Dica: El valor MaxConnectionPerIP=3 permite que jugadores en NAT compartida (familia, café internet) aún puedan acceder al servidor. Reduce a 2 solo si se detecta abuso significativo — valores más bajos aumentan las reclamaciones de jugadores legítimos en conexiones compartidas.

Paso 8: Bloquear IPs de Datacenters Conocidos (Granjas de Bots)

Crea o edita C:\MuServer\ConnectServer\IPBanList.txt. Agrega rangos de IP de proveedores de VPS frecuentemente usados por granjas de bots:

# Formato: IP_INICIO IP_FIN
# Ejemplos de rangos de datacenters comunes
185.220.0.0 185.220.255.255
198.96.0.0  198.96.255.255
Dica: Consulta los ASNs asociados a datacenters de hosting en ipinfo.io y abuseipdb.com. Enfócate en bloquear rangos de IP de regiones donde tu base de jugadores no se encuentra.

Parte 4 — Monitoreo y Respuesta

Paso 9: Consulta de Revisión Diaria

Ejecuta esta consulta cada mañana en SSMS para revisar la cola de sospechosos:

USE MuOnline;
GO

SELECT
    LogID,
    AccountID,
    CharacterName,
    SuspectReason,
    KillsPerHour,
    OnlineHours,
    DetectedAt,
    CASE ReviewStatus
        WHEN 0 THEN 'Pendiente'
        WHEN 1 THEN 'Bot Confirmado'
        WHEN 2 THEN 'Falso Positivo'
    END AS Estado
FROM dbo.AntiBot_SuspectLog
WHERE ReviewStatus = 0
ORDER BY DetectedAt DESC;

Paso 10: Banear una Cuenta Confirmada como Bot

Tras la revisión y confirmación manual, ejecuta:

USE MuOnline;
GO

-- Reemplaza 'CuentaSospechosa' con el AccountID real
UPDATE MEMB_INFO
SET bloc_code = 1
WHERE memb___id = 'CuentaSospechosa';

-- Registrar el baneo en el log de auditoría
UPDATE dbo.AntiBot_SuspectLog
SET ReviewStatus = 1
WHERE AccountID = 'CuentaSospechosa'
  AND ReviewStatus = 0;

-- Opcional: desconectar inmediatamente si sigue en línea
UPDATE MEMB_STAT
SET ConnStatus = 0
WHERE memb___id = 'CuentaSospechosa';
Atenção: Guarda siempre evidencia antes de banear: captura una pantalla de los resultados de la consulta de detección con los datos del sospechoso. En caso de disputa por parte del jugador, tendrás prueba concreta del comportamiento automatizado.

Solución de Problemas

El GameServer ignora la configuración de AntiBot.ini Verifica que el archivo esté en el directorio correcto (GameServer\Data\) y que AntiBotEnable = 1 exista en GameServer.exe.cfg. Algunas compilaciones del GameServer requieren reinicio completo en lugar de recarga de configuración.

SP_AntiBot_DetectSuspects no inserta registros Confirma que las tablas MEMB_STAT y Character existen en la base de datos MuOnline y que la columna ConnStatus usa el valor 1 para en línea. Esto puede variar según la versión del servidor — verifica con: SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'MEMB_STAT'.

Se generan demasiados falsos positivos Eleva el umbral de KillsPerHour a 1200 o 1500 y aumenta las horas mínimas en línea para detección de sesión larga a 24 horas. Calibra en base al comportamiento real de tus mejores jugadores — consulta el ranking de kills del servidor como referencia.

El Agente SQL Server no ejecuta el trabajo Revisa el historial del trabajo en SSMS (Agente SQL Server → Trabajos → clic derecho en el trabajo → Ver historial). Causas comunes: permisos insuficientes en la cuenta de servicio del Agente SQL, o la base de datos MuOnline fuera de línea en el momento de la ejecución programada.

El bloqueo por bloc_code no impide el inicio de sesión Verifica que el nombre exacto de la columna en tu schema sea bloc_code. Algunas compilaciones usan block_code o IsBlock. Confirma con: SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'MEMB_INFO' AND COLUMN_NAME LIKE '%block%'.

Perguntas frequentes

¿El anti-bot nativo de MuServer es suficiente para proteger el servidor?

El anti-bot nativo ofrece una capa básica de protección, pero por sí solo no es suficiente. Se recomienda combinar la configuración del GameServer con verificaciones SQL periódicas, restricción de puertos en el firewall y, si es posible, una verificación de integridad del cliente (checksums) para una defensa en capas más robusta.

¿Cómo identificar si un personaje está usando bot desde la base de datos?

Consulta la tabla MEMB_STAT comparando LastLoginDate y LastLogoutDate con patrones de XP excesivo en ventanas de tiempo fijas. Monitorea también la tabla Character verificando PkCount acumulado por hora — los bots de grinding superan consistentemente 1000 kills por hora durante varias horas seguidas, algo imposible para un jugador humano.

¿Cuál es el valor recomendado para QuestionInterval en AntiBot.ini?

Para Season 6, el valor recomendado es 1800 segundos (30 minutos). Intervalos por debajo de 900 segundos irritan a jugadores legítimos en grinding normal. Valores superiores a 7200 segundos (2 horas) permiten que los bots operen durante períodos excesivamente largos entre verificaciones.

¿Qué hacer cuando el anti-bot causa desconexiones a jugadores legítimos?

Aumenta AntiBotCheckTime a 1000ms y revisa el umbral de MaxPacketsPerSec — valores por debajo de 150 causan kicks durante el uso de habilidades con múltiples proyectiles (BK Combo, Elf multi-shot). Verifica también que el Main.exe del cliente sea la versión correcta para tu servidor, ya que versiones desactualizadas disparan falsos positivos en el filtro de paquetes.

EQ

Equipo ViciadosMU

Equipe editorial do ViciadosMU — portal de MU Online no ar desde 2003.

Sigue leyendo

Artículos relacionados