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.









