MaxBell10/project-02-pfSense-network-segmentation-lab

GitHub: MaxBell10/project-02-pfSense-network-segmentation-lab

一个使用 pfSense CE 在 VirtualBox 中实现三区隔离、Suricata 监测与合规映射的本地网络分段实验项目。

Stars: 0 | Forks: 0

![Logo](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/4aa30450ff095105.svg) # 🔥 pfSense 网络分段实验 ## 📋 概述 本实验演示了使用 pfSense CE 作为防火墙/路由器,在三个隔离区域(WAN、LAN 和 DMZ)之间设计并实现分段网络。所有组件在单个主机上的 VirtualBox 中以虚拟机形式运行。 ## 🎯 项目目标 本实验模拟了网络工程师、安全工程师和 GRC 专业人员面临的真实网络安全挑战: - 将企业网络分段为隔离的安全区域 - 使用明确的防火墙规则实施区域间最小权限流量 - 强化防火墙设备本身(TLS、端口变更、禁用服务) - 在 LAN 接口上使用 Suricata IDS 检测可疑流量 - 使用 tcpdump 和 Wireshark 捕获并分析跨区域流量 - 将架构映射到 NIS2 和 ISO 27001 控制项 它反映了网络工程与安全治理的交叉点——直接与比利时境内的内部 GRC + 技术角色对齐。 ## 🏗️ 架构 ``` [WAN — NAT / simulated internet] 10.0.2.15 | [pfSense CE] 192.168.1.1 | 192.168.2.1 / \ [LAN] [DMZ] 192.168.1.x 192.168.2.x (AD, workstations) (fictional web server) ``` | 虚拟机 | 角色 | IP | 操作系统 | |---|---|---|---| | pfSense | 防火墙 / 路由器 | WAN: 10.0.2.15 / LAN: 192.168.1.1 / DMZ: 192.168.2.1 | pfSense CE 2.7.2 | | Windows Server 2022 | 域控制器(LAN) | 192.168.1.x(DHCP) | Windows Server 2022 Datacenter Eval | | Windows 10 Pro | 客户端工作站(LAN) | 192.168.1.x(DHCP) | Windows 10 Pro | | 虚构 Web 服务器 | DMZ 目标 | 192.168.2.x(DHCP) | — | ### VirtualBox 网络接口 | 接口 | pfSense 网卡 | VirtualBox 模式 | 子网 | |---|---|---|---| | WAN | em0 | NAT | 10.0.2.x | | LAN | em1 | 内部网络 `lan-network` | 192.168.1.0/24 | | DMZ | em2 | 内部网络 `dmz-network` | 192.168.2.0/24 | ![pfSense 控制台 — WAN/LAN/DMZ 接口已启动](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/68bbf034dd095106.png) ![pfSense 仪表板 — 所有接口已启动](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/5601517051095107.png) ### DHCP 范围 | 区域 | 范围 | |---|---| | LAN | 192.168.1.10 — 192.168.1.245 | | DMZ | 192.168.2.100 — 192.168.2.150 | ## 🔒 实施的安全控制 ### 防火墙规则 | 规则 | 接口 | 协议 | 源 | 目标 | 端口 | 动作 | |---|---|---|---|---|---|---| | WAN → DMZ | WAN | TCP | 任意 | DMZ | 443 | ✅ 允许 | | LAN → WAN | LAN | TCP | LAN | 任意 | 80, 443 | ✅ 允许 | | LAN → DMZ | LAN | TCP | LAN | DMZ | 80, 443 | ✅ 允许 | | DMZ → LAN | DMZ | 任意 | DMZ | LAN | 任意 | 🚫 拒绝 | | WAN → LAN | (隐式) | 任意 | 任意 | LAN | 任意 | 🚫 拒绝 | ![LAN 规则 — 最终状态](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/ec665cde3f095108.png) ![DMZ — 拒绝所有规则](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/dfa902ed41095110.png) ![WAN — 仅 HTTPS 规则](https://raw.githubusercontent.com/MaxBell10/project-02-pfSense-network-segmentation-lab/main/screenshots/PF22-firewall-rules-wan-https-only.png) ### pfSense 强化 | 控制项 | 配置 | 理由 | |---|---|---| | WebGUI 端口 | 从 443 改为 **8443** | 减少在默认端口上的自动化扫描暴露 | | TLS 证书 | 内部 CA `Lab-CA` (RSA 2048, SHA-256) → 证书 `pfSense-WebGUI` | 消除自签名警告;建立内部 PKI | | UPnP | **禁用** | 防止 LAN 设备未经授权的端口转发 | | SSH | **禁用** | 减少攻击面;仅通过 WebGUI 管理 | | NAT 反射 | **禁用** | 防止 NAT 回环滥用 | ![管理员访问 — 端口 8443 + pfSense-WebGUI 证书分配](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/87aad518a4095141.png) ### 内部 PKI | 资产 | 详情 | |---|---| | CA | `Lab-CA` — RSA 2048,SHA-256,10 年有效期(3650 天),`ST=Belgium, O=Lab, L=Brussels, CN=lab-ca, C=BE` | | 证书 | `pfSense-WebGUI` — RSA 2048,SHA-256,397 天,`ST=Belgium, O=Lab, L=Brussels, CN=192.168.1.1, C=BE`,由 `Lab-CA` 签名 | ![Lab-CA — 列出的内部 CA](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/e263df0410095142.png) ![pfSense-WebGUI — 列出的证书,由 Lab-CA 签名](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/23ac9b57dc095143.png) ### Suricata IDS Suricata 以 IDS 模式(仅检测,不阻断)部署在 LAN 接口(em1)上,监控来自内部网络的所有入站和出站流量。 | 设置 | 值 | |---|---| | 接口 | LAN(em1) | | 模式 | IDS(禁用阻断) | | 规则集 | Emerging Threats Open (ET Open) | | 更新间隔 | 1 天 | | 告警日志 | 已启用 → 系统日志 | **启用的 ET Open 规则类别:** - `emerging-attack_response.rules` — C2 回调与攻击响应检测 - `emerging-botcc.rules` — 已知僵尸网络命令与控制服务器 - `emerging-compromised.rules` — 已知受感染主机 - `emerging-dns.rules` — DNS 异常检测 - `emerging-dos.rules` — 拒绝服务模式 - `emerging-malware.rules` — 恶意流量签名 - `emerging-scan.rules` — 端口与漏洞扫描 - `emerging-web_server.rules` — Web 服务器攻击模式 ![Suricata — 包已安装](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/522a7549ea095144.png) ![Suricata — LAN 接口已配置](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/356502a011095146.png) ![Suricata — 全局设置,ET Open 已启用](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/c6fcecdd4a095147.png) ![Suricata — ET Open 规则已下载](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/94885091ed095148.png) ![Suricata — LAN 类别已选择 (1/2)](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/34230d3a34095150.png) ![Suricata — LAN 类别已选择 (2/2)](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/6820c2d07b095151.png) ![Suricata — LAN IDS 运行中](https://raw.githubusercontent.com/MaxBell10/project-02-pfSense-network-segmentation-lab/main/screenshots/P41-suricata-interfaces-overview.png) ## 📡 流量分析 — tcpdump 与 Wireshark 为验证防火墙规则是否强制执行预期的流量流向,直接从 pfSense Shell 执行数据包捕获。 **捕获 LAN → DMZ 流量(100 个数据包,仅 HTTP/HTTPS):** ``` tcpdump -i em1 -n -c 100 port 80 or port 443 -w /tmp/traffic.pcap ``` **过滤捕获流量至仅 DMZ 子网:** ``` tcpdump -r /tmp/traffic.pcap -nn | grep "192.168.2." ``` **导出捕获文件供主机上的 Wireshark 分析:** ``` scp admin@192.168.1.1:/tmp/traffic.pcap ./ ``` 注释化的 Wireshark 捕获文件位于 `/pcaps` 目录中。每个捕获均确认跨区域流量与上述防火墙规则矩阵一致。 ## ✅ 验证 ### DHCP 租约 — LAN 连接性已确认 ![DHCP 租约 — Windows Server 192.168.1.100 活跃](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/7283e4863b095153.png) Windows Server(192.168.1.100)已从 pfSense 获取 DHCP 租约,确认通过防火墙的端到端 LAN 连接性。 ### 防火墙日志 — 主动拒绝已确认 ![防火墙日志 — 默认拒绝规则活跃](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/a5a5a9d6f7095154.png) pfSense 正在记录并拒绝不匹配任何允许规则的数据包,确认默认拒绝策略已在实时生效。 ## 🖼️ 截图 所有截图位于 `/screenshots` 目录中。 ### VirtualBox 设置 | 文件 | 内容 | |---|---| | PF01-vbox-pfsense-adapter-wan-nat.png | VirtualBox — pfSense 适配器 1 → NAT (WAN) | | PF02-vbox-pfsense-adapter-lan-network.png | VirtualBox — pfSense 适配器 2 → 内部网络 `lan-network` (LAN) | | PF03-vbox-pfsense-adapter-dmz-network.png | VirtualBox — pfSense 适配器 3 → 内部网络 `dmz-network` (DMZ) | | PF04-vbox-winsrv-adapter-lan-network.png | VirtualBox — Windows Server 2022 适配器 1 → 内部网络 `lan-network` | ### pfSense 初始配置 | 文件 | 内容 | |---|---| | PF05-console-interfaces-wan-lan-dmz.png | pfSense 控制台 — WAN (em0) 10.0.2.15 / LAN (em1) 192.168.1.1 / OPT1 (em2) 192.168.2.1 | | PF06-webgui-login-page.png | pfSense 登录页面 — `https://192.168.1.1` | | PF07-wizard-welcome-step1.png | 设置向导 — 欢迎 (第 1/9 步) | | PF08-wizard-timezone-brussels-step2.png | 设置向导 — 时间服务器 / 时区: Europe/Brussels (第 3/9 步) | | PF09-wizard-lan-ip-step3.png | 设置向导 — 配置 LAN 接口: 192.168.1.1/24 (第 5/9 步) | | PF10-wizard-completed-step4.png | 设置向导 — 向导完成 (第 9/9 步) | | PF11-dashboard-wan-lan-dmz-up.png | 仪表板 — WAN/LAN/DMZ 已启动,pfSense CE 2.7.2,CPU i7-14700HX | | PF12-winsrv-ipconfig-lan-192-168-1-100.png | Windows Server 2022 — `ipconfig` 显示 IP 192.168.1.100 / 网关 192.168.1.1 | | PF13-interface-dmz-config.png | 接口 > OPT1 (DMZ) — 静态 IPv4 / 192.168.2.1/24 / 接口已启用 ✓ | ### 防火墙规则 — 逐步配置 | 文件 | 内容 | |---|---| | PF14-firewall-rules-lan-default-rules.png | 防火墙 / 规则 / LAN — 默认规则存在(加固前) | | PF15-firewall-rules-lan-default-rules-deleted.png | 防火墙 / 规则 / LAN — 默认规则已删除(自定义规则前) | | PF16-firewall-rule-edit-lan-to-wan.png | 编辑规则 — LAN 到 WAN:允许 / IPv4 TCP / LAN 子网 → 任意 / 端口 80–443 | | PF17-firewall-rule-edit-lan-to-dmz.png | 编辑规则 — LAN 到 DMZ:允许 / IPv4 TCP / LAN 子网 → DMZ 地址 / 端口 80–443 | | PF18-firewall-rules-lan-final.png | 防火墙 / 规则 / LAN — 最终状态:2 条自定义规则(LAN→WAN,LAN→DMZ) | | PF19-firewall-rule-edit-dmz-to-lan-block.png | 编辑规则 — DMZ 到 LAN:**拒绝** / IPv4 任意 / DMZ 地址 → LAN 子网 | | PF20-firewall-rule-edit-wan-to-dmz-https.png | 编辑规则 — WAN 到 DMZ:允许 / IPv4 TCP / 任意 → DMZ 子网 / 端口 443 | | PF21-firewall-rules-dmz-block-all.png | 防火墙 / 规则 / DMZ — 最终状态:1 条拒绝规则(DMZ→LAN 全部拒绝 ❌) | | PF22-firewall-rules-wan-https-only.png | 防火墙 / 规则 / WAN — 最终状态:1 条规则(WAN→DMZ 仅 HTTPS) | | PF23-firewall-rules-wan-applied.png | 防火墙 / 规则 / WAN — 更改已成功应用 ✅ | | PF24-firewall-rules-dmz-applied.png | 防火墙 / 规则 / DMZ — 更改已成功应用 ✅ | ### 强化 — 内部 PKI | 文件 | 内容 | |---|---| | PF25-cert-authority-edit-lab-ca.png | 证书颁发机构 / 编辑 — Lab-CA 创建表单(RSA 2048,sha256,3650 天,C=BE) | | PF26-cert-authority-lab-ca-listed.png | 证书颁发机构 — Lab-CA 已列出,内部 ✓,有效期至 2036 年 4 月 15 日 | | PF27-cert-edit-pfsense-webgui.png | 证书 / 添加 — pfSense-WebGUI 创建表单(RSA 2048,sha256,397 天,由 Lab-CA 签名) | | PF28-cert-pfsense-webgui-listed.png | 证书 — pfSense-WebGUI 已列出,发起者:Lab-CA,有效期至 2027 年 5 月 20 日 | ### 强化 — 管理访问与服务 | 文件 | 内容 | |---|---| | PF29-system-advanced-port-8443-cert-webgui.png | 系统 > 高级 > 管理访问 — HTTPS,证书:**pfSense-WebGUI**,端口:**8443**(最终状态) | | PF30-services-upnp-disabled.png | 服务 > UPnP 与 NAT-PMP — 启用 UPnP 未勾选(**已禁用**) | | PF31-system-advanced-ssh-disabled.png | 系统 > 高级 > 管理访问 — 安全 Shell 服务器未勾选(**SSH 已禁用**) | ### 配置备份 | 文件 | 内容 | |---|---| | PF32-diagnostics-backup-restore.png | 诊断 > 备份与还原 — XML 导出(通过 8443 端口访问) | | PF33-config-xml-exported.png | Windows 资源管理器 — `config-pfSense.home.arpa-*.xml` 已导出(23 KB) | ### 验证 — DHCP 与防火墙日志 文件 | 内容 | |---|---| | PF34-dhcp-leases.png | 状态 > DHCP 租约 — Windows Server(192.168.1.100)活跃租约已确认 ✅ | | PF35-firewall-logs.png | 状态 > 系统日志 > 防火墙 — 活跃拒绝条目,默认拒绝规则 IPv4 ❌ | ### Suricata IDS | 文件 | 内容 | |---|---| | PF36-suricata-package-installed.png | 系统 > 软件包管理器 — pfSense-pkg-suricata 安装成功 ✅ | | PF37-suricata-lan-interface-config.png | 服务 > Suricata > LAN 接口设置 — LAN (em1),IDS 模式,告警发送至系统日志 ✓ | | PF38-suricata-global-settings-etopen.png | 服务 > Suricata > 全局设置 — ET Open 已启用,更新间隔 1 天 ✓ | | PF39-suricata-etopen-rules-downloaded.png | 服务 > Suricata > 更新 — ET Open MD5 哈希已填充,结果:成功 ✅ | | PF40.1-suricata-lan-categories.png | 服务 > Suricata > LAN 类别 — 默认规则 + ET Open 类别(上部)✓ | | PF40.2-suricata-lan-categories.png | 服务 > Suricata > LAN 类别 — ET Open 类别已选择:恶意软件、扫描、Web 服务器(下部)✓ | | PF41-suricata-interfaces-overview.png | 服务 > Suricata > 接口 — LAN (em1) 运行中,模式:AUTO,阻断模式:DISABLED ✅ | ## 🎯 演示内容 | 技能 | 证据 | |---|---| | 网络架构与分段 | 3 区域设计(WAN/LAN/DMZ),子网隔离 | | 防火墙规则设计 | 跨区域明确的最小权限规则,默认拒绝 | | 入侵检测 | LAN 接口上的 Suricata IDS,ET Open 规则集,告警日志 | | 内部 PKI | CA 创建、证书签发与分配 | | 防火墙强化 | 端口变更、TLS 配置、UPnP/SSH 禁用 | | 流量分析 | tcpdump 捕获,Wireshark 注释,规则验证 | | 配置管理 | 已匿名化的配置 XML 提交至仓库(`config-anonymized.xml`) | | 技术文档 | 英文 README、强化清单、监管映射 | ## ⚖️ 监管符合性 | 框架 | 控制项 | |---|---| | ISO 27001:2022 | A.8.16 监控活动 — LAN 接口上的 Suricata IDS 告警日志 | | ISO 27001:2022 | A.8.20 网络安全 — 网络分段与访问控制 | | ISO 27001:2022 | A.8.21 网络服务安全 — 网络组件的安全配置 | | ISO 27001:2022 | A.8.22 网络隔离 — DMZ 与内部 LAN 隔离 | | NIS2 第 2 条 | 技术安全措施 — 网络分段、访问控制、监控 | | CIS 控制 | 控制 12 — 网络基础设施管理 | | CIS 控制 | 控制 13 — 网络监控与防御 | ## 📚 经验总结 详见 [`lessons_learned.md`](./lessons_learned.md) 了解遇到的挑战与生产环境的差异。 关键要点: - 默认的 pfSense `允许 LAN 访问任意` 规则必须显式删除;保留该规则将使整个分段模型失效 - WebGUI 端口变更(443 → 8443)后,若需从主机访问,需更新 VirtualBox NAT 端口转发规则;否则会话会静默断开 - 在 pfSense 上执行 `tcpdump` 时需指定正确接口(LAN 使用 `-i em1`,DMZ 使用 `-i em2`);在 `any` 上捕获会混合所有区域流量,增加分析难度 - 在生产环境中,内部 CA 应由专用 PKI 服务管理(例如 Windows ADCS 或 HashiCorp Vault),而非在防火墙上自生成 - 由于虚拟网卡(em0/em1/em2)不支持关闭硬件加速,Suricata 无法在 VirtualBox 中进行内联检测。在生产环境使用物理网卡或 Type-1 虚拟机监控程序(ESXi、Proxmox)时,此限制不适用 ## 🗺️ 本地实验路线图 本实验是展示跨多个领域渐进式网络安全技能的系列作品的一部分: | 领域 | 主题 | 状态 | |---|---|---| | 身份与访问 | Active Directory、GPO 强化、Wazuh SIEM | ✅ 已完成 | | 网络安全 | pfSense、防火墙规则、Suricata IDS/IPS | 🔄 进行中 | | GRC 与风险 | EBIOS RM 审计报告、NIS2、IEC 62443 | 📋 计划中 | | 自动化 | Bash 与 PowerShell 安全脚本 | 📋 计划中 | | 攻击与防御 | AD 与 pfSense 集成攻击模拟 | 📋 计划中 | | 网络 | Cisco Packet Tracer、网络设计 | 📋 计划中 | | Linux | Linux 管理与强化 | 📋 计划中 | ## 🛠️ 使用的工具 - **VirtualBox** — 虚拟机监控程序 - **pfSense CE 2.7.2** — 开源防火墙/路由器 - **Suricata** — LAN 接口上的 IDS 引擎(ET Open 规则集) - **Windows Server 2022** — LAN 区域的域控制器(180 天评估版) - **Windows 10 Pro** — LAN 区域的工作站 - **tcpdump** — 在 pfSense 接口上抓包 - **Wireshark** — 对导出的抓包文件进行流量分析 *所有配置均为虚构,仅用于教育和作品集目的。*
标签:DMZ, GitHub Advanced Security, GRC, ISO 27001, LAN, Metaprompt, NIS2, pfSense, pfSense CE, Suricata, TLS 硬化, VirtualBox, WAN, Wireshark, 句柄查看, 安全加固, 安全区域, 安全工程, 家庭实验室, 最小权限, 比利时, 治理风险合规, 流量捕获, 现代安全运营, 端口硬化, 网络分段, 网络安全, 网络工程, 网络拓扑, 网络架构, 网络隔离, 虚拟化, 防火墙, 隐私保护