How Social Features Work: The Unified Network Fabric
We wanted to do something different for making online connections. Turns out firewall rules map quite nicely to social features.
The distinction between a social network and a computer network is blurring. At CLI-Games, every player is a host and every social interaction is a network operation.
Say goodbye to the search bar, the friend request, the DM, and the block button. Say hello to whois, ufw allow from, and IRC logs. Get used to managing permissions, maintaining a filesystem, and hawking cheat codes, all in the name of cooperation for the next conquest.
How we got here
The site started out with robust social features. You could friend request someone, block them, and go completely incognito. It worked. We used custom commands like friend add alice. But friend isn't a real command. We were an aspiring gaming platform wearing a terminal trenchcoat.
Meanwhile, our capabilities grew. We had built web-based machine architecture that behaved stunningly like a real terminal (truly, it's difficult for me to overstate how cool this is, but I'll let you be the judge). Given that the site's philosophy is to teach real fundamentals through normal operations in a way that feels like fun, it made no sense to use fugazi commands that don't apply anywhere else. We kept the easy versions, for accessibility, but they are now friendly aliases on top of real functionality. We encourage you to practice the hard way. If you're stuck on syntax, a quick message to clide will clear it all up.
The breakthrough idea was the Unified Network Fabric. Instead of maintaining two architectures — CTF training alongside board games — we unified them. Every player is a host in the network, and you interact with those hosts the same way you would add a printer to your home office or recon from the attack box. Don't worry, your assets are secure — host-to-host commands maintain a strict scope. More on that later.
You have a machine in a wider web of machines
When you create an account, you will be assigned an IP address and a firewall, set to default rules†. Every player is a host, every social action is a network operation. If you want to find out about another player, you ping them, you nmap them, you visit their public page over HTTP. If you want to go dark, use ufw default deny incoming.
† New accounts default to allow incoming. Discoverability out of the box; privacy is opt-in. Matches the real-world pattern — you harden a server after setup, not before you've ever received a packet.
The intent is for social capital to pave the way for progress. Some content will only be reachable by coordinated action. Some rewards will require teamwork to obtain. There is no concept of a "level" here, some arbitrary number that ticks up with engagement. Your ability is a direct function of your skills at the keyboard, your organizational habits and accumulated toolkit, and your relationships with other players.
Technical details, for the nerds
We maintain a mix of custom commands, purpose-built for the in-browser shell, and real binaries compiled with WASM. Each command hits a router which escalates through the following hierarchy:
- Shell builtins:
cd,export,alias, andecho, among others, all handled inside the interpreter itself
- CTF intercept: inside an active scenario, scenario commands (
submit,briefing,hint) get first claim
- Network fabric:
ping,nmap,ssh,ufw,dig,talk,curland more are routed through the firewall-enforced network layer
- WASM binaries:
cat,grep,hexdump,base64, andstrings, among friends, are real Unix utilities compiled to WebAssembly, executed against your filesystem
- Site commands:
games,help,theme, andleaderboard, for example, are the classic command modules
- Command not found
Every player gets a persistent IP in 10.10.0.0/16, derived deterministically from your account — same player, same IP, forever. Stable enough to put in firewall rules and /etc/hosts aliases.
A /16 is 65,536 addresses; we reserve 10.10.0.0/24 for infrastructure (DNS server at 10.10.0.1, gateway at 10.10.0.254), leaving 65,280 player slots. If we ever exhaust it (a good problem to have) we extend into 10.11.0.0/16.
There is username-to-IP resolution via DNS: nslookup alice, dig frank, host 10.10.1.42 (reverse lookup) all work, output formatted like the real tools.
Here's a fun one. The fabric checks /etc/hosts before querying DNS, matching real Linux resolution order. echo "10.10.1.42 ally" >> /etc/hosts and ping ally just works.
To check your own details, run ifconfig / ip addr and observe your inet, netmask, even your MAC address.
The firewall commands accomplish the same goals as most social media site functionalities, but with much more granularity. Examples:
ufw status: shows your current config
ufw allow from alice: full trust
ufw deny from 10.10.3.99: block someone
ufw allow from bob to any port 22: bob may visit your terminal but can't open a chat
ufw default deny incoming: stealth mode
ufw reset: return to default config
And speaking of ports, we keep those canonical too:
Port Service Function
---- ------------ ------------------------
8 ICMP (ping)‡ online-status visibility
22 SSH terminal visits
80 HTTP profile viewing
443 HTTPS game challenges
517 talk live 1:1 chat
6667 IRC hangout invites
8080 alt HTTP trade offers
‡ Yes, ICMP doesn't have ports. "8" is a wink at ICMP type 8, echo request. And port 517 is the genuine historical UDP port for the BSD talk daemon.
A deny rule and being offline are indistinguishable from outside. A blocked ping and an actually-offline target both produce the same "Destination Host Unreachable" failure.
For power users, feel free to edit /etc/ufw/rules directly.
Enforcement of your chosen policy is server-side. You cannot bypass someone's firewall by editing client code — even if you reverse-engineer the realtime channel names, the server never delivers an event the target's rules deny.
For those wondering if you can scan an entire subnet, of course you can:
nmap 10.10.4.0/24: who's online near me?
nmap 10.10.0.0/16 -p 443: who's accepting game challenges right now?
arp -a: recent contacts (auto-populated on interaction, lives at /proc/net/arp in your filesystem)
whois alice: profile lookup
Obviously, all of this activity must generate some logs, right? YUP! When someone pings, scans, or knocks on your door, the server appends to your /var/log/auth.log file. The log might look something like this:
Feb 21 14:33:41 alice sshd[4825]: Connection from 10.10.3.99 (troll47) port 22 [DENIED]
cat /var/log/auth.log and you're doing log analysis on your own social life. If you've run our forensics track you already know how to read it — a natural skill-transfer feedback loop.
talk, ssh, and the day we un-invented the DM
We originally planned to make ssh the 1:1 chat utility. Mid-build, we admitted that's not really what SSH means. Enter talk (as in the actual 1983 BSD utility). talk alice now checks the firewall policy for port 517, runs a request/accept consent flow, and opens an ephemeral session (logs are not stored on our servers; you can find them in your own filesystem).
As for ssh, we remodeled it to what it should be: a read-only guest session (guestbook feature potentially forthcoming; if you'd like to see one, let us know) on someone's actual machine. Browse the home directory, read the .bashrc, and see the /etc/motd.
If that sounds like a security nightmare, fear not. Visits are sanitized server-side: your /etc/ufw/rules and your /var/log never leave home. Furthermore, the directories ~/sandbox, ~/inbox, ~/.ssh, ~/archive, and ~/challenges are private by default. Still, make sure to configure your directory permissions how you want them. All files and directories are configurable with chmod.
Your home directory is now a place worth decorating — a custom motd and a tricked-out .bashrc are what visitors see. It's your box.
A digital multiverse
The operative word is unified. Across social, board games, CTF, and RPGs, the same commands apply everywhere. Train, learn, enter into a virtuous cycle. Losing to someone at chess might lead to a CTF teammate; your CTF team might cooperatively slay Scorchlox or break into the Mayor's office, leading to greater rewards and more content.
The learning cliff
We realize that all this can have a steep learning curve. That's kind of the point, but we don't want to scare anyone away. In a world where most of the mundane but essential maintenance work is done by AI, we want to create an environment that helps preserve a little bit of computer literacy and basic cybersecurity hygiene in a way that feels like fun.
Make sure you go through the tutorial. Read the man pages. If you are stuck, hit the wiki or ask clide for some pointers. But most of all, find a veteran, befriend them, and tackle some challenges together.