Skip to main content

Come creare il tuo server Counter-Strike Source

Questa guida spiega come installare e configurare un server dedicato Counter-Strike Source (CSS) sul tuo VPS o server dedicato Linux.

Ordina un Server​

Per ospitare il tuo server Counter-Strike Source, HostMyServers offre diverse opzioni ottimizzate per il gaming:

Prerequisiti​

Risorse

Le risorse indicate di seguito corrispondono alle esigenze 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 10 Mbps per 30 giocatori a tickrate 66 con sv_maxrate 30000, e il doppio a tickrate 100.

  • Accesso SSH come root o utente con sudo
  • Sistema Linux a 64 bit (Debian 12/13 o Ubuntu 22.04/24.04 consigliati)
  • Firewall attivo: nftables (consigliato), iptables o ufw (usa un solo strumento firewall alla volta)
  • Minimo 1 GB di RAM (2 GB consigliati)
  • Circa 5 GB di spazio libero su disco
  • Porta 27015 UDP accessibile (e porta 27015 TCP per RCON, solo dal tuo indirizzo IP fisso)

Configurazione richiesta​

ComponenteMinimoConsigliato
RAM1 GB2 GB
CPU1 core2 core
Storage5 GB10 GB SSD
Rete100 Mbps1 Gbps
Protocollo di rete

Counter-Strike Source utilizza la porta 27015 in UDP per il gioco e in TCP per l'accesso RCON (amministrazione remota), che deve essere accessibile solo dai tuoi indirizzi IP (richiede un indirizzo IP fisso).

Aggiornamento del sistema​

sudo apt update && sudo apt upgrade -y

Installazione delle dipendenze​

SteamCMD e il server CSS sono programmi a 32 bit: le librerie a 32 bit sono necessarie. Verifica prima che l'architettura i386 sia abilitata:

sudo dpkg --print-foreign-architectures

Se il risultato è vuoto, esegui:

sudo dpkg --add-architecture i386
sudo apt update

Installa poi i pacchetti necessari:

sudo apt install -y wget tar screen lib32gcc-s1 lib32stdc++6

Creazione di un utente dedicato​

Per motivi di sicurezza, crea un utente dedicato:

sudo adduser --disabled-password --gecos "" css

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 fisso (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
Sicurezza di RCON

Non aprire mai la porta TCP 27015 a tutti: dà accesso a RCON. Senza un indirizzo IP fisso, non aprire questa porta e passa tramite un tunnel SSH.

Installazione di SteamCMD​

Connettiti come utente css:

sudo -u css bash
cd ~

Crea le directory e scarica SteamCMD:

mkdir -p ~/steamcmd ~/css-server
cd ~/steamcmd
wget https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz
tar -xzf steamcmd_linux.tar.gz

Download del server CSS​

Avvia l'installazione del server (ID applicazione 232330):

./steamcmd.sh +force_install_dir /home/css/css-server +login anonymous +app_update 232330 validate +quit
Consiglio

Se l'installazione si interrompe con un errore, rilancia semplicemente lo stesso comando: SteamCMD riprende da dove si era fermato.

Al termine, viene visualizzato il messaggio Success! App '232330' fully installed.

Configurazione del server​

File server.cfg​

Crea il file di configurazione:

nano ~/css-server/cstrike/cfg/server.cfg

Configurazione di base​

hostname "Il mio server CSS"
sv_password ""
rcon_password "CambiaMi"
sv_region 3
sv_lan 0
sv_cheats 0
mp_timelimit 30
mp_freezetime 6
mp_friendlyfire 0
mp_autoteambalance 1
mp_limitteams 2
sv_alltalk 0

Configurazione avanzata personalizzata​

Esempio di configurazione più completa, da adattare alla tua community:

// Server.cfg creato da Let's Go
// Per la community Free 4 Funs
// Condiviso per hostmyservers.fr
// Versione 1.2
// -------------------------------------------------------------------------------------
// IMPOSTAZIONI DEL SERVER
// -------------------------------------------------------------------------------------

// -------------------------------------------------------------------------------------
// Sicurezza RCON e password
// -------------------------------------------------------------------------------------
// Password RCON (da cambiare)
rcon_password "cambiami"

// Password per entrare nel server (server pubblico: lascia vuoto)
sv_password ""

// -------------------------------------------------------------------------------------
// Identificazione del server
// -------------------------------------------------------------------------------------
// Nome del server
hostname "Il mio server CSS"
sv_region 3
sv_lan 0
// Durata del ban (in minuti) dopo tentativi di accesso RCON falliti
sv_rcon_banpenalty 60
// Numero massimo di tentativi di accesso RCON falliti prima del ban
sv_rcon_maxfailures 10
// Numero minimo di tentativi di accesso RCON falliti prima del ban
sv_rcon_minfailures 5
// Periodo (in secondi) in cui vengono conteggiati i tentativi falliti (vedi sv_rcon_minfailures)
sv_rcon_minfailuretime 900

// -------------------------------------------------------------------------------------
// Configurazione del server
// -------------------------------------------------------------------------------------

mp_allowspectators 1
mp_autocrosshair 0
mp_autokick 0
mp_autoteambalance 0
mp_buytime 0.5
mp_c4timer 30
mp_chattime 8
mp_fadetoblack 0
mp_flashlight 1
mp_footsteps 1
mp_forcecamera 0
mp_forcerespawn 0
mp_fraglimit 0
mp_freezetime 4
mp_friendlyfire 1
mp_hostagepenalty 0
mp_limitteams 1
mp_maxrounds 0
mp_playerid 0
mp_roundtime 3
mp_spawnprotectiontime 5
mp_startmoney 16000
mp_timelimit 20
mp_tkpunish 0
mp_weaponstay 1
mp_winlimit 0
sv_accelerate 5
sv_gravity 800
sv_maxspeed 320
sv_pausable 0
sv_timeout 40

// -------------------------------------------------------------------------------------
// Sicurezza
// -------------------------------------------------------------------------------------
sv_cheats 0
sv_consistency "1"
sv_pure "2"
sv_pure_kick_clients "1"

// -------------------------------------------------------------------------------------
// Log del server
// -------------------------------------------------------------------------------------
log on
sv_logbans 1
sv_logecho 1
sv_logfile 1
sv_log_onefile 1
sv_logsdir logs
mp_logdetail 3

// -------------------------------------------------------------------------------------
// Banda passante del server
// -------------------------------------------------------------------------------------

// Download rapido (FastDL): indirizzo di un server web che ospita i file
//sv_downloadurl "https://xxxxxxxxxxxxxxxxxxx"
// Consenti i download
sv_allowdownload 1
// Consenti l'invio di file da parte dei giocatori (spray, ecc.)
sv_allowupload 1

// Configurazione ottimizzata per un tickrate 100
// Richiede l'estensione Tickrate Enabler per CS:Source e il parametro di avvio -tickrate 100
// FPS illimitati lato server (0 = illimitati, consuma più risorse)
fps_max 0

// -------------------------------------------------------------------------------------
// Non modificare questi valori se non sai cosa stai facendo
// sv_maxrate 0: velocità di trasmissione illimitata
// sv_maxrate 30000: 30.000 byte/s (circa 0,24 Mbps) per giocatore
// -------------------------------------------------------------------------------------
net_queued_packet_thread 0
sv_mincmdrate 75
sv_maxcmdrate 101
sv_maxrate 0
sv_minrate 20000
sv_maxupdaterate 101
sv_minupdaterate 75

// -------------------------------------------------------------------------------------
// Gestione dei ban
// -------------------------------------------------------------------------------------
// Carica l'elenco dei giocatori bannati per SteamID e per indirizzo IP
// (file da collocare in cstrike/cfg)
exec banned_user.cfg
exec banned_ip.cfg

// -------------------------------------------------------------------------------------
// Gestione dei bot
// -------------------------------------------------------------------------------------
// Per attivare i bot, rimuovi i // davanti alla riga seguente
// (il file bot.cfg deve trovarsi in cstrike/cfg)
//exec bot.cfg

// -------------------------------------------------------------------------------------
// Statistiche del server
// -------------------------------------------------------------------------------------
sv_stats 1
sv_filterban 1

echo ==============================
echo Server.cfg correctement charge
echo ==============================
echo ===============================
echo Visitez wiki.free4funs.ovh
echo Visitez hostmyservers.fr
echo ===============================
echo ===============================
echo Server.cfg Config By Lets'Go
echo ===============================
Sicurezza

Scegli una rcon_password lunga e unica. Chiunque la conosca può amministrare il tuo server.

Parametri principali​

ParametroDescrizione
hostnameNome pubblico del server
sv_passwordPassword per entrare (vuoto = pubblico)
rcon_passwordPassword di amministrazione remota
sv_regionRegione: 3 = Europa, 0 = Costa orientale degli USA, 4 = Asia, 255 = tutto il mondo
sv_lan0 = server visibile su Internet, 1 = solo rete locale
mp_timelimitDurata di una mappa in minuti
mp_freezetimeDurata del congelamento all'inizio del round, durante il quale i giocatori acquistano il proprio equipaggiamento (secondi)
mp_friendlyfireFuoco amico (0 = disattivato, 1 = attivato)
sv_alltalkChat vocale tra le due squadre (0 o 1)

Token GSLT (opzionale)​

Token GSLT

Il token GSLT (Game Server Login Token) non è obbligatorio ma consigliato: permette al tuo server di essere elencato tra i server pubblici di Steam.

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 crei un account server di gioco
  • Il tuo account Steam può creare fino a 1000 account server di gioco

Nel campo App ID del gioco base, inserisci 240. Puoi aggiungere un promemoria 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
Consiglio

Aggiungi il parametro a tutte le tue righe di avvio: il primo avvio, la riga ExecStart del servizio systemd e il comando lanciato con screen.

Primo avvio​

cd ~/css-server
./srcds_run -game cstrike -console +map de_dust2 +maxplayers 24 -port 27015

Una volta terminato l'avvio, la console mostra lo stato della connessione ai server Steam. Per fermare il server, digita quit.

Ottimizzazione dell'avvio​

Parametri di avvio​

ParametroDescrizione
-game cstrikeGioco da avviare (obbligatorio)
+mapMappa di avvio
+maxplayersNumero massimo di giocatori (fino a 64)
-portPorta del server (27015 per impostazione predefinita)
-ipIndirizzo IP su cui restare in ascolto
-tickrate 100Frequenza di simulazione (66 per impostazione predefinita). Aumenta il carico della CPU e richiede l'estensione Tickrate Enabler
-norestartImpedisce allo script di riavviare il server in caso di arresto (utile con systemd)
-consoleViene eseguito in modalità console
-debuglog nome_fileRegistra il debug nel file
-highPriorità massima per il processo del server
-nohltvDisattiva SourceTV
-nobotsDisattiva i bot
-insecureDisattiva la protezione VAC (vedi l'avviso qui sotto)
+sv_setsteamaccountToken GSLT (opzionale, vedi la sezione dedicata)
Parametro -insecure

-insecure disattiva la protezione VAC: usa questo parametro solo per i test, lascia la porta aperta ai cheater.

Cambiare la porta​

./srcds_run -game cstrike -console +map de_dust2 +maxplayers 24 -port 27016

Non dimenticare di aprire la nuova porta nel firewall.

Struttura dei file​

PercorsoDescrizione
cstrike/cfg/File di configurazione
cstrike/cfg/server.cfgConfigurazione principale
cstrike/cfg/banned_user.cfgGiocatori bannati (SteamID)
cstrike/cfg/banned_ip.cfgIndirizzi IP bannati
cstrike/maps/Mappe installate
cstrike/addons/Estensioni (Metamod, SourceMod)
cstrike/logs/File di log

Configurazione come servizio systemd​

Creare il file di servizio​

Esci dalla sessione dell'utente css (exit) per tornare al tuo account amministratore, poi crea il file di servizio:

sudo nano /etc/systemd/system/css.service

Contenuto del file:

[Unit]
Description=Counter-Strike Source Server
After=network.target

[Service]
Type=simple
User=css
Group=css
WorkingDirectory=/home/css/css-server
Environment=TERM=xterm
ExecStart=/home/css/css-server/srcds_run -game cstrike -console -norestart +map de_dust2 +maxplayers 24 -port 27015
Restart=on-failure
RestartSec=20

[Install]
WantedBy=multi-user.target

Attivare e avviare il servizio​

sudo systemctl daemon-reload
sudo systemctl enable css.service
sudo systemctl start css.service

Comandi di gestione​

# Verificare lo stato
sudo systemctl status css.service

# Fermare il server
sudo systemctl stop css.service

# Riavviare il server
sudo systemctl restart css.service

# Vedere i log
sudo journalctl -u css.service -f
Console del server

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)​

Una sola modalità di avvio

Se il servizio systemd è avviato, fermalo prima (sudo systemctl stop css.service): due server non possono usare la stessa porta.

sudo -u css bash
cd ~/css-server
screen -S css
./srcds_run -game cstrike -console +map de_dust2 +maxplayers 24 -port 27015

Per staccare: Ctrl+A poi D

Per tornare: screen -r css

Avviare in background con un log​

sudo -u css bash
cd ~/css-server
screen -AdmSL css ./srcds_run -game cstrike -console +map de_dust2 +maxplayers 24 -port 27015
OpzioneDescrizione
-AAdatta la finestra alla dimensione del terminale
-d -mAvvia la sessione staccata, in background
-S cssNome della sessione
-LRegistra l'output del server in un file di log

Il file screenlog.0 viene creato nella cartella in cui viene lanciato il comando (~/css-server) e contiene tutto l'output lato server. Per seguirlo in tempo reale:

tail -f ~/css-server/screenlog.0

In caso di errore all'avvio, è il primo file da consultare. Per tornare alla console del server: screen -r css

Consiglio

Il file screenlog.0 cresce a ogni avvio. Ricorda di svuotarlo o eliminarlo regolarmente.

Aggiornamento del server​

Fermare il server​

sudo systemctl stop css.service

Scaricare la nuova versione​

sudo -u css bash
cd ~/steamcmd
./steamcmd.sh +force_install_dir /home/css/css-server +login anonymous +app_update 232330 validate +quit
exit

Riavviare il server​

sudo systemctl start css.service

Comandi della console​

Questi comandi si usano nella console del server o tramite RCON.

ComandoDescrizione
statusMostra i giocatori connessi e il loro identificatore
changelevel <map>Cambiare mappa
kick <giocatore>Espellere un giocatore
kickid <userid>Espellere un giocatore tramite il suo identificatore
banid <minutes> <steamid> kickBannare un giocatore (0 = definitivo)
writeidSalvare l'elenco dei bannati in banned_user.cfg
say <message>Inviare un messaggio a tutti i giocatori
exec server.cfgRicaricare la configurazione
quitFermare il server

Usare RCON dal gioco​

Il tuo indirizzo IP deve essere autorizzato sulla porta TCP 27015 nel firewall.

Nella console di gioco (tasto ² o ~):

rcon_address IP_DEL_TUO_SERVER:27015
rcon_password TuaPassword
rcon status

Backup automatico​

Script di backup​

sudo nano /home/css/backup.sh
#!/bin/bash
BACKUP_DIR="/home/css/backups"
SERVER_DIR="/home/css/css-server"
DATE=$(date +%Y-%m-%d_%H-%M-%S)

mkdir -p $BACKUP_DIR

# Backup della configurazione
tar -czf $BACKUP_DIR/css_$DATE.tar.gz -C $SERVER_DIR cstrike/cfg

# Eliminare i backup più vecchi di 7 giorni
find $BACKUP_DIR -name "css_*.tar.gz" -mtime +7 -delete

echo "Backup completato: css_$DATE.tar.gz"
sudo chown css:css /home/css/backup.sh
sudo chmod +x /home/css/backup.sh
Consiglio

Se installi delle estensioni, aggiungi cstrike/addons al comando tar.

Pianificare il backup​

sudo crontab -u css -e

Aggiungi:

# Backup ogni giorno alle 4
0 4 * * * /home/css/backup.sh

Connessione al server​

I giocatori possono connettersi tramite:

  1. Avviare Counter-Strike Source
  2. Aprire la console di gioco
  3. Digitare: connect IP_DEL_TUO_SERVER:27015
  4. Se è configurata una password: password TuaPassword prima 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 css.service -n 100
  • Verifica che l'installazione sia completa (rilancia il comando app_update)
  • Cerca una libreria mancante: ldd ~/css-server/srcds_linux | grep "not found", poi installa il pacchetto a 32 bit corrispondente

Avviso libtinfo.so.5 o libncurses.so.5​

Se il messaggio WARNING: Failed to load 32-bit libtinfo.so.5 or libncurses.so.5 compare all'avvio nonostante l'installazione delle dipendenze, crea i collegamenti simbolici verso le versioni 6:

sudo ln -sf /usr/lib/i386-linux-gnu/libtinfo.so.6 /usr/lib/i386-linux-gnu/libtinfo.so.5
sudo ln -sf /usr/lib/i386-linux-gnu/libncurses.so.6 /usr/lib/i386-linux-gnu/libncurses.so.5

Se i file .so.6 non esistono, installa prima il pacchetto libncurses6:i386.

Errori steamclient.so e steamerrorreporter​

Connettiti come utente css, poi crea i collegamenti ai file di SteamCMD:

sudo -u css bash
mkdir -p ~/.steam/sdk32
ln -sf ~/steamcmd/linux32/steamclient.so ~/.steam/sdk32/steamclient.so
ln -sf ~/steamcmd/linux32/steamerrorreporter ~/css-server/bin/steamerrorreporter
exit

I giocatori non riescono a connettersi​

  • Verifica che la porta 27015 sia aperta in UDP:

    sudo ufw status
    sudo iptables -L INPUT -n --line-numbers | grep 27015
    sudo 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_DEL_TUO_SERVER 27015

Il server non appare nell'elenco​

  • Verifica che sv_lan 0 sia effettivamente impostato in server.cfg
  • Attendi qualche minuto dopo l'avvio
  • Verifica che il server abbia accesso a Internet
  • Aggiungi un token GSLT con +sv_setsteamaccount per essere elencato tra i server pubblici

Problemi di prestazioni​

  • Riduci +maxplayers se il server è saturo
  • Disattiva le estensioni inutili in cstrike/addons
  • Pianifica riavvii regolari

FAQ​

Quali porte vanno 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 per impostazione predefinita il traffico in ingresso:

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 "Permesso negato" eseguendo ./steamcmd.sh​

Applica un chmod:

chmod +x /home/css/steamcmd/linux32/steamcmd && chmod +x /home/css/steamcmd/steamcmd.sh

Il mio server resta bloccato su "Network: IP, mode MP, dedicated Yes, ports 27015 SV / 27005 CL"​

Verifica che la porta non sia già utilizzata da un altro processo:

sudo lsof -i :27015

Se la porta è libera, verifica che le regole Steam della prima domanda siano applicate correttamente.

Ricevo 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 css.service