The lab

One laptop running Proxmox, with Sophos between the WAN bridge, the untagged LAN bridge and a seven-VLAN trunk. Trace a path on the map, filter the DNS view, compare the two private access tools, or replay a simulated case.

Maps and logs use substituted names and addresses; recorded dates and counts are marked where they appear.

lab Topology

Simulated telemetry · substituted names and addresses 7 Nov 2026 · 00:00 to 24:00 UTC

Guests
13 8 running
DNS queries
4,164 22.5% blocked
Endpoints
3 Windows
SIEM alerts
24 9 high
Cases
4 3 open

Select a service to see what it does.

Proxmox VE · the laptopLAN bridgevmbr1 · untagged LANVLAN trunkvmbr2 · Port3 · 7 VLANsWindows identityAD lab and endpointsSOC stackSOCFortress referencePublic readerany browserCloudflare WAFWAF + tunnelWANISP, behind CGNATRemote laptopenrolled clientLaptop uplinkonboard NICWAN bridgevmbr0Sophos FirewallVM 102LAN bridgevmbr1 · untaggedVLAN trunkvmbr2 · VLAN-awareTwingateLXC 208Proxmox UITCP 8006NetBirdLXC 204NextDNSLXC 209MinecraftLXC 207CF TunnelLXC 203BunkerWebLXC 2065 · MGMT20 · LAB_TEST40 · SOC50 · DMZActive DirectoryAD DS + GPOWindows clientsdomain-joinedDefenderendpoint sensor …Kali Red/BlueVM 301 · 302Wazuhdetection layerCoPilotSOC workspaceGrayloglog pipelineSplunksecond SIEM viewProxmox VE · the laptopLAN bridgevmbr1 · untagged LANVLAN trunkvmbr2 · Port3 · 7 VLANsWindows identityAD lab and endpointsSOC stackSOCFortress referencePublic readerany browserCloudflare WAFWAF + tunnelWANISP, behind CGNATRemote laptopenrolled clientLaptop uplinkonboard NICWAN bridgevmbr0Sophos FirewallVM 102LAN bridgevmbr1 · untaggedVLAN trunkvmbr2 · VLAN-awareTwingateLXC 208Proxmox UITCP 8006NetBirdLXC 204NextDNSLXC 209MinecraftLXC 207CF TunnelLXC 203BunkerWebLXC 2065 · MGMT20 · LAB_TEST40 · SOC50 · DMZActive DirectoryAD DS + GPOWindows clientsdomain-joinedDefenderendpoint sensor …Kali Red/BlueVM 301 · 302Wazuhdetection layerCoPilotSOC workspaceGrayloglog pipelineSplunksecond SIEM view
  • Running
  • Stopped
  • Configured
  • In use
  • Reference stack
  • Example

Tracing packet flow

Outside traffic reaches the WAN bridge, crosses Sophos, and leaves on the LAN bridge. Hosts on the same bridge can talk without crossing Sophos. From my lab record

The SOC stack, with CoPilot at the centre

Every service in the SOCFortress stack I follow, sorted by the job it does. SOCFortress CoPilot is the workspace an investigation starts from; the rest feed it evidence or wait behind its approval gate. Each card says whether it is in my lab or part of the reference architecture.

SourcesWazuh · GraylogSOCFortress CoPilotShuffle gateAnalyst

Where events start, and the rules that turn them into alerts.

  • Wazuh agentendpoint collection

    Reads the Windows and Linux events I choose and ships them to the manager. Collection is a list I tune, not everything the machine logs.

    Reference architectureWazuh architectureEvents to a case

  • Wazuh managerdetection engine

    Decodes agent data and applies rules. A rule match becomes an alert with a level, a rule ID and the fields that matched.

    Reference architectureWazuh architecture

  • Wazuh Indexersearch and storage · OpenSearch

    Stores and indexes alerts. CoPilot reads alerts from here, so this is where a count in CoPilot should match the source.

    Reference architectureWazuh architecture

  • Wazuh DashboardWazuh interface

    Wazuh’s own investigation and admin views. CoPilot does not replace every native console.

    Reference architectureWazuh architecture

  • Windows Security logsource · 4624, 4625, 4728

    The audit events my AD lab produces. I monitored these on domain-joined machines; the audit policy decides which ones exist at all.

    In my labAD labA Windows logon

  • Sysmonsource · process and network

    Adds process creation, network connection and persistence events that the Security log does not carry. It also adds volume, so it gets tuned first.

    Reference architectureSysmon docs

  • Linux sourcessource · auth, audit, apps

    Authentication, audit and application logs from the containers, collected selectively.

    Reference architectureWazuh architecture

  • Proxmox servicessource · host and guests

    The hypervisor and its guests. Host monitoring is added carefully, after measuring what it costs the laptop.

    In my labFollow a packet

  • Sophos Firewallsource · firewall, IPS, ATR

    Gateway for the LAN and all seven VLANs. Its allow, drop, IPS and threat-feed events are the network half of the story.

    In my labPolicy orderATR snapshot

  • Defender Antiviruslocal malware protection

    Built into Windows and protects the local machine. It is not EDR and not a SIEM.

    Reference architectureDefender Antivirus

  • Defender for EndpointEDR · explored on a trial

    Enterprise endpoint security whose features depend on the plan. I explored it on a free trial. Wazuh complements it; it does not replace it.

    In my labDefender and SplunkDefender SIEM integration

  • Defender XDRcross-product incidents

    Correlates alerts from licensed Microsoft security products into incidents. Which data it has depends on what is licensed and enabled.

    Reference architectureDefender SIEM integration

“Reference architecture” marks a role from the SOCFortress stack and its documentation, not a guest in my 8 Nov 2026 inventory. Connector flows on this site are worked examples. Wazuh, Sophos, Defender, Velociraptor, Shuffle and the SOCFortress services use named line icons because no permitted logo was available.

Sophos VLANs, rule order and segmentation

The VLAN trunk as configured on Port3 and vmbr2, the order Sophos evaluates its rules in, what the rule list does not cover, what my VLAN 20 test did and did not show, and where each role in the lab belongs.

VLANs on Port3 / vmbr2as configured on 6 Nov 2026
VLANNameGatewayUsed for
5MGMT/24 on SophosManagement interfaces
10SERVERS/24 on SophosServer guests
20LAB_TEST/24 on SophosThesis and Kali environment; SafeLine (LXC 202) is tagged here
30TRUSTED/24 on SophosTrusted devices
40SOC/24 on SophosDetection tools
50DMZ/24 on SophosThis journal’s origin, CT 410 (confirmed)
60IOT_GUEST/24 on SophosGuests; internal only, no AP or switch tags it

Lease example, VLAN 20: gateway 192.0.2.1/24 · lease 192.0.2.57 · DNS 192.0.2.1

Example addresses (RFC 5737), not my lab’s. The legacy untagged LAN on vmbr1 is separate and not shown.

Firewall rule ordertop to bottom · first match wins
  1. 1DMZ_SITE_UPDATESallowDMZ (network object) → WAN · HTTP, HTTPS, custom Cloudflare service (TCP/UDP 7844)Lets the DMZ reach the internet for package updates and for the Cloudflare tunnel.The one exception the DMZ needs, placed above the drops so it is evaluated first. Its source is the whole DMZ object, not only CT 410.
  2. 2DROP_NEW_VLANSdrop · logthe newly added VLAN zones (list truncated on screen) → Any · AnyDrops and logs traffic from the new VLANs until each one has its own allow rule.A new VLAN starts closed. The screenshot cuts the source list short, so I only claim the zones I can read.
  3. 3DROP_LAB20_OUTBOUNDdrop · logLAB_TEST (VLAN 20) → Any · AnyDrops and logs everything leaving the thesis and Kali network.Test guests must not reach the internet or my management interfaces.
  4. 4Allow_Minecraft_WireGuardallowMinecraft LXC host object → the VPS host object · custom WireGuard serviceLets the Minecraft server’s WireGuard tunnel reach the public VPS.A scoped exception for one host and one service.
  5. 5LAN_TO_WANallowlegacy LAN → WAN · AnyLets the legacy untagged LAN reach the internet.The broad rule goes low, so narrower rules above it decide first.
  6. 6Automatic MTA policygeneratedas generated → as generated · SMTP servicesCreated by Sophos for its mail transfer agent; accept, as shown.Generated by the firewall; I left it as it was created.
  7. 7Implicit dropdropAny → Any · AnyAnything no rule above matched is dropped.The default when nothing allows the traffic.

A scoped exception only works if Sophos evaluates it before an applicable drop. DMZ_SITE_UPDATES sits first for that reason. If VLAN 20 ever needs DNS, that allow rule goes above DROP_LAB20_OUTBOUND, or the drop matches first and the allow never runs.

What the rule list does not coverread with the rules above
First match
Sophos stops at the first rule that matches. An exception only works if it sits above the drop that would otherwise match it.
Forwarded traffic vs device access
These rules govern traffic passing through the firewall between zones. Traffic to the firewall itself (its DNS, web admin, User Portal, SNMP) is controlled by the device access settings per zone, a separate table.
NAT is separate
Source NAT for outbound traffic and any port forwards are NAT rules, evaluated apart from these. Allowing a flow here does not create a NAT rule, and a NAT rule does not allow a flow.
Not proof of isolation
A drop rule shows intent and, with logging, what it matched. It does not prove a network is isolated in every direction; only tests from each side can show that, and I have run one so far (VLAN 20, below).

Web policy, as shown. Enforced rows: Blocked URLs, Risky downloads, Suspicious downloads. Several other categories in the same policy are disabled, and its default action is allow. So the policy blocks what those enabled rows match; it does not block every category listed on the screen.

DMZ device access, as shown. DNS, User Portal, SNMP. The DMZ zone’s device access lists DNS, User Portal and SNMP. That is the observation, not a recommendation: User Portal and SNMP are not services this site needs from the firewall, and narrowing them is on my list.

VLAN 20 test from SafeLine6 Nov 2026 · SafeLine, LXC 202, tagged VLAN 20
  • DHCP leasepassLease received from Sophos
  • Ping the VLAN 20 gatewayfailNo reply
  • Ping a public addressfailNo reply
  • Ping an internal addressfailNo reply
  • TCP to Proxmox managementfailConnection did not open
  • Sophos logdropDrops recorded on UDP/53 and TCP/853 under DROP_LAB20_OUTBOUND
  • IPv6noteA link-local address was present on the interface

What this establishes: VLAN 20 gets an address, and DROP_LAB20_OUTBOUND matched its DNS and DNS-over-TLS attempts. It covers these checks over IPv4. With a link-local IPv6 address present, it does not prove the VLAN is isolated in every direction or that IPv6 is off.

Where each role belongs: the segmentation model

Scope. This is the complete logical layout I am working towards, not a record of what has moved. Only placements marked Confirmed tag are verified. Stated placementfollows my own instruction for that VLAN. Logical model is where the role belongs by design; today most of these guests still sit on the legacy untagged LAN (vmbr1), as the inventory below shows.
  1. VLAN 5MGMT

    Administrative connectors and the private proxy

    • Twingate connector LXC 208Logical model
    • NetBird routing peer LXC 204Logical model
    • BunkerWeb private proxy LXC 206Logical model
    • Cloudflare Tunnel, recovery access LXC 203Logical model
  2. VLAN 10SERVERS

    Infrastructure services

    • NextDNS forwarder LXC 209Logical model
    • Minecraft server and WireGuard LXC 207Logical model
  3. VLAN 20LAB_TEST

    Thesis and Kali environment, and their targets

    • SafeLine LXC 202Confirmed tag
    • Kali Red VM 301Stated placement
    • Kali Blue VM 302Stated placement
    • Thesis test guestsStated placement
    • AD lab domain controller and Windows targetsLogical model
  4. VLAN 30TRUSTED

    My own client devices

    • Personal laptop and phoneLogical model
  5. VLAN 40SOC

    Monitoring and investigation

    • Wazuh manager and indexerLogical model
    • GraylogLogical model
    • SOCFortress CoPilotLogical model
    • SplunkLogical model
  6. VLAN 50DMZ

    Public origins only

    • This journal: Caddy and cloudflared CT 410Confirmed tag
  7. VLAN 60IOT_GUEST

    Untrusted devices

    • No device yet: no access point or switch port tags itLogical model

What the model would need from the rules

  • MGMTTwingate, NetBird and the recovery tunnel make outbound connections to their cloud services. DROP_NEW_VLANS would drop them, so MGMT would need its own allow rule above it, scoped to those services.
  • MGMTThe connectors exist to reach the Proxmox and Sophos web UIs. If those stay on the legacy LAN, MGMT-to-LAN traffic crosses Sophos and needs a rule for TCP 8006 and 4444 only.
  • LAB_TESTWazuh agents on lab targets would report to the SOC VLAN, but DROP_LAB20_OUTBOUND drops everything leaving VLAN 20. Either an exception for the agent ports goes above it, which weakens the isolation, or collection happens inside LAB_TEST. I have not chosen yet.
  • SERVERSMoving the Minecraft container changes the source object in Allow_Minecraft_WireGuard; the rule has to follow it or the tunnel stops.
  • SERVERSEvery VLAN’s clients ask Sophos for DNS and Sophos forwards to the NextDNS container, so that path must stay allowed wherever the forwarder lives.
  • DMZCT 410 needs only DMZ_SITE_UPDATES outbound and no inbound rule from my other networks; the tunnel is outbound.

Threat feeds: the 6 Nov 2026 snapshot, explained

Lab inventory

The VMs and containers on my Proxmox host, with the state each one was in when I recorded it on 8 November 2026. Wazuh appears once more from an earlier note.

Proxmox guests as recorded on 8 Nov 2026
IDTypeRoleState when recordedNote
100LXCtemplate-lxcStopped on 8 Nov 2026
102VMSophos FirewallRunning on 8 Nov 2026
201LXCOlder Cloudflare TunnelStopped on 8 Nov 2026
202LXCSafeLineStopped on 8 Nov 2026tagged VLAN 20
203LXCCloudflare TunnelRunning on 8 Nov 2026
204LXCNetBird routing peerRunning on 8 Nov 2026
205LXCwazuhStopped on 8 Nov 2026stopped on 1 Nov 2026; not listed on 8 Nov
206LXCBunkerWeb / private proxyRunning on 8 Nov 2026proxy routes not verified
207LXCMinecraft and WireGuard tunnelsRunning on 8 Nov 2026
208LXCTwingate connectorRunning on 8 Nov 2026
209LXCNextDNS forwarderRunning on 8 Nov 2026
301VMKali Red (exercise VM)Stopped on 8 Nov 2026
302VMKali Blue (exercise VM)Stopped on 8 Nov 2026
410LXChomelab-journal (Caddy + cloudflared)Running on 8 Nov 2026VLAN 50 DMZ, confirmed; added after the 8 Nov record

Tools that live outside the guest list

These run on Windows machines, in the cloud, or in the SOC reference stack, so they have no Proxmox ID of their own. Each label says what my notes back up.

  • Cloudflare WAFWAF + tunnelIn use
  • Active DirectoryAD DS + GPOIn use
  • Windows endpointsdomain-joinedIn use
  • Defender for Endpointendpoint sensor · trialIn use
  • Wazuhdetection layerReference stack
  • SOCFortress CoPilotSOC workspaceReference stack
  • Grayloglog pipelineReference stack
  • Splunksecond SIEM viewIn use