Comment créer son serveur Left 4 Dead 2
Ce guide vous explique comment installer et configurer un serveur dédié Left 4 Dead 2 (L4D2) sur votre VPS ou serveur dédié Linux.
Commander un serveur
Pour héberger votre serveur Left 4 Dead 2, HostMyServers propose plusieurs offres adaptées au gaming :
- VPS Performance - Idéal pour un serveur L4D2 (1 à 2 vCPU et 2 à 4 Go de RAM suffisent)
- VPS NVMe - Excellent rapport qualité/prix
- Serveurs dédiés Eco - Pour héberger plusieurs serveurs de jeux
- Serveurs dédiés Performance - Performance maximale
Prérequis
Les ressources indiquées ci-dessous correspondent aux besoins du serveur et ne tiennent pas compte des ressources déjà utilisées par le système d'exploitation, les logiciels installés ou les autres services présents sur la machine. Comptez 3 à 5 Mbps pour 10 joueurs en tickrate 30, et environ trois fois plus en tickrate 100 (nécessite l'extension Tickrate Enabler pour L4D2).
- Accès SSH root ou utilisateur avec sudo
- Système Linux 64 bits (Debian 12/13 ou Ubuntu 22.04/24.04 recommandé)
- Pare-feu actif : nftables (recommandé), iptables ou ufw (n'utilisez qu'un seul outil de pare-feu à la fois)
- Minimum 2 Go de RAM
- Environ 10 Go d'espace disque libre (SSD recommandé)
- Port 27015 UDP accessible (et port 27015 TCP pour le RCON, depuis votre adresse IP fixe uniquement)
Configuration requise
| Composant | Minimum | Recommandé |
|---|---|---|
| RAM | 2 Go | 4 Go |
| CPU | 1 cœur | 2 cœurs |
| Stockage | 10 Go | 10 Go SSD |
| Réseau | 100 Mbps | 500 Mbps |
Left 4 Dead 2 utilise le port 27015 en UDP pour le jeu et en TCP pour l'accès RCON (administration à distance). Le port TCP ne doit être accessible que depuis vos adresses IP.
Mise à jour du système
sudo apt update && sudo apt upgrade -y
Installation des dépendances
SteamCMD et le serveur L4D2 sont des programmes 32 bits : les bibliothèques 32 bits sont requises. Vérifiez d'abord que l'architecture i386 est activée :
sudo dpkg --print-foreign-architectures
Si le retour est vide, exécutez :
sudo dpkg --add-architecture i386
sudo apt update
Installez ensuite les paquets nécessaires :
sudo apt install -y wget tar screen lib32gcc-s1 lib32stdc++6 lib32z1
Création d'un utilisateur dédié
Pour des raisons de sécurité, créez un utilisateur dédié :
sudo adduser --disabled-password --gecos "" l4d2
Configuration du pare-feu
Ouvrez le port 27015 en UDP pour les joueurs. Le port 27015 en TCP correspond au RCON : limitez-le à votre adresse IP fixe (remplacez VOTRE_IP).
Avec UFW
sudo ufw allow 27015/udp
sudo ufw allow from VOTRE_IP to any port 27015 proto tcp
sudo ufw reload
Avec iptables
sudo iptables -A INPUT -p udp --dport 27015 -j ACCEPT
sudo iptables -A INPUT -p tcp -s VOTRE_IP --dport 27015 -j ACCEPT
sudo iptables-save | sudo tee /etc/iptables/rules.v4
La sauvegarde des règles au redémarrage nécessite le paquet iptables-persistent.
Avec nftables
Ces commandes utilisent la table inet filter et la chaîne input, présentes par défaut dans /etc/nftables.conf sous Debian.
sudo nft add rule inet filter input udp dport 27015 accept
sudo nft add rule inet filter input ip saddr VOTRE_IP tcp dport 27015 accept
(echo "flush ruleset"; sudo nft list ruleset) | sudo tee /etc/nftables.conf
N'ouvrez jamais le port TCP 27015 à tout le monde : il donne accès au RCON. Sans adresse IP fixe, n'ouvrez pas ce port et passez par un tunnel SSH.
Installation de SteamCMD
Connectez-vous en tant qu'utilisateur l4d2 :
sudo -u l4d2 bash
cd ~
Créez les répertoires et téléchargez 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
Téléchargement du serveur L4D2
Lancez l'installation du serveur (identifiant d'application 222860). Une simple commande app_update ne suffit plus pour obtenir un serveur L4D2 fonctionnel sous Linux : il faut forcer l'installation de la plateforme Windows, puis celle de la plateforme Linux, dans le même dossier :
./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
Si l'installation s'arrête avec une erreur, relancez simplement la même commande : SteamCMD reprend où il s'est arrêté.
À la fin, le message Success! App '222860' fully installed. s'affiche. Vérifiez que le script de lancement du serveur est bien présent :
ls ~/l4d2-server/srcds_run
Configuration du serveur
Fichier server.cfg
Créez le fichier de configuration :
nano ~/l4d2-server/left4dead2/cfg/server.cfg
Configuration de base
// Nom du serveur
hostname "Mon Serveur L4D2"
// Mot de passe du serveur (vide = public)
sv_password ""
// Mot de passe RCON
rcon_password "ChangezMoi"
// Région du serveur
// 0 : États-Unis (Est)
// 1 : États-Unis (Ouest)
// 2 : Amérique du Sud
// 3 : Europe
// 4 : Asie
// 5 : Australie
// 6 : Moyen-Orient
// 7 : Afrique
// 255 : monde entier (par défaut)
sv_region 3
// 0 : serveur visible sur Internet, 1 : réseau local uniquement
sv_lan 0
// Commandes de triche (0 = désactivées)
sv_cheats 0
// Autorise la connexion directe au serveur (sans passer par un lobby)
sv_allow_lobby_connect_only 0
// Étiquettes du serveur, séparées par des virgules (exemple : "fr,coop")
//sv_tags "fr,coop"
// Réserver le serveur aux membres d'un groupe Steam
// 1 : seuls les membres du groupe peuvent voir et rejoindre le serveur
// 0 : serveur public
// Pour l'utiliser, renseignez l'ID de votre groupe Steam avec sv_steamgroup
sv_steamgroup_exclusive 0
//sv_steamgroup id_du_groupe
// Nombre de slots affichés dans la liste des serveurs (-1 = nombre réel de slots)
sv_visiblemaxplayers -1
// Difficulté des zombies : Easy, Normal, Hard, Impossible
z_difficulty normal
// Modes de jeu autorisés
// Si cette ligne n'est pas prise en compte, SourceMod doit être installé :
// faites alors précéder la commande de sm_cvar (sm_cvar sv_gametypes ...)
sv_gametypes "coop,realism,survival,versus,teamversus,scavenge,teamscavenge,mutation12,right2live"
// Active la communication vocale sur le serveur
sv_voiceenable 1
// Autorise les joueurs des deux équipes à se parler (0 = non, 1 = oui)
// Si la valeur est à 1, vérifiez que sv_voiceenable est également à 1
sv_alltalk 0
// Sécurité RCON
// Durée du bannissement (en minutes) après des échecs d'accès au RCON
sv_rcon_banpenalty 3600
// Nombre maximum d'échecs d'accès au RCON avant bannissement
sv_rcon_maxfailures 3
// Nombre minimum d'échecs d'accès au RCON avant bannissement
sv_rcon_minfailures 1
// Durée (en secondes) sur laquelle sont comptés les échecs d'accès au RCON
sv_rcon_minfailuretime 10
// Vérification des fichiers des joueurs
// Attention : avec des extensions ou des campagnes personnalisées,
// ces valeurs expulsent les joueurs dont les fichiers diffèrent (passez-les à 0)
sv_pure 2
sv_consistency 1
// Expulse les joueurs qui n'ont pas les fichiers d'origine du jeu
sv_pure_kick_clients 1
// Autorise (1) ou non (0) la commande wait dans les fichiers cfg des joueurs
sv_allow_wait_command 0
// Active (1) ou désactive (0) l'affichage du message du jour (MOTD)
motd_enabled 1
// Journaux
log on
sv_logecho 0
sv_logfile 1
sv_log_onefile 0
sv_logbans 1
sv_logflush 0
sv_logsdir logs
// Gestion des bannissements
exec banned_user.cfg
exec banned_ip.cfg
// Génère les fichiers de bannissement ci-dessus s'ils n'existent pas
writeid
writeip
Par défaut, un serveur dédié L4D2 n'accepte que les connexions passant par un lobby. Sans la ligne sv_allow_lobby_connect_only 0, les joueurs ne pourront pas rejoindre votre serveur directement ni via la liste des serveurs.
Choisissez un mot de passe rcon_password long et unique. Toute personne qui le connaît peut administrer votre serveur.
Modes de jeu et maps
Modes de jeu
Le mode se choisit au lancement avec +mp_gamemode :
| Mode | Description | Joueurs |
|---|---|---|
coop | Campagne coopérative | 4 |
realism | Coopératif sans halo ni indication | 4 |
versus | Survivants contre infectés | 8 |
survival | Résister à des vagues d'infectés | 4 |
scavenge | Récupérer des bidons d'essence | 8 |
Première map de chaque campagne
| Campagne | Map de départ |
|---|---|
| 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 (optionnel)
Le token GSLT (Game Server Login Token) n'est pas obligatoire mais recommandé : il permet à votre serveur d'être listé dans les serveurs publics de Steam.
Pour le générer, connectez-vous à votre compte Steam et accédez à la Gestion des comptes de serveur de jeu Steam.
La création du token a quelques prérequis :
- Votre compte Steam ne doit pas être banni de la communauté ou verrouillé
- Votre compte Steam ne doit pas être limité
- Votre compte Steam doit avoir un numéro de téléphone enregistré
- Votre compte Steam doit posséder le jeu pour lequel vous créez un compte de serveur de jeu
- Votre compte Steam peut créer jusqu'à 1000 comptes de serveur de jeu
Dans la case App ID du jeu de base, saisissez 550. Vous pouvez ajouter un mémo pour vous rappeler de quel serveur il s'agit, puis finalisez en cliquant sur le bouton Créer.
Pour utiliser le token, ajoutez-le à la ligne de lancement :
+sv_setsteamaccount VOTRETOKEN
Ajoutez le paramètre à toutes vos lignes de lancement : le premier lancement, la ligne ExecStart du service systemd et la commande lancée avec screen.
Premier lancement
cd ~/l4d2-server
./srcds_run -game left4dead2 -console +mp_gamemode coop +map c1m1_hotel +maxplayers 8 -port 27015
Une fois le démarrage terminé, la console affiche l'état de la connexion aux serveurs Steam. Pour arrêter le serveur, tapez quit.
Optimisation du lancement
Paramètres de lancement
| Paramètre | Description |
|---|---|
-game left4dead2 | Jeu à lancer (obligatoire) |
+mp_gamemode | Mode de jeu au démarrage |
+map | Map de démarrage |
+maxplayers | Nombre maximum de joueurs |
-port | Port du serveur (27015 par défaut) |
-ip | Adresse IP sur laquelle écouter |
-tickrate 100 | Fréquence de simulation (30 par défaut). Augmente la charge CPU et nécessite l'extension Tickrate Enabler pour débloquer le tickrate |
-norestart | Empêche le script de relancer le serveur en cas d'arrêt (utile avec systemd) |
-console | S'exécute en mode console |
-debuglog nom_du_fichier | Enregistre le debug dans le fichier |
-high | Priorité maximale pour le processus du serveur |
-insecure | Désactive la protection VAC (voir l'avertissement ci-dessous) |
+sv_setsteamaccount | Token GSLT (optionnel, voir la section dédiée) |
-insecure désactive la protection VAC : n'utilisez ce paramètre que pour des tests, il laisse la porte ouverte aux tricheurs.
Veillez à laisser des ressources libres pour le système d'exploitation et les logiciels installés.
Changer le port
./srcds_run -game left4dead2 -console +mp_gamemode coop +map c1m1_hotel +maxplayers 8 -port 27016
N'oubliez pas d'ouvrir le nouveau port dans le pare-feu.
Structure des fichiers
| Chemin | Description |
|---|---|
left4dead2/cfg/ | Fichiers de configuration |
left4dead2/cfg/server.cfg | Configuration principale |
left4dead2/cfg/banned_user.cfg | Joueurs bannis (SteamID) |
left4dead2/cfg/banned_ip.cfg | Adresses IP bannies |
left4dead2/addons/ | Extensions et campagnes personnalisées |
left4dead2/logs/ | Fichiers journaux |
Configuration en tant que service systemd
Créer le fichier de service
Quittez la session de l'utilisateur l4d2 (exit) pour revenir à votre compte administrateur, puis créez le fichier de service :
sudo nano /etc/systemd/system/l4d2.service
Contenu du fichier :
[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
Activer et démarrer le service
sudo systemctl daemon-reload
sudo systemctl enable l4d2.service
sudo systemctl start l4d2.service
Commandes de gestion
# Vérifier le statut
sudo systemctl status l4d2.service
# Arrêter le serveur
sudo systemctl stop l4d2.service
# Redémarrer le serveur
sudo systemctl restart l4d2.service
# Voir les logs
sudo journalctl -u l4d2.service -f
Avec systemd, la console du serveur n'est pas interactive. Pour envoyer des commandes, utilisez le RCON depuis le jeu ou lancez le serveur avec screen (voir ci-dessous).
Lancement avec screen (alternative)
Si le service systemd est démarré, arrêtez-le avant (sudo systemctl stop l4d2.service) : deux serveurs ne peuvent pas utiliser le même port.
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
Pour détacher : Ctrl+A puis D
Pour revenir : screen -r l4d2
Lancer en arrière-plan avec un journal
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
| Option | Description |
|---|---|
-A | Adapte la fenêtre à la taille du terminal |
-d -m | Démarre la session détachée, en arrière-plan |
-S l4d2 | Nom de la session |
-L | Enregistre la sortie du serveur dans un fichier journal |
Le fichier screenlog.0 est créé dans le dossier où la commande est lancée (~/l4d2-server) et contient toute la sortie côté serveur. Pour le suivre en direct :
tail -f ~/l4d2-server/screenlog.0
En cas d'erreur au démarrage, c'est le premier fichier à consulter. Pour revenir à la console du serveur : screen -r l4d2
Le fichier screenlog.0 grossit à chaque lancement. Pensez à le purger ou à le supprimer régulièrement.
Mise à jour du serveur
Arrêter le serveur
sudo systemctl stop l4d2.service
Télécharger la nouvelle version
Comme pour l'installation, mettez à jour la plateforme Windows, puis la plateforme 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
Redémarrer le serveur
sudo systemctl start l4d2.service
Commandes console
Ces commandes s'utilisent dans la console du serveur ou via le RCON.
| Commande | Description |
|---|---|
status | Affiche les joueurs connectés et leur identifiant |
changelevel <map> | Changer de map |
kick <joueur> | Expulser un joueur |
kickid <userid> | Expulser un joueur par son identifiant |
banid <minutes> <steamid> kick | Bannir un joueur (0 = définitif) |
writeid | Enregistrer la liste des bannis dans banned_user.cfg |
z_difficulty <niveau> | Changer la difficulté |
say <message> | Envoyer un message à tous les joueurs |
exec server.cfg | Recharger la configuration |
quit | Arrêter le serveur |
Utiliser le RCON depuis le jeu
Votre adresse IP doit être autorisée sur le port TCP 27015 dans le pare-feu.
Dans la console du jeu :
rcon_address IP_DU_SERVEUR:27015
rcon_password VotreMotDePasse
rcon status
Sauvegarde automatique
Script de sauvegarde
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
# Sauvegarde de la configuration
tar -czf $BACKUP_DIR/l4d2_$DATE.tar.gz -C $SERVER_DIR left4dead2/cfg
# Supprimer les sauvegardes de plus de 7 jours
find $BACKUP_DIR -name "l4d2_*.tar.gz" -mtime +7 -delete
echo "Sauvegarde terminée : l4d2_$DATE.tar.gz"
sudo chown l4d2:l4d2 /home/l4d2/backup.sh
sudo chmod +x /home/l4d2/backup.sh
Si vous installez des extensions ou des campagnes personnalisées, ajoutez left4dead2/addons à la commande tar.
Planifier la sauvegarde
sudo crontab -u l4d2 -e
Ajoutez :
# Sauvegarde tous les jours à 4h
0 4 * * * /home/l4d2/backup.sh
Connexion au serveur
Les joueurs peuvent se connecter via :
- Lancer Left 4 Dead 2
- Ouvrir la console du jeu (activée dans les options du jeu)
- Taper :
connect IP_DU_SERVEUR:27015 - Si un mot de passe est configuré :
password VotreMotDePasseavant de se connecter
Vous pouvez aussi ajouter le serveur dans les favoris de Steam (menu Affichage, Serveurs, onglet Favoris).
En cas de problème
Le serveur ne démarre pas
- Vérifiez les logs :
sudo journalctl -u l4d2.service -n 100 - Vérifiez que l'installation est complète (relancez les deux commandes
app_update) et que le fichier~/l4d2-server/srcds_runexiste - Recherchez une bibliothèque manquante :
ldd ~/l4d2-server/srcds_linux | grep "not found", puis installez le paquet 32 bits correspondant
Avertissement libtinfo.so.5 ou libncurses.so.5
Si le message WARNING: Failed to load 32-bit libtinfo.so.5 or libncurses.so.5 s'affiche au démarrage malgré l'installation des dépendances, créez les liens symboliques vers les versions 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
Si les fichiers .so.6 n'existent pas, installez d'abord le paquet libncurses6:i386.
Erreurs steamclient.so et steamerrorreporter
Connectez-vous en tant qu'utilisateur l4d2, puis créez les liens vers les fichiers de 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
Les joueurs ne peuvent pas se connecter
-
Vérifiez que
sv_allow_lobby_connect_only 0est défini dans server.cfg -
Vérifiez que le port 27015 est ouvert en UDP :
sudo ufw statussudo iptables -L INPUT -n --line-numbers | grep 27015sudo nft list ruleset | grep 27015 -
Vérifiez que le serveur écoute :
ss -ulnp | grep 27015 -
Testez depuis une autre machine avec
nc -zvu IP_SERVEUR 27015
Le serveur n'apparaît pas dans la liste
- Vérifiez que
sv_lan 0est bien défini dans server.cfg - Vérifiez que
sv_steamgroup_exclusiveest à0(à1, le serveur est réservé aux membres d'un groupe Steam) - Patientez quelques minutes après le démarrage
- Vérifiez que le serveur a accès à Internet
- Ajoutez un token GSLT avec
+sv_setsteamaccountpour être listé dans les serveurs publics
Problèmes de performance
- Retirez l'option
-tickratesi vous l'avez augmentée - Désactivez les extensions inutiles dans
left4dead2/addons - Planifiez des redémarrages réguliers
FAQ
Quels sont les ports à ouvrir ?
En plus du port du serveur (27015 en UDP), ces ports sont nécessaires à Steam. Ils permettent au serveur de recevoir les réponses des serveurs Steam lorsque votre pare-feu bloque le trafic entrant par défaut :
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
J'obtiens « Permission non accordée » en exécutant ./steamcmd.sh
Appliquez un chmod :
chmod +x /home/l4d2/steamcmd/linux32/steamcmd && chmod +x /home/l4d2/steamcmd/steamcmd.sh
Mon serveur reste figé sur « Network: IP, mode MP, dedicated Yes, ports 27015 SV / 27005 CL »
Vérifiez que le port n'est pas déjà utilisé par un autre processus :
sudo lsof -i :27015
Si le port est libre, vérifiez que les règles Steam de la première question sont bien appliquées.
J'ai le message « WARNING: setlocale('en_US.UTF-8') failed, using locale: 'C' »
Ce n'est pas un réel problème : seuls certains caractères internationaux peuvent mal s'afficher. Pour le corriger :
sudo locale-gen en_US.UTF-8
sudo update-locale LANG=en_US.UTF-8
Si la commande locale-gen est introuvable, installez d'abord le paquet locales avec sudo apt install -y locales.
J'obtiens une erreur ulimit (no permission / can not open file)
Définissez la limite de fichiers ouverts à 2048, valeur recommandée par Valve. Pour la session en cours, avant de lancer le serveur :
ulimit -n 2048
Avec systemd, ajoutez cette ligne dans la section [Service] du fichier de service, puis rechargez et redémarrez :
LimitNOFILE=2048
sudo systemctl daemon-reload
sudo systemctl restart l4d2.service