How to set up a CS 1.6 server from scratch
Full setup walkthrough for a Counter-Strike 1.6 server: deploy ReHLDS, configure server.cfg, install Metamod-R + AMX Mod X, set up admin flags, install plugins (Zombie Plague, JailBreak, Surf, CSDM), allow Steam + Non-Steam clients, and fix the common HLDS errors. Works on the classic 20-year-old Valve engine that still runs smoother than most modern shooters.
- What you need first
- HLDS vs ReHLDS โ pick one
- Deploy the server (1-click)
- File layout & where things go
- Core
server.cfgsettings - Install Metamod-R and AMX Mod X
- Adding admins (
users.ini) - Installing plugins (ZP, JB, Surf, CSDM)
- Allowing Steam + Non-Steam clients
- Connect and test
- Common errors and fixes
What you need first
Get these in order before deploying:
- An active CS 1.6 plan on Fatality Servers. See our CS 1.6 hosting plans if you haven't signed up yet.
- A Counter-Strike 1.6 copy for each player who wants to connect (Steam edition or a legal non-Steam client).
- An SFTP client (FileZilla, WinSCP) โ CS 1.6 is the oldest game we host and most of the workflow is plain text file editing.
- Patience with 20-year-old tooling โ logs use
L DD/MM/YYYYformat, some settings need exact case, and an extra semicolon in a.cfgwill happily crash the server with no useful error.
Sizing note: CS 1.6 is the lightest game on our platform by a wide margin. A 32-slot Zombie Plague server uses under 300 MB RAM and maybe 5% of a single Ryzen core. Our smallest CS 1.6 plan already oversizes for community-size servers โ you're paying for location and network quality, not raw compute.
HLDS vs ReHLDS โ pick one
There are two server binaries in the wild:
- HLDS โ Valve's original binary. Last meaningful update around 2013. Works, but unpatched exploits, no modern features.
- ReHLDS โ community-maintained reimplementation with active security patches, DDoS hardening, Linux 64-bit support, and compatibility with ReGameDLL_CS (which fixes dozens of gameplay bugs). What you should run.
Our 1-click template deploys ReHLDS + ReGameDLL_CS by default. The rest of this guide assumes that setup. If you specifically need plain HLDS for some legacy plugin, open a ticket.
Deploy the server (1-click)
Our CS 1.6 template pulls the latest ReHLDS + ReGameDLL_CS + default maps, writes a sensible server.cfg, and opens UDP port 27015 on your plan's IP.
-
Pick the CS 1.6 template at checkout
On the CS 1.6 hosting page, pick a plan sized for your slot count (16, 24, or 32 slots is the standard range). Pick the location closest to your playerbase โ CS 1.6 is insanely latency-sensitive for hitreg.
-
Wait for the binaries to drop
First install is fast โ ~150 MB total including the stock maps. ~60 seconds on most of our locations.
-
Confirm the server is listening
Console should show something like:
Protocol version 48 Exe version 1.1.2.7/Stdio (cstrike) Exe build: 14:39:28 Mar 25 2026 (9980) Server IP address YOUR-IP:27015 Map: de_dust2 Players: 0 / 32If you see
Server IP addresswith your public IP and port 27015, you're live.
File layout & where things go
CS 1.6 is almost entirely file-based. The tree you'll be living in:
cstrike/
โโโ server.cfg โ main server config (loaded every map change)
โโโ listip.cfg โ IP bans
โโโ banned.cfg โ SteamID bans
โโโ users.ini โ (later) AMX Mod X admin list
โโโ mapcycle.txt โ ordered list of maps played in rotation
โโโ motd.txt โ "message of the day" shown on join
โโโ maps/ โ all .bsp map files
โโโ models/ โ player / weapon models
โโโ sound/ โ .wav sound effects
โโโ addons/ โ (later) Metamod-R + AMX Mod X live here
โโโ metamod/
โ โโโ plugins.ini โ list of Metamod modules loaded
โโโ amxmodx/
โโโ configs/
โ โโโ amxx.cfg โ AMXX settings
โ โโโ users.ini โ admins list
โ โโโ maps.ini โ (some plugins use this)
โโโ plugins/ โ .amxx compiled plugins
Everything lives under cstrike/. The game mode folder is called cstrike, not cs or cs16 โ it's a CS-specific folder inside the HLDS tree. If you upload a plugin to addons/amxmodx/plugins/ at the HLDS root instead of cstrike/addons/amxmodx/plugins/, nothing loads and you'll wonder why for an hour.
Core server.cfg settings
server.cfg runs every time the map changes. It's a flat list of cvar value lines. Open it in your SFTP client and set these:
// --- Server identity ---
hostname "My CS 1.6 Server [EU]"
sv_contact "[email protected]"
sv_region 3 // 0=US-East, 1=US-West, 2=SA, 3=Europe, 4=Asia, 5=AU, 6=ME, 7=Africa
// --- Password / slot / core ---
sv_password "" // leave empty for public
rcon_password "change-me-to-something-very-strong"
maxplayers 32 // match your plan
sv_lan 0
// --- Gameplay ---
mp_friendlyfire 1
mp_footsteps 1
mp_autoteambalance 1
mp_autokick 0
mp_flashlight 1
mp_tkpunish 0
mp_fraglimit 0
mp_maxrounds 30
mp_winlimit 0
mp_roundtime 2.0
mp_freezetime 3
mp_startmoney 800
mp_buytime 0.25
mp_c4timer 35
mp_limitteams 2
mp_hostagepenalty 0
mp_chattime 10
// --- Rates (tuned for 100 fps / modern connections) ---
sv_maxrate 25000
sv_minrate 5000
sv_maxupdaterate 100
sv_minupdaterate 20
sv_unlag 1
sv_maxunlag 0.5
// --- Logging ---
log on
sv_logbans 1
sv_logecho 1
sv_logfile 1
mp_logdetail 3
mp_logmessages 1
// --- Abuse protection ---
sv_rcon_banpenalty 30
sv_rcon_maxfailures 5
sv_rcon_minfailures 5
sv_rcon_minfailuretime 30
sv_timeout 60
// --- Master server (so the server shows up in the browser) ---
sv_lan 0
setmaster add hl1master.steampowered.com:27010
setmaster add hl2master.steampowered.com:27011
The values most people want to tweak:
hostnameโ name in the server browser. 63 chars max.rcon_passwordโ required for remote admin. Make it strong; CS 1.6 RCON is brute-forceable.sv_regionโ must match your physical location or Steam's browser will not list you correctly.mp_startmoneyโ 800 for standard, 16000 for "everyone loaded" pub servers.mp_roundtimeโ in minutes. Standard competitive is1.75.sv_maxupdaterate 100โ lets clients run 100-tick. Set to66if you want to match classic LAN feel.
Use // for comments. A single # or ; will be parsed as a command and silently fail. If a setting "isn't taking effect", the usual culprit is a stray comment character on the line above breaking the parser.
Install Metamod-R and AMX Mod X
Vanilla CS 1.6 is a naked server โ no admin commands, no anti-cheat, no plugins. You add that with two layers:
- Metamod-R โ hooks the HLDS engine so other modules can inject code.
- AMX Mod X (AMXX) โ the scripting layer that runs on top of Metamod. 95% of CS 1.6 plugins target AMXX.
-
Download the latest builds
- Metamod-R: github.com/theAsmodai/metamod-r โ grab
metamod-r-<version>-<os>.zipmatching your server OS (Linux by default on our infra). - AMX Mod X 1.10 (Counter-Strike package): amxmodx.org/downloads.php โ pick the "Base" download for your OS AND the "Counter-Strike" addon.
- Metamod-R: github.com/theAsmodai/metamod-r โ grab
-
Upload Metamod-R first
Extract the ZIP locally, then upload
addons/metamod/into your server'scstrike/addons/folder. Final path should becstrike/addons/metamod/dlls/metamod_i386.so(Linux) ormetamod.dll(Windows). -
Point HLDS at Metamod
Edit
cstrike/liblist.gam. Find thegamedllline and change it:// before: gamedll "dlls/cs.dll" gamedll_linux "dlls/cs.so" // after: gamedll "addons/metamod/dlls/metamod.dll" gamedll_linux "addons/metamod/dlls/metamod_i386.so"Save, restart the server. Console should now say
Metamod v1.3.0.X Loaded. -
Upload AMX Mod X
Extract the AMXX base + CS addon ZIPs locally. Both drop an
addons/amxmodx/folder โ upload tocstrike/addons/amxmodx/(merge, don't overwrite). -
Register AMXX with Metamod
Edit
cstrike/addons/metamod/plugins.iniand add a line:linux addons/amxmodx/dlls/amxmodx_mm_i386.so win32 addons/amxmodx/dlls/amxmodx_mm.dllRestart the server. In-game, type
amxx versionin console โ you should see AMXX's version string. Done.
Adding admins (users.ini)
Edit cstrike/addons/amxmodx/configs/users.ini. Each admin gets one line:
; <name or SteamID> <password> <access flags> <auth type>
"STEAM_0:1:12345678" "" "abcdefghijklmnopqrstu" "ce"
"SomeNick" "mypassword" "bcdefijmnoq" "a"
"192.168.1.100" "" "bcdefijmno" "de"
The four columns, left to right:
- Identifier โ a SteamID (
STEAM_0:X:XXXXXXX), nickname, or IP address. - Password โ optional; used only with nickname/IP auth. Leave
""for SteamID auth. - Access flags โ letters each grant a specific permission. The useful flag groups:
abcdefghijklmnopqrstuโ full owner (all flags)bcdefijmnoqโ typical senior admin (kick, ban, map change, etc.)bceโ slot reserve only (VIP)
- Auth type โ how AMXX checks who they are:
aโ match by nickname + passwordcโ match by SteamID (most secure, use this where possible)dโ match by IPeโ don't require password (combine withcord)
After editing, in-game type amx_reloadadmins (as console with RCON, or from an existing admin's chat). New admins are live immediately.
Prefer "ce" SteamID auth. Nickname + password auth is how every leaked CS 1.6 admin list gets abused โ someone spoofs the nick, tries the leaked password, owns your server. A SteamID can't be spoofed on a Steam-only server. Non-Steam users can't be securely admin'd at all; keep them as regular players.
Installing plugins (ZP, JB, Surf, CSDM)
AMXX plugins are .amxx files compiled from .sma source. Our panel ships with several popular modes pre-packaged so you can enable them with a dropdown โ but knowing the manual install keeps you flexible.
General plugin install workflow
-
Drop the
.amxxintoplugins/Path:
cstrike/addons/amxmodx/plugins/yourplugin.amxx. If the plugin ships extra files (models, sounds, configs), drop those into their matching folders undercstrike/. -
Register it in
plugins.iniEdit
cstrike/addons/amxmodx/configs/plugins.iniand add a line with just the filename:yourplugin.amxxOrder matters โ plugins load top-to-bottom. Dependencies must be listed before the plugin that depends on them.
-
Restart the server
AMXX doesn't hot-reload plugins cleanly. Full server restart for new plugins;
amxx pluginsin console to confirm the load status (running, noterrororstopped).
Popular mods โ where to get them
- Zombie Plague 4.3 / 6.2 / Advance โ the classic round-based zombie mod. Reference build at forums.alliedmods.net. Heavy โ needs extra models / sounds uploaded.
- JailBreak (JB) โ prison RP mode. Usually shipped as a pack (plugin + maps + configs). Search AlliedModders for "JailBreak Mod".
- Surf โ movement mod, Surf maps + a timer/rank plugin. Popular plugin: SurfTimer.
- CSDM (Deathmatch) โ respawn-on-death mode: amxmodx.org/csdm. Ship with its own
csdm.cfg. - Gungame โ level-up-through-weapons mode. Several forks; AlliedModders "Fun Stuff" section.
Don't pile mods. Zombie Plague + JailBreak + Surf on the same server is a guaranteed mess โ they hook the same events and fight each other. One primary gamemode per server; secondary plugins (admin tools, sound pack, scoreboard) stack fine. If you want multiple modes, run multiple servers โ our panel lets you spawn siblings cheaply under one subscription.
Allowing Steam + Non-Steam clients
CS 1.6 has a large non-Steam population (regions where buying games on Steam isn't easy). ReHLDS can accept both, but the default config is Steam-only. To allow both:
Edit cstrike/addons/rehlds/rehlds.cfg (our template ships with it; create it if missing):
// Accept players without a valid Steam auth ticket
sv_cheats 0
sv_version 48/1.1.2.7/9980
// Reject obvious fakes but allow non-Steam clients
sv_filter_bannedip 1
sv_rehlds_client_rate_limit 2000
And in server.cfg:
sv_lan 0
sv_max_upload 2048
sv_max_upload_dir "1024"
Non-Steam SteamIDs aren't stable. Non-Steam clients report STEAM_ID_LAN or a variable/fake ID. If you admin by SteamID (flag c), non-Steam players can't be reliably admin'd. Use abcdefghijklmnopqrstu + a (nick+pass) only for trusted people, and keep the main roster on Steam auth.
Connect and test
-
Launch CS 1.6 on your PC
From the main menu, click Find Servers.
-
Find it in the Internet tab
Go to the Internet tab, filter by your server name or map. First-time master-list registration takes 2-5 minutes.
-
Or use direct connect
Bring down the console with the
~(tilde) key and type:connect YOUR-SERVER-IP:27015 -
Authenticate as admin in-game
Press
~in-game and run:rcon_password <your-rcon-password> rcon status // test it worked amx_kick "SomeNick" "reason" // test AMXX adminIf your admin line in
users.iniuses SteamID auth, AMXX admin is automatic โ you don't needamx_login.
Common errors and fixes
"WON_GetTitle: failed"
Ancient HLDS error when the old WON master is queried. Ignore โ ReHLDS logs it on some boots but it doesn't affect anything.
Server doesn't show in the browser
- Check
sv_regionmatches your physical location (0-7, see the cvar list above) - Check
sv_lan 0is set โsv_lan 1hides the server from the Internet tab - Wait 5 minutes โ Steam's CS 1.6 master-list is slow to index new servers
- Test direct-connect by IP first to rule out the server itself being down
"Your Server is out of date"
A protocol-48 client (modern CS 1.6) is trying to join a protocol-47 server. Update ReHLDS via our panel's Update button, or from SteamCMD:
steamcmd +force_install_dir ./cs16 +login anonymous +app_update 90 validate +quit
Metamod or AMXX won't load
- Check
liblist.gamโ thegamedllpath must point at Metamod, notdlls/cs.so - Check the architecture matches โ Linux servers need the
*_i386.sobuilds (32-bit), not 64-bit. ReHLDS is still 32-bit by default. - Check
cstrike/addons/metamod/plugins.inihas AMXX listed - Check file permissions โ on Linux,
.sofiles need execute (chmod 755)
Plugin loads but its commands don't work
- Check
amx_log.logundercstrike/addons/amxmodx/logs/โ compile or runtime errors appear there - Check the plugin's
.smasource for which AMXX modules it requires (usually listed near the top:#include <cstrike>,#include <fakemeta>). Each required module needs an entry inconfigs/modules.ini. - Plugin order issue โ put dependencies above dependents in
plugins.ini
Lag / hitreg feels off
- Confirm rates:
sv_maxrate 25000,sv_maxupdaterate 100. Lower values cause the server to throttle clients. - Check
fps_maxon client side โ if players are runningfps_max 60in a 100-tick server, hitreg suffers. Standard client value isfps_max 101. - If on ReHLDS, confirm
sys_ticrate 1000inserver.cfgโ ReHLDS runs a higher server tick than classic HLDS.
"bad challenge" / random kicks
Anti-cheat plugin (typically dProto, AAC, or VoxAAC) rejecting a client. Check:
- The plugin's log (usually
cstrike/addons/amxmodx/logs/aac.log) for the reason - Non-Steam clients sometimes trigger false positives โ whitelist their SteamID or relax the check
RCON stops responding / "Bad rcon_password"
- You've hit
sv_rcon_maxfailuresโ waitsv_rcon_banpenaltyminutes for the auto-unban - Password must not contain special shell characters if you're passing it through a wrapper script
- If really stuck, reset from the panel's Console tab (which bypasses RCON)
World saves / backups
CS 1.6 is stateless โ there's no save to corrupt. What you DO want backed up:
cstrike/server.cfg+cstrike/mapcycle.txt+ any custom.cfgcstrike/addons/amxmodx/configs/users.ini(admin list) +plugins.inicstrike/banned.cfg+cstrike/listip.cfg- Your stats/rank database if you use one (CSStats, CS-Rank, etc.)
All managed CS 1.6 plans ship with daily auto-snapshots of the full cstrike/ tree + 30-day retention.
Stuck on something specific? Email support with your server IP, the last 100 lines of HLDS console, and the relevant config file โ we'll usually have an answer within the hour. For broader CS 1.6 questions, see the FAQ's Games section.