Como Configurar Proxy Reverso para Proteger IP do Servidor MU
Aprenda a configurar um proxy reverso TCP com HAProxy para ocultar o IP real do seu servidor MU Online e resistir a ataques DDoS com dois VPS.
Expor o IP real do seu servidor MU Online é um convite a ataques DDoS. Um único atacante com acesso a ferramentas comuns pode derrubar um VPS sem proteção em minutos. A solução é interpor um proxy reverso TCP em um segundo servidor, de modo que jogadores e atacantes jamais vejam o IP onde o MuServer realmente roda.
Este guia cobre a configuração completa com HAProxy e Nginx (módulo stream) em um VPS de borda separado, além dos ajustes no MuServer e firewall do servidor principal.
Arquitetura da Solução
Jogadores → VPS Proxy/Borda (IP público divulgado) → VPS MuServer (IP real oculto)
44405, 55901-55910 (TCP) 44405, 55901-55910
O VPS proxy é o único servidor com portas abertas para a internet. O VPS do MuServer bloqueia todas as conexões externas nessas portas, aceitando apenas tráfego vindo do IP do proxy.
Portas padrão do MU Online que precisam de proxy:
| Serviço | Porta TCP |
|---|---|
| ConnectServer | 44405 |
| GameServer (por canal) | 55901, 55902, 55903... |
| DataServer | 57900 (raramente exposto) |
Parte 1 — Proxy TCP com Nginx (stream)
Passo 1: Instalar Nginx com suporte a stream
No VPS proxy (Ubuntu/Debian):
apt update && apt install nginx-full -y
nginx -V 2>&1 | grep -- --with-stream
# Deve aparecer: --with-stream ou --with-stream=dynamic
Passo 2: Configurar o bloco stream no nginx.conf
Edite /etc/nginx/nginx.conf e adicione o bloco stream fora do bloco http, logo antes do fechamento do arquivo:
stream {
# ConnectServer
upstream mu_connect {
server 203.0.113.50:44405; # IP real do VPS MuServer
}
server {
listen 44405;
proxy_pass mu_connect;
proxy_timeout 10m;
proxy_connect_timeout 5s;
}
# GameServer canal 0
upstream mu_gs1 {
server 203.0.113.50:55901;
}
server {
listen 55901;
proxy_pass mu_gs1;
proxy_timeout 30m;
proxy_connect_timeout 5s;
}
# GameServer canal 1
upstream mu_gs2 {
server 203.0.113.50:55902;
}
server {
listen 55902;
proxy_pass mu_gs2;
proxy_timeout 30m;
proxy_connect_timeout 5s;
}
}
203.0.113.50 pelo IP real do seu VPS MuServer. Este IP deve ser mantido em absoluto segredo. Nunca o mencione em painéis, fóruns ou logs públicos.Passo 3: Validar e recarregar
nginx -t
# nginx: configuration file /etc/nginx/nginx.conf test is successful
systemctl reload nginx
systemctl status nginx
Parte 2 — Alternativa com HAProxy
HAProxy oferece health checks automáticos e página de estatísticas, sendo preferível quando há múltiplos GameServers ou balanceamento de carga.
Passo 4: Instalar e configurar HAProxy
apt update && apt install haproxy -y
haproxy -v
# HAProxy version 2.4.x ou superior
Edite /etc/haproxy/haproxy.cfg:
global
log /dev/log local0
maxconn 50000
daemon
defaults
log global
mode tcp
option tcplog
option dontlognull
timeout connect 5s
timeout client 30m
timeout server 30m
# ConnectServer
frontend mu_connect_front
bind *:44405
default_backend mu_connect_back
backend mu_connect_back
server vps_real 203.0.113.50:44405 check inter 5s rise 2 fall 3
# GameServer canal 0
frontend mu_gs1_front
bind *:55901
default_backend mu_gs1_back
backend mu_gs1_back
server vps_real 203.0.113.50:55901 check inter 5s rise 2 fall 3
# GameServer canal 1
frontend mu_gs2_front
bind *:55902
default_backend mu_gs2_back
backend mu_gs2_back
server vps_real 203.0.113.50:55902 check inter 5s rise 2 fall 3
# Painel de estatísticas (acesso restrito)
listen stats
bind *:8404
mode http
stats enable
stats uri /haproxy-stats
stats auth admin:TrocaPorSenhaForte
stats refresh 10s
haproxy -c -f /etc/haproxy/haproxy.cfg
systemctl restart haproxy && systemctl enable haproxy
Acesse http://IP_DO_PROXY:8404/haproxy-stats para monitorar conexões ativas e status dos backends em tempo real.
Parte 3 — Ajustes no MuServer
Passo 5: Atualizar CSConfig.ini no ConnectServer
Edite ConnectServer/CSConfig.ini no VPS MuServer:
[CONNECT_SERVER]
Port = 44405
PublicIP = 177.77.77.10 ; IP do VPS proxy — divulgado aos clientes
InternalIP = 0.0.0.0 ; escuta em todas as interfaces locais
MaxConnections = 10000
ServerListFile = ServerList.dat
Passo 6: Atualizar ServerList.dat
O arquivo ConnectServer/ServerList.dat deve referenciar o IP do proxy em cada entrada de GameServer:
[SERVER_INFO]
ServerCode = 0
ServerName = Servidor Principal
ServerAddress = 177.77.77.10 ; IP do proxy, não do VPS real
ServerPort = 55901
Passo 7: Atualizar tabela SQL (Season 6+)
Em servidores Season 6 e posteriores, o ConnectServer lê a lista de servidores do banco de dados:
USE MuOnline;
GO
-- Verificar configuração atual
SELECT ServerCode, ServerName, ServerIp, ServerPort
FROM GameServerInfo
ORDER BY ServerCode;
-- Atualizar todos os GameServers para o IP do proxy
UPDATE GameServerInfo
SET ServerIp = '177.77.77.10'
WHERE ServerCode IN (0, 1, 2);
-- Ajuste os códigos conforme seus canais
GO
ConnectServer/ServerList.dat ou ServerInfo.dat. O campo de IP fica geralmente na segunda coluna separada por vírgula ou tabulação. Substitua todas as ocorrências do IP real pelo IP do proxy.Parte 4 — Firewall no VPS MuServer
Passo 8: Restringir acesso direto às portas MU
No VPS MuServer (Windows Server), abra o PowerShell como Administrador:
$ProxyIP = "177.77.77.10" # IP do VPS proxy
# Permitir ConnectServer somente do proxy
New-NetFirewallRule -DisplayName "MU ConnectServer via Proxy" `
-Direction Inbound -Protocol TCP -LocalPort 44405 `
-RemoteAddress $ProxyIP -Action Allow
# Permitir GameServers somente do proxy
New-NetFirewallRule -DisplayName "MU GameServers via Proxy" `
-Direction Inbound -Protocol TCP -LocalPort 55901-55910 `
-RemoteAddress $ProxyIP -Action Allow
# Bloquear acesso externo direto (regra de menor prioridade)
New-NetFirewallRule -DisplayName "MU Block Direct External" `
-Direction Inbound -Protocol TCP `
-LocalPort 44405,55901,55902,55903,55904,55905 `
-Action Block
Verificação Final
Do VPS proxy, teste a conectividade ao VPS MuServer:
nc -zv 203.0.113.50 44405 # deve retornar "succeeded"
nc -zv 203.0.113.50 55901
Da sua máquina local, teste as portas no proxy:
# Linux/Mac
nc -zv 177.77.77.10 44405
# Windows PowerShell
Test-NetConnection -ComputerName 177.77.77.10 -Port 44405
Test-NetConnection -ComputerName 177.77.77.10 -Port 55901
Confirme que o IP real não aparece para clientes usando Wireshark no cliente do jogo: capture os pacotes na porta 44405 e verifique que o campo ServerAddress nos pacotes 0xF4 retornados pelo ConnectServer exibe o IP do proxy, não 203.0.113.50.
Solução de Problemas
Jogadores não conseguem conectar após a mudança:
- Verifique se Nginx/HAProxy está rodando:
systemctl status nginxousystemctl status haproxy - Teste a porta localmente no proxy:
nc -zv 127.0.0.1 44405 - Confirme que o ConnectServer está rodando no VPS MuServer
- Verifique os logs:
tail -f /var/log/nginx/error.logoujournalctl -u haproxy -f
O cliente MU mostra "Unable to connect to server":
O executável do cliente ou o connect.ini aponta para o IP antigo. Em clientes Season 6, localize o arquivo connect.ini na pasta do cliente e atualize o campo de IP do ConnectServer para o IP do proxy.
Latência aumentou acima do esperado:
Use um VPS proxy geograficamente próximo ao VPS MuServer, idealmente no mesmo datacenter. A diferença de latência deve ser inferior a 5ms em redes de qualidade. Se ambos estiverem no mesmo datacenter, use o IP de rede interna (10.x.x.x) em vez do IP público para comunicação proxy → MuServer.
systemctl reload haproxy. Isso aplica as novas configurações graciosamente, sem fechar conexões TCP existentes.Perguntas frequentes
Por que usar proxy reverso em vez de apenas firewall?
O firewall filtra tráfego mas ainda expõe o IP real do VPS. Com o proxy reverso, jogadores e atacantes enxergam apenas o IP do nó proxy — o IP do servidor de jogo permanece completamente oculto, mesmo em caso de vazamento via logs de DNS ou análise de pacotes com Wireshark.
O proxy reverso adiciona latência para os jogadores?
Sim, mas de forma mínima. Um proxy na mesma região que seu servidor adiciona tipicamente 2-8ms extras. Para MU Online isso é aceitável; o gargalo real de latência é a distância geográfica entre jogador e servidor, não o salto extra pelo proxy.
Preciso de dois servidores VPS para isso funcionar?
Sim, a arquitetura recomendada usa um VPS barato como nó proxy (1vCPU/1GB RAM é suficiente) e seu VPS principal para o servidor MU. O VPS proxy absorve ou filtra o DDoS enquanto o servidor real permanece inacessível diretamente.
Como atualizar o ConnectServer.ini após mudar para proxy?
Atualize o campo PublicIP ou ServerAddress no CSConfig.ini para o IP do VPS proxy. Em Season 6+, atualize também a tabela GameServerInfo no banco MuOnline via SQL: UPDATE GameServerInfo SET ServerIp = 'IP_DO_PROXY' WHERE ServerCode IN (0,1,2).
É possível fazer proxy TCP para MU Online com Nginx?
Sim, o Nginx com o módulo stream faz proxy TCP nativo. Compile ou instale nginx-full (que inclui --with-stream) e adicione um bloco stream fora do bloco http no nginx.conf com as portas 44405 e 55901-55910.