Counter-Strike 2 remains the most-played game on Steam for a third consecutive year, regularly clearing over a million concurrent players and touching an all-time concurrent peak of 1,862,531 during the BLAST Austin Major in April 2025, according to tracking from ActivePlayer.io. Recent tracking puts CS2’s 24-hour peak at roughly 1.19 million players in August 2026, and the competitive scene shows no sign of slowing — the IEM Cologne 2026 Major just wrapped its Grand Finals, with Falcons and FURIA battling through the playoff bracket in front of a global audience.

That scale of activity is exactly why so many players, communities, and small esports organizations run their own CS2 dedicated server instead of relying purely on Valve’s public matchmaking. A self-hosted or rented CS2 server gives you full control over map rotation, tick behavior, plugins, and who gets to join — something matchmaking can’t offer. Community servers are also where most competitive teams run scrims, where Workshop-map servers host retakes and surf communities, and where esports organizations spin up private instances to practice ahead of events like Cologne.

This tutorial walks through the entire process of standing up a CS2 dedicated server from scratch: installing SteamCMD, downloading the correct server build, generating a Game Server Login Token, configuring server.cfg, opening the right ports, and layering on the Metamod:Source and CounterStrikeSharp plugin stack that has effectively replaced SourceMod for this engine. By the end, you’ll have a working, securable CS2 server you fully control, plus the pricing data to decide whether self-hosting or renting managed hosting makes more sense for your situation.

None of the steps below require special hosting-provider access or a paid Steam license beyond the free-to-play game itself — everything runs through SteamCMD, Valve’s own free command-line tool, on hardware you control. That matters whether you’re a solo admin standing up a private practice server for a five-stack of friends, or a small organization building out infrastructure ahead of a scrim block against another team.

What You Need Before You Start

Before touching SteamCMD, gather a few things. A CS2 dedicated server is not a lightweight service — the install alone runs close to 60 GB, and Valve’s own defaults plus cross-checked hosting-provider documentation from Hetzner and IONOS converge on the same baseline hardware floor.

RequirementMinimumRecommended
CPU3.0 GHz quad-core3.5+ GHz, 4+ cores
RAM6 GB8–16 GB
Storage50 GB free (SSD)80+ GB NVMe SSD
OSUbuntu 20.04+ / Debian 11+ or Windows Server 2019+Ubuntu 22.04 LTS
NetworkStable uplink, reserved IP100+ Mbps symmetric
Steam accountPhone-verified (for GSLT)Dedicated “server” account

You’ll also need a Steam account with a verified phone number attached — that’s a hard requirement for generating the Game Server Login Token in Step 5, not an optional nicety. Many admins create a dedicated “server” Steam account separate from their personal one specifically so the GSLT isn’t tied to an account they use for anything else.

Finally, decide where the server will live. Running it on a spare PC at home works fine for testing and small private groups, but for anything public-facing you’ll want a VPS or dedicated box with a stable IP and enough uplink bandwidth that 10–20 simultaneous players don’t saturate your home connection. See the pricing comparison later in this guide if you’d rather rent than self-host.

Step 1: Choose Linux or Windows for Your Server

Valve ships official CS2 dedicated server binaries for both Linux and Windows, and every major hosting provider’s documentation — Hetzner, IONOS, ZAP-Hosting — covers a path for each. Linux (Ubuntu 22.04 LTS or Debian 11+) is the more common choice for anything running unattended on a VPS: it’s lighter on resources, easier to automate with systemd (Step 12), and it’s what most community tooling — Metamod, CounterStrikeSharp, MatchZy — is documented and tested against first.

Windows is a legitimate option if you’re more comfortable administering Windows Server, or if you’re repurposing a Windows machine you already own. The steps in this guide are written primarily for Linux, since that’s the path most rented and self-hosted CS2 servers take, but each command has a direct Windows equivalent — SteamCMD ships a Windows .exe alongside the Linux shell script, and the server binary itself is cs2.exe rather than a Linux executable.

If you’re not sure which to pick, default to Linux unless you have a specific reason not to.

Step 2: Install SteamCMD

SteamCMD is Valve’s official command-line tool for downloading and updating any Steam-distributed dedicated server — the same tool used across most other server tutorials on this site, from Rust to Valheim to Terraria.

On Ubuntu or Debian, the package-manager route is the simplest:

sudo add-apt-repository multiverse
sudo dpkg --add-architecture i386
sudo apt update
sudo apt install steamcmd

Or, if you’d rather install it manually without adding a repository:

mkdir ~/steamcmd && cd ~/steamcmd
curl -sqL "https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz" -o steamcmd_linux.tar.gz
tar -xvzf steamcmd_linux.tar.gz
./steamcmd.sh

Either method drops you into an interactive SteamCMD prompt on first launch, which confirms the tool downloaded and initialized correctly before you move on to actually installing CS2’s server files.

Step 3: Download the CS2 Dedicated Server Files

This is the step where a lot of guides — and even AI-generated search summaries — get the App ID wrong. Counter-Strike 2 merged its client and dedicated server into a single App ID: 730. Unlike CS:GO, which used a separate 740 branch specifically for dedicated servers, CS2 has no such split. If you come across instructions telling you to run app_update 740, they’re describing the old CS:GO workflow, not CS2’s.

Point SteamCMD at a dedicated install folder and pull the server files anonymously — no paid Steam login is required to download dedicated server content:

./steamcmd.sh +force_install_dir ~/cs2server +login anonymous +app_update 730 validate +quit

This step downloads roughly 60 GB, so expect anywhere from 15 minutes to well over an hour depending on your connection and disk speed. The validate flag isn’t optional cosmetic flair — it checks every downloaded file against Valve’s manifest and re-pulls anything corrupted or incomplete, which matters a lot on a first install.

If you’re on Linux, there’s a CS2-specific quirk that didn’t exist in quite the same form for CS:GO: the dedicated server binary looks for a shared library called steamclient.so in a specific location, and on a fresh SteamCMD install it usually isn’t there yet. Skip this step and the server binary fails to start with a missing-library error that gives almost no useful detail about what actually went wrong.

The fix is a symlink pointing the expected location at wherever your SteamCMD installation actually placed steamclient.so — the exact source path depends on whether you installed SteamCMD via your distribution’s package (typically under ~/.local/share/Steam/steamcmd/linux64/) or extracted it manually into a custom folder in Step 2:

mkdir -p ~/.steam/sdk64
ln -s ~/.local/share/Steam/steamcmd/linux64/steamclient.so ~/.steam/sdk64/steamclient.so

Adjust the source half of that command to match your own SteamCMD install path if you used the manual tarball method instead of the apt package. You only need to do this once per machine, not once per server instance.

Step 5: Generate a Game Server Login Token (GSLT)

Every public-facing CS2 server needs a Game Server Login Token, generated for free at Steam’s own game server management page. Without one, your server may still accept some direct connections, but it won’t show up as a properly authenticated, VAC-eligible listing, and many players’ clients will refuse to join it.

  1. Go to steamcommunity.com/dev/managegameservers while logged into the Steam account you want tied to the server.
  2. Enter App ID 730.
  3. Give the server a memorable label so you can find it again later.
  4. Click Create, and copy the generated token somewhere safe.

This only works if the Steam account has a phone number linked to it — accounts without phone verification can’t generate GSLTs at all, which trips up more first-time server admins than almost any other step in this guide. Tokens also expire after five weeks of disuse, so if you spin up a server, take it down for a long break, and come back later to find it silently rejecting connections, check whether your GSLT has quietly expired before assuming something else broke.

You’ll bind the token to your server in server.cfg (next step) or as a launch parameter: +sv_setsteamaccount YOUR_TOKEN_HERE.

Step 6: Configure server.cfg

CS2 still uses the legacy “csgo” folder name internally for its config path — one of several small reminders that this is a Source 2 engine iterating on two decades of Counter-Strike infrastructure rather than a from-scratch rewrite. Your main configuration file lives at:

game/csgo/cfg/server.cfg

If the file doesn’t exist yet, create it as a plain text file at that path. A minimal working configuration looks like this:

hostname "My CS2 Server"
rcon_password "ChangeThisImmediately"
sv_setsteamaccount "YOUR_GSLT_TOKEN"
sv_lan 0
sv_password ""
sv_cheats 0
mp_maxrounds 24
CvarPurpose
hostnameServer name shown in the in-game browser
rcon_passwordRemote console admin password — must be strong and unique
sv_setsteamaccountBinds your GSLT token to this server instance
sv_lan0 = visible on the public internet, 1 = LAN-only
sv_passwordOptional join password for private servers
sv_cheatsMust stay 0 for legitimate public or competitive play
mp_maxroundsRounds per match (24 is standard competitive)

Load this file automatically by adding +exec server.cfg to your launch command in Step 8. Every cvar here can be overridden per-map or per-mode with additional .cfg files if you want different settings for competitive versus casual play — a common pattern is a separate competitive.cfg with mp_maxrounds 24 and overtime rules, alongside a looser deathmatch.cfg with friendly fire and round timers disabled, both exec’d on demand from RCON when you switch what the server is being used for that session.

Step 7: Open the Required Firewall Ports

CS2 dedicated servers need two ports open, both for TCP and UDP:

PortProtocolPurpose
27015TCP + UDPPrimary game port — client connections and RCON
27016TCP + UDPSecondary port — GOTV/SourceTV spectator relay
27015–27020UDPSafe forwarding buffer recommended by hosting providers for multi-instance boxes

On a cloud VPS, this usually means editing a security-group or firewall rule in your provider’s control panel in addition to any OS-level firewall (ufw, firewalld) running on the box itself — forgetting one or the other is one of the most common reasons a server looks fine locally but is unreachable from the outside. If you’re running this from a home connection instead of a VPS, you’ll also need to configure port forwarding on your router, pointing both ports at the server machine’s LAN IP.

Test connectivity before assuming it’s broken on the CS2 side: a basic port-check tool, or a friend attempting to connect from outside your network, will tell you immediately whether the problem is CS2 configuration or network/firewall configuration.

Step 8: Launch Your CS2 Dedicated Server

With SteamCMD’s download complete, the symlink fixed, your GSLT in hand, and server.cfg written, you’re ready to launch. From your install directory:

cd ~/cs2server/game/bin/linuxsteamrt64
./cs2 -dedicated +map de_dust2 +exec server.cfg -port 27015

Windows admins run the equivalent cs2.exe from the game\bin\win64 folder with the same flags. You can swap +map de_dust2 for any other map in CS2’s rotation, and layer on additional launch parameters like +game_mode and +game_type to force competitive, wingman, or deathmatch rulesets at startup instead of relying entirely on server.cfg defaults.

On first launch, watch the console output closely — a successful start ends with the server reporting it’s listening on your chosen port, not an error about a missing steamclient.so (Step 4) or a rejected GSLT (Step 5).

Step 9: Connect to Your Server and Verify It’s Live

From inside CS2, open the developer console and connect directly with:

connect YOUR_SERVER_IP:27015

If that works from another machine on a different network — not just from localhost or your own LAN — your port forwarding and GSLT are both functioning correctly. To confirm the server is publicly discoverable rather than just directly reachable, check the in-game community server browser and search by your server’s hostname.

A server that accepts a direct connect but never appears in the browser almost always points back to a GSLT problem — either it wasn’t generated correctly, wasn’t bound via sv_setsteamaccount, or the account behind it lacks phone verification. A server that refuses connections outright almost always means Step 7’s ports aren’t actually open the way you think they are.

Step 10: Install Metamod:Source and CounterStrikeSharp

This is where a lot of returning Source-engine admins get tripped up: SourceMod, the plugin platform that powered nearly every CS:GO community server for over a decade, does not support CS2 and never has — it remains a Source 1-only project. If you’re following an old tutorial or a habit from CS:GO days, stop before you waste an install.

The modern replacement stack is Metamod:Source — the low-level loader that lets external code hook into the engine — plus CounterStrikeSharp, a C# plugin runtime built on top of Metamod that has become the de facto standard for CS2 server plugins. Both are actively maintained, open-source projects. Installation order matters: Metamod has to be in place before CounterStrikeSharp will load.

Installing Metamod:Source

Download the latest Linux build from Metamod:Source’s official site, then extract it directly into your CS2 install’s csgo folder so its addons directory merges with the existing one:

cd ~/cs2server/game/csgo
wget https://mms.alliedmods.net/mmsdrop/2.0/mmsource-latest-linux.tar.gz
tar -xvzf mmsource-latest-linux.tar.gz

Then add Metamod’s VDF loader line to gameinfo.gi — a one-time text edit documented on the Metamod:Source site — so CS2 actually picks up the plugin loader on startup.

Installing CounterStrikeSharp

Grab the matching release from the CounterStrikeSharp GitHub repository — the project has crossed 1,300 GitHub stars and ships frequent updates — and extract it into the same csgo folder, layering on top of Metamod:

cd ~/cs2server/game/csgo
wget https://github.com/roflmuffin/CounterStrikeSharp/releases/latest/download/counterstrikesharp-with-runtime-linux-latest.zip
unzip counterstrikesharp-with-runtime-linux-latest.zip -d .

Restart the server after both are installed. A successful load shows Metamod and CounterStrikeSharp identifying themselves in the console startup log, and the official CounterStrikeSharp docs list a css_plugins console command you can run to confirm what’s currently loaded.

Step 11: Add Competitive Match Tools with MatchZy

If your server exists for scrims, tournament practice, or any organized 5v5 play rather than casual pub games, MatchZy is worth installing on top of CounterStrikeSharp. It’s an open-source, MIT-licensed plugin purpose-built for competitive match management: knife-round handling, best-of-1/3/5 series, map veto sequences, team-side locking, and structured match configs that replace a lot of manual RCON admin work.

Install it the same way as any other CounterStrikeSharp plugin — download the release, drop it into the addons/counterstrikesharp/plugins folder, and restart (or use CounterStrikeSharp’s plugin-reload command to pick it up without a full server restart). MatchZy is configured primarily through simple JSON match files rather than console commands, which makes it easy to template a standard ruleset once and reuse it for every scrim.

For organizations running practice servers ahead of events like the Cologne Major, this is usually the single highest-value plugin beyond the base Metamod/CounterStrikeSharp stack — it turns a generic dedicated server into something that actually replicates tournament match flow.

A typical MatchZy workflow starts by loading a match config through RCON — either matchzy_loadmatch <filepath> for a local JSON file relative to the csgo directory, or matchzy_loadmatch_url <url> to pull one from a remote host — which defines both teams, the veto order, and the series format in one place. From there, MatchZy handles the knife round for side selection using an expected-logic tiebreaker (most players alive wins the knife round, HP breaks ties, and a coin flip decides any remaining tie), and gives players their own !ready, !unready, !pause, and !unpause chat commands to manage match flow without an admin manually typing mp_restartgame between rounds.

Step 12: Automate Restarts and Keep Your Server Online

A CS2 server that silently dies at 3 a.m. and stays down until someone notices is worse than no server at all for anyone relying on it. The standard fix on Linux is a systemd service that starts the server on boot and restarts it automatically if the process crashes — the same pattern used in this site’s Rust dedicated server and Valheim dedicated server tutorials.

Create a unit file:

[Unit]
Description=CS2 Dedicated Server
After=network.target

[Service]
Type=simple
User=csserver
WorkingDirectory=/home/csserver/cs2server/game/bin/linuxsteamrt64
ExecStart=/home/csserver/cs2server/game/bin/linuxsteamrt64/cs2 -dedicated +map de_dust2 +exec server.cfg
Restart=on-failure
RestartSec=10

[Install]
WantedBy=multi-user.target

Save it as /etc/systemd/system/cs2server.service, then enable and start it:

sudo systemctl daemon-reload
sudo systemctl enable cs2server
sudo systemctl start cs2server

From here, sudo systemctl status cs2server tells you at a glance whether the service is healthy, and journalctl -u cs2server -f gives you a live log stream — far more useful for diagnosing an overnight crash than trying to reconstruct what happened from memory the next morning. You can also add a weekly systemd timer that runs a SteamCMD update-and-restart sequence automatically so patches land without manually re-running Step 3 every time Valve ships an update.

Self-Hosting vs. Renting: What a CS2 Server Really Costs

Everything in this guide works on hardware you already own — a spare PC, a home server, a cheap VPS. But it’s worth knowing what the managed-hosting market charges before deciding self-hosting is worth the ongoing maintenance.

ProviderStarting PriceNotes
Shockbyte$2.50/monthEntry-level slot-based plans
HostHavoc$2.99/monthInstant setup, DDoS protection included
Hostinger$6.99/monthVPS-based, more control than slot hosting
Apex Hosting$7.49 first month ($9.99/month renewal)2 GB RAM tier
DatHost€0.99/slot/monthEU-based, per-slot billing model
Self-managed (this guide)Cost of your own VPS/hardwareFull root access, no player-slot caps

The pattern across every managed provider is similar: entry-level slot-based plans start under $10 a month, but they come with player-count caps, limited plugin support, and shared hardware that can introduce network jitter you don’t control. Self-hosting on your own VPS or spare hardware costs whatever that hardware or VPS already costs you, comes with zero player-slot ceiling, and gives you full root access for exactly the Metamod/CounterStrikeSharp/MatchZy stack this guide walks through — at the cost of being the one who handles updates, backups, and 3 a.m. crashes yourself, or via Step 12’s automation.

For a small private server among friends, a $2.50–3/month managed slot plan is hard to beat on convenience. For anything running MatchZy-driven scrims, custom plugins, or a persistent community, most admins find the self-hosted route pays for itself in flexibility within the first month. Larger providers like G-PORTAL round out the managed-hosting market with region-specific data centers, which matters more than raw price for competitive teams chasing the lowest possible ping to a specific server location.

Common CS2 Dedicated Server Pitfalls

  • Running app_update 740 instead of 730. This is a CS:GO-era holdover that shows up even in AI-generated search summaries. CS2 uses App ID 730 for both client and server — there is no separate 740 branch.
  • Skipping the steamclient.so symlink on Linux (Step 4). The server binary fails with a vague missing-library error rather than a clear “you forgot the symlink” message.
  • Generating a GSLT on a Steam account without a verified phone number. Token generation fails outright, and the error Steam shows doesn’t always make the cause obvious.
  • Only forwarding UDP or only TCP for 27015/27016. Both protocols are required on both ports — forwarding just one leads to partial, confusing connectivity issues.
  • Trying to install SourceMod on a CS2 server. It doesn’t exist for CS2 and never will on the current codebase — use Metamod:Source plus CounterStrikeSharp instead (Step 10).
  • Installing CounterStrikeSharp before Metamod:Source. Install order matters; CounterStrikeSharp depends on Metamod already being loaded.
  • Leaving rcon_password blank or using a weak default. An exposed RCON port with no real password lets anyone with network access run admin commands on your server.
  • Letting a GSLT sit unused for five-plus weeks. Tokens expire after five weeks of disuse, and an expired token silently breaks your server’s public listing without an obvious error pointing back to the real cause.
  • Underestimating disk space before Step 3 even starts. The ~60 GB CS2 install fails partway through on a box with only, say, 40 GB free, and the resulting error can look like a network problem rather than the storage issue it actually is.
  • Assuming a home internet connection can handle a public server long-term. A handful of friends testing over a weekend is fine; a persistent public listing with 10+ concurrent players will expose upload-bandwidth and dynamic-IP limitations most residential connections weren’t built for.

Troubleshooting Your CS2 Server

Server console shows it’s running, but it’s invisible in the in-game browser.
Almost always a GSLT issue — confirm the token is valid, bound via sv_setsteamaccount, and tied to a phone-verified account.

“Missing steamclient.so” on startup (Linux).
The Step 4 symlink is missing or points at the wrong path. Re-check where your SteamCMD install actually placed steamclient.so.

Players can direct-connect by IP, but the server never appears in the public browser.
Check that both TCP and UDP are forwarded for 27015 and 27016, not just one protocol, and that sv_lan is set to 0.

app_update hangs at “Waiting for user info” during Step 3.
Usually a local firewall blocking SteamCMD’s own outbound connections, or insufficient free disk space for the ~60 GB download.

Metamod doesn’t appear to load.
Confirm it was extracted into the correct csgo folder and that the VDF loader line was added to gameinfo.gi — a common copy-paste miss on a first install.

CounterStrikeSharp plugins aren’t loading even though Metamod works.
Double-check install order (Metamod must load first) and confirm the .NET runtime bundled with the “with-runtime” CounterStrikeSharp release wasn’t accidentally skipped.

A Workshop collection map won’t download.
Verify the collection ID passed to +host_workshop_collection is correct and that sv_workshop_allow_other_maps isn’t blocking it.

The server crashes on map change.
Usually an outdated plugin that hasn’t been updated for the latest CS2 patch. Disable third-party plugins one at a time to isolate which one is incompatible.

RCON returns “bad password.”
The rcon_password value in server.cfg doesn’t match what you’re entering client-side — check for stray quotes or whitespace in the .cfg file.

The server runs fine for a while, then silently stops accepting new connections.
Check whether your GSLT has hit its five-week disuse expiry (Step 5), and confirm the systemd service from Step 12 hasn’t quietly restarted into a bad state — journalctl -u cs2server will show whether it’s been cycling.

SteamCMD’s initial download stalls or repeatedly restarts partway through.
This is usually a flaky connection to Valve’s content-delivery network rather than anything wrong with your command — re-running the same app_update line resumes from where it left off rather than starting the ~60 GB download over.

Advanced Tips for a Competitive-Grade CS2 Server

Once the base server is stable, a few extra touches separate a bare-bones install from something a competitive community will actually stick around for. First, the plugin landscape at a glance:

FrameworkRoleStatus on CS2
SourceModLegacy Source 1 plugin platformNot supported — CS:GO/Source 1 only
Metamod:SourceLow-level plugin loader/hook layerRequired foundation, actively maintained
CounterStrikeSharpC# plugin runtime built on MetamodDe facto standard for CS2 plugins
MatchZyCounterStrikeSharp plugin for match managementPopular for scrims and tournament practice

Beyond the core stack, CS2’s tick behavior is worth understanding rather than just configuring: the engine runs a fixed 64 Hz tick rate — there’s no CS:GO-style 64 vs. 128-tick choice to make — but it’s compensated by a subtick system that timestamps every input (a shot, a jump, a grenade throw) to the millisecond and processes it independent of tick boundaries. In practice, this narrows the old competitive gap between 64-tick and 128-tick servers considerably, so don’t assume a modern CS2 server needs exotic tick-rate tuning the way CS:GO admins used to chase.

For custom competitive map pools, load a Workshop collection at launch with +host_workshop_collection followed by the collection’s ID, and use ds_workshop_listmaps and ds_workshop_changelevel from the server console to inspect and switch between the maps it contains. If you want the community to be able to vote in maps outside your curated collection, sv_workshop_allow_other_maps controls whether that’s allowed while the server is empty.

If you’re running more than one CS2 instance on the same box — for example a main competitive server plus a warm-up or deathmatch server — give each its own -port value and its own GSLT; reusing a single token across multiple simultaneous instances is a common cause of one of the two servers silently failing to authenticate.

The secondary port opened in Step 7 (27016) also unlocks GOTV — Valve’s built-in SourceTV-style spectator relay, inherited from the original Source engine. Enabling it lets spectators, casters, or a scrim’s opposing team watch a live delayed broadcast of the match without taking up an actual player slot, which is the same underlying mechanism broadcast production uses at LAN events like the Cologne Major, just running on a single community server instead of tournament infrastructure. Finally, consider recording server-side demos for dispute resolution during scrims; CounterStrikeSharp plugins exist specifically to automate demo recording and upload alongside MatchZy’s match-management flow.

Securing Your CS2 Dedicated Server

Running a public game server means exposing a process to the open internet, and CS2’s plugin ecosystem raises the stakes further since CounterStrikeSharp plugins run arbitrary C# code inside your server. A few basics go a long way:

  • Use a long, unique rcon_password and rotate it periodically. RCON grants full admin control, and a weak or default password is an open invitation.
  • Don’t expose RCON beyond what you need. Where possible, restrict RCON access to specific IPs at the firewall level, or tunnel it over SSH instead of leaving it reachable from anywhere.
  • Keep your GSLT private. Never commit it to a public GitHub repo, paste it in a Discord channel, or bake it into a publicly shared config — treat it like a password, not a public identifier.
  • Only install plugins from verified sources — the official CounterStrikeSharp plugin listings and GitHub repositories with a real commit and star history, not a random .dll or .zip from a forum post. A malicious plugin has full code execution on your server.
  • Keep Metamod, CounterStrikeSharp, and every plugin updated after each CS2 patch. Valve’s updates can change the underlying engine ABI, and outdated plugins are a common source of both crashes and security inconsistencies.
  • Keep sv_cheats at 0 and sv_lan at 0 for any server meant for legitimate public or competitive play, and use sv_password for private, invite-only servers instead of relying on obscurity.
  • Separate management access from game ports. Restrict SSH or RDP administrative access to your own IP address rather than leaving it open to the same audience as your public game ports.
  • Back up server.cfg and your plugin configuration directory regularly. A bad plugin update or a corrupted config is far less stressful to recover from with a same-day backup than by reconstructing settings from memory.

None of this is theoretical caution for its own sake. Compromised gaming accounts and cheat-adjacent tooling have already made headlines this year — the Atlas Menu cheat-software breach alone exposed 63,926 accounts tied to GTA and CS2 cheat users — and a poorly secured server is exactly the kind of soft target that ends up folded into the next such story.

Frequently Asked Questions

Is it free to run a CS2 dedicated server?
Yes. Valve doesn’t charge anything to run a CS2 server yourself — SteamCMD, the server files, and the GSLT are all free. Your only real cost is whatever hardware or hosting you run it on.

Do I need to buy Counter-Strike 2 to host a server?
No. CS2 itself is free-to-play, and dedicated server files download anonymously through SteamCMD without requiring a paid copy of anything.

Can I run a CS2 dedicated server on Windows instead of Linux?
Yes. Valve ships official Windows server binaries alongside the Linux build, and hosting providers such as ZAP-Hosting document a Windows-specific setup path. Linux remains the more common choice for unattended VPS hosting since most community tooling is tested there first.

How much RAM does a CS2 dedicated server actually need?
6 GB is the documented floor for a basic server, but 8–16 GB is a safer real-world target once you add Metamod, CounterStrikeSharp, and any plugins on top of the base game server process.

Why won’t SourceMod work on my CS2 server?
Because it doesn’t support CS2 at all — SourceMod remains a Source 1-only project for games like CS:GO and Team Fortress 2. Use Metamod:Source plus CounterStrikeSharp instead; see Step 10.

Can I add bots to my CS2 server?
Yes, CS2 retains the built-in bot support inherited from earlier Source-engine Counter-Strike titles, controllable through server console commands once a map has loaded — useful for testing configs before opening a server to real players.

Can I host a CS2 server on a Raspberry Pi or an old home PC?
An old PC that clears the 3.0 GHz quad-core / 6 GB RAM floor can work for a small private server. A Raspberry Pi is not a realistic option — CS2’s dedicated server binaries target x86_64 hardware, not ARM.

How do I update my CS2 server after Valve ships a new patch?
Re-run the same SteamCMD command from Step 3 (app_update 730 validate). SteamCMD only downloads changed files, so updates after the initial install are much faster than the first ~60 GB pull.

Is it legal to run a public CS2 dedicated server?
Yes. Unlike emulation or DRM circumvention, Valve explicitly built and documents the GSLT system specifically so players and organizations can run their own public CS2 servers — it’s an officially sanctioned feature of the platform, not a gray area.