server.cfg for CS 1.6: A Complete, Commented Example
server.cfg is where a CS 1.6 server's personality lives: its name, its rules, its network rates, its logging. The engine executes it automatically at startup and again on every map change, which is both convenient and a trap — anything you want applied once (like maxplayers) does not belong here. This is a complete, commented file you can adapt, with an explanation of what each block does and why.
When server.cfg runs
The engine auto-executes cstrike/server.cfg after it loads a map. So it runs at boot and at every map change. That means:
- Gameplay and rate cvars belong here — they should re-apply each map.
maxplayersdoes not — it is a launch-time value; set it with+maxplayerson the command line.- If a setting "resets every map change", it is because your
server.cfgre-applies an old value over your live edit. Change the file, not just the live cvar.
The file
Create /home/steam/hlds/cstrike/server.cfg:
// ---- Identity ----
hostname "My CS 1.6 Server | example.com"
sv_contact "[email protected]"
// ---- Passwords / access ----
rcon_password "use-a-long-random-string-here"
sv_password "" // set to make the server private
sv_rcon_banpenalty 15 // minutes banned after too many bad rcon tries
sv_rcon_maxfailures 5 // wrong rcon attempts before a temp ban
// ---- Master list / network mode ----
sv_lan 0 // 0 = appear on the internet list. MANDATORY for public.
sv_region 255 // 255 = world; or a numeric region code
// ---- Network rates ----
sv_maxrate 25000
sv_minrate 15000
sv_maxupdaterate 101
sv_minupdaterate 30
sv_maxcmdrate 101
sv_mincmdrate 30
sv_timeout 60
// ---- Gameplay ----
mp_timelimit 30 // minutes per map
mp_maxrounds 0 // 0 = use timelimit instead of round count
mp_freezetime 3
mp_roundtime 3
mp_startmoney 800
mp_buytime 0.25 // minutes (0.25 = 15 seconds)
mp_c4timer 35
mp_friendlyfire 0
mp_autoteambalance 1
mp_limitteams 2
mp_autokick 0 // 0 = do not auto-kick idlers/TKers
mp_flashlight 1
mp_footsteps 1
mp_tkpunish 0
// ---- Voice ----
sv_voiceenable 1
sv_alltalk 0 // 0 = teams cannot hear each other
// ---- Downloads (custom maps/sounds) ----
sv_allowdownload 1
sv_allowupload 1
sv_downloadurl "" // fast HTTP redirect; leave empty to use slow UDP download
// ---- Logging ----
log on
mp_logmessages 1
mp_logdetail 3 // log damage + kills (needed by stats plugins)
sv_log_onefile 0
sv_logbans 1
sv_logecho 1
// ---- Execute the map cycle ----
mapcyclefile "mapcycle.txt"
The blocks that matter most
sv_lan 0
The single most important line. With sv_lan 1 the server never heartbeats the master list and rejects Steam clients with a LAN error. Public servers must have sv_lan 0.
Rates
The rate block controls how much bandwidth and how many updates the server allows per client. sv_maxupdaterate 101 and sv_maxcmdrate 101 are the modern defaults for a good connection; the min values stop a client from starving itself into rubber-banding. Do not set the max absurdly high — it does not add smoothness beyond the engine's real tick rate, it just wastes bandwidth.
Logging detail
mp_logdetail 3 is required if you run a stats plugin — stats parse damage and kill log lines, and at lower detail those lines are not written. If your stats plugin "records nothing", check this first.
sv_downloadurl
Leave it empty and clients pull custom maps over the slow in-game UDP channel; point it at an HTTP server hosting your cstrike/ files and downloads are far faster. It is worth setting the moment you run custom maps.
Common errors
- Settings do not apply — the file is named
server.cfg.txt(Windows hides the extension), or it is not incstrike/. It must becstrike/server.cfgexactly. maxplayersin cfg does nothing — it is a launch-time parameter. Use+maxplayerson the command line.- Server shows as LAN / not listed —
sv_lanis 1. Set it to 0. - Stats plugin records nothing —
mp_logdetailis too low orlogis off. Setlog onandmp_logdetail 3. - A value "keeps resetting" each map —
server.cfgre-executes on map change and overwrites your live edit. Change it in the file. - rcon_password in a shared file leaked — anyone who reads the file has RCON. Keep the file readable only by the
steamuser.
Verification
Start the server and, in the console, echo a few values back to confirm the file executed:
sv_lan
mp_timelimit
sv_maxupdaterate
Each should return the value you set. Force a map change and re-check — the values should persist because the file re-executes. Once the config is stable, wire the whole thing into a systemd service and open the right firewall ports, and the server is ready for players.









