Como criar um servidor de Counter-Strike em VPS Linux com SRCDS
Tutorial passo a passo para subir um servidor dedicado de Counter-Strike (CS 1.6 ou CS2) em VPS Linux usando SteamCMD, SRCDS, firewall e systemd.
Subir um servidor próprio de Counter-Strike em VPS Linux dá controle total sobre tick rate, plugins, mapas custom e regras anti-cheat — coisas que servidores compartilhados em hospedagens game-as-a-service geralmente não permitem ajustar. Este tutorial cobre a instalação do SRCDS (Source Dedicated Server) em uma VPS Ubuntu 24.04, com foco em CS:GO (AppID 232330) e variantes baseadas no mesmo engine. As mesmas etapas, com ajustes de AppID, funcionam para CS 1.6 via HLDS.
Persona deste guia: desenvolvedor ou owner de comunidade que já tem familiaridade com SSH e linha de comando Linux, e quer rodar um servidor público ou privado para clã, treino ou comunidade. Tempo estimado de execução: 30 a 45 minutos do zero ao primeiro player conectado, descontando o tempo de download dos assets do Steam (3-4 GB para CS:GO).
Não vamos tratar de plugins Metamod/SourceMod, anti-cheat externo ou painel web — o objetivo é deixar o binário SRCDS subindo de forma confiável com systemd, firewall configurado e capaz de aparecer na busca pública do Steam.
Pré-requisitos
Você precisa de VPS Linux com Ubuntu 24.04 LTS, mínimo 2 vCPUs e 2 GB de RAM para CS:GO (1 vCPU e 1 GB cobrem CS 1.6), 10 GB de disco livre, acesso root ou usuário com sudo, e um GSLT (Game Server Login Token) gerado em steamcommunity.com/dev/managegameservers caso queira servidor público de CS:GO.
A VPS precisa de IP IPv4 público dedicado — servidores Steam não funcionam atrás de NAT compartilhado sem port forwarding explícito, e a maioria das hospedagens de VPS já entrega IP dedicado por padrão. A porta UDP principal será 27015. Bloqueio de UDP em provedores genéricos é comum, então confirme com o suporte do provedor antes de seguir.
Ubuntu 24.04 LTS 27015 27015 232330 90 10 GB Preparar o sistema
O SRCDS é um binário de 32 bits, então mesmo em uma VPS x86_64 moderna você precisa habilitar a arquitetura i386 e instalar as bibliotecas compatíveis. SteamCMD também depende de libstdc++ específicas.
Atualize os pacotes do sistema:
sudo apt update && sudo apt upgrade -yReboot só se o kernel for atualizado (sudo reboot). Caso contrário, siga direto.
Habilite arquitetura 32 bits e instale dependências:
sudo dpkg --add-architecture i386
sudo apt update
sudo apt install -y lib32gcc-s1 lib32stdc++6 libcurl4-gnutls-dev:i386 \
ca-certificates wget curl tar screen ufwOs pacotes :i386 são obrigatórios — SRCDS reclama com erro genérico de “library not found” se faltarem, sem dizer qual.
Crie um usuário dedicado pro servidor (nunca rode SRCDS como root):
sudo useradd -m -s /bin/bash csserver
sudo passwd csserverRodar como root expõe o sistema inteiro caso o servidor seja explorado por algum bug do engine. Usuário dedicado isola o processo.
Instalar o SteamCMD e baixar o servidor
SteamCMD é o utilitário oficial da Valve pra instalar e atualizar servidores dedicados. Ele baixa o conteúdo do mesmo CDN do Steam cliente.
Mude pro usuário csserver e crie a estrutura de pastas:
sudo su - csserver
mkdir -p ~/steamcmd ~/csgo-server
cd ~/steamcmdBaixe e extraia o SteamCMD:
wget https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz
tar -xvzf steamcmd_linux.tar.gz
rm steamcmd_linux.tar.gzA primeira execução do SteamCMD auto-atualiza o utilitário e baixa runtime adicional — espere alguns minutos.
Instale o CS:GO Dedicated Server (AppID 232330):
./steamcmd.sh +force_install_dir /home/csserver/csgo-server \
+login anonymous \
+app_update 232330 validate \
+quitPara CS 1.6 (HLDS), troque por:
./steamcmd.sh +force_install_dir /home/csserver/cs16-server \
+login anonymous \
+app_update 90 validate \
+quitO download é de aproximadamente 3-4 GB pra CS:GO e 300 MB pra CS 1.6. Se a conexão cair no meio, rode o mesmo comando — o SteamCMD continua de onde parou e o validate corrige arquivos corrompidos.
Se aparecer “AppID 740 — Server is updating”, aguarde 30 segundos e rode novamente. É o próprio SteamCMD baixando dependências do CS:GO em paralelo.
Configurar o firewall e portas
O servidor escuta em UDP 27015 (game + query Steam). TCP 27015 também é usado pra RCON quando habilitado. Liberar essas portas no UFW é obrigatório.
Configure o UFW liberando SSH e portas do CS:
exit # volta pro usuário sudo
sudo ufw allow 22/tcp
sudo ufw allow 27015/udp
sudo ufw allow 27015/tcp
sudo ufw --force enable
sudo ufw status numberedConfirme que SSH (22/tcp) está liberado antes de habilitar — você se desconecta e fica preso caso contrário.
UFW só controla o firewall local da VPS. Vários provedores têm um segundo firewall externo na borda da rede que precisa ser ajustado no painel deles. Se o servidor sobe mas ninguém consegue conectar, é quase sempre isso.
Criar o arquivo de configuração
O server.cfg define nome, senha (opcional), regras de jogo e parâmetros de rede. Sem ele, o servidor sobe com defaults da Valve.
Volte ao usuário csserver e crie o arquivo:
sudo su - csserver
nano ~/csgo-server/csgo/cfg/server.cfgCole um template mínimo funcional:
hostname "Meu Servidor CS:GO BR"
rcon_password "TROQUE_PARA_ALGO_FORTE"
sv_password ""
sv_lan 0
sv_region 4
mp_friendlyfire 0
sv_cheats 0
sv_pure 1
mp_autoteambalance 1
mp_limitteams 1
mp_maxrounds 30
log on
sv_logbans 1
sv_logecho 1
sv_logfile 1sv_region 4 corresponde a América do Sul — ajuda no filtro de localização no Steam. rcon_password deve ser longa e única; RCON exposto com senha fraca é vetor comum de takeover.
Configurar o systemd para o servidor iniciar no boot
Rodar SRCDS em screen funciona pra testes, mas em produção use systemd — restart automático em crash, logs centralizados via journalctl e start no boot da VPS.
Crie o serviço systemd (como root):
exit
sudo nano /etc/systemd/system/csgo.serviceConteúdo:
[Unit]
Description=CS:GO Dedicated Server
After=network.target
[Service]
Type=simple
User=csserver
WorkingDirectory=/home/csserver/csgo-server
ExecStart=/home/csserver/csgo-server/srcds_run -game csgo -console -usercon \
+game_type 0 +game_mode 1 +mapgroup mg_active +map de_dust2 \
-tickrate 128 -port 27015 +sv_setsteamaccount SEU_GSLT_AQUI \
-maxplayers_override 16
Restart=on-failure
RestartSec=10
[Install]
WantedBy=multi-user.targetSubstitua SEU_GSLT_AQUI pelo token gerado em steamcommunity.com/dev/managegameservers. Sem GSLT válido, o servidor não aparece na busca pública do CS:GO desde 2016.
Habilite e inicie o servidor:
sudo systemctl daemon-reload
sudo systemctl enable csgo.service
sudo systemctl start csgo.service
sudo systemctl status csgo.serviceO status deve mostrar active (running) e algumas linhas de log do SRCDS subindo.
Verificação
Confirme que o servidor está respondendo na porta correta e visível externamente.
Verifique o processo e a porta:
sudo ss -ulnp | grep 27015
sudo journalctl -u csgo.service -n 50 --no-pagerVocê deve ver *:27015 em LISTEN UDP e logs mostrando o mapa de_dust2 carregado.
No cliente Steam, abra o console (~) e conecte:
connect SEU_IP_DA_VPS:27015Se conectou, o servidor está operacional. Pra busca pública, vá em “Servidores Comunitários” no menu do CS:GO — o servidor aparece em 2-5 minutos após registro com GSLT válido.
Resolução de problemas
Servidor sobe mas não aceita conexões
Quase sempre é firewall externo do provedor (não o UFW) bloqueando UDP 27015. Teste com nmap -sU -p 27015 SEU_IP de outra máquina. Se vier “filtered”, contate o suporte do provedor.
”Server is enforcing secure connections, your client is not”
VAC desabilitado no cliente ou versão desatualizada. Pra debug em rede local sem VAC, adicione -insecure na linha do ExecStart, mas nunca em produção pública.
Lag/spikes apesar de CPU OK
SRCDS é single-threaded — se um core estiver saturado por outro processo, o tick atrasa. Use htop e confirme que o core onde o SRCDS roda está abaixo de 70% durante pico. Em VPS com vCPU compartilhada, peça migração pra plano com CPU dedicada.
Próximos passos
Com o servidor base operacional, alguns caminhos comuns de evolução:
- Instalar SourceMod + Metamod para plugins (admin, mapas custom, anti-cheat plugin)
- Configurar workshop collection com mapas competitivos via
+host_workshop_collection - Adicionar segundo servidor na mesma VPS na porta 27016 para servidor de pug/aim
- Configurar backup automático dos logs e configs com cron + rsync para storage remoto
- Monitorar performance com
systemd-cgtopou Netdata para visualizar uso por instância
Se você está colocando múltiplos servidores em produção, uma VPS Hostini da linha /jogos já vem com IP dedicado, sem oversell de CPU e portas UDP liberadas por padrão — duas dores comuns ao migrar de hospedagens genéricas pra rodar servidor de jogo competitivo com tick 128.
Perguntas frequentes
Qual a diferença entre HLDS e SRCDS para Counter-Strike?
HLDS (Half-Life Dedicated Server) é o binário usado por CS 1.6 e mods baseados no engine GoldSrc. SRCDS (Source Dedicated Server) roda CS:Source, CS:GO e — com adaptações via Steam — CS2. A instalação via SteamCMD usa AppIDs diferentes: 90 para HLDS/CS 1.6 e 232330 para CS:GO. CS2 atualmente não tem binário dedicado público estável e é normalmente hospedado em estrutura própria.
Quanto de RAM e CPU preciso para um servidor de CS estável?
Para CS 1.6 com até 32 slots, 1 vCPU dedicada e 1 GB de RAM são suficientes. Para CS:GO com 16-20 slots em tick 64, planeje 2 vCPUs e 2 GB de RAM. Tick 128 dobra a demanda de CPU — prefira 3 GHz+ por core, já que SRCDS é single-threaded por instância. Disco importa menos: 10 GB cobrem instalação e mapas custom.
Por que o servidor não aparece na busca do Steam mesmo rodando?
Três causas comuns: a porta UDP 27015 está bloqueada no firewall do provedor (não só no ufw da VPS), o parâmetro +sv_lan está como 1 (precisa ser 0 para internet), ou o servidor não tem GSLT (Game Server Login Token) configurado — obrigatório para CS:GO público desde 2016. Verifique cada item antes de reinstalar.
É possível rodar vários servidores na mesma VPS?
Sim. Cada instância SRCDS roda em uma porta UDP diferente (27015, 27016, 27017, etc) e usa configs separadas via parâmetro +port. Cada servidor consome uma vCPU plena durante pico, então não passe de N-1 instâncias onde N é o número de vCPUs da VPS, deixando margem para o sistema.
O que é tick rate e como aumentar para 128?
Tick rate é quantas vezes por segundo o servidor processa input dos jogadores. CS:GO default é 64. Para 128, adicione -tickrate 128 nos parâmetros de inicialização do srcds_run. Tick 128 melhora precisão de tiros e movimento mas exige CPU mais rápida e largura de banda maior por jogador (~30 KB/s vs 15 KB/s no tick 64).
Como atualizar o servidor quando sai patch da Valve?
Rode novamente o steamcmd com o mesmo comando de instalação — ele detecta diferença e baixa só o delta. Pare o systemd antes (sudo systemctl stop csgo), atualize, e suba de novo. Em servidores públicos CS:GO, manter desatualizado faz o servidor sumir da busca até que coincida com a versão cliente atual.