Come creare il tuo server Counter-Strike 2
Questa guida spiega come installare e configurare un server dedicato Counter-Strike 2 (CS2) sul tuo VPS o server dedicato Linux.
Ordina un Server
Per ospitare il tuo server Counter-Strike 2, HostMyServers offre diverse opzioni ottimizzate per il gaming:
- VPS Performance - Ideale per un server CS2 (processore veloce e storage sufficiente)
- VPS NVMe - Ottimo rapporto qualità/prezzo
- Server Dedicati Eco - Per ospitare più server di gioco
- Server Dedicati Performance - Prestazioni massime
Prerequisiti
Le risorse indicate di seguito corrispondono ai requisiti del server e non tengono conto delle risorse già utilizzate dal sistema operativo, dai software installati o dagli altri servizi presenti sulla macchina. Considera circa 50 Mbps per 10 giocatori o più.
- Accesso SSH come root o utente con privilegi sudo
- Sistema Linux a 64 bit (Debian 12/13 o Ubuntu 22.04/24.04 consigliato, glibc 2.31 o superiore richiesta)
- Firewall attivo: nftables (consigliato), iptables o ufw (usa un solo strumento firewall alla volta)
- Minimo 4 GB di RAM (8 GB consigliati)
- Circa 70 GB di spazio disco libero (100 GB consigliati, SSD)
- Porta 27015 UDP accessibile (e porta 27015 TCP per RCON, solo dal tuo indirizzo IP statico)
- Un account Steam con un numero di telefono registrato (per il token GSLT)
Configurazione richiesta
| Componente | Minimo | Consigliato |
|---|---|---|
| RAM | 4 GB | 8 GB |
| CPU | 2 core | 4 core, frequenza elevata |
| Storage | 70 GB SSD | 100 GB SSD |
| Rete | 100 Mbps | 1 Gbps |
Counter-Strike 2 utilizza la porta 27015 in UDP per il gioco e in TCP per l'accesso RCON (amministrazione remota). La porta TCP deve essere accessibile solo dai tuoi indirizzi IP (richiede un indirizzo IP statico).
Counter-Strike 2 utilizza il sistema "subtick": non esiste più alcun parametro -tickrate da configurare.
Aggiornamento del sistema
sudo apt update && sudo apt upgrade -y
Installazione delle dipendenze
SteamCMD richiede la libreria a 32 bit lib32gcc-s1. Installa i pacchetti necessari:
sudo apt install -y wget tar screen lib32gcc-s1
Creazione di un utente dedicato
Per motivi di sicurezza, crea un utente dedicato:
sudo adduser --disabled-password --gecos "" cs2
Configurazione del firewall
Apri la porta 27015 in UDP per i giocatori. La porta 27015 in TCP corrisponde a RCON: limitala al tuo indirizzo IP statico (sostituisci TUO_IP).
Con UFW
sudo ufw allow 27015/udp
sudo ufw allow from TUO_IP to any port 27015 proto tcp
sudo ufw reload
Con iptables
sudo iptables -A INPUT -p udp --dport 27015 -j ACCEPT
sudo iptables -A INPUT -p tcp -s TUO_IP --dport 27015 -j ACCEPT
sudo iptables-save | sudo tee /etc/iptables/rules.v4
Il salvataggio delle regole al riavvio richiede il pacchetto iptables-persistent.
Con nftables
Questi comandi utilizzano la tabella inet filter e la catena input, presenti per impostazione predefinita in /etc/nftables.conf su Debian.
sudo nft add rule inet filter input udp dport 27015 accept
sudo nft add rule inet filter input ip saddr TUO_IP tcp dport 27015 accept
(echo "flush ruleset"; sudo nft list ruleset) | sudo tee /etc/nftables.conf
Non aprire mai la porta TCP 27015 a tutti: dà accesso a RCON. Senza un indirizzo IP statico, non aprire questa porta e usa un tunnel SSH.
Installazione di SteamCMD
Connettiti come utente cs2:
sudo -u cs2 bash
cd ~
Crea le directory e scarica SteamCMD:
mkdir -p ~/steamcmd ~/cs2-server
cd ~/steamcmd
wget https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz
tar -xzf steamcmd_linux.tar.gz
Download del server CS2
Avvia l'installazione del server (ID applicazione 730):
./steamcmd.sh +force_install_dir /home/cs2/cs2-server +login anonymous +app_update 730 validate +quit
Con uno spazio su disco insufficiente, SteamCMD si interrompe con l'errore state is 0x202 after update job (vedi la FAQ).
Il download può richiedere molto tempo. Se l'installazione si interrompe con un errore di rete, esegui semplicemente di nuovo lo stesso comando: SteamCMD riprende da dove si era fermato.
Al termine viene visualizzato il messaggio Success! App '730' fully installed.. Verifica che l'eseguibile del server sia presente:
ls ~/cs2-server/game/bin/linuxsteamrt64/cs2
Collegare steamclient.so
CS2 ha bisogno del file steamclient.so per comunicare con Steam. Crea il collegamento al file a 64 bit di SteamCMD:
mkdir -p ~/.steam/sdk64
ln -sf ~/steamcmd/linux64/steamclient.so ~/.steam/sdk64/steamclient.so
Token GSLT (obbligatorio)
Affinché il tuo server sia elencato tra i server pubblici e accetti connessioni da Internet, ti serve un token GSLT (Game Server Login Token). Senza di esso, il server funziona solo in rete locale.
Per generarlo, accedi al tuo account Steam e vai alla Gestione degli account server di gioco Steam.
La creazione del token ha alcuni prerequisiti:
- Il tuo account Steam non deve essere bannato dalla community né bloccato
- Il tuo account Steam non deve essere limitato
- Il tuo account Steam deve avere un numero di telefono registrato
- Il tuo account Steam deve possedere il gioco per cui stai creando un account server di gioco
- Il tuo account Steam può creare fino a 1000 account server di gioco
Nella casella App ID del gioco base, inserisci 730. Puoi aggiungere un memo per ricordarti di quale server si tratta, poi concludi cliccando sul pulsante Crea.
Per usare il token, aggiungilo alla riga di avvio:
+sv_setsteamaccount TUO_TOKEN
Usa un token per server e non condividerlo mai. Aggiungi il parametro a tutte le tue righe di avvio: il primo avvio, la riga ExecStart del servizio systemd e il comando eseguito con screen.
Configurazione del server
File server.cfg
Crea il file di configurazione:
nano ~/cs2-server/game/csgo/cfg/server.cfg
Configurazione di base
hostname "Il mio server CS2"
sv_password ""
rcon_password "CambiaMi"
sv_region 3
sv_lan 0
sv_cheats 0
mp_friendlyfire 0
mp_autoteambalance 1
Scegli una password rcon_password lunga e unica. Chiunque la conosca può amministrare il tuo server.
Parametri principali
| Parametro | Descrizione |
|---|---|
hostname | Nome pubblico del server |
sv_password | Password per entrare (vuoto = pubblico) |
rcon_password | Password di amministrazione remota |
sv_region | Regione: 3 = Europa, 0 = Costa Est degli USA, 4 = Asia, 255 = tutto il mondo |
sv_lan | 0 = server visibile su Internet, 1 = solo rete locale |
sv_cheats | Comandi cheat (0 = disattivato) |
mp_friendlyfire | Fuoco amico (0 = disattivato, 1 = attivato) |
mp_autoteambalance | Bilanciamento automatico delle squadre (0 o 1) |
Modalità di gioco
La modalità si sceglie all'avvio con +game_type e +game_mode:
| Modalità | game_type | game_mode |
|---|---|---|
| Occasionale (Casual) | 0 | 0 |
| Competitivo | 0 | 1 |
| Wingman | 0 | 2 |
| Corsa agli armamenti (Arms Race) | 1 | 0 |
| Demolizione | 1 | 1 |
| Deathmatch | 1 | 2 |
Primo avvio
cd ~/cs2-server/game/bin/linuxsteamrt64
./cs2 -dedicated -console -usercon -port 27015 -maxplayers 64 +game_type 0 +game_mode 1 +mapgroup mg_active +map de_dust2 +sv_setsteamaccount TUO_TOKEN
Una volta completato l'avvio, la console mostra la connessione del server ai server Steam. Per arrestare il server, digita quit.
Ottimizzazione dell'avvio
Parametri di avvio
| Parametro | Descrizione |
|---|---|
-dedicated | Avvia il server in modalità dedicata (obbligatorio) |
-console | Viene eseguito in modalità console |
-usercon | Attiva RCON |
-port | Porta del server (27015 predefinita) |
-ip | Indirizzo IP su cui restare in ascolto |
-maxplayers | Numero massimo di giocatori |
+game_type e +game_mode | Modalità di gioco (vedi la tabella sopra) |
+mapgroup | Gruppo di mappe (mg_active per le mappe ufficiali attive) |
+map | Mappa di avvio |
+sv_setsteamaccount | Token GSLT (obbligatorio, vedi la sezione dedicata) |
-insecure | Disattiva la protezione VAC (vedi l'avviso sotto) |
-insecure disattiva la protezione VAC: usa questo parametro solo per i test, lascia la porta aperta ai cheater.
Lascia sempre liberi da 1 a 2 GB di RAM per il sistema operativo.
Cambiare la porta
./cs2 -dedicated -console -usercon -port 27016 -maxplayers 64 +game_type 0 +game_mode 1 +mapgroup mg_active +map de_dust2 +sv_setsteamaccount TUO_TOKEN
Non dimenticare di aprire la nuova porta nel firewall.
Struttura dei file
| Percorso | Descrizione |
|---|---|
game/bin/linuxsteamrt64/cs2 | Eseguibile del server |
game/csgo/cfg/ | File di configurazione |
game/csgo/cfg/server.cfg | Configurazione principale |
game/csgo/addons/ | Estensioni (Metamod, CounterStrikeSharp) |
Configurazione come servizio systemd
Creare il file di servizio
Esci dalla sessione dell'utente cs2 (exit) per tornare al tuo account amministratore, poi crea il file di servizio:
sudo nano /etc/systemd/system/cs2.service
Contenuto del file:
[Unit]
Description=Counter-Strike 2 Server
After=network.target
[Service]
Type=simple
User=cs2
Group=cs2
WorkingDirectory=/home/cs2/cs2-server/game/bin/linuxsteamrt64
ExecStart=/home/cs2/cs2-server/game/bin/linuxsteamrt64/cs2 -dedicated -console -usercon -port 27015 -maxplayers 64 +game_type 0 +game_mode 1 +mapgroup mg_active +map de_dust2 +sv_setsteamaccount TUO_TOKEN
Restart=on-failure
RestartSec=20
[Install]
WantedBy=multi-user.target
Attivare e avviare il servizio
sudo systemctl daemon-reload
sudo systemctl enable cs2.service
sudo systemctl start cs2.service
Comandi di gestione
# Verificare lo stato
sudo systemctl status cs2.service
# Fermare il server
sudo systemctl stop cs2.service
# Riavviare il server
sudo systemctl restart cs2.service
# Vedere i log
sudo journalctl -u cs2.service -f
Con systemd, la console del server non è interattiva. Per inviare comandi, usa RCON dal gioco oppure avvia il server con screen (vedi sotto).
Avvio con screen (alternativa)
Se il servizio systemd è avviato, fermalo prima (sudo systemctl stop cs2.service): due server non possono usare la stessa porta.
sudo -u cs2 bash
cd ~/cs2-server/game/bin/linuxsteamrt64
screen -S cs2
./cs2 -dedicated -console -usercon -port 27015 -maxplayers 64 +game_type 0 +game_mode 1 +mapgroup mg_active +map de_dust2 +sv_setsteamaccount TUO_TOKEN
Per staccare: Ctrl+A poi D
Per tornare: screen -r cs2
Avviare in background con un log
sudo -u cs2 bash
cd ~/cs2-server/game/bin/linuxsteamrt64
screen -AdmSL cs2 ./cs2 -dedicated -console -usercon -port 27015 -maxplayers 64 +game_type 0 +game_mode 1 +mapgroup mg_active +map de_dust2 +sv_setsteamaccount TUO_TOKEN
| Opzione | Descrizione |
|---|---|
-A | Adatta la finestra alle dimensioni del terminale |
-d -m | Avvia la sessione staccata, in background |
-S cs2 | Nome della sessione |
-L | Registra l'output del server in un file di log |
Il file screenlog.0 viene creato nella cartella in cui viene eseguito il comando (~/cs2-server/game/bin/linuxsteamrt64) e contiene tutto l'output lato server. Per seguirlo in tempo reale:
tail -f ~/cs2-server/game/bin/linuxsteamrt64/screenlog.0
In caso di errore all'avvio, è il primo file da consultare. Per tornare alla console del server: screen -r cs2
Il file screenlog.0 cresce a ogni avvio. Ricordati di svuotarlo o eliminarlo regolarmente.
Aggiornamento del server
Fermare il server
sudo systemctl stop cs2.service
Scaricare la nuova versione
sudo -u cs2 bash
cd ~/steamcmd
./steamcmd.sh +force_install_dir /home/cs2/cs2-server +login anonymous +app_update 730 validate +quit
exit
Riavviare il server
sudo systemctl start cs2.service
Comandi console
Questi comandi si usano nella console del server o tramite RCON.
| Comando | Descrizione |
|---|---|
status | Mostra i giocatori connessi e il loro identificativo |
map <mappa> | Cambiare mappa |
kick <giocatore> | Espellere un giocatore |
banid <minuti> <steamid> | Bannare un giocatore (0 = definitivo) |
mp_restartgame 1 | Riavviare la partita |
say <messaggio> | Inviare un messaggio a tutti i giocatori |
exec server.cfg | Ricaricare la configurazione |
quit | Arrestare il server |
Usare RCON dal gioco
Il tuo indirizzo IP deve essere autorizzato sulla porta TCP 27015 nel firewall.
Nella console del gioco:
rcon_address IP_DEL_SERVER:27015
rcon_password TuaPassword
rcon status
Backup automatico
Script di backup
sudo nano /home/cs2/backup.sh
#!/bin/bash
BACKUP_DIR="/home/cs2/backups"
SERVER_DIR="/home/cs2/cs2-server"
DATE=$(date +%Y-%m-%d_%H-%M-%S)
mkdir -p $BACKUP_DIR
# Backup della configurazione
tar -czf $BACKUP_DIR/cs2_$DATE.tar.gz -C $SERVER_DIR game/csgo/cfg
# Eliminare i backup più vecchi di 7 giorni
find $BACKUP_DIR -name "cs2_*.tar.gz" -mtime +7 -delete
echo "Backup completato: cs2_$DATE.tar.gz"
sudo chown cs2:cs2 /home/cs2/backup.sh
sudo chmod +x /home/cs2/backup.sh
Se installi estensioni, aggiungi game/csgo/addons al comando tar.
Pianificare il backup
sudo crontab -u cs2 -e
Aggiungi:
# Backup ogni giorno alle 4 del mattino
0 4 * * * /home/cs2/backup.sh
Connessione al server
I giocatori possono connettersi tramite:
- Avviare Counter-Strike 2
- Aprire la console di gioco (attivata nelle opzioni di gioco)
- Digitare:
connect IP_DEL_SERVER:27015 - Se è configurata una password:
password TuaPasswordprima di connettersi
Puoi anche aggiungere il server ai preferiti di Steam (menu Visualizza, Server, scheda Preferiti).
In caso di problemi
Il server non si avvia
- Controlla i log:
sudo journalctl -u cs2.service -n 100 - Controlla lo spazio su disco disponibile:
df -h - Verifica che l'installazione sia completa (riesegui il comando
app_update) - Verifica che l'eseguibile esista:
ls ~/cs2-server/game/bin/linuxsteamrt64/cs2(altrimenti, l'installazione è incompleta) - Verifica che il collegamento
steamclient.soesista:ls -l ~/.steam/sdk64/steamclient.so
I giocatori non riescono a connettersi
-
Verifica che il token GSLT sia presente e valido nella riga di avvio
-
Verifica che la porta 27015 sia aperta in UDP:
sudo ufw statussudo iptables -L INPUT -n --line-numbers | grep 27015sudo nft list ruleset | grep 27015 -
Verifica che il server sia in ascolto:
ss -ulnp | grep 27015 -
Testa da un'altra macchina con
nc -zvu IP_SERVER 27015
Il server non appare nell'elenco
- Verifica che
sv_lan 0sia definito in server.cfg - Verifica che il token GSLT sia valido: in caso di dubbio, generane uno nuovo
- Attendi qualche minuto dopo l'avvio
- Verifica che il server abbia accesso a Internet
Problemi di prestazioni
- Riduci
-maxplayersse il server è saturo - Disattiva le estensioni non necessarie in
game/csgo/addons - Pianifica riavvii regolari
FAQ
Ottengo l'errore "Error! App '730' state is 0x202 after update job"
Questo errore è generalmente dovuto a una mancanza di spazio su disco: l'installazione di CS2 occupa circa 69 GB e l'errore è stato riscontrato con soli 50 GB disponibili. Verifica lo spazio libero con df -h, libera spazio o aggiungi un volume, poi riesegui il comando app_update.
Quali porte devono essere aperte?
Oltre alla porta del server (27015 in UDP), queste porte sono necessarie a Steam. Permettono al server di ricevere le risposte dai server Steam quando il tuo firewall blocca il traffico in entrata per impostazione predefinita:
UFW:
sudo ufw allow proto udp from any port 27000:27030 to any port 1025:65535
sudo ufw allow proto udp from any port 4380 to any port 1025:65535
sudo ufw reload
iptables:
sudo iptables -A INPUT -p udp -m udp --sport 27000:27030 --dport 1025:65535 -j ACCEPT
sudo iptables -A INPUT -p udp -m udp --sport 4380 --dport 1025:65535 -j ACCEPT
sudo iptables-save | sudo tee /etc/iptables/rules.v4
nftables:
sudo nft add rule inet filter input udp sport 27000-27030 udp dport 1025-65535 accept
sudo nft add rule inet filter input udp sport 4380 udp dport 1025-65535 accept
(echo "flush ruleset"; sudo nft list ruleset) | sudo tee /etc/nftables.conf
Ottengo "Permission denied" eseguendo ./steamcmd.sh
Applica un chmod:
chmod +x /home/cs2/steamcmd/linux32/steamcmd && chmod +x /home/cs2/steamcmd/steamcmd.sh
Ho il messaggio "WARNING: setlocale('en_US.UTF-8') failed, using locale: 'C'"
Non è un vero problema: solo alcuni caratteri internazionali potrebbero essere visualizzati in modo errato. Per correggerlo:
sudo locale-gen en_US.UTF-8
sudo update-locale LANG=en_US.UTF-8
Se il comando locale-gen non viene trovato, installa prima il pacchetto locales con sudo apt install -y locales.
Ottengo un errore ulimit (no permission / can not open file)
Imposta il limite di file aperti a 2048, valore consigliato da Valve. Per la sessione corrente, prima di avviare il server:
ulimit -n 2048
Con systemd, aggiungi questa riga nella sezione [Service] del file di servizio, poi ricarica e riavvia:
LimitNOFILE=2048
sudo systemctl daemon-reload
sudo systemctl restart cs2.service