arikari93/firewall-engineering-lab

GitHub: arikari93/firewall-engineering-lab

一个生产风格的pfSense防火墙工程实验室,用于学习和测试多区域网络分段、安全策略及合规映射。

Stars: 0 | Forks: 0

# pfSense 防火墙工程实验室 [![pfSense](https://img.shields.io/badge/pfSense-CE%202.7.2-blue)](https://www.pfsense.org/) [![OPNsense Compatible](https://img.shields.io/badge/OPNsense-24.7-orange)](https://opnsense.org/) [![NIST](https://img.shields.io/badge/Framework-NIST%20SP%20800--41-green)](https://csrc.nist.gov/publications/detail/sp/800-41/rev-1/final) [![CIS](https://img.shields.io/badge/Benchmark-CIS%20pfSense-lightgrey)](https://www.cisecurity.org/) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE) ## ⚡ 快速开始(30秒概览) **这是什么?** 一个生产环境风格的防火墙实验室,实现了多区域网络分段、有状态防火墙策略、站点到站点及远程访问VPN、NAT/路由,以及自动化日志转发至 Wazuh SIEM——所有内容均按企业标准记录。 **关键指标:** - 🔒 **5个网络区域**,具有显式的VLAN间策略执行能力(默认拒绝基准) - 📋 跨所有接口的**47条防火墙规则**,并记录了商业理由 - 🌐 **OpenVPN远程访问** + **IPSec站点到站点** 隧道配置 - 📊 日志转发至 Wazuh SIEM,延迟<1秒(可与安全运营实验室集成) - 🛡️ **pfBlockerNG** 用于IP/DNS威胁情报拦截(30,000+被阻止的IOC) - 📝 所有主要策略均进行了**NIST SP 800-41 / CIS Controls** 合规性映射 - 🔄 带有前后验证清单的**自动化固件修补**工作流 ## 🏗️ 架构概览 ### 网络区域设计 ``` ┌─────────────────────────────────────┐ │ INTERNET / WAN │ │ (ISP Modem/Gateway) │ └────────────────┬────────────────────┘ │ WAN (em0) │ ┌────────────────▼────────────────────┐ │ │ │ pfSense CE 2.7.2 │ │ (Protectli FW4B — 4-port Intel) │ │ │ │ ┌──────────┐ ┌────────────────┐ │ │ │pfBlockerNG│ │ Suricata IPS │ │ │ │ 30k IOCs │ │ (inline mode) │ │ │ └──────────┘ └────────────────┘ │ │ │ └──────────┬───────────────────────────┘ │ LAN (em1) → Trunk to Switch │ ┌───────────────▼────────────────────────────┐ │ NETGEAR GS308E Managed Switch │ │ (802.1Q VLAN Trunking) │ └──┬──────────┬──────────┬──────────┬────────┘ │ │ │ │ VLAN 10 │ VLAN 20 │ VLAN 30 │ VLAN 40 │ VLAN 99 │ │ │ │ ┌────────▼──┐ ┌─────▼───┐ ┌───▼────┐ ┌───▼────┐ ┌──▼──┐ │ TRUSTED │ │ IoT │ │ DMZ │ │SEC LAB │ │MGMT │ │ LAN │ │ DEVICES │ │SERVERS │ │(Pi 5 + │ │ │ │192.168.10 │ │192.168.2│ │10.0.30 │ │Laptop) │ │MGMT │ │ .0/24 │ │ 0.0/24│ │ .0/24 │ │10.0.40 │ │ONLY │ └───────────┘ └─────────┘ └────────┘ └────────┘ └─────┘ ``` ### 与安全运营实验室集成 ``` [pfSense Firewall] ──── syslog/514 ────► [Wazuh Manager (Laptop)] │ ▲ │ SPAN port mirroring │ ▼ │ [Raspberry Pi 5 NIDS] ── Wazuh Agent ────────────┘ (Suricata + Pi-hole) ``` **双层防御:** pfSense 提供边界执行和有状态包检测;Raspberry Pi NIDS 对内部流量提供被动深度包检测。来自两个来源的告警在 Wazuh 中进行关联。 ## 🛡️ 技术栈 | 组件 | 技术 | 用途 | |-----------|-----------|---------| | **防火墙OS** | pfSense CE 2.7.2 | 有状态防火墙、路由、NAT | | **硬件** | Protectli FW4B (4端口Intel网卡) | 专用防火墙设备 | | **VLAN交换** | NETGEAR GS308E (802.1Q) | 网络区域分段 | | **威胁情报** | pfBlockerNG 3.x | IP/DNS阻止列表执行 | | **内联IPS** | Suricata (pfSense包) | WAN口内联包检测 | | **VPN — 远程访问** | OpenVPN (TLS 1.3, AES-256-GCM) | 远程访问客户端连接 | | **VPN — 站点到站点** | IPSec IKEv2 | 实验室间隧道(文档) | | **日志转发** | syslog → Wazuh | SIEM集成 | | **DNS安全** | DNS解析器 (Unbound) + DNSBL | 恶意软件/钓鱼域名阻止 | | **证书颁发机构** | pfSense内部CA | VPN客户端证书 | ## 🔐 防火墙策略设计 ### 区域信任模型 | 区域 | VLAN | 子网 | 信任级别 | 互联网入站 | |------|------|--------|-------------|----------------------| | 可信局域网 | 10 | 192.168.10.0/24 | 高 | 拒绝(默认) | | 物联网 | 20 | 192.168.20.0/24 | 低 | 拒绝 | | 非军事区 | 30 | 10.0.30.0/24 | 中 | 有限(特定端口) | | 安全实验室 | 40 | 10.0.40.0/24 | 高 | 拒绝 | | 管理区 | 99 | 10.0.99.0/24 | 管理员 | 拒绝 | ### VLAN间策略矩阵 ``` FROM ↓ TO → | LAN | IoT | DMZ | SecLab | MGMT | WAN ───────────────────────────────────────────────────────────────── TRUSTED LAN | — | ✗ | ✓* | ✓ | ✗ | ✓ IoT | ✗ | — | ✗ | ✗ | ✗ | ✓† DMZ | ✗ | ✗ | — | ✗ | ✗ | ✓‡ Security Lab | ✓ | ✓(ro)| ✓ | — | ✓(ro)| ✓ Management | ✗ | ✗ | ✗ | ✗ | — | ✗ WAN (inbound) | ✗ | ✗ | ✓§ | ✗ | ✗ | — ✓ = Permitted ✗ = Default Deny * = Specific services only † = Internet only (no RFC1918) ‡ = Established outbound only § = NAT port-forward rules only ro = Read/monitor access only ``` **设计理由:** - **物联网隔离** 防止被入侵的智能设备转向攻击可信主机 - **非军事区** 可以接收入站NAT,但不能发起到内部区域的连接 - **安全实验室** 拥有广泛的读取访问权限以支持监控和威胁搜寻 - **管理VLAN** 仅限管理员;禁止互联网访问以防C2数据窃取 详见 [`docs/FIREWALL_POLICY.md`](docs/FIREWALL_POLICY.md) 获取包含每条规则商业理由的完整规则文档。 ## 🔧 工程成果 ### 1. 有状态防火墙策略实施 **挑战:** 设计一个默认拒绝的规则库,既能强制执行区域隔离,又不中断跨区域边界(如DNS、NTP、DHCP)的合法流量。 **解决方案:** 在默认拒绝规则之前,为必需的基础设施服务实施显式允许规则,并在所有拒绝命中时启用日志记录。 **关键规则:** ``` # 允许所有区域向pfSense解析器发起DNS查询(DNS重绑定保护) Pass | Any internal | pfSense:53 | UDP | "DNS to local resolver" # 允许所有区域向pfSense NTP服务器进行NTP同步 Pass | Any internal | pfSense:123 | UDP | "NTP sync" # 阻止IoT网络到RFC1918地址段通信(防止横向移动) Block+Log | VLAN20 | RFC1918 | Any | "IoT isolation — lateral movement prevention" # 仅允许IoT网络接入互联网 Pass | VLAN20 | !RFC1918 | 80,443 | "IoT internet access" ``` **结果:** 零合法流量中断;47条规则均100%记录了理由。防火墙日志分析在24小时内确认了正确执行。 ### 2. pfBlockerNG威胁情报集成 **挑战:** 实施主动的IP和DNS阻止,同时避免造成干扰浏览或服务的误报。 **实施:** - **IP阻止列表:** Spamhaus DROP/EDROP, Firehol Level 1, Abuse.ch Feodo Tracker - **DNSBL:** EasyList, EasyPrivacy, Steven Black's unified hosts, Malware Domain List - **自定义列表:** 附加了来自Wazuh威胁情报源的已知恶意IP **调优过程:** 1. 以“仅警报”模式部署72小时——审查了1,847个潜在阻止项 2. 识别出12个误报(合法服务的CDN范围) 3. 添加到白名单,切换至“拒绝”模式 4. 结果:执行30,000+个IOC,误报率<0.1% **DNSBL查询统计(30天窗口):** | 类别 | 被阻止查询 | 占总DNS查询百分比 | |----------|----------------|----------------| | 广告/追踪器 | 18,432 | 22.1% | | 恶意软件域名 | 43 | 0.05% | | 钓鱼 | 12 | 0.01% | | **总计阻止** | **18,487** | **22.2%** | ### 3. OpenVPN远程访问配置 **目标:** 使用基于证书的身份验证,为实验室资源提供安全的远程管理访问。 **配置:** - **协议:** UDP 1194(受限网络环境下可回退至TCP 443) - **数据加密:** AES-256-GCM / AES-128-GCM (AEAD),TLS 1.3控制通道 - **控制通道:** tls-crypt(加密 + 认证TLS通道) - **密钥交换:** 通过ECDSA P-384证书的ECDHE — `dh none` - **身份验证:** 证书 + 用户名/密码(双因素) - **DNS推送:** 内部Unbound解析器推送给客户端(分离DNS) - **路由:** 分离隧道 — 仅通过VPN路由RFC1918地址范围 - **客户端隔离:** 故意省略`client-to-client` — VPN客户端之间无法互访 **证书颁发机构设置:** ``` CA: Lab-Internal-CA (ECDSA P-384, 10yr validity) └── Server: openvpn-server (ECDSA P-384, 10yr validity) └── Client: analyst-workstation (ECDSA P-384, 1yr validity) └── Client: mobile-admin (ECDSA P-384, 1yr validity) ``` **验证:** - 从外部4G热点连接 — 确认可完全访问实验室 - 通过pfSense Unbound确认DNS解析(无DNS泄漏) - 通过`ip route`和Wireshark捕获验证流量路由 详见 [`docs/VPN_CONFIGURATION.md`](docs/VPN_CONFIGURATION.md) 获取完整设置指南。 ### 4. 固件补丁管理工作流 **挑战:** 应用pfSense固件更新时实现零计划外停机,并具备回滚能力。 **标准补丁程序:** 1. **补丁前备份** — 导出完整配置XML + 包列表 2. **验证备份完整性** — 重新导入到测试实例(GNS3/VM) 3. **审查补丁说明** — 检查规则集语法或包API是否有破坏性变更 4. **在维护窗口内应用** — pfSense系统 > 更新 5. **补丁后验证** — 对所有VLAN和VPN运行连接性检查 6. **记录** — 记录补丁版本、日期、验证结果 **已应用更新:** | 版本 | 日期 | 变更类型 | 停机时间 | 问题 | |---------|------|------------|----------|--------| | 2.7.0 → 2.7.1 | 2025-11-14 | 安全 + 错误修复 | 4分12秒 | 无 | | 2.7.1 → 2.7.2 | 2026-01-08 | 安全 | 3分58秒 | 无 | 详见 [`docs/PATCH_MANAGEMENT.md`](docs/PATCH_MANAGEMENT.md) 获取完整程序和清单。 ### 5. SIEM集成与日志关联 **架构:** pfSense将syslog转发至Wazuh Manager;Wazuh解码pfSense防火墙日志格式并生成结构化告警。 **pfSense Syslog配置:** ``` Remote syslog server: 192.168.10.50 (Wazuh Manager) Port: 514/UDP Facility: LOG_LOCAL0 Content: Firewall events, DHCP, VPN, System ``` **Wazuh自定义解码器(pfSense防火墙日志):** ``` filterlog (\w+),(\d+),,,(\w+),(\w+),(\d+),(\w+),(\w+),(\S+),(\S+),(\d+),(\d+) action,interface,proto,direction,length,ttl,id,src_ip,dst_ip,src_port,dst_port ``` **关联告警示例:** - pfSense阻止IP → Wazuh交叉引用同一IP的Suricata告警 → 创建复合事件 - pfBlockerNG DNSBL命中 → Wazuh生成包含威胁类别和请求主机的告警 详见 [`configs/wazuh/pfsense-decoder.xml`](configs/wazuh/pfsense-decoder.xml) 和 [`configs/wazuh/pfsense-rules.xml`](configs/wazuh/pfsense-rules.xml) 获取 完整的解码器和关联规则配置。 ## 📋 合规性与文档 ### NIST SP 800-41 Rev. 1 对齐 | NIST控制措施 | 实施情况 | |-------------|---------------| | 3.1 — 防火墙策略 | 记录规则库,每条规则包含商业理由(见 `docs/FIREWALL_POLICY.md`) | | 3.2 — 网络架构 | 多区域设计,具有明确的信任边界(见架构部分) | | 3.3 — 路由控制 | 静态路由 + 防火墙规则强制执行区域边界 | | 4.1 — 操作程序 | 补丁管理SOP、备份程序、变更日志维护 | | 4.2 — 测试程序 | 月度规则审查、季度渗透测试模拟 | | 4.3 — 事件处理 | Wazuh告警 + 已记录的事件响应模板 | 详见 [`docs/COMPLIANCE_MAPPING.md`](docs/COMPLIANCE_MAPPING.md) 获取完整的NIST和CIS Controls映射。 ### PCI DSS相关性(持卡人数据环境模拟) DMZ区域(VLAN 30)旨在模拟持卡人数据环境(CDE)边界,实施: - 互联网与可信内部区域之间无直接连接 - 所有入站流量仅通过显式NAT规则 - 防火墙日志保留(90天syslog归档至Wazuh) - 所有规则修改的变更文档 ## 🧪 验证与测试 ### 连接性矩阵测试 ``` # 从每个区域验证允许和拒绝的通信路径 # 安全实验室 → TRUSTED LAN(应允许通过) ping 192.168.10.1 -c 3 # IoT → TRUSTED LAN(应被阻止) ping 192.168.10.1 -c 3 # Expected: 100% packet loss # IoT → 互联网(应允许通过,仅限HTTP/HTTPS协议) curl -I https://example.com # Expected: 200 OK curl telnet://192.168.10.1:22 # Expected: refused ``` **测试结果:** | 测试ID | 源区域 | 目标 | 预期结果 | 实际结果 | |---------|------------|------------|----------|--------| | FW-001 | LAN | 互联网 (HTTPS) | 通过 | ✅ | | FW-002 | 物联网 | LAN (任意) | 阻止 | ✅ | | FW-003 | 物联网 | 互联网 (HTTPS) | 通过 | ✅ | | FW-004 | 物联网 | 互联网 (SSH) | 阻止 | ✅ | | FW-005 | 非军事区 | LAN (任意) | 阻止 | ✅ | | FW-006 | 非军事区 | 互联网 (已建立连接) | 通过 | ✅ | | FW-007 | WAN | 非军事区 (端口 443) | 通过 (NAT) | ✅ | | FW-008 | WAN | LAN (任意) | 阻止 | ✅ | | FW-009 | 安全实验室 | 任意 (监控) | 通过 | ✅ | | FW-010 | VPN客户端 | LAN (分离隧道) | 通过 | ✅ | ### 防火墙日志分析 ``` # 解析pfSense过滤日志并生成威胁狩猎摘要报告 python3 configs/scripts/parse-firewall-logs.py --file filter.log --report # 被阻止次数最多的前10个源IP地址(威胁狩猎) python3 configs/scripts/parse-firewall-logs.py --file filter.log --action block --top-src 10 ``` ## 📂 仓库结构 ``` firewall-engineering-lab/ ├── README.md # This file ├── docs/ │ ├── FIREWALL_POLICY.md # Full rule documentation with justifications │ ├── VPN_CONFIGURATION.md # OpenVPN + IPSec setup guides │ ├── NAT_AND_ROUTING.md # NAT rules, static routes, DNS, DHCP │ ├── PATCH_MANAGEMENT.md # Firmware update SOP and change log │ ├── COMPLIANCE_MAPPING.md # NIST SP 800-41 / CIS Controls alignment │ └── INCIDENT_RESPONSE.md # IR templates and a sample report └── configs/ ├── firewall-rules/ │ └── firewall-rules-documented.xml # Rule base, XML-structured docs ├── nat/ │ └── nat-rules.xml # Outbound NAT + port forwards (docs) ├── vlan/ │ └── vlan-design.md # 802.1Q VLANs, switch + SPAN config ├── vpn/ │ ├── openvpn-server.conf # OpenVPN server config │ ├── client-analyst-workstation.ovpn.example # Sanitized client template │ └── ipsec-site-to-site.conf # IPSec IKEv2 Phase 1/2 config ├── suricata/ │ └── lab-custom.rules # Custom NIDS rules (MITRE-mapped) ├── wazuh/ │ ├── pfsense-decoder.xml # pfSense filterlog decoder │ └── pfsense-rules.xml # Correlation + composite alert rules ├── scripts/ │ ├── backup-config.sh # Encrypted config backup workflow │ └── parse-firewall-logs.py # pfSense log parser / analyzer └── templates/ └── change-request.md # Firewall change request template ``` ## 📚 经验教训 ### 挑战1:VLAN间的不对称路由 **问题:** 在安全实验室(VLAN 40)和非军事区(VLAN 30)之间启用VLAN间路由后,返回流量丢失。即使规则允许,非军事区中的主机也无法访问安全实验室主机。 **根本原因:** 非军事区主机上的静态路由指向默认网关(pfSense非军事区接口),但pfSense在LAN主干接口上接收返回流量,并针对错误的接口检查状态。有状态防火墙将返回数据包视为新的、未跟踪的连接。 **解决方案:** ``` # 在pfSense浮动规则中添加显式状态跟踪规则 Pass | Direction: Any | Interface: DMZ,SecLab | State: Keep State ``` **启示:** 在多接口pfSense部署中,不对称路由问题几乎总是状态跟踪问题。在假设规则错误之前,请先检查`诊断 > 状态`。 ### 挑战2:pfBlockerNG中断本地DNS解析 **问题:** 启用DNSBL后,一些内部服务停止通过主机名解析。pfSense Unbound解析器对某些内部`.local`域名返回NXDOMAIN。 **根本原因:** DNSBL设置为“Null Block”模式,对被阻止的域名响应NXDOMAIN。某个阻止列表中的通配符条目匹配了内部主机名的模式(短单标签名称)。 **解决方案:** - 将DNSBL阻止模式从“Null Block”切换为“IP Block”(返回0.0.0.0) - 将内部域名后缀添加到DNSBL白名单 - 启用“Python模式”以更好地处理误报 **启示:** 在强制执行之前,始终在“仅警报”模式下测试DNSBL 48–72小时。DNS故障通常最具破坏性,也最难快速诊断。 ### 挑战3:Windows上的OpenVPN客户端DNS泄漏 **问题:** VPN连接成功,但Windows客户端上的DNS查询仍发送至ISP解析器,而非pfSense Unbound。DNS泄漏测试确认分离DNS未生效。 **根本原因:** Windows 10/11使用“智能多宿主名称解析”——它同时向所有可用接口发送DNS查询并接受最快的响应。ISP解析器比VPN隧道更快。 **解决方案:** ``` # 通过组策略禁用智能多宿主名称解析 # 计算机配置 → 管理模板 → 网络 → DNS客户端 # "关闭智能多宿主名称解析" → 已启用 ``` 同时在OpenVPN客户端配置中添加`block-outside-dns`指令,以在驱动程序级别强制通过隧道进行DNS查询。 **启示:** Windows DNS行为在VPN环境中不符合RFC。VPN设置后务必运行DNS泄漏测试,并将其视为安全验证步骤,而非可选步骤。 ## 🔮 路线图 - [ ] **高可用性 (HA):** 使用第二个Protectli单元配置pfSense CARP以实现故障转移 - [ ] **Zeek集成:** 在pfSense span上添加协议级行为分析 - [ ] **GNS3实验室环境:** 构建虚拟化副本,用于在生产部署前进行安全的规则测试 - [ ] **pfSense API自动化:** 通过REST API自动化规则备份和审计报告生成 - [ ] **QoS / 流量整形:** 实施HFSC流量整形以优先处理安全监控流量 - [ ] **802.1X端口认证:** 为有线端口添加基于RADIUS的网络访问控制 - [ ] **Snort3对比:** 在pfSense内联IPS模式下对Suricata与Snort3进行基准测试 ## 🎓 展示的技能 **防火墙工程:** - 有状态防火墙策略设计与实施 - 具有记录商业理由的默认拒绝规则库 - 多区域网络架构(5个信任级别) - 防火墙规则审计与审查程序 **网络工程:** - 802.1Q VLAN设计与管理型交换机配置 - NAT(出站伪装 + 端口转发) - 静态路由和基于策略的路由 - DNS安全(DNSBL、DNS重绑定保护、分离DNS) **VPN与远程访问:** - 使用基于证书认证(PKI)的OpenVPN远程访问 - IPSec IKEv2站点到站点隧道文档 - 分离隧道和DNS推送配置 **合规性与文档:** - NIST SP 800-41 Rev. 1 防火墙策略对齐 - CIS Controls映射 - PCI DSS持卡人数据环境边界设计 - 变更管理文档(请求 → 批准 → 实施 → 审查) **安全运营:** - 威胁情报集成(pfBlockerNG,30k+ IOC) - SIEM日志转发和自定义解码器开发 - 事件响应文档和报告 - 具有回滚能力的补丁管理SOP ## 👤 关于 **项目负责人:** Ari Said **认证:** ISC2 CC | CompTIA Security+ **相关项目:** [安全运营实验室](https://github.com/arikari93/security-operations-lab) (NIDS + SIEM) **LinkedIn:** [与我联系](https://www.linkedin.com/in/ari-said92)
标签:CIS Controls, IPSec VPN, Metaprompt, NAT配置, NIST SP 800-41, OISF, OpenVPN, OPNsense, pfBlockerNG, pfSense, SIEM集成, VLAN分段, VPN配置, Wazuh, 企业防火墙, 合规映射, 固件补丁, 威胁情报, 安全合规, 安全策略, 开发者工具, 提示词设计, 日志管理, 端口转发, 网络代理, 网络分段, 网络安全, 网络安全实验室, 网络架构, 网络隔离, 自动化补丁, 防火墙工程, 防火墙规则, 隐私保护, 默认拒绝策略