IP Bans vs SteamID Bans (What Works Against Non-Steam)

May 21, 2025 Daemon666 8 min read 20 преглеждания

Banning a rule-breaker sounds simple until the same player is back five minutes later under a new name. Whether a ban actually holds depends on what you banned — the player's SteamID or their IP — and on whether your server runs Steam or non-Steam clients through Reunion or dproto. This walks through both ban types, the engine and AMX Mod X commands behind them, and which to reach for against non-Steam abusers.

1. Understand the two identities

Every connecting client presents two things the server can ban on:

  • The authid (SteamID) — like STEAM_0:1:12345. On a legitimate Steam client this is tied to the Steam account and is expensive to change.
  • The IP address — the network address the packets arrive from.

SteamID bans follow the account regardless of IP; IP bans follow the connection regardless of account. Which is stronger depends entirely on how trustworthy the SteamID is on your server.

2. Ban by SteamID (engine and AMXX)

The engine command is banid, and you must persist it with writeid or the ban evaporates on restart:

banid 0 STEAM_0:1:12345 kick   // 0 minutes = permanent
writeid                        // save to banned.cfg

Through AMX Mod X the same thing is one command, and it handles the write for you:

amx_ban 0 STEAM_0:1:12345 "cheating"   // 0 = permanent
amx_addban STEAM_0:1:12345 0           // ban an offline authid
amx_unban STEAM_0:1:12345

SteamID bans are stored in cstrike/banned.cfg, which the engine loads at startup. This is the right default for a Steam-only server: it is precise and survives an IP change.

3. Ban by IP (engine and AMXX)

The engine command is addip, persisted with writeip into listip.cfg:

addip 0 203.0.113.45   // 0 minutes = permanent
writeip                // save to listip.cfg

In AMXX the equivalent is:

amx_banip 0 <name or #userid> "reason"

For the IP ban filter to actually reject connections, sv_filterban must be 1 (its default) — see the essential server cvars list. IP bans also stop the player before they even authenticate, which matters against a client that spoofs its SteamID.

4. The non-Steam problem

Here is where it matters. On a non-Steam server running ReHLDS with Reunion (or original HLDS with dproto), the SteamID a client presents is not backed by Steam. Depending on configuration, non-Steam clients may all share a generic id like STEAM_ID_LAN, may be handed a generated id derived from their client identity, or may set their own. A self-assigned SteamID is far easier to change than a real one, which makes a pure SteamID ban weak on a badly configured non-Steam box.

Configure Reunion (via reunion.cfg) so it hands out stable, per-client SteamIDs rather than lumping everyone under one id. Reunion also requires a SteamIdHashSalt of at least 16 characters or it refuses to load, so if the module is not even coming up, start there. If every non-Steam player looks like STEAM_ID_LAN to your server, a SteamID ban will either miss the target or ban the entire non-Steam population — verify what ids you are actually seeing before you rely on them.

5. Which to use, when

  • Steam-only server — ban by SteamID. It is precise and follows the account across IP changes.
  • Non-Steam with stable Reunion ids — SteamID first, IP as a backup for stubborn repeat offenders.
  • Non-Steam with shared or weak ids — IP bans are your real tool, with the caveats below.

Keeping bans consistent is easier from a menu; if you run a managed admin workflow, pair this with the CSB Admin Menu and keep the human side honest with admin-abuse logging.

Troubleshooting

  • Ban did not survive a restart — you ran banid/addip but never writeid/writeip. The in-memory ban is gone after a reload. Always write.
  • IP ban catches innocent players — the target shares an IP with others (household NAT, mobile carrier-grade NAT). Prefer a SteamID ban, or use a short timed IP ban rather than a permanent one.
  • Banned player keeps returning — a dynamic IP (they reconnect and get a new one) evades IP bans; a self-set SteamID evades SteamID bans. On non-Steam, fix Reunion id assignment first.
  • SteamID ban bans everyone / nobody — all clients report the same id. Reunion is misconfigured; check reunion.cfg.
  • Ban ignored entirelysv_filterban 0, or the id/ip is in the wrong list file. banned.cfg is for SteamIDs, listip.cfg for IPs.

Verification

List the active bans from the server console to confirm they are loaded:

listid    // shows banned SteamIDs (banned.cfg)
listip    // shows banned IPs (listip.cfg)

Then have a test client reconnect from the banned identity and confirm it is rejected. For SteamID bans on non-Steam, connect a second non-Steam client and confirm it is not caught — if it is, your ids are not unique and you need to revisit Reunion before trusting SteamID bans at all.

Сътрудници: Daemon666 ✦
Сподели: