Security operations · Infrastructure · Detection engineering

I built an enterprise network out of surplus hardware, broke into it, and caught myself doing it.

Cerberus is a five-host, VLAN-segmented cyber range running a live Active Directory forest, a Wazuh SIEM, and an air-gapped malware lab on the other side of a firewall. Total hardware cost: about $820. It scored 100/100 as a capstone. It is still running.

HOME UPLINK 192.168.50.0/24 · MANAGEMENT ARGUS · OPNSENSE DEFAULT DENY · VLAN 40 TRUNK THE RANGE 10.40.40.0/24 · ISOLATED L2 DC01 WAZUH TARGETS WEB APPS HADES · DETONATION 10.66.66.0/24 · NO ROUTE OUT
5Physical hosts
4Isolated segments
$820Total build cost
100/100Capstone score
00

Surface

192.168.50.0/24 · management

This page is laid out the way the network is: by depth. Every section below is a real segment with its own trust boundary, and each project sits at the depth it actually runs at. The surface is the management plane — five machines sourced from university surplus and spare parts, running a three-node Proxmox cluster with a redundant Corosync ring on a dedicated cable mesh. Two of those machines share one case I 3D-printed for them. 136 GB of RAM for roughly a quarter of retail.

01

The Gate

argus · opnsense

Nothing crosses between the management plane and the range except what I explicitly allow. The range rides as tagged VLAN 40 over each node's existing uplink, with no switch SVI — so the switch itself can never route into it. OPNsense is the only gateway, running default-deny, with a small number of narrow, source-restricted exceptions. Every one of those exceptions was verified in both directions: the allowed host reaches the service, and a different host on the same subnet times out.

Rule verification · source restriction enforced, not just configured
osiris  $ curl -sk https://range-svc:55000/
HTTP 401 Unauthorized   # path works — no creds sent, as expected

heavy   $ curl -sk --max-time 10 https://range-svc:55000/
curl: (28) Connection timed out   # different host, same subnet: blocked
Redacted host labels. Testing the negative case is the part people skip — a rule that only ever gets tested from the allowed host proves nothing about what it denies.
03

The Pit

10.66.66.0/24 · no route out

The malware lab is the one machine that is not part of the cluster, on purpose. Clustering it would mean heartbeat traffic, shared storage paths, and live migration between the detonation host and everything else — which would quietly undo the isolation that is the entire point of it. So Hades stands alone, and its detonation bridge has no physical uplink and no host IP at all.

Egress test from inside the detonation network
$ ping -c1 8.8.8.8          # the internet
   1 packets transmitted, 0 received   exit 2

$ ping -c1 192.168.50.1     # the management plane
   1 packets transmitted, 0 received   exit 2

$ ping -c1 10.40.40.1       # the range next door
   1 packets transmitted, 0 received   exit 2

Bridge has no physical port. Host has no IP on it. ip_forward=0. No NAT, no route.
Isolation you have not tested is isolation you are hoping for. This is the deepest point in the network and nothing leaves it.

Capabilities, and where to verify them

Every claim on this page points at something I built.

Skills lists are cheap. Here is what I can do and the specific piece of work that demonstrates it — including the parts that broke.

Network segmentation

Designed and cabled a VLAN-tagged range with no switch routing path into it, a firewall as sole gateway, default-deny, and source-restricted exceptions verified from both an allowed and a denied host. Built a redundant Corosync ring over a dedicated three-node cable mesh so quorum survives a switch failure.

Active Directory security

Stood up a forest and certificate authority from an unattended install, then seeded it with Kerberoastable SPNs across three difficulty tiers, AS-REP roasting, unconstrained delegation, an ACL abuse path to Domain Admin, and an ESC1 certificate template — each verified by reading the live object back after publishing.

Detection engineering

Wazuh manager with agents on the Windows and Linux victims, Sysmon feeding the Windows endpoints, and Atomic Red Team used to generate technique coverage. Purple-team loop: run the technique, check whether it fired, write a rule to close the gap when it didn't.

Malware containment

Designed the detonation environment for isolation first: standalone host, bridge with no uplink and no host IP, simulated internet, one-way sample intake. Verified the air gap empirically against three separate networks rather than assuming it from the config.

Secure development

Found a critical unauthenticated credential-disclosure flaw in my own application during a self-review and rebuilt it: a single deny-by-default gate instead of per-route decorators, tracked example configs separated from gitignored real ones with startup validation, brute-force lockout, TLS, and shared-secret auth for the one headless client.

Technical writing

A full technical reference with schematics, two field guidebooks totalling fourteen structured lab exercises, and a capstone report — all written to be handed to someone else and used. The reflection section was singled out as the strongest part of the capstone.