Counter-Strike: Source Server Setup: SteamCMD, server.cfg, RCON & SourceMod
How to stand up a Counter-Strike: Source dedicated server: installing the free app 232330 with SteamCMD (anonymous login works), the srcds_run launch line and the +ip 0.0.0.0 RCON-binding fix, why CS:S is locked to 66 tick (the -tickrate flag is dead), which ports to forward, the sv_lan 0 visibility trap, enabling genuine Source RCON, the honest GSLT situation, and the SourceMod + Metamod:Source admin stack that still works natively on CS:S.
Counter-Strike: Source is still one of the busiest classic Source games to host - a real community-server scene 18 years on, and the dedicated server is free, runs natively on Linux, and does not require you to own the game. If your mental model comes from CS2, unlearn a couple of things: CS:S runs the older Source-1 engine, so it uses srcds (not CS2's dedicated binary), it is locked to 66 tick, and the classic SourceMod stack works on it natively - none of the CS2 plugin breakage applies here.
This guide is for Counter-Strike: Source. For the admin command vocabulary once your server is running, see the companion Counter-Strike: Source RCON Commands reference.
Installing the server with SteamCMD
The dedicated server is its own free Steam app - 232330 ("Counter-Strike: Source Dedicated Server"), separate from the game client (240). Anonymous login works:
Re-run the same command with the server stopped to update. On 64-bit Linux, install the 32-bit libraries first - SteamCMD itself is 32-bit and needs them regardless:
+ip 0.0.0.0 is the one to remember on Linux. Without binding to all interfaces, remote RCON connections frequently fail to reach the server - this is the load-bearing fix, more so than -usercon (which is good practice but not what enables RCON; the password does).
+maxplayers is startup-only and defaults to 32 - you cannot change it without a restart.
Run it under screen, tmux, or a systemd unit; srcds_run auto-restarts after a crash.
CS:S is fixed at 66 tick. The -tickrate command-line flag you will see in old guides is dead on modern CS:S builds - it does nothing without a third-party patch tool. Do not promise "100 tick"; plan around 66. (This is a real difference from CS2, which has configurable tick.)
Ports to forward
Port
Protocol
Purpose
27015
UDP
Game traffic + server queries
27015
TCP
RCON (same number, different transport)
27020
UDP
SourceTV, only if you enable it (tv_enable 1)
Query and game share 27015 with no offset, and RCON is TCP on that same port - forward 27015 for both UDP and TCP. The 27005 port in old guides is a game client's outbound port; you do not forward it on a server. Ignore the padded 27031-27036 ranges some port-forwarding sites list - that is Steam client streaming lore, not a CS:S server requirement.
server.cfg essentials
CS:S auto-executes cstrike/cfg/server.cfg (the +exec server.cfg above) on load. A minimal working config:
hostname "My CS:S Server"
rcon_password "use-a-long-random-string"
sv_password "" // set a value to make the server private
sv_lan 0
sv_lan 0 is mandatory to be seen on the internet. With sv_lan 1 the server runs fine and you can join it locally, but it never appears in the internet server browser and rejects outside clients as "restricted to local clients" - this is the single most common "my server doesn't show up" cause for CS:S.
RCON: real Source RCON
CS:S speaks the standard Valve Source RCON protocol over TCP on the game port - the same protocol as CS2, TF2, and every srcds game, so any Source RCON tool works. Set rcon_password in server.cfg to enable it; leave it empty to keep RCON off. One caution: Source RCON traffic is unencrypted, so a weak password is sniffable - use a long random string, and only expose the RCON port to networks you trust.
The GSLT question (honest answer)
For CS:GO and CS2, a Game Server Login Token is mandatory to appear in the server browser. For CS:Source, sources genuinely disagree - some hosting docs list a GSLT as required for the master list, others state CS:S does not need one, and in practice most "server not listed" reports are resolved by sv_lan 0 alone, with no token involved. The safe, cost-free approach:
Set sv_lan 0 and check whether your server appears in the browser.
If it does not, register a token (it is free - create it under the client app 240, not the server app, and add +sv_setsteamaccount YOUR_TOKEN to the launch line).
Don't blindly copy the "GSLT is required" step from a CS:GO/CS2 tutorial as if it were a hard CS:S requirement - it may not be.
SourceMod + Metamod:Source
Here CS:S has an advantage over CS2: the classic Source-1 admin stack works natively and is stable in 2026. Install in order:
Metamod:Source - the plugin loader, extracted into cstrike/addons/.
SourceMod - admin menus, persistent bans, votes, and thousands of community plugins, also into cstrike/addons/.
Grab the stable branch of each. Admins are configured in addons/sourcemod/configs/admins_simple.ini. (Note: none of the CS2 SourceMod breakage - the MetaMod:Source v2 / CounterStrikeSharp situation - applies to CS:S; this is the legacy stack that just works.)
FastDL for custom content
To serve custom maps and content at web speed instead of the slow in-game transfer, point clients at an HTTP mirror in server.cfg:
Mirror your maps/, sound/, materials/ folders under that URL and pre-compress large files as .bz2 - Source clients decompress them transparently.
Hardware
Like all Source games the CS:S server is effectively single-thread bound - per-core clock speed beats core count, and one instance per core is the standard way to scale. A vanilla 32-slot instance is light on RAM (plugins raise it); a small 2 GB VPS runs one comfortably, plus disk for the install and any custom content.
MantaScope tracks the live Counter-Strike: Source server list with population history, per-server rank, uptime and downtime incidents, and player counts that separate humans from bots. Because CS:S speaks genuine Valve Source RCON, you can claim your server on MantaScope and administer it from the browser: live player list, kick/ban and console over the rcon_password you set above, plus population graphs, scheduled messages, automations and Discord notifications.