Come creare il tuo server Left 4 Dead 2
Questa guida spiega come installare e configurare un server dedicato Left 4 Dead 2 (L4D2) sul tuo VPS o server dedicato Linux.
Ordina un Server
Per ospitare il tuo server Left 4 Dead 2, HostMyServers offre diverse opzioni ottimizzate per il gaming:
- VPS Performance - Ideale per un server L4D2 (da 1 a 2 vCPU e da 2 a 4 GB di RAM sono sufficienti)
- 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 alle esigenze del server e non tengono conto delle risorse già utilizzate dal sistema operativo, dal software installato o dagli altri servizi presenti sulla macchina. Calcola da 3 a 5 Mbps per 10 giocatori a tickrate 30, e circa tre volte di più a tickrate 100 (richiede l'estensione Tickrate Enabler per L4D2).
- Accesso SSH come root o utente con privilegi sudo
- Sistema Linux a 64 bit (Debian 12/13 o Ubuntu 22.04/24.04 consigliato)
- Firewall attivo: nftables (consigliato), iptables o ufw (usa un solo strumento firewall alla volta)
- Minimo 2 GB di RAM
- Circa 10 GB di spazio disco libero (SSD consigliato)
- Porta 27015 UDP accessibile (e porta 27015 TCP per RCON, solo dal tuo indirizzo IP statico)
Configurazione richiesta
| Componente | Minimo | Consigliato |
|---|---|---|
| RAM | 2 GB | 4 GB |
| CPU | 1 core | 2 core |
| Storage | 10 GB | 10 GB SSD |
| Rete | 100 Mbps | 500 Mbps |
Left 4 Dead 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.
Aggiornamento del sistema
sudo apt update && sudo apt upgrade -y
Installazione delle dipendenze
SteamCMD e il server L4D2 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 lib32z1
Creazione di un utente dedicato
Per motivi di sicurezza, crea un utente dedicato:
sudo adduser --disabled-password --gecos "" l4d2
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 passa da un tunnel SSH.
Installazione di SteamCMD
Connettiti come utente l4d2:
sudo -u l4d2 bash
cd ~
Crea le directory e scarica SteamCMD:
mkdir -p ~/steamcmd ~/l4d2-server
cd ~/steamcmd
wget https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz
tar -xzf steamcmd_linux.tar.gz
Download del server L4D2
Avvia l'installazione del server (ID applicazione 222860). Un semplice comando app_update non basta più per ottenere un server L4D2 funzionante su Linux: occorre forzare l'installazione della piattaforma Windows, poi quella della piattaforma Linux, nella stessa cartella:
./steamcmd.sh +@sSteamCmdForcePlatformType windows +force_install_dir /home/l4d2/l4d2-server +login anonymous +app_update 222860 validate +quit
./steamcmd.sh +@sSteamCmdForcePlatformType linux +force_install_dir /home/l4d2/l4d2-server +login anonymous +app_update 222860 validate +quit
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 '222860' fully installed.. Verifica che lo script di avvio del server sia presente:
ls ~/l4d2-server/srcds_run
Configurazione del server
File server.cfg
Crea il file di configurazione:
nano ~/l4d2-server/left4dead2/cfg/server.cfg
Configurazione di base
// Nome del server
hostname "Il mio server L4D2"
// Password del server (vuota = pubblico)
sv_password ""
// Password RCON
rcon_password "CambiaMi"
// Regione del server
// 0: Stati Uniti (Est)
// 1: Stati Uniti (Ovest)
// 2: Sud America
// 3: Europa
// 4: Asia
// 5: Australia
// 6: Medio Oriente
// 7: Africa
// 255: tutto il mondo (predefinito)
sv_region 3
// 0: server visibile su Internet, 1: solo rete locale
sv_lan 0
// Comandi cheat (0 = disattivati)
sv_cheats 0
// Consente la connessione diretta al server (senza passare da una lobby)
sv_allow_lobby_connect_only 0
// Tag del server, separati da virgole (esempio: "fr,coop")
//sv_tags "fr,coop"
// Riserva il server ai membri di un gruppo Steam
// 1: solo i membri del gruppo possono vedere e unirsi al server
// 0: server pubblico
// Per usarlo, indica l'ID del tuo gruppo Steam con sv_steamgroup
sv_steamgroup_exclusive 0
//sv_steamgroup id_del_gruppo
// Numero di slot visualizzati nella lista dei server (-1 = numero reale di slot)
sv_visiblemaxplayers -1
// Difficoltà degli zombie: Easy, Normal, Hard, Impossible
z_difficulty normal
// Modalità di gioco consentite
// Se questa riga non viene presa in considerazione, SourceMod deve essere installato:
// fai allora precedere il comando da sm_cvar (sm_cvar sv_gametypes ...)
sv_gametypes "coop,realism,survival,versus,teamversus,scavenge,teamscavenge,mutation12,right2live"
// Attiva la comunicazione vocale sul server
sv_voiceenable 1
// Consente ai giocatori delle due squadre di parlarsi (0 = no, 1 = sì)
// Se il valore è 1, verifica che anche sv_voiceenable sia a 1
sv_alltalk 0
// Sicurezza RCON
// Durata del ban (in minuti) dopo tentativi di accesso falliti a RCON
sv_rcon_banpenalty 3600
// Numero massimo di tentativi di accesso falliti a RCON prima del ban
sv_rcon_maxfailures 3
// Numero minimo di tentativi di accesso falliti a RCON prima del ban
sv_rcon_minfailures 1
// Durata (in secondi) su cui vengono conteggiati i tentativi di accesso falliti a RCON
sv_rcon_minfailuretime 10
// Verifica dei file dei giocatori
// Attenzione: con estensioni o campagne personalizzate,
// questi valori espellono i giocatori i cui file differiscono (impostali a 0)
sv_pure 2
sv_consistency 1
// Espelle i giocatori che non hanno i file originali del gioco
sv_pure_kick_clients 1
// Consente (1) o meno (0) il comando wait nei file cfg dei giocatori
sv_allow_wait_command 0
// Attiva (1) o disattiva (0) la visualizzazione del messaggio del giorno (MOTD)
motd_enabled 1
// Log
log on
sv_logecho 0
sv_logfile 1
sv_log_onefile 0
sv_logbans 1
sv_logflush 0
sv_logsdir logs
// Gestione dei ban
exec banned_user.cfg
exec banned_ip.cfg
// Genera i file dei ban indicati sopra se non esistono
writeid
writeip
Per impostazione predefinita, un server dedicato L4D2 accetta solo le connessioni che passano da una lobby. Senza la riga sv_allow_lobby_connect_only 0, i giocatori non potranno unirsi al tuo server direttamente né tramite la lista dei server.
Scegli una password rcon_password lunga e univoca. Chiunque la conosca può amministrare il tuo server.
Modalità di gioco e mappe
Modalità di gioco
La modalità si sceglie all'avvio con +mp_gamemode:
| Modalità | Descrizione | Giocatori |
|---|---|---|
coop | Campagna cooperativa | 4 |
realism | Cooperativa senza aloni né indicazioni | 4 |
versus | Sopravvissuti contro infetti | 8 |
survival | Resistere a ondate di infetti | 4 |
scavenge | Recuperare taniche di benzina | 8 |
Prima mappa di ogni campagna
| Campagna | Mappa iniziale |
|---|---|
| Dead Center | c1m1_hotel |
| Dark Carnival | c2m1_highway |
| Swamp Fever | c3m1_plankcountry |
| Hard Rain | c4m1_milltown_a |
| The Parish | c5m1_waterfront |
| The Passing | c6m1_riverbank |
| The Sacrifice | c7m1_docks |
| No Mercy | c8m1_apartment |
| Crash Course | c9m1_alleys |
| Death Toll | c10m1_caves |
| Dead Air | c11m1_greenhouse |
| Blood Harvest | c12m1_hilltop |
| Cold Stream | c13m1_alleys |
| The Last Stand | c14m1_junkyard |
Token GSLT (opzionale)
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 il quale 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 550. 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
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 ~/l4d2-server
./srcds_run -game left4dead2 -console +mp_gamemode coop +map c1m1_hotel +maxplayers 8 -port 27015
Una volta completato l'avvio, la console mostra lo stato della connessione ai server Steam. Per arrestare il server, digita quit.
Ottimizzazione dell'avvio
Parametri di avvio
| Parametro | Descrizione |
|---|---|
-game left4dead2 | Gioco da avviare (obbligatorio) |
+mp_gamemode | Modalità di gioco all'avvio |
+map | Mappa di avvio |
+maxplayers | Numero massimo di giocatori |
-port | Porta del server (27015 per impostazione predefinita) |
-ip | Indirizzo IP su cui restare in ascolto |
-tickrate 100 | Frequenza di simulazione (30 per impostazione predefinita). Aumenta il carico della CPU e richiede l'estensione Tickrate Enabler per sbloccare il tickrate |
-norestart | Impedisce allo script di riavviare il server in caso di arresto (utile con systemd) |
-console | Viene eseguito in modalità console |
-debuglog nome_del_file | Registra il debug nel file |
-high | Priorità massima per il processo del server |
-insecure | Disattiva la protezione VAC (vedi l'avviso qui sotto) |
+sv_setsteamaccount | Token GSLT (opzionale, vedi la sezione dedicata) |
-insecure disattiva la protezione VAC: usa questo parametro solo per i test, perché lascia la porta aperta ai cheater.
Assicurati di lasciare risorse libere per il sistema operativo e il software installato.
Cambiare la porta
./srcds_run -game left4dead2 -console +mp_gamemode coop +map c1m1_hotel +maxplayers 8 -port 27016
Non dimenticare di aprire la nuova porta nel firewall.
Struttura dei file
| Percorso | Descrizione |
|---|---|
left4dead2/cfg/ | File di configurazione |
left4dead2/cfg/server.cfg | Configurazione principale |
left4dead2/cfg/banned_user.cfg | Giocatori bannati (SteamID) |
left4dead2/cfg/banned_ip.cfg | Indirizzi IP bannati |
left4dead2/addons/ | Estensioni e campagne personalizzate |
left4dead2/logs/ | File di log |
Configurazione come servizio systemd
Creare il file di servizio
Esci dalla sessione dell'utente l4d2 (exit) per tornare al tuo account amministratore, poi crea il file di servizio:
sudo nano /etc/systemd/system/l4d2.service
Contenuto del file:
[Unit]
Description=Left 4 Dead 2 Server
After=network.target
[Service]
Type=simple
User=l4d2
Group=l4d2
WorkingDirectory=/home/l4d2/l4d2-server
Environment=TERM=xterm
ExecStart=/home/l4d2/l4d2-server/srcds_run -game left4dead2 -console -norestart +mp_gamemode coop +map c1m1_hotel +maxplayers 8 -port 27015
Restart=on-failure
RestartSec=20
[Install]
WantedBy=multi-user.target
Attivare e avviare il servizio
sudo systemctl daemon-reload
sudo systemctl enable l4d2.service
sudo systemctl start l4d2.service
Comandi di gestione
# Verificare lo stato
sudo systemctl status l4d2.service
# Fermare il server
sudo systemctl stop l4d2.service
# Riavviare il server
sudo systemctl restart l4d2.service
# Vedere i log
sudo journalctl -u l4d2.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 l4d2.service): due server non possono usare la stessa porta.
sudo -u l4d2 bash
cd ~/l4d2-server
screen -S l4d2
./srcds_run -game left4dead2 -console +mp_gamemode coop +map c1m1_hotel +maxplayers 8 -port 27015
Per staccare: Ctrl+A poi D
Per tornare: screen -r l4d2
Avvio in background con un log
sudo -u l4d2 bash
cd ~/l4d2-server
screen -AdmSL l4d2 ./srcds_run -game left4dead2 -console +mp_gamemode coop +map c1m1_hotel +maxplayers 8 -port 27015
| Opzione | Descrizione |
|---|---|
-A | Adatta la finestra alla dimensione del terminale |
-d -m | Avvia la sessione staccata, in background |
-S l4d2 | 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 lanciato il comando (~/l4d2-server) e contiene tutto l'output lato server. Per seguirlo in tempo reale:
tail -f ~/l4d2-server/screenlog.0
In caso di errore all'avvio, è il primo file da consultare. Per tornare alla console del server: screen -r l4d2
Il file screenlog.0 cresce a ogni avvio. Ricordati di svuotarlo o eliminarlo regolarmente.
Aggiornamento del server
Fermare il server
sudo systemctl stop l4d2.service
Scaricare la nuova versione
Come per l'installazione, aggiorna la piattaforma Windows, poi la piattaforma Linux:
sudo -u l4d2 bash
cd ~/steamcmd
./steamcmd.sh +@sSteamCmdForcePlatformType windows +force_install_dir /home/l4d2/l4d2-server +login anonymous +app_update 222860 validate +quit
./steamcmd.sh +@sSteamCmdForcePlatformType linux +force_install_dir /home/l4d2/l4d2-server +login anonymous +app_update 222860 validate +quit
exit
Riavviare il server
sudo systemctl start l4d2.service
Comandi della console
Questi comandi si usano nella console del server o tramite RCON.
| Comando | Descrizione |
|---|---|
status | Mostra i giocatori connessi e il loro identificatore |
changelevel <mappa> | Cambiare mappa |
kick <giocatore> | Espellere un giocatore |
kickid <userid> | Espellere un giocatore tramite il suo identificatore |
banid <minuti> <steamid> kick | Bannare un giocatore (0 = definitivo) |
writeid | Salvare la lista dei bannati in banned_user.cfg |
z_difficulty <livello> | Cambiare la difficoltà |
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/l4d2/backup.sh
#!/bin/bash
BACKUP_DIR="/home/l4d2/backups"
SERVER_DIR="/home/l4d2/l4d2-server"
DATE=$(date +%Y-%m-%d_%H-%M-%S)
mkdir -p $BACKUP_DIR
# Backup della configurazione
tar -czf $BACKUP_DIR/l4d2_$DATE.tar.gz -C $SERVER_DIR left4dead2/cfg
# Eliminare i backup più vecchi di 7 giorni
find $BACKUP_DIR -name "l4d2_*.tar.gz" -mtime +7 -delete
echo "Backup completato: l4d2_$DATE.tar.gz"
sudo chown l4d2:l4d2 /home/l4d2/backup.sh
sudo chmod +x /home/l4d2/backup.sh
Se installi estensioni o campagne personalizzate, aggiungi left4dead2/addons al comando tar.
Pianificare il backup
sudo crontab -u l4d2 -e
Aggiungi:
# Backup ogni giorno alle 4:00
0 4 * * * /home/l4d2/backup.sh
Connessione al server
I giocatori possono connettersi tramite:
- Avviare Left 4 Dead 2
- Aprire la console del gioco (attivata nelle opzioni del 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 l4d2.service -n 100 - Verifica che l'installazione sia completa (rilancia i due comandi
app_update) e che il file~/l4d2-server/srcds_runesista - Cerca una libreria mancante:
ldd ~/l4d2-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 viene visualizzato 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 l4d2, poi crea i collegamenti ai file di SteamCMD:
sudo -u l4d2 bash
mkdir -p ~/.steam/sdk32
ln -sf ~/steamcmd/linux32/steamclient.so ~/.steam/sdk32/steamclient.so
ln -sf ~/steamcmd/linux32/steamerrorreporter ~/l4d2-server/bin/steamerrorreporter
exit
I giocatori non riescono a connettersi
-
Verifica che
sv_allow_lobby_connect_only 0sia definito in server.cfg -
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 compare nella lista
- Verifica che
sv_lan 0sia effettivamente definito in server.cfg - Verifica che
sv_steamgroup_exclusivesia a0(a1, il server è riservato ai membri di un gruppo Steam) - Attendi qualche minuto dopo l'avvio
- Verifica che il server abbia accesso a Internet
- Aggiungi un token GSLT con
+sv_setsteamaccountper essere elencato tra i server pubblici
Problemi di prestazioni
- Rimuovi l'opzione
-tickratese l'hai aumentata - Disattiva le estensioni inutili in
left4dead2/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 dei 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 "Permission denied" eseguendo ./steamcmd.sh
Applica un chmod:
chmod +x /home/l4d2/steamcmd/linux32/steamcmd && chmod +x /home/l4d2/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.
Ottengo il messaggio "WARNING: setlocale('en_US.UTF-8') failed, using locale: 'C'"
Non è un vero problema: solo alcuni caratteri internazionali potrebbero essere visualizzati male. Per correggerlo:
sudo locale-gen en_US.UTF-8
sudo update-locale LANG=en_US.UTF-8
Se il comando locale-gen non è disponibile, 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 l4d2.service