Oracle Cloud's Always Free tier is the only mainstream cloud that gives you a permanently free VM capable of hosting a CS 1.6 server. But two Oracle-specific traps sink most first attempts: the tempting ARM shape that cannot run HLDS natively, and a default firewall that blocks your game port in two separate places. Handle both and you get a solid free server.
1. Pick the x86 AMD shape, not Ampere
The Always Free tier offers two instance types:
- VM.Standard.E2.1.Micro — AMD x86-64, up to two instances free. HLDS runs natively here. This is what you want.
- VM.Standard.A1.Flex — Ampere ARM, a generous 4 OCPU / 24 GB free. But HLDS is 32-bit x86, so it will not run without
box86/box64emulation, which is slow, occasionally crashes, and is not worth it for a shooter.
The E2.1.Micro is small (1 OCPU, 1 GB RAM), but CS 1.6 is a 25-year-old game and runs comfortably on it for a moderate slot count. Be honest with yourself about the architecture limit: the ARM box is bigger, but bigger and wrong loses to smaller and native.
2. Create the instance
In the Oracle Cloud console, Compute → Instances → Create. Change the image to Ubuntu 22.04 or 24.04, change the shape to VM.Standard.E2.1.Micro, and add your SSH public key. Save the private key and connect:
ssh ubuntu@YOUR_PUBLIC_IP
3. Open the port in the Security List
Oracle's virtual firewall lives in the VCN. Go to Networking → Virtual Cloud Networks → your VCN → Security Lists → Default, and add an ingress rule:
Source CIDR: 0.0.0.0/0 IP Protocol: UDP Destination Port Range: 27015
CS 1.6 game and query traffic is UDP; a TCP rule here is the number-one reason the server never appears. More on ports in firewall ports.
4. Open the port again in the OS firewall
Here is the Oracle-specific gotcha: their Ubuntu images ship with restrictive iptables rules baked in, so even after the Security List allows UDP 27015, the OS still drops it. Add the OS rule and persist it:
sudo iptables -I INPUT 6 -p udp --dport 27015 -j ACCEPT sudo netfilter-persistent save
Insert it above the default REJECT rule (position 6 in Oracle's stock chain is typical, but run sudo iptables -L INPUT --line-numbers and place it before the reject). Miss this and the server is reachable from nowhere despite a perfect Security List.
5. Install dependencies and HLDS
Add the i386 architecture and 32-bit libraries, then install SteamCMD:
sudo dpkg --add-architecture i386 sudo apt update sudo apt install -y lib32gcc-s1 lib32stdc++6 curl
The i386 libraries are mandatory — see 32-bit libraries for CS 1.6. Then create an unprivileged user and install the server exactly as in the SteamCMD guide; never run it as root (see HLDS without root).
6. Launch
cd ~/hlds ./hlds_run -game cstrike +map de_dust2 +maxplayers 16 -port 27015
Keep the slot count modest on a 1 GB micro instance. Wrap it in a systemd service once it runs.
7. Keep the free instance from being reclaimed
Oracle's Always Free terms allow them to reclaim idle Always Free compute instances — historically this applied to the ARM Ampere shapes more than the AMD micro, but it is worth knowing. An instance that is genuinely running a game server with players is not idle by any reasonable measure, so an active CS 1.6 box is safe. The risk is a server you set up and never populate: with no traffic and near-zero CPU, it can be flagged as idle and stopped. If you are provisioning ahead of launch, keep some baseline activity on it, and monitor the instance state in the console so a reclaimed VM does not silently take your server offline. Attaching a paid-tier payment method (without upgrading) also removes the idle-reclamation risk on some accounts.
8. Watch the memory ceiling
The E2.1.Micro has only 1 GB of RAM, and a fully-loaded CS 1.6 server with AMX Mod X, several plugins, and custom content can press against that. Add a small swap file as a safety valve so a memory spike does not OOM-kill the server process, and keep maxplayers realistic — 16 to 20 slots is a comfortable ceiling on this shape. If you consistently need more, that is the signal to move to a paid VPS rather than fighting the free tier's limits.
Troubleshooting
- Server unreachable despite the Security List — the OS
iptablesrule is missing. This is the Oracle trap; complete step 4. - Chose A1.Flex and HLDS will not start — that shape is ARM. Recreate on E2.1.Micro; do not pursue box86 for a game server.
- Instance creation fails with "out of capacity" — the free E2.1.Micro is popular in some regions. Retry, or pick a different home region at signup.
No such file or directorylaunching hlds_run — the 32-bit loader is absent; see the fix.
Verification
From your PC, run connect YOUR_PUBLIC_IP:27015 in the CS console. If you join, both firewall layers are open. Then confirm it appears in the internet server list with sv_lan 0 set. If a direct connect works but the listing does not, the master-list path is fine but you may be behind a query issue — recheck the UDP rule on both the Security List and iptables, since either one silently blocking is the usual cause on Oracle.









