The whole security model starts at the network. One firewall everything routes through, three trust zones that can’t reach each other, and exactly one authenticated way in from outside. This page is the design — the addressing plan, the trust boundaries, and the actual firewall policy — not the parts list (that’s the lab overview). Home-LAN and public-IP specifics are deliberately left off; what’s here is the lab-internal design the posts already walk through, box by box.
Network Design
Addressing plan
One /24 core behind the firewall, three tagged VLANs on a single virtual trunk, and a separate range for VPN peers. Every segment is a routed interface on pfSense with its own gateway and DHCP scope.
| Segment | VLAN | Subnet | Gateway | Role |
|---|---|---|---|---|
| LAN core | — | 10.10.0.0/24 | 10.10.0.1 | pfSense LAN + the Debian automation VM; egress-only to the internet |
| Trusted | 10 | 10.10.10.0/24 | 10.10.10.1 | Full access — internet, other zones, and firewall admin |
| IoT | 20 | 10.10.20.0/24 | 10.10.20.1 | Internet only — blocked from every internal zone and admin |
| Guest | 30 | 10.10.30.0/24 | 10.10.30.1 | Internet only — blocked from everything internal |
| VPN clients | — | 10.20.20.0/24 | 10.20.20.1 | WireGuard peers, routed split-tunnel into the LAN core |
Home-LAN and public-IP addressing are deliberately kept off this page — an aggregated map is a better recon target than a detail buried in a post. Everything above is lab-internal only.
Trust zones
Three zones at deliberately different trust levels, plus the one authenticated way in from outside. What each zone may reach is the design.
Firewall policy matrix
Who may start a conversation with whom. Read a row as the source, a column as the destination. Because the firewall is stateful, an allowed flow's replies return automatically — so a green cell one way does not open the reverse.
| from ↓ / to → | Internet | Firewall admin | Trusted | IoT | Guest |
|---|---|---|---|---|---|
| Trusted · 10 | out | admin | — | reach | reach |
| IoT · 20 | out | blocked | blocked | — | blocked |
| Guest · 30 | out | blocked | blocked | blocked | — |
Remote WireGuard peers land on their own range and are routed split-tunnel into the LAN core — a separate, key-gated path, covered in the zones above rather than forced into this grid.
How a restricted zone is written
Order is the design. IoT and Guest share one four-rule pattern, evaluated top-down — the DNS allow has to sit above the blocks, because the resolver is the firewall, inside the private space those blocks would otherwise swallow.
- 1Allow DNS → the firewallthe resolver lives on the gateway itself
- 2Block → firewall adminno managing the firewall from an untrusted zone
- 3Block →
RFC1918aliasall private / internal space, in one object - 4Allow → internetwhatever's left is, by definition, external
Trusted (VLAN 10) skips all of it with a single pass any → any. That asymmetry — one permissive rule against four ordered ones — is the trust boundary, written out.
Design principles
The rules that don't change, whatever gets added next. Each links to the post where it earned its place.