Aller au contenu principal

Comment créer son serveur Counter-Strike Source

Ce guide vous explique comment installer et configurer un serveur dédié Counter-Strike Source (CSS) sur votre VPS ou serveur dédié Linux.

Commander un serveur​

Pour héberger votre serveur Counter-Strike Source, HostMyServers propose plusieurs offres adaptées au gaming :

Prérequis​

Ressources

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 environ 10 Mbps pour 30 joueurs en tickrate 66 avec sv_maxrate 30000, et le double en tickrate 100.

  • 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 1 Go de RAM (2 Go recommandés)
  • Environ 5 Go d'espace disque libre
  • Port 27015 UDP accessible (et port 27015 TCP pour le RCON, depuis votre adresse IP fixe uniquement)

Configuration requise​

ComposantMinimumRecommandé
RAM1 Go2 Go
CPU1 cœur2 cœurs
Stockage5 Go10 Go SSD
Réseau100 Mbps1 Gbps
Protocole réseau

Counter-Strike Source utilise le port 27015 en UDP pour le jeu et en TCP pour l'accès RCON (administration à distance), qui doit être accessible uniquement depuis vos adresses IP (nécessite une adresse IP fixe).

Mise à jour du système​

sudo apt update && sudo apt upgrade -y

Installation des dépendances​

SteamCMD et le serveur CSS 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

Création d'un utilisateur dédié​

Pour des raisons de sécurité, créez un utilisateur dédié :

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

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
Sécurité du RCON

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 css :

sudo -u css bash
cd ~

Créez les répertoires et téléchargez 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

Téléchargement du serveur CSS​

Lancez l'installation du serveur (identifiant d'application 232330) :

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

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 '232330' fully installed. s'affiche.

Configuration du serveur​

Fichier server.cfg​

Créez le fichier de configuration :

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

Configuration de base​

hostname "Mon Serveur CSS"
sv_password ""
rcon_password "ChangezMoi"
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

Configuration avancée personnalisée​

Exemple de configuration plus complète, à adapter à votre communauté :

// Server.cfg créé par Let's Go
// Pour la communauté Free 4 Funs
// Partagé pour hostmyservers.fr
// Version 1.2
// -------------------------------------------------------------------------------------
// PARAMÉTRAGE SERVEUR
// -------------------------------------------------------------------------------------

// -------------------------------------------------------------------------------------
// Sécurité RCON et mot de passe
// -------------------------------------------------------------------------------------
// Mot de passe RCON (à changer)
rcon_password "changemoi"

// Mot de passe pour rejoindre le serveur (serveur public : laissez vide)
sv_password ""

// -------------------------------------------------------------------------------------
// Identification du serveur
// -------------------------------------------------------------------------------------
// Nom du serveur
hostname "Mon Serveur CSS"
sv_region 3
sv_lan 0
// Durée du bannissement (en minutes) après des échecs d'accès au RCON
sv_rcon_banpenalty 60
// Nombre maximum d'échecs d'accès au RCON avant bannissement
sv_rcon_maxfailures 10
// Nombre minimum d'échecs d'accès au RCON avant bannissement
sv_rcon_minfailures 5
// Durée (en secondes) sur laquelle sont comptés les échecs (voir sv_rcon_minfailures)
sv_rcon_minfailuretime 900

// -------------------------------------------------------------------------------------
// Configuration du serveur
// -------------------------------------------------------------------------------------

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

// -------------------------------------------------------------------------------------
// Sécurité
// -------------------------------------------------------------------------------------
sv_cheats 0
sv_consistency "1"
sv_pure "2"
sv_pure_kick_clients "1"

// -------------------------------------------------------------------------------------
// Logs du serveur
// -------------------------------------------------------------------------------------
log on
sv_logbans 1
sv_logecho 1
sv_logfile 1
sv_log_onefile 1
sv_logsdir logs
mp_logdetail 3

// -------------------------------------------------------------------------------------
// Bande passante du serveur
// -------------------------------------------------------------------------------------

// Téléchargement rapide (FastDL) : adresse d'un serveur web hébergeant les fichiers
//sv_downloadurl "https://xxxxxxxxxxxxxxxxxxx"
// Autoriser les téléchargements
sv_allowdownload 1
// Autoriser les envois de fichiers par les joueurs (sprays, etc.)
sv_allowupload 1

// Configuration optimisée pour un tickrate 100
// Nécessite l'extension Tickrate Enabler pour CS:Source et le paramètre de lancement -tickrate 100
// FPS illimités côté serveur (0 = illimité, consomme plus de ressources)
fps_max 0

// -------------------------------------------------------------------------------------
// Ne modifiez pas ces valeurs si vous ne savez pas ce que vous faites
// sv_maxrate 0 : débit illimité
// sv_maxrate 30000 : 30 000 octets/s (environ 0,24 Mbps) par joueur
// -------------------------------------------------------------------------------------
net_queued_packet_thread 0
sv_mincmdrate 75
sv_maxcmdrate 101
sv_maxrate 0
sv_minrate 20000
sv_maxupdaterate 101
sv_minupdaterate 75

// -------------------------------------------------------------------------------------
// Gestion des bannissements
// -------------------------------------------------------------------------------------
// Charge la liste des joueurs bannis par SteamID et par adresse IP
// (fichiers à placer dans cstrike/cfg)
exec banned_user.cfg
exec banned_ip.cfg

// -------------------------------------------------------------------------------------
// Gestion des bots
// -------------------------------------------------------------------------------------
// Pour activer les bots, retirez les // devant la ligne suivante
// (le fichier bot.cfg doit se trouver dans cstrike/cfg)
//exec bot.cfg

// -------------------------------------------------------------------------------------
// Statistiques du serveur
// -------------------------------------------------------------------------------------
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 ===============================
Sécurité

Choisissez un mot de passe rcon_password long et unique. Toute personne qui le connaît peut administrer votre serveur.

Paramètres principaux​

ParamètreDescription
hostnameNom public du serveur
sv_passwordMot de passe pour rejoindre (vide = public)
rcon_passwordMot de passe d'administration à distance
sv_regionRégion : 3 = Europe, 0 = Est des USA, 4 = Asie, 255 = monde entier
sv_lan0 = serveur visible sur Internet, 1 = réseau local uniquement
mp_timelimitDurée d'une map en minutes
mp_freezetimeDurée du gel en début de round, pendant laquelle les joueurs achètent leur équipement (secondes)
mp_friendlyfireTirs alliés (0 = désactivé, 1 = activé)
sv_alltalkChat vocal entre les deux équipes (0 ou 1)

Token GSLT (optionnel)​

Token GSLT

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 240. 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
Conseil

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 ~/css-server
./srcds_run -game cstrike -console +map de_dust2 +maxplayers 24 -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ètreDescription
-game cstrikeJeu à lancer (obligatoire)
+mapMap de démarrage
+maxplayersNombre maximum de joueurs (jusqu'à 64)
-portPort du serveur (27015 par défaut)
-ipAdresse IP sur laquelle écouter
-tickrate 100Fréquence de simulation (66 par défaut). Augmente la charge CPU et nécessite l'extension Tickrate Enabler
-norestartEmpêche le script de relancer le serveur en cas d'arrêt (utile avec systemd)
-consoleS'exécute en mode console
-debuglog nom_du_fichierEnregistre le debug dans le fichier
-highPriorité maximale pour le processus du serveur
-nohltvDésactive la SourceTV
-nobotsDésactive les bots
-insecureDésactive la protection VAC (voir l'avertissement ci-dessous)
+sv_setsteamaccountToken GSLT (optionnel, voir la section dédiée)
Paramètre -insecure

-insecure désactive la protection VAC : n'utilisez ce paramètre que pour des tests, il laisse la porte ouverte aux tricheurs.

Changer le port​

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

N'oubliez pas d'ouvrir le nouveau port dans le pare-feu.

Structure des fichiers​

CheminDescription
cstrike/cfg/Fichiers de configuration
cstrike/cfg/server.cfgConfiguration principale
cstrike/cfg/banned_user.cfgJoueurs bannis (SteamID)
cstrike/cfg/banned_ip.cfgAdresses IP bannies
cstrike/maps/Maps installées
cstrike/addons/Extensions (Metamod, SourceMod)
cstrike/logs/Fichiers journaux

Configuration en tant que service systemd​

Créer le fichier de service​

Quittez la session de l'utilisateur css (exit) pour revenir à votre compte administrateur, puis créez le fichier de service :

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

Contenu du fichier :

[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

Activer et démarrer le service​

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

Commandes de gestion​

# Vérifier le statut
sudo systemctl status css.service

# Arrêter le serveur
sudo systemctl stop css.service

# Redémarrer le serveur
sudo systemctl restart css.service

# Voir les logs
sudo journalctl -u css.service -f
Console du serveur

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

Un seul mode de lancement

Si le service systemd est démarré, arrêtez-le avant (sudo systemctl stop css.service) : deux serveurs ne peuvent pas utiliser le même port.

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

Pour détacher : Ctrl+A puis D

Pour revenir : screen -r css

Lancer en arrière-plan avec un journal​

sudo -u css bash
cd ~/css-server
screen -AdmSL css ./srcds_run -game cstrike -console +map de_dust2 +maxplayers 24 -port 27015
OptionDescription
-AAdapte la fenêtre à la taille du terminal
-d -mDémarre la session détachée, en arrière-plan
-S cssNom de la session
-LEnregistre la sortie du serveur dans un fichier journal

Le fichier screenlog.0 est créé dans le dossier où la commande est lancée (~/css-server) et contient toute la sortie côté serveur. Pour le suivre en direct :

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

En cas d'erreur au démarrage, c'est le premier fichier à consulter. Pour revenir à la console du serveur : screen -r css

Conseil

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

Télécharger la nouvelle version​

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

Redémarrer le serveur​

sudo systemctl start css.service

Commandes console​

Ces commandes s'utilisent dans la console du serveur ou via le RCON.

CommandeDescription
statusAffiche 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> kickBannir un joueur (0 = définitif)
writeidEnregistrer la liste des bannis dans banned_user.cfg
say <message>Envoyer un message à tous les joueurs
exec server.cfgRecharger la configuration
quitArrê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 (touche ² ou ~) :

rcon_address IP_DU_SERVEUR:27015
rcon_password VotreMotDePasse
rcon status

Sauvegarde automatique​

Script de sauvegarde​

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

# Sauvegarde de la configuration
tar -czf $BACKUP_DIR/css_$DATE.tar.gz -C $SERVER_DIR cstrike/cfg

# Supprimer les sauvegardes de plus de 7 jours
find $BACKUP_DIR -name "css_*.tar.gz" -mtime +7 -delete

echo "Sauvegarde terminée : css_$DATE.tar.gz"
sudo chown css:css /home/css/backup.sh
sudo chmod +x /home/css/backup.sh
Conseil

Si vous installez des extensions, ajoutez cstrike/addons à la commande tar.

Planifier la sauvegarde​

sudo crontab -u css -e

Ajoutez :

# Sauvegarde tous les jours à 4h
0 4 * * * /home/css/backup.sh

Connexion au serveur​

Les joueurs peuvent se connecter via :

  1. Lancer Counter-Strike Source
  2. Ouvrir la console du jeu
  3. Taper : connect IP_DU_SERVEUR:27015
  4. Si un mot de passe est configuré : password VotreMotDePasse avant 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 css.service -n 100
  • Vérifiez que l'installation est complète (relancez la commande app_update)
  • Recherchez une bibliothèque manquante : ldd ~/css-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 css, puis créez les liens vers les fichiers de 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

Les joueurs ne peuvent pas se connecter​

  • Vérifiez que le port 27015 est ouvert en UDP :

    sudo ufw status
    sudo iptables -L INPUT -n --line-numbers | grep 27015
    sudo 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 0 est bien défini dans server.cfg
  • Patientez quelques minutes après le démarrage
  • Vérifiez que le serveur a accès à Internet
  • Ajoutez un token GSLT avec +sv_setsteamaccount pour être listé dans les serveurs publics

Problèmes de performance​

  • Réduisez +maxplayers si le serveur sature
  • Désactivez les extensions inutiles dans cstrike/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/css/steamcmd/linux32/steamcmd && chmod +x /home/css/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 css.service