North star: array-firewall becomes the network exit for the entire LAN — protect, NAT, segment, observe — with full customization via dashboard + API.
Current state: lab mode (bench on secondary NIC). Target state: gateway mode inline between ISP and house LAN.
192.0.2.0/24 (existing LAN, legacy gateway still active)
│
eth0 ${ARRAY_FW_IP} ← management + API + sentinel
│
array-firewall (CT ${ARRAY_FW_CTID})
│
eth1 198.51.100.0/24 ← test clients on lab NIC only
ISP / modem
│
WAN eth1 ── default route, unsolicited inbound DROP
│
array-firewall
│
LAN eth0 ── DHCP, DNS, whole-house NAT, device policies
│
switch / MoCA / Wi‑Fi AP
│
consoles, laptops, IoT, cameras, …
The legacy appliance can move to bridge/monitor, retire, or stay as a read-only telemetry source during migration.
| Principle | Meaning |
|---|---|
| Default deny | Forward and input drop; only established/related + explicit allows |
| Unsolicited blocked | No inbound from WAN unless port-forward / related |
| NAT by default | Masquerade all LAN → WAN |
| Device-centric | Every client identified by MAC/IP; allow/deny + per-device policy |
| Observable | Dashboard, API, sentinel, IDS hooks, session timeline |
| Gaming-aware | Packet shield, QoS, peer blocklist, upload/download assist |
| Probe-aware | Active countermeasures (honeypot + UDP confusion), session forensics, abuse automation |
When Warzone Lobby Sentinel is co-hosted, the gaming path looks like:
Xbox ──► nft packet shield ──► Sentinel poll/score
▲ │
│ ▼
peer blocklist ◄── gaming_mitigate ◄── session risk payload
│
├── probe_confusion (UDP DNAT → mutate-echo sink)
├── probe-sink (TCP honeypot personas + tarpit)
├── probe_ops (live stats, sync-on-block, evidence)
├── mesh_reputation → /24 subnet blocks
└── session_audit → post-mortem + PROBE HEAVY verdict backfill
| Service | Port | Role |
|---|---|---|
array-firewall-probe-sink |
39217/tcp | Fake http/ssh/ftp/rdp banners; tarpit; auto-block |
array-firewall-probe-udp-confusion |
39218/udp | Mutated echo / jitter / why?? responses for DNAT’d probes |
Blocked probe peers are synced into nft confusion_peers and suspicious-peers.txt. Persona and echo mode profiles persist per attacker IP.
| Path | Content |
|---|---|
/var/lib/array-firewall/session-reports/ |
Post-mortem JSON per session |
/var/lib/array-firewall/session-evidence/ |
Exported zip bundles |
/var/lib/array-firewall/probe-live-stats.json |
Live cheater counter + spike state |
/var/lib/array-firewall/session-events.jsonl |
Killcam / shield / block event log |
GET /api/v1/gaming/probe-ops/*— live stats, health, metrics, exportGET/POST /api/v1/gaming/session-audit/*— batch audit, playback, postmortemPOST /api/v1/gaming/mitigate— closed-loop actions from Sentinel
Policy knobs: gaming.mitigation.probe_confusion and gaming.mitigation.probe_ops in policies.json (see config/policies.json.example).
- Lab — secondary NIC bench; allow/deny, DHCP, API validation
- Sidecar — same LAN as legacy gateway; sentinel + gaming tools online
- Cutover — physical rewire; array-firewall becomes
192.0.2.1(or your chosen gateway) - Harden — zones, IDS, subnet blocklist, provider catalog
| Service | Port | Role |
|---|---|---|
array-firewall-api |
8090 | Dashboard + REST API |
warzone-lobby-sentinel |
8098 | Lobby integrity, gaming automation |
array-firewall-probe-sink |
39217 | TCP honeypot + persona tarpit |
array-firewall-probe-udp-confusion |
39218 | UDP probe confusion sink |
dnsmasq |
53/67 | DHCP + DNS (LAN) |
| nftables | — | Forward filter, NAT, gaming sets, confusion DNAT |
See CUTOVER.md for the gateway switch procedure.