Appearance
Two-Firewall Architecture
Purpose
This document describes the Cirius Group two-firewall (layered) remote-access architecture implemented under the VPNLYR project. The design places two independent Palo Alto firewalls in series between the internet and any resource that stores or processes PHI, ensuring that a compromise of either firewall alone cannot expose production data.
This is the authoritative description of the design for HIPAA evidence, onboarding, incident response, and change review. It is NOT a rule reference — see runbooks/firewall-rule-reference.md for rule governance and Panorama for the actual live policy set.
Related documents:
architecture/network-topology.md— VNET/VPC IP ranges and route designcompliance/three-layer-access-architecture.md— ZTNA + Entra + Intune layers that sit on top of this firewall layercompliance/vpnlyr-audit-evidence.md— HIPAA / SOC2 control mappingrunbooks/twingate-connector-ips.md— connector IP governancesecurity/palo-alto-overview.md— firewall platform reference
Design Principles
- Two independent chokepoints. Any traffic path from internet to PHI traverses both PublicFW (internet-facing) and PrivateFW (internal), in that order. Either firewall can independently drop the traffic.
- DMZ between the two firewalls. All externally-reachable services (Twingate connectors, RODC) live in the DMZ VNET. DMZ cannot reach PHI networks directly — all east-west traffic from DMZ to internal passes through PrivateFW.
- No internal system is internet-facing. There is no public IP on any VM that holds PHI. The only public-reachable endpoints are the GlobalProtect portal (on PublicFW) and the Twingate cloud relay.
- Break-glass path is out-of-band. GlobalProtect for CEO/CTO bypasses Twingate but still lands in the DMZ — it must still traverse PrivateFW to reach PHI, and is subject to Entra ID conditional access with MFA.
- Rule governance by design. Firewall rule changes are Rory-only. The architecture exists so the rule set can stay minimal and auditable.
Component Overview
Internet
│
▼
┌───────────────────────┐
│ PublicFW │
│ (azure-prod-firewall)│
│ Internet-facing │
│ Zones: untrust, dmz, │
│ management │
└───────────────────────┘
│
│ Untrusted side: inbound
│ GP portal (CEO/CTO), outbound
│ internet from DMZ only
▼
┌───────────────────────┐
│ DMZ VNET │
│ │
│ - Twingate Conn x2 │
│ (HA pair) │
│ - RODC (DMZ auth) │
│ │
│ NO PHI, NO SERVERS │
└───────────────────────┘
│
│ East-west traffic DMZ → internal
│ inspected by PrivateFW
▼
┌───────────────────────┐
│ PrivateFW │
│ Internal firewall │
│ Zones: dmz, trust-id,│
│ trust-prod, │
│ trust-dev, │
│ trust-legacy │
│ │
│ GlobalProtect portal │
│ (DMZ-facing) │
└───────────────────────┘
│
┌───────────────┼───────────────┐
▼ ▼ ▼
┌─────────────┐ ┌────────────┐ ┌────────────┐
│ Identity │ │ Prod │ │ Dev │
│ VNET │ │ VNET │ │ VNET │
│ (Entra + AD)│ └────────────┘ └────────────┘
└─────────────┘
Legacy VNET (being decommissioned, June 2026)PublicFW — Internet-Facing
- Role: first line of defense between the public internet and everything behind it. Hosts
untrust,dmz, andmanagementzones. - Devices (per CLAUDE.md):
azure-prod-panorama(mgmt plane),azure-prod-firewall(data plane). - What it allows inbound: GlobalProtect portal for CEO/CTO only, and only from allowlisted IPs where that is practical. Nothing else is exposed to the public internet.
- What it allows outbound: egress from DMZ (Twingate connectors reaching Twingate cloud, RODC patching) subject to URL filtering, DNS Security, and WildFire inspection.
- What it does NOT do: does not terminate user sessions to PHI. Users that reach PHI must also authenticate through PrivateFW.
PrivateFW — Internal / East-West
- Role: inspects all east-west traffic between DMZ and internal trust zones (Identity, Prod, Dev). Hosts the GlobalProtect portal on its DMZ-facing interface so GP users are re-authenticated to reach trust zones.
- Default posture: deny-by-default between zones. Any permit rule is scoped to service/destination.
- What it allows: narrowly-scoped inter-VNET policy (domain replication, Twingate resource access, WSUS, monitoring) — the rules documented at a category level in
runbooks/firewall-rule-reference.md. - What it does NOT do: no internet egress originates on PrivateFW — anything leaving the environment egresses via PublicFW.
DMZ VNET
- No PHI, no domain members that serve production users. Only three roles live here:
- Two Twingate connectors (HA pair, see
runbooks/twingate-connector-ips.md). - Read-Only Domain Controller (RODC) — provides DMZ-local AD auth for the Twingate connectors and any DMZ-resident service without letting an attacker on a DMZ host dump the full AD database.
- Future: GlobalProtect portal interface on PrivateFW (DMZ side), WildFire sinkhole, future DLP egress inspector.
- Two Twingate connectors (HA pair, see
RODC in DMZ
The DMZ RODC is intentional: Twingate connectors need AD auth for user session brokering, but putting a writable DC in the DMZ would be a violation of the zero-trust assumption (DMZ is treated as semi-hostile). RODC stores only a filtered set of credentials, cannot write back to AD, and is protected by the same PrivateFW east-west policy as any other DMZ host.
Traffic Flow Descriptions
Flow 1 — Standard user, Twingate path (normal case, SOC2 CC6.1)
- User workstation (Intune-compliant, Entra-authenticated) establishes an outbound HTTPS tunnel to the Twingate cloud relay.
- Twingate cloud relay brokers a session to one of the two DMZ connectors (PublicFW allows outbound DMZ→Twingate cloud; inbound to DMZ is via the connector's own outbound tunnel, so no inbound public port).
- Connector forwards the session to the target PHI resource via PrivateFW. PrivateFW inspects the east-west traffic (zone rule
dmz→trust-prod, narrowly scoped to specific resources). - Resource responds; reply traverses the same path in reverse.
Two firewalls touched: PublicFW (connector egress), PrivateFW (DMZ → trust-* inspection).
Flow 2 — CEO/CTO GlobalProtect path
- User launches GlobalProtect client; client authenticates to the GP portal on PublicFW. TLS terminates on PublicFW; allowed only from
anyuntrust source because CEO/CTO travel, but restricted to the published portal FQDN. - GP portal redirects to the GP gateway on PrivateFW (DMZ-facing interface). User re-authenticates against Entra ID with MFA; the client must still be Intune-compliant per CA policy.
- PrivateFW issues a tunnel into
trust-*zones per the user's group membership (CEO/CTO only). - PHI access is inspected by PrivateFW policy.
Two firewalls touched: PublicFW (portal landing), PrivateFW (gateway and east-west policy). Each firewall enforces its own independent auth (portal cert, then Entra/Intune MFA).
Flow 3 — Server outbound internet (patch / telemetry)
- Server in
trust-prodinitiates outbound HTTPS (e.g., Windows Update, Cortex XDR telemetry). - PrivateFW zone rule
trust-prod → dmzpermits only the specific egress proxy/path. - PublicFW zone rule
dmz → untrustpermits outbound HTTPS, runs URL filtering, DNS Security, and WildFire file inspection on downloads. - Response returns the same path.
Two firewalls touched: PrivateFW (internal egress authorization), PublicFW (internet egress with security profiles).
Flow 4 — What does NOT work by design
- Direct inbound from internet to a server in
trust-*: no path. - DMZ host to
trust-prodwithout explicit rule: denied at PrivateFW. - Server-to-server across
trust-prodandtrust-dev: no peering; no firewall policy exists to permit it. Dev cannot reach prod.
Validation Checklist
Use this checklist when validating a new remote-access path, a new rule, or periodic two-layer assurance (quarterly HIPAA evidence).
- [ ] PublicFW inbound posture — Confirm only GP portal FQDN is reachable on TCP/443 from a scanner outside the Cirius network. No other service responds on a public IP. Evidence: nmap from an AWS Networking account EC2, output captured.
- [ ] GP portal unreachable without Twingate — From an unmanaged device on a residential ISP, confirm the GP portal does not respond on the standard user's IP (CEO/CTO carve-out exempt). Evidence: curl output, firewall hit counter on the deny rule.
- [ ] GP portal reachable via Twingate — With an authorized CEO/CTO user on an Intune-compliant device connected via Twingate, confirm the GP portal responds and auth succeeds. Evidence: GP authentication log event, Twingate session log.
- [ ] DMZ → PHI denied by default — From a Twingate connector host shell (admin-only), confirm no TCP path exists to any
trust-prodresource that is not explicitly permitted by PrivateFW policy. Evidence: PrivateFW deny counter, Cortex XDR record of the attempt. - [ ] Dev cannot reach Prod — From a dev VM, attempt TCP to a prod VM on any port. Must fail. Evidence: PrivateFW drop log.
- [ ] Internet egress is inspected — Confirm a test download on a prod VM produces a WildFire verdict record and (where applicable) a URL filtering log entry. Evidence: WildFire verdict log,
wildfire_agent.pyfindings output. - [ ] RODC scope — Confirm RODC is NOT a member of the writable replication set for privileged accounts. Evidence:
repadminor AD Users and Computers replication policy screenshot. - [ ] Break-glass path still works — Annually, confirm the break-glass GP path works for the CTO with MFA and Intune compliance enforced. Any break-glass sign-in must trigger a SecOps incident.
- [ ] Both firewalls produce logs — Confirm PublicFW and PrivateFW both forward traffic logs to cirius-logging-law-central and S3 WORM archive. Evidence: recent log timestamps in LAW, object count in S3 prefix.
Change Boundary
Rory is the sole approver for any change to this architecture. This document reflects the design as-built. Proposed changes are raised via the VPNLYR backlog in SecOps and reviewed before any rule or VNET is touched. See runbooks/firewall-rule-reference.md for the rule change procedure and security/firewall-change-procedure.md for Palo-specific mechanics.