Network Security Analyzer
Reviews a network configuration as a security specialist and returns prioritized, actionable hardening recommendations.
Example run
Generated by Claude Opus 5.5 on September 23, 2026
Inputs used
- Environment type
- Production environment for a SaaS bookkeeping/accounting platform (hybrid: on-prem office network + AWS VPC hosting the application)
- Network topology
- ~65 employees at one HQ office. Office LAN behind a pfSense firewall with 3 zones: WAN, DMZ (mail relay, VPN concentrator), and internal LAN (workstations, file server, domain controller). Site-to-site IPsec VPN connects HQ to an AWS VPC (10.20.0.0/16) with a public subnet (ALB, NAT gateway, bastion host) and a private subnet (app servers, MySQL RDS). Remote employees (~20) connect via OpenVPN into the office LAN.
- Systems and devices
- pfSense 2.7 firewall/router; Windows 10/11 workstations (mixed patch levels); Ubuntu 22.04 LTS internal file server (Samba); Windows Server 2019 domain controller (AD DS); AWS EC2 Ubuntu 22.04 app servers behind an Application Load Balancer; Amazon RDS MySQL 8.0 (customer financial data); OpenVPN Access Server for remote workers; a Cisco Catalyst 2960 core switch (flat VLAN, no segmentation between finance and general staff)
- Primary security concern
- Two weeks ago a finance staff member clicked a phishing link and their workstation briefly beaconed to an unknown external IP before AV quarantined it. Leadership is now worried about undetected lateral movement, ransomware spread across the flat internal VLAN, and unauthorized access to the MySQL database holding customer bank account and payroll data.
- Compliance standards
- PCI-DSS v4.0 (the platform stores/processes bank account numbers for ACH payroll) and SOC 2 Type II (Security and Availability trust categories)
- Paste firewall rules, network config, or architecture notes
- Excerpt from pfSense WAN and LAN rule sets, plus AWS security group notes and architecture comments provided by the IT lead: # --- pfSense WAN interface rules (top to bottom) --- pass in on WAN proto tcp from any to 203.0.113.10 port 443 # office web portal pass in on WAN proto tcp from any to 203.0.113.10 port 80 # redirects to 443 pass in on WAN proto tcp from any to 203.0.113.11 port 25 # mail relay (Postfix) pass in on WAN proto tcp from any to 203.0.113.12 port 1194 # OpenVPN Access Server pass in on WAN proto tcp from any to 203.0.113.13 port 3389 # RDP jump box for vendor support (added 2025-11 for a contractor, never removed) pass in on WAN proto tcp from any to 203.0.113.14 port 22 # SSH to Ubuntu file server (used occasionally by remote sysadmin, no key-only auth confirmed) block in on WAN from any to any log # --- pfSense LAN interface rules --- pass in on LAN from LAN_net to any # single flat allow-all rule, no segmentation pass in on LAN proto icmp from any to any # --- DMZ interface --- pass in on DMZ from DMZ_net to LAN_net # DMZ hosts can freely reach internal LAN (originally added for a backup job, still active) pass in on DMZ proto tcp from any to any port 443 # --- IPsec tunnel to AWS (Phase 2) --- Local subnet: 192.168.10.0/24 (office LAN) Remote subnet: 10.20.0.0/16 (entire AWS VPC, not scoped to private app subnet only) Encryption: AES-128, SHA1 for integrity, DH Group 2 (legacy default from initial setup in 2021, never upgraded) PSK stored in plaintext in the pfSense config export shared via email during initial setup # --- AWS Security Group: app-servers-sg --- Inbound: TCP 22 from 0.0.0.0/0 # SSH left open to the world "temporarily" during a migration, flagged before but not fixed Inbound: TCP 3306 from 0.0.0.0/0 # MySQL port open broadly instead of scoped to app-servers-sg only Inbound: TCP 8080 from ALB-sg Outbound: all traffic allowed to 0.0.0.0/0 # --- OpenVPN Access Server config notes --- Auth method: local username/password only, no MFA enabled Cipher: BF-CBC (Blowfish, legacy default, not yet migrated to AES-256-GCM) Client-to-client communication: enabled (any remote VPN user can reach any other connected client) # --- Logging/monitoring notes from IT lead --- - pfSense logs retained locally only, 7-day rotation, not shipped to any SIEM - No IDS/IPS package (Suricata/Snort) currently installed on pfSense - No EDR on Windows workstations beyond built-in Windows Defender, default settings - Domain controller event logs not forwarded anywhere - No alerting configured for failed RDP/SSH login attempts on the exposed jump box
Network Security Audit and Hardening Plan: SaaS Bookkeeping Platform (HQ and AWS)
1. Risk Summary
Overall rating: Critical
The configuration allows several direct paths to customer bank-account and payroll data:
- Internet to database. MySQL port 3306 is allowed from 0.0.0.0/0 in the application security group, possibly reaching the database directly.
- Internet to office. RDP and SSH are exposed from the internet into the office, and one SSH rule lands on an internal LAN server.
- Office to database. A flat office VLAN is tunneled to the entire AWS VPC. Any compromised workstation, including the finance workstation from the recent phishing incident, may be able to reach RDS on 3306.
Detection is close to nonexistent. The environment has no IDS, no SIEM, no EDR beyond default Defender, and only 7 days of firewall logs. The firewall logs covering the phishing beacon two weeks ago have almost certainly already rotated out. You therefore cannot currently show that the incident was contained, and it should be handled as an open incident rather than a closed one.
2. Assumptions and Gaps (please verify)
| # | Assumption / Unknown | Why it matters |
|---|---|---|
| A1 | It is unclear whether RDS shares app-servers-sg or has its own SG, and whether it is Publicly Accessible = Yes. |
If both are true, the database is reachable from the internet. That is an active-exposure Critical issue and may trigger breach assessment (see §6). |
| A2 | App servers are assumed to sit in a private subnet with no public IP. | If so, "22 from 0.0.0.0/0" is reachable from everything in the VPC and over the IPsec tunnel, but not from the internet. If they have public IPs or EIPs, it is directly internet-exposed. |
| A3 | 203.0.113.13 (RDP jump box) and 203.0.113.14 (file server) are assumed to be 1:1 NAT or port-forwards to hosts on the internal LAN, not the DMZ. | The file server is described as internal, so the SSH rule forwards internet traffic straight onto the LAN and bypasses the DMZ. |
| A4 | The AWS side is assumed to be an AWS-managed Site-to-Site VPN (VGW/TGW), not a self-managed EC2 endpoint. | This changes how crypto and traffic selectors are configured on the AWS side. |
| A5 | The location of the "office web portal" (203.0.113.10) is unknown: DMZ or LAN. | It cannot be scoped until its placement is known. |
| A6 | Bastion host SG rules, NACLs, pfSense webGUI exposure, admin accounts, and backup architecture were not provided. | These are not assessed here; each needs its own review. |
| A7 | The exact Catalyst 2960 model/variant is unknown (2960, 2960-X, 2960-L, etc.). | It determines L3 capability and support status. Most 2960 variants are end-of-sale, and several are past end-of-support. |
| A8 | "Windows 10/11, mixed patch levels" includes Windows 10 hosts. | Windows 10 reached end of support on 14 Oct 2025. Without paid ESU enrollment, those hosts receive no security patches as of today. |
3. Attack Surface Map
Internet ingress (pfSense WAN)
| Destination | Port | Service | Assessment |
|---|---|---|---|
| 203.0.113.10 | 443 | Web portal | Acceptable once placement is confirmed (A5). |
| 203.0.113.10 | 80 | Redirect to 443 | Low risk. |
| 203.0.113.11 | 25 | Postfix relay (DMZ) | Expected. Verify it is not an open relay. |
| 203.0.113.12 | 1194/tcp | OpenVPN AS (DMZ) | Expected, but has no MFA and weak crypto. |
| 203.0.113.13 | 3389 | RDP jump box | Stale, internet-wide exposure. |
| 203.0.113.14 | 22 | SSH to internal file server | Internet reaches the LAN directly. |
AWS ingress
- The ALB in front of the app on 8080 is correctly scoped to the ALB SG.
- 22 and 3306 are allowed from 0.0.0.0/0.
Trust-boundary violations
- DMZ to LAN: allow-all.
- VPN clients to each other: client-to-client allowed.
- Office LAN to entire AWS VPC: no filtering.
- Inside the LAN: the network is flat, so workstations, the DC, the file server, and finance hosts can all reach each other.
Egress
- LAN to any: allow-all. This is how the beacon succeeded.
- AWS app servers to 0.0.0.0/0: allow-all.
Likely attack chains
- Phished workstation to database. Phished finance workstation → flat LAN → IPsec to 10.20.0.0/16 → RDS:3306 or app servers:22.
- Internet to domain. Internet → RDP 3389 or SSH 22 (password auth) → LAN host → DC → domain-wide ransomware.
- Stolen VPN password to everything. Stolen VPN password (no MFA) → LAN plus all other VPN clients → the same paths as chain 1.
4. Findings Table
| ID | Issue | Affected Component | Severity | Impact |
|---|---|---|---|---|
| F1 | TCP 3306 allowed from 0.0.0.0/0 | AWS app-servers-sg / RDS MySQL |
Critical | Direct brute force or exploitation of the database holding bank account and payroll data. Possible reportable exposure (A1). |
| F2 | TCP 22 allowed from 0.0.0.0/0 on app servers | AWS app-servers-sg |
Critical (High if A2 holds) | SSH brute force against hosts that hold DB credentials. |
| F3 | RDP 3389 exposed to the internet, stale contractor rule, no alerting | pfSense WAN / jump box | Critical | One of the most common ransomware initial-access vectors. Anyone who knows the contractor's credentials still has access. |
| F4 | SSH exposed from the internet to an internal LAN server, password auth possible | pfSense WAN / Ubuntu Samba server | Critical | Internet to LAN with no DMZ in between. The file server is a prime ransomware target. |
| F5 | Phishing incident not verified as contained; the logs that would prove it are gone | Finance workstation, pfSense logs | Critical | AV quarantine does not prove there is no persistence or credential theft. Lateral movement may be undetected. |
| F6 | No MFA on remote-access VPN | OpenVPN AS | Critical | One phished password gives full LAN access. Also violates PCI DSS 4.0 req. 8.4.2/8.4.3. |
| F7 | Flat VLAN: no segmentation between finance, staff, servers, and DC | Catalyst 2960, pfSense LAN | High | Ransomware can spread unimpeded. The whole office LAN is in PCI scope. |
| F8 | IPsec PSK sent by email in plaintext | IPsec tunnel | High | The key must be treated as compromised, which enables tunnel impersonation. |
| F9 | Weak IPsec crypto: DH Group 2 (1024-bit MODP), SHA-1, likely IKEv1 | IPsec Phase 1/2 | High | Deprecated primitives. Fails PCI req. 4.2.1 "strong cryptography" expectations. |
| F10 | IPsec Phase 2 and filtering cover the entire VPC (10.20.0.0/16) | IPsec / pfSense IPsec rules | High | Every office host can reach the bastion, RDS, and app servers. The office becomes an extension of the CDE. |
| F11 | DMZ to LAN allow-all | pfSense DMZ rules | High | A compromised mail relay or VPN concentrator gets unrestricted LAN access, which defeats the purpose of the DMZ. |
| F12 | OpenVPN client-to-client enabled | OpenVPN AS | High | One compromised home laptop can attack every other connected remote worker. |
| F13 | OpenVPN uses BF-CBC (64-bit block cipher, SWEET32) | OpenVPN AS | High | Weak, deprecated cipher, and dropped by current OpenVPN releases. PCI 4.2.1 concern. |
| F14 | Unrestricted LAN egress | pfSense LAN rules | High | C2 beaconing and data exfiltration (as just happened). No DNS control. |
| F15 | No IDS/IPS | pfSense | High | Lateral movement and C2 go undetected. PCI req. 11.5.1 gap. |
| F16 | No centralized logging; 7-day local retention; DC logs not forwarded | pfSense, DC, servers | High | No forensics or detection. PCI req. 10.2/10.4/10.5.1 (12-month retention) and SOC 2 CC7.2 gaps. |
| F17 | No EDR; Defender on defaults | Windows endpoints | High | Weak visibility into and blocking of hands-on-keyboard attacks and ransomware. |
| F18 | Windows 10 endpoints past end of support; mixed patch levels | Workstations | High | Unpatched and unpatchable vulnerabilities (A8). PCI req. 6.3.3. |
| F19 | App server egress allow-all to 0.0.0.0/0 | AWS app-servers-sg |
Medium | Lets a compromised app server exfiltrate data or beacon out. |
| F20 | No alerting on authentication failures (RDP/SSH/VPN/AD) | All | Medium | Brute force and password spraying go unnoticed. |
| F21 | Redundant / overly broad LAN ICMP rule (from any) |
pfSense LAN | Low | Shadowed by the allow-all rule. Cleanup item, but should not survive the rule rewrite. |
| F22 | DMZ any to any :443 also allows DMZ-to-LAN :443 (already covered by F11) and unrestricted DMZ egress on 443 |
pfSense DMZ | Medium | C2 and exfiltration channel from DMZ hosts. |
| F23 | pfSense 2.7 and switch firmware/lifecycle status unverified | pfSense, Catalyst 2960 | Medium | Possibly unpatched infrastructure. Verify the current CE/Plus release and the 2960 support status (A7). |
| F24 | Backup architecture undocumented; the "backup job" relies on DMZ-to-LAN access | File server, DC, RDS | Medium (High for Availability) | Ransomware resilience is unknown. SOC 2 Availability (A1.2/A1.3) gap. |
5. Remediation Plan (prioritized)
Phase 0: Emergency containment (0–48 hours)
0.1 Treat the phishing event as an open incident (F5)
- Stop log loss now. Increase pfSense log size and set up remote syslog (see 2.3) before anything else rotates out.
- Collect what still exists:
- DC Security logs
- Defender quarantine details and the
MpCmdRun -GetFilessupport bundle - The workstation's disk and memory image, if it has not been reimaged
- The beacon destination IP
- Hunt for the beacon IP. Check every source that might still hold it: DNS server logs, Defender Advanced Hunting (if licensed), and AWS VPC Flow Logs (if enabled).
- Reset credentials:
- The affected user's AD password, VPN password, and any saved browser credentials
- Kerberos tickets and sessions (
klist purge; disable and re-enable the account if needed)
- Review AD for persistence. Look at the last 30 days for new accounts, group membership changes (4720/4728/4732/4756), and new services or scheduled tasks on the host.
- Reimage the workstation. Do not trust AV cleanup.
- If you lack in-house IR capacity, engage a retained IR firm. Findings may need legal review (§6).
0.2 Close database and SSH exposure in AWS (F1, F2)
Before revoking, pull VPC Flow Logs, and RDS logs if enabled, for 3306 and 22 connections from non-VPC IPs. They are evidence for §6.
# Revoke world-open rules
aws ec2 revoke-security-group-ingress --group-id <app-servers-sg-id> --protocol tcp --port 22 --cidr 0.0.0.0/0
aws ec2 revoke-security-group-ingress --group-id <app-servers-sg-id> --protocol tcp --port 3306 --cidr 0.0.0.0/0
# Dedicated DB security group: MySQL only from app servers
aws ec2 create-security-group --group-name rds-mysql-sg --description "MySQL from app tier only" --vpc-id <vpc-id>
aws ec2 authorize-security-group-ingress --group-id <rds-mysql-sg-id> --protocol tcp --port 3306 --source-group <app-servers-sg-id>
aws rds modify-db-instance --db-instance-identifier <db-id> \
--vpc-security-group-ids <rds-mysql-sg-id> --no-publicly-accessible --apply-immediately
- Replace SSH access with AWS Systems Manager Session Manager, which needs no inbound port. If SSH is temporarily unavoidable, allow 22 only from
bastion-sg. - If there is any evidence of external 3306 connections, rotate the MySQL master and application credentials.
0.3 Remove internet-exposed RDP and SSH (F3, F4)
- Delete the WAN rules and the associated NAT for 203.0.113.13:3389 and 203.0.113.14:22.
- Disable the contractor's account.
- Review the jump box and file server authentication logs (Windows 4624/4625 with logon type 10;
/var/log/auth.log) for successful logins from unexpected IPs. - Remote admins and vendors connect through the VPN with MFA (0.4). Vendor access is time-boxed and just-in-time.
- On the file server, regardless of the above, set the following in
/etc/ssh/sshd_config(or a drop-in undersshd_config.d/):
Then runPasswordAuthentication no KbdInteractiveAuthentication no PermitRootLogin no AllowGroups ssh-adminssudo systemctl reload sshandsudo ufw allow from <admin-vlan-cidr> to any port 22 proto tcp, withufw default deny incoming.
0.4 Harden OpenVPN (F6, F12)
- Enable MFA.
- Preferred: SAML or RADIUS against your IdP/AD with MFA enforced.
- Minimum: Access Server's built-in TOTP (Admin UI → Authentication → MFA, or User Management → require TOTP), enforced for all users.
- Disable inter-client communication. Admin UI → Configuration → Advanced VPN → "Should clients be able to communicate with each other?" → No.
- Force re-enrollment of all 20 remote users.
- Exact
saclikey names vary by AS version; confirm them against your version's documentation before scripting.
0.5 Cut DMZ-to-LAN allow-all (F11)
- Replace it with explicit rules for what the backup job actually needs. Example: DMZ mail relay → LAN backup server, TCP <backup port>.
- Better still, invert the direction: the backup server pulls from the DMZ, so the DMZ never initiates connections into the LAN.
Phase 1: Tunnel, egress, and detection foundation (week 1–2)
1.1 Rebuild the IPsec tunnel (F8, F9, F10)
-
Rotate the PSK to a random secret of 32+ characters, stored in a password vault and never sent by email. Certificate authentication is better if supported.
-
Crypto settings. In AWS use
modify-vpn-tunnel-options; in pfSense use VPN → IPsec:Setting Recommended value IKE version IKEv2 Phase 1 cipher / integrity AES-256, SHA-256 or SHA-384 Phase 1 DH group 20 (ECP-384); minimum 14 Phase 2 cipher AES-256-GCM PFS group 20 Groups to remove DH 2, SHA-1 aws ec2 modify-vpn-tunnel-options --vpn-connection-id <id> --vpn-tunnel-outside-ip-address <ip> \ --tunnel-options 'IKEVersions=[{Value=ikev2}],Phase1EncryptionAlgorithms=[{Value=AES256}],Phase1IntegrityAlgorithms=[{Value=SHA2-384}],Phase1DHGroupNumbers=[{Value=20}],Phase2EncryptionAlgorithms=[{Value=AES256-GCM-16}],Phase2DHGroupNumbers=[{Value=20}],PreSharedKey=<new-psk>' -
Scope the tunnel. Narrow the traffic selectors, and enforce filtering on the pfSense IPsec interface rules and AWS SG/NACLs. Selectors alone are not access control.
- Office admin VLAN → bastion (or nothing, if you use SSM) on the required ports only.
- No office subnet may reach RDS.
- pfSense IPsec tab:
passspecific source VLAN → specific AWS host:port, then a finalblockwith logging.
1.2 Egress filtering on pfSense LAN (F14)
Replace pass LAN_net → any with the following, evaluated top to bottom:
| # | Action | Source | Destination | Port | Purpose |
|---|---|---|---|---|---|
| 1 | pass | LAN_net | DC / internal DNS | 53 | Name resolution |
| 2 | block + log | LAN_net | any | 53, 853 | Stop DNS bypass and DoT |
| 3 | pass | LAN_net | any | 80, 443 | Web; ideally via DNS filtering or a proxy |
| 4 | pass | LAN_net | DMZ mail relay | 587/25 | Mail (as needed) |
| 5 | pass | specific | specific | other documented business ports | Documented exceptions |
| 6 | block + log | any | any | any | Default deny |
- Delete the redundant
icmp from anyrule (F21). If ICMP is needed, allow echo-request from LAN_net only. - Add DNS-layer threat filtering: pfBlockerNG on pfSense, or any protective DNS service. The DC forwards to it.
- Apply the same model to the DMZ (F22): each DMZ host gets only the egress it needs, e.g. the mail relay → 25 outbound.
1.3 Deploy IDS/IPS (F15)
- Install Suricata on pfSense on the LAN (inside) and WAN interfaces.
- Start with the ET Open ruleset in alert mode, tune for 1–2 weeks, then switch to inline IPS for high-confidence categories (malware, C2, exploit, policy/TOR).
- Once VLANs exist (Phase 2), put a sensor on inter-VLAN traffic.
1.4 AWS detection and hardening (F19, PCI 10/11)
- Enable GuardDuty (including RDS Protection), CloudTrail (all regions, log file validation), VPC Flow Logs, and Security Hub with the PCI DSS standard.
- Restrict
app-servers-sgegress to:rds-mysql-sg:3306- 443 to required endpoints only, using VPC endpoints for AWS services where possible
- If broad outbound is required, consider Route 53 Resolver DNS Firewall or AWS Network Firewall.
- RDS:
require_secure_transport=ONin the parameter group- Encryption at rest (verify it is enabled)
- Deletion protection, automated backups, and a cross-account snapshot copy
- Enable the audit log, or the general/slow logs, and export to CloudWatch
1.5 OpenVPN cipher and least privilege (F13)
- Upgrade Access Server to the current release.
- Set data ciphers to
AES-256-GCM:AES-128-GCM:CHACHA20-POLY1305and remove BF-CBC. - Clients older than OpenVPN 2.4 must be upgraded.
- Use Access Server group ACLs so finance users reach finance resources and admins reach the admin VLAN. Nobody gets the whole LAN by default.
Phase 2: Segmentation and endpoint hardening (≤30 days)
2.1 VLAN segmentation (F7)
Route between VLANs on pfSense (router-on-a-stick) so every inter-VLAN flow passes through firewall policy and Suricata. The example assumes an L2-only 2960.
vlan 10
name MGMT
vlan 20
name SERVERS
vlan 30
name FINANCE
vlan 40
name STAFF
vlan 50
name VPN-POOL
vlan 999
name BLACKHOLE
!
interface range Gi0/1 - 12
description FINANCE-WS
switchport mode access
switchport access vlan 30
switchport nonegotiate
spanning-tree portfast
spanning-tree bpduguard enable
!
interface Gi0/48
description UPLINK-pfSense
switchport mode trunk
switchport trunk native vlan 999
switchport trunk allowed vlan 10,20,30,40
switchport nonegotiate
!
! Unused ports
interface range Gi0/40 - 47
switchport access vlan 999
shutdown
!
ip dhcp snooping
ip dhcp snooping vlan 10,20,30,40
interface Gi0/48
ip dhcp snooping trust
ip arp inspection vlan 10,20,30,40
! DAI will drop traffic from any static-IP host that has no binding: add ARP ACLs for static-IP hosts first
!
! Management hygiene
ip ssh version 2
line vty 0 15
transport input ssh
access-class MGMT-ONLY in
no ip http server
no ip http secure-server
Inter-VLAN policy on pfSense (default deny between all VLANs):
- STAFF and FINANCE → SERVERS: only AD ports (53, 88, 135, 389/636, 445 to the DC, 464, 3268/3269, dynamic RPC as needed) and 445 to the file server.
- FINANCE ↔ STAFF: deny.
- Workstation ↔ workstation within a VLAN: block SMB/RDP/WinRM with Windows Firewall GPO (see 2.2), because the firewall does not see intra-VLAN traffic.
- MGMT: the only VLAN allowed to reach switch/pfSense management, RDP/SSH to servers, and the AWS admin path.
- VPN-POOL: treated like STAFF/FINANCE according to the user's group.
2.2 Endpoint and AD hardening (F17, F18)
- Windows 10. Upgrade to Windows 11 or enroll in ESU immediately, and isolate any stragglers.
- Patching. Establish a patch SLA: critical fixes within 14 days, others within 30 days (align with PCI 6.3.3).
- EDR. Deploy an EDR with 24×7 monitoring (MDR if staff is limited). If you stay on Defender, move to Defender for Endpoint P2 or equivalent. At minimum turn on:
- Tamper Protection
- Cloud-delivered protection at High
- Network Protection in Block mode
- Controlled Folder Access for finance users
- ASR rules in Block mode, especially "Block credential stealing from LSASS", "Block Office child processes", "Block executable content from email", and "Use advanced protection against ransomware"
- Windows Firewall GPO. Deny inbound 445, 135, 3389, and 5985/5986 on workstations except from the MGMT VLAN.
- Credential hygiene:
- Windows LAPS for local admin passwords
- Separate admin accounts, with no domain admin logons on workstations (tiering)
- Protected Users group for privileged accounts
- Credential Guard
- Legacy protocols. Disable LLMNR, NetBIOS-NS, SMBv1, and NTLMv1. Require SMB signing.
- File server (Samba).
server min protocol = SMB3,server signing = mandatory, share ACLs by AD group. Snapshot-capable storage (ZFS/LVM/Btrfs snapshots) for rapid ransomware rollback.
2.3 Centralized logging and alerting (F16, F20)
-
Stand up a SIEM or log platform: open-source options such as Wazuh, Security Onion, or Elastic, or a managed SIEM/MDR.
-
Retention: 12 months, with 3 months immediately searchable (PCI 10.5.1).
-
Sources:
- pfSense firewall logs and Suricata alerts (Status → System Logs → Settings → Remote logging)
- DC and server logs via Windows Event Forwarding plus Sysmon
- Linux auth logs
- OpenVPN AS logs
- CloudTrail, GuardDuty, VPC Flow Logs, RDS logs
-
Minimum alert set:
Signal Source Failed logon bursts / password spraying 4625, 4771 Account lockouts 4740 Privileged group changes 4728/4732/4756 New services 7045 Log cleared 1102 Kerberoasting 4769 with RC4 encryption VPN logins from new countries OpenVPN AS Suricata C2/malware hits Suricata GuardDuty High findings GuardDuty RDS logins from non-app hosts RDS logs
Phase 3: Resilience and governance (≤90 days)
- Backups (F24):
- Follow 3-2-1 with an immutable or offline copy, e.g. S3 Object Lock in a separate AWS account, or an offline or immutable backup appliance.
- Back up AD using system-state backups.
- Run quarterly restore tests and document them as SOC 2 Availability evidence.
- Infrastructure lifecycle (F23):
- Upgrade pfSense to the current supported release.
- Confirm the 2960's support status and plan replacement if it is past end-of-support.
- Maintain a hardware/software inventory (PCI 12.5.1).
- Bastion. Retire it in favor of SSM Session Manager with session logging to S3/CloudWatch, or lock its SG to VPN egress IPs plus MFA.
- Vulnerability management.
- Quarterly internal and external scans; external scans by an ASV if card data is in scope (see §6).
- Annual penetration test that includes segmentation testing (PCI 11.4.5).
- Change control. The stale RDP rule and the "temporary" SSH rule both come from a missing change-control process. Require an owner, ticket, and expiry date on every firewall and SG rule, with semi-annual rule reviews (PCI 1.2.7, SOC 2 CC8.1).
- Awareness. Run phishing simulations and a one-click "report phish" button.
6. Findings Requiring Compliance or Legal Review
-
Possible data exposure (F1, F5). If RDS was publicly accessible with 3306 open, or if the phishing incident cannot be ruled out as a data compromise, counsel should assess obligations under:
- State breach-notification laws
- Customer contracts
- Nacha rules (for ACH data)
- Card-brand and acquirer notification (if PCI applies)
Preserve evidence (Flow Logs, RDS logs, CloudTrail, DC logs) under counsel's direction before making further changes wherever possible.
-
PCI DSS applicability. PCI DSS governs payment card data (PAN). Bank account and routing numbers for ACH are not cardholder data by themselves. The Nacha Supplementing Data Security Requirements and possibly GLBA/FTC Safeguards Rule are more directly applicable to them. Confirm with your QSA or counsel whether any card data is handled.
- If card data is handled, the flat LAN plus the whole-VPC tunnel puts the entire office in CDE scope, and segmentation (Phase 2) is the main lever to reduce it.
- If no card data is handled, the controls above are still appropriate and map closely to SOC 2 CC6/CC7 and Nacha's requirements.
-
SOC 2 Type II observation period. These issues exist during your audit window. Remediate and document them (dates, tickets, evidence) and disclose them to your auditor as exceptions or management responses. Silently fixing them without documentation creates a worse finding.
-
Contractor access (F3). Review the contract and NDA terms for the vendor whose RDP rule was left open, and whether their access and activity must be reported or audited.
-
Email-shared PSK (F8). Determine who received that email and whether it sits in any external or personal mailbox. This may affect incident scoping.
7. Quick Wins (highest risk reduction for lowest effort)
- Close the AWS world-open rules and make RDS private. Revoke
22and3306from0.0.0.0/0, attach a dedicatedrds-mysql-sgthat allows 3306 only fromapp-servers-sg, and set RDS to not publicly accessible. This takes about 15 minutes and removes the most direct path to customer financial data. Capture Flow Logs first. - Delete the WAN RDP (3389) and SSH (22) rules and NATs on pfSense. This takes about 5 minutes and eliminates the two most common internet-to-ransomware entry points. Route vendor and admin access through the VPN.
- Enforce MFA on OpenVPN and disable client-to-client. This takes about an hour plus user re-enrollment. It neutralizes stolen or phished passwords, the exact attack you just experienced, as a path into the LAN.
Immediately after these three, configure remote syslog on pfSense so you stop losing forensic evidence, and replace the DMZ-to-LAN allow-all rule.
Related prompts
Cloud Infrastructure Architect
Design a scalable, secure, cost-optimized cloud architecture with IaC, diagrams, and a phased rollout plan.
Cybersecurity Audit Specialist
Run a structured cybersecurity audit of an organization, prioritizing risks and producing an actionable remediation roadmap.
DevOps Automation Specialist
Acts as a DevOps engineer to design, optimize, and troubleshoot CI/CD pipelines, infrastructure as code, and cloud automation.
Ansible Automation Playbook Creator
Generates production-ready, idempotent Ansible playbooks and roles for any infrastructure automation or configuration task.