Como proteger seu servidor de MU Online contra hacks, invasões e DDoS
Proteja seu servidor em todas as camadas: anti-hack no cliente, SQL blindado, firewall configurado, painel web seguro e resposta a DDoS.
A segurança de um servidor de MU Online não é uma única ferramenta — é um conjunto de camadas de proteção, cada uma cobrindo um vetor de ataque diferente. Falhar em qualquer uma pode comprometer tudo que você construiu. Este tutorial cobre cada camada com ações concretas.
A segurança de um servidor de MU Online não é uma única ferramenta — é um conjunto de camadas de proteção, cada uma cobrindo um vetor de ataque diferente. Falhar em qualquer uma pode comprometer tudo que você construiu. Este tutorial cobre cada camada com ações concretas.
Os vetores de ataque mais comuns
| Vetor | Como acontece | Impacto |
|---|---|---|
| Speed hack / bot | Programa no cliente que burla limitações de velocidade/movimento | Vantagem injusta, desequilíbrio |
| Dupe de itens | Exploit de race condition no inventário | Inflação, destruição da economia |
| Invasão SQL | Porta 1433 exposta ou senha fraca | Roubo ou destruição de todos os dados |
| SQL injection no site | Formulários do site sem validação | Acesso a contas, dados de jogadores |
| DDoS | Volume massivo de pacotes para derrubar o servidor | Indisponibilidade total |
| Acesso não autorizado ao FTP/painel | Senha fraca no painel de hospedagem | Alteração de arquivos, backdoor |
Camada 1 — Proteção do cliente (anti-hack)
O anti-hack monitora o processo do cliente no PC do jogador e bloqueia ferramentas conhecidas de trapaça.
Como funciona
O anti-hack roda como módulo integrado ao cliente (ou como processo separado que o cliente exige). Ele:
- Detecta processos injetados no cliente (cheats, memory editors);
- Valida a integridade dos arquivos do cliente (evita modificação de speed hack);
- Reporta ao servidor quando detecta anomalia.
Configuração no GameServer.ini
[ANTIHACK]
Enable = 1 ; 1 = anti-hack ativo
SpeedHackCheck = 1 ; checagem de velocidade de movimento
AttackSpeedCheck = 1 ; checagem de velocidade de ataque
DupeProtection = 1 ; proteção contra duplicação de itens
KickOnDetect = 1 ; 1 = kicka jogador ao detectar hack
BanOnRepeat = 3 ; bane após N detecções na mesma sessão
AntiHackLogPath = ./Log/AntiHack/
Limites do cliente anti-hack
O que o servidor deve validar independentemente:
- Velocidade de movimento (server-side position check);
- Taxa de ataque (comparar com o máximo possível da classe/equipamento);
- Integridade de inventário (checar duplicatas no banco após transações).
Log de detecções
O GameServer gera logs de detecções. Monitore regularmente:
Log/AntiHack/AntiHack_20260701.txt:
[08:32:15] DETECT - Account: player123 - Char: Warrior - SpeedHack: movement 450% over limit
[09:15:44] DETECT - Account: hacker99 - Char: DarkKnight - AttackSpeed: 1200% over limit - BANNED
Camada 2 — Segurança do SQL Server
O banco é o alvo mais valioso de um invasor — se ele entrar, pode roubar todas as contas, itens e destruir tudo.
Regras básicas inegociáveis
1. Senha forte no sa:
Ruim: sa / admin / 123456 / muonline
Bom: Mu$erv3r_2026!Pr0t3g1d0
2. Usuário dedicado com permissão mínima:
-- O MuServer não precisa de sysadmin — só db_owner no banco MuOnline
CREATE LOGIN mu_app WITH PASSWORD = 'S3nhaF0rt3App!', CHECK_POLICY = OFF;
USE MuOnline;
CREATE USER mu_app FOR LOGIN mu_app;
EXEC sp_addrolemember 'db_owner', 'mu_app';
-- NÃO faça isso (permissão excessiva):
-- EXEC sp_addsrvrolemember 'mu_app', 'sysadmin';
3. NUNCA exponha a porta 1433 na internet:
# Bloquear acesso externo à porta 1433 via firewall do Windows
netsh advfirewall firewall add rule name="Block SQL External" `
dir=in action=block protocol=TCP localport=1433 `
remoteip=0.0.0.0/0
# O MuServer se conecta localmente (127.0.0.1) — não precisa de acesso externo ao SQL
4. Não salve credenciais do banco em arquivos acessíveis pela web:
// NUNCA coloque credenciais diretamente num arquivo .php na pasta web
// Errado: arquivo /var/www/html/config.php acessível em http://site.com/config.php
$db_pass = "SenhaDoSQL"; // qualquer um que acessar config.php vê a senha
// Correto: arquivo fora da pasta web ou com acesso bloqueado pelo .htaccess
Desabilitar o login sa para acesso externo
-- Desabilitar o 'sa' de ser usado pelo MuServer (use o mu_app em vez disso)
-- O 'sa' fica disponível apenas para administração via SSMS local
ALTER LOGIN sa DISABLE;
-- Para reativar quando precisar de manutenção:
-- ALTER LOGIN sa ENABLE;
Auditoria de acessos suspeitos
-- Ver logins recentes (SQL Server 2008+)
SELECT login_name, login_time, host_name, program_name
FROM sys.dm_exec_sessions
WHERE login_time > DATEADD(day, -1, GETDATE())
ORDER BY login_time DESC;
Camada 3 — Firewall e portas de rede
O firewall do Windows é sua primeira linha de defesa para conexões externas.
Portas que DEVEM estar abertas (para jogadores)
TCP 44405 — ConnectServer (os jogadores conectam aqui)
TCP 55901 — GameServer (jogo em si)
TCP 80 — Site HTTP (se tiver site)
TCP 443 — Site HTTPS (recomendado)
Portas que NUNCA devem estar abertas para a internet
TCP 1433 — SQL Server (apenas local!)
TCP 3389 — RDP (Remote Desktop) — MUITO perigoso aberto
TCP 21 — FTP não criptografado
TCP 55555 — JoinServer (interno)
TCP 55557 — DataServer (interno)
Criar regras de firewall via PowerShell
# Executar como Administrador
# Abrir portas necessárias para o jogo
netsh advfirewall firewall add rule name="MU ConnectServer" dir=in action=allow protocol=TCP localport=44405
netsh advfirewall firewall add rule name="MU GameServer" dir=in action=allow protocol=TCP localport=55901
# Bloquear acesso externo ao SQL
netsh advfirewall firewall add rule name="BLOCK SQL External" dir=in action=block protocol=TCP localport=1433
# Bloquear RDP de IPs desconhecidos (se não usar RDP, bloqueie totalmente)
netsh advfirewall firewall add rule name="BLOCK RDP" dir=in action=block protocol=TCP localport=3389
Limitação de conexões por IP (Rate Limiting)
Para reduzir o impacto de flood de conexões:
# Limitar o número de conexões TCP por IP (no Windows Firewall via netsh)
# Esta técnica requer configuração mais avançada de QoS ou um firewall dedicado
# Para servidores maiores, considere usar um proxy reverso ou hardware firewall
Camada 4 — Proteção contra DDoS
Um ataque DDoS (Distributed Denial of Service) envia volumes massivos de tráfego para derrubar seu servidor. É o ataque mais comum contra servidores de jogos privados.
O que você pode fazer localmente (efeito limitado)
No roteador: habilite SYN flood protection (se disponível):
- Geralmente em Firewall → DoS Protection ou Security no painel do roteador;
- Habilite opções como "SYN Flood", "UDP Flood", "ICMP Flood" protection.
No Windows: limitar conexões de um único IP:
# Adicionar rate limiting básico (Windows Firewall avançado)
# Isso ajuda contra scripts simples mas não contra DDoS distribuído real
netsh ipsec static add filteraction name="RateLimit" action=block
Bloquear um IP específico em ataque:
netsh advfirewall firewall add rule name="BLOCK ATTACKER" dir=in action=block remoteip=1.2.3.4
O que realmente resolve: proteção no nível do provedor
Como agir durante um ataque DDoS
1. Não entre em pânico — DDoS geralmente é temporário
2. Identifique o IP ou range atacante (monitor de rede / Wireshark)
3. Bloqueie os IPs no firewall se for um range pequeno
4. Contate o suporte do provedor e informe o ataque
5. Se tiver proteção anti-DDoS, o provedor vai mitigar automaticamente
6. Se não tiver proteção, solicite troca de IP ao provedor
Camada 5 — Segurança do site e painel web
O site do servidor (registro, ranking) é frequentemente o ponto mais vulnerável.
SQL Injection — a vulnerabilidade mais comum
Se o site faz queries SQL sem sanitizar a entrada do usuário, um atacante pode manipular o banco:
// VULNERÁVEL — nunca faça assim
$login = $_POST['login'];
$senha = $_POST['senha'];
$query = "SELECT * FROM MEMB_INFO WHERE memb___id = '$login' AND memb__passwd = '$senha'";
// Se o usuário digitar: ' OR '1'='1 -- isso burla a autenticação
// CORRETO — usar prepared statements
$stmt = $pdo->prepare("SELECT * FROM MEMB_INFO WHERE memb___id = ? AND memb__passwd = ?");
$stmt->execute([$login, $senha]);
Outras proteções no site
// Validar e sanitizar todas as entradas
$login = filter_input(INPUT_POST, 'login', FILTER_SANITIZE_STRING);
$login = htmlspecialchars($login); // prevenir XSS
// Limitar tamanho das entradas
if (strlen($login) > 10 || strlen($senha) > 20) {
die("Dados inválidos");
}
// Rate limiting no login (evitar brute force)
// Guardar tentativas falhas por IP no banco ou em arquivo
Proteger o phpMyAdmin e painéis de admin
# No .htaccess — restringir acesso ao painel de admin por IP
<Files "admin/*">
Order Deny,Allow
Deny from All
Allow from 200.100.50.10 # seu IP fixo
</Files>
Camada 6 — Proteção dos arquivos do servidor
Permissões de arquivo (VPS/Linux)
Se o servidor roda em Linux:
# Arquivos de configuração com credenciais só o dono lê
chmod 600 /opt/muserver/DataServer/DataServer.ini
chmod 600 /opt/muserver/GameServer/GameServer.ini
# Pasta de logs — leitura/escrita apenas pelo processo do servidor
chmod 750 /opt/muserver/Log/
Monitorar alterações inesperadas nos arquivos
# No Windows, criar uma tarefa agendada que verifica a integridade dos arquivos
# Compara hash dos arquivos executáveis periodicamente
Get-FileHash "C:\MuServer\GameServer\GameServer.exe" -Algorithm SHA256
# Guarde o hash inicial e compare periodicamente — mudança inesperada = alerta
Checklist completo de segurança
SQL Server
- Senha forte no
sa(12+ caracteres, letras/números/símbolos) - Usuário
mu_appcom apenas db_owner no banco MuOnline - TCP 1433 bloqueado no firewall para IPs externos
- SQL Server Browser desabilitado se usar instância default
- Backup diário automatizado e testado
Servidor de jogo
- Anti-hack habilitado no GameServer.ini
- Speed check ativado
- Dupe protection ativada
- Log de detecções monitorado regularmente
- Portas internas (JoinServer, DataServer) não expostas externamente
Rede
- Firewall liberando apenas 44405 e 55901 (+ 80/443 para site)
- RDP bloqueado ou restrito por IP
- DDoS protection contratada no provedor (se o servidor for público)
Site
- Prepared statements em todas as queries
- Entradas sanitizadas (htmlspecialchars, filter_input)
- Painel de admin restrito por IP
- HTTPS habilitado (SSL/TLS)
- phpMyAdmin não acessível publicamente
- Senhas do site em hash (nunca salvar em texto puro)
Geral
- Backup offsite (outro servidor ou nuvem)
- Log de acessos revisado semanalmente
- Sistema operacional atualizado
- Credenciais diferentes para cada serviço
Perguntas frequentes
Anti-hack resolve tudo?
Não. Anti-hack protege o cliente contra trapaças, mas você ainda precisa proteger o servidor (SQL, firewall, painel web). Segurança é feita em camadas — uma não substitui as outras.
Como evitar invasão pelo SQL?
Senha forte no 'sa', usuário dedicado com permissão mínima, porta 1433 fechada para a internet e nenhuma senha salva em arquivo web acessível publicamente.
O que é um DDoS e como me protejo?
DDoS é um ataque que tenta derrubar seu servidor com volume massivo de pacotes falsos. Proteção eficaz exige DDoS protection do seu provedor de hospedagem/VPS — ferramentas locais têm efeito limitado.
Como detectar se alguém está usando speed hack?
Habilite a checagem de velocidade no GameServer.ini e monitore os logs. Jogadores com velocidade fora do padrão aparecem nos logs como 'speed hack detected'.