PRJ-2026-04-dmz-migration: External Services DMZ Migration
1. Project Summary
| Field | Value |
|---|---|
PRJ ID |
PRJ-2026-04-dmz-migration |
Owner |
Evan Rosado |
Priority |
P1 — security audit + remediation |
Category |
Network Security / Architecture |
Status |
Active — audit phase |
Objective |
Move all externally accessible internal services behind NetScaler (DMZ reverse proxy) |
Risk |
Internal services exposed directly to external traffic bypass inspection, WAF, and TLS termination |
2. Purpose
2.1. Problem
Internal services (web portals, applications, APIs) are currently reachable from external networks without passing through the DMZ reverse proxy (NetScaler). This means:
-
No TLS termination/inspection at the perimeter
-
No WAF (Web Application Firewall) protection
-
No rate limiting or DDoS mitigation
-
Direct exposure of internal server IPs to the internet
-
If compromised, attacker lands directly on the internal network
2.2. Target Architecture
CURRENT (risky):
Internet → Firewall NAT → Internal Server
↑ no inspection, no proxy
TARGET (secure):
Internet → Firewall → DMZ ─────────────────────── Internal
│ │
│ NetScaler (reverse proxy) │
│ - TLS termination │
│ - WAF inspection │
│ - Rate limiting │
│ - Load balancing │
│ - Health monitoring │
│ │
└──── forwards clean ────────┘
traffic only
2.3. Key Concepts
Reverse Proxy: Accepts external requests, inspects them, then forwards to internal servers. External users never see internal IPs.
Load Balancer: Distributes traffic across multiple internal servers for availability and performance.
NetScaler (Citrix ADC): Performs BOTH functions. Already in the DMZ — just needs services pointed through it.
DMZ (Demilitarized Zone): Network segment between external firewall and internal firewall. Compromising a DMZ host does NOT give access to internal network.
3. Phase 1: Discovery Audit
3.1. Step 1: Identify All External-Facing Services
Gather from firewall rules (NAT/PAT rules that expose internal IPs):
| Service | Internal IP | External Port | Protocol | Purpose | Behind NetScaler? |
|---|---|---|---|---|---|
example: Patient Portal |
10.x.x.x |
443 |
HTTPS |
Patient access |
NO — direct NAT |
Where to find this:
-
Firewall NAT/PAT rules (pfSense/VyOS/ASA — look for destination NAT to internal IPs)
-
NetScaler vServer list (what’s already proxied)
-
DNS external records (what FQDNs resolve to your public IPs)
-
Load balancer configs
-
Nmap scan from external perspective (with authorization)
3.2. Step 2: Classify Each Service
| Category | Action | Examples |
|---|---|---|
Must be behind NetScaler |
Migrate to DMZ reverse proxy |
Web portals, patient-facing apps, vendor APIs, OWA/Exchange, remote access portals |
Should NOT be externally accessible |
Remove NAT rule entirely |
ISE admin, database servers, AD/LDAP, internal monitoring, management interfaces, hypervisor consoles |
Already behind NetScaler |
Verify and document |
Services already proxied correctly |
VPN only |
Move behind VPN, remove direct access |
Internal tools that only employees use remotely |
3.3. Step 3: Risk Score Each Service
| Service | Data Sensitivity | User Base | Current Protection | Risk Score |
|---|---|---|---|---|
example |
PHI/ePHI |
External patients |
Direct NAT (no proxy) |
CRITICAL |
4. Phase 2: Migration Plan (per service)
For each service being migrated behind NetScaler:
4.1. Pre-Migration
-
Document current NAT rule (source, dest, port, protocol)
-
Document internal server IP, port, health check URL
-
Obtain or generate TLS certificate for the service FQDN
-
Create NetScaler vServer configuration
-
Create NetScaler service/service group pointing to internal server
-
Configure health monitor (HTTP/HTTPS health check)
-
Configure WAF policies (if applicable)
-
Test in staging/lab if possible
4.2. Migration Window
-
Create NetScaler vServer + service binding
-
Update firewall: external traffic → NetScaler VIP (DMZ) instead of internal IP
-
Update DNS if needed (point FQDN to NetScaler VIP)
-
Verify external access works through NetScaler
-
Verify TLS certificate is correct (no mixed content, no cert errors)
-
Verify internal server sees traffic from NetScaler SNIP (not external IP directly)
-
Remove old direct NAT rule
4.3. Post-Migration
-
Monitor NetScaler logs for errors
-
Verify no users impacted (check with service owner)
-
Document the change (CR in domus-captures)
-
Update firewall rule documentation
5. Phase 3: Hardening
After all services are behind NetScaler:
-
Enable WAF profiles on all HTTPS vServers
-
Configure rate limiting (prevent brute force)
-
Enable bot management (if licensed)
-
Configure content inspection policies
-
Set up NetScaler monitoring → Sentinel log ingestion
-
Remove ALL direct NAT rules to internal servers
-
Perform external vulnerability scan to validate no internal services are directly reachable
6. Services That Must NEVER Be Externally Accessible
| Service | Ports | Why |
|---|---|---|
ISE Admin/ERS |
443, 9060, 8910 |
Network access control — internal only |
Active Directory / LDAP |
389, 636, 88, 3268 |
Domain services — VPN only |
Database servers |
1433, 3306, 5432, 1521, 2484 |
Data stores — internal only |
Hypervisor management |
443, 8006 |
VM infrastructure — internal only |
Monitoring dashboards |
3000, 9090, 5601 |
Grafana, Prometheus, Kibana — VPN only |
SSH to servers |
22 |
Management access — VPN + jump host only |
SNMP |
161, 162 |
Network management — internal only |
Syslog |
514 |
Log collection — internal only |
7. Metadata
| Field | Value |
|---|---|
PRJ ID |
PRJ-2026-04-dmz-migration |
Author |
Evan Rosado |
Created |
2026-04-01 |
Last Updated |
2026-04-01 |
Status |
Active — audit phase |
Next Review |
2026-04-08 |