muhammad71932-tech/stateful-network-defense-platform

GitHub: muhammad71932-tech/stateful-network-defense-platform

基于 pfSense 与 Suricata 在 KVM 上构建的多区域有状态网络防御与内联入侵防御平台,提供自定义检测规则及红队自动化验证。

Stars: 0 | Forks: 0

# 有状态网络防御平台 **通过状态检测和 Inline IPS 实现高性能网络加固** ## 概述 本项目使用 **pfSense CE** 作为下一代防火墙(NGFW),并使用 **Suricata 7.x** 作为 Inline 入侵防御系统(IPS),实现了一套生产级的网络安全架构。整个技术栈运行在 KVM/QEMU 虚拟化之上,模拟了真实的企业多区域网络。 该系统结合自定义的 Suricata 规则与 Emerging Threats Open 规则集,能够实时检测并阻断 **SQL 注入、命令注入、DoS 泛洪以及侦察攻击**。 ## 架构 ``` ┌─────────────────────────────────────────────────────┐ │ Parrot OS Host (Attacker / Admin) │ └──────────────────────┬──────────────────────────────┘ │ [WAN: 10.0.0.0/24] ← NAT │ ┌─────────────▼──────────────┐ │ pfSense CE 2.8.1 │ │ + Suricata 7.0.8 IPS │ │ (Inline NFQ Mode) │ └──────┬──────────────┬──────┘ │ │ [LAN: 192.168.1.0/24] [DMZ: 172.16.0.0/24] │ Victim VM (Debian) 192.168.1.100 ``` ### 网络区域 | 区域 | 子网 | 模式 | 用途 | |---|---|---|---| | WAN | 10.0.0.0/24 | NAT | 上行链路 / 攻击者入口 | | LAN | 192.168.1.0/24 | 隔离 | 受保护的内部客户端 | | DMZ | 172.16.0.0/24 | 隔离 | 半公共服务 | ## 功能特性 - **状态包检测** — pfSense 跟踪连接状态;拒绝未经请求的入站流量 - **Inline IPS(NFQ 模式)** — Suricata 在数据包到达目标之前对其进行拦截 - **自定义规则类别** — 涵盖 4 种攻击类别的 21 条自定义 Suricata 规则 - **Emerging Threats 规则集** — 40,000+ 条由社区维护的特征签名,每 12 小时自动更新 - **多区域隔离** — 即使在突破防线后,DMZ 也无法访问 LAN(阻断横向移动) - **禁用硬件 Checksum Offload** — 确保 Suricata 在虚拟网卡上能看到正确的数据包 checksum - **红队验证** — 自动化攻击脚本验证所有检测类别 ## 自定义规则类别 | 文件 | 类别 | 动作 | 规则 | |---|---|---|---| | `ironwall-sqli.rules` | SQL 注入 | DROP | 6 条规则(UNION SELECT、OR 1=1、堆叠查询等) | | `ironwall-cmdinject.rules` | 命令注入 | DROP | 5 条规则(`;`、管道符、反引号、wget、/bin/ 等) | | `ironwall-dos.rules` | DoS / 泛洪 | DROP | 5 条规则(SYN、ICMP、UDP、HTTP 泛洪 + Slowloris) | | `ironwall-recon.rules` | 侦察 | ALERT | 5 条规则(SYN 扫描、NULL、XMAS、sweep、OS 指纹识别) | ## 项目结构 ``` . ├── docs/ │ ├── lab-guide.md ← Full step-by-step implementation guide (Phases 1-9) │ ├── presentation-notes.txt ← Tool explanations and all commands used │ ├── report.html ← Project report with embedded screenshots │ └── IronWall_Report.docx ← Formatted DOCX report ├── network-configs/ │ ├── wan-network.xml ← libvirt NAT network (10.0.0.0/24) │ ├── lan-network.xml ← libvirt isolated LAN (192.168.1.0/24) │ └── dmz-network.xml ← libvirt isolated DMZ (172.16.0.0/24) ├── rules/ │ ├── ironwall-sqli.rules │ ├── ironwall-cmdinject.rules │ ├── ironwall-dos.rules │ └── ironwall-recon.rules ├── scripts/ │ ├── 01-setup-networks.sh ← Create KVM virtual networks │ ├── 02-create-pfsense-vm.sh ← Deploy pfSense VM (3 NICs) │ └── 03-create-victim-vm.sh ← Deploy Debian victim VM ├── suricata/ │ └── suricata.yaml ← Suricata config (NFQ inline mode) └── tests/ ├── 01-recon-scan.sh ← Nmap reconnaissance (SYN, NULL, XMAS scans) ├── 02-sqli-test.sh ← SQL injection probes via curl ├── 03-cmdinject-test.sh ← Command injection probes via curl ├── 04-dos-test.sh ← SYN/ICMP/UDP/HTTP flood via hping3 └── 05-verify-drops.sh ← Parse Suricata logs, print drop report ``` ## 快速开始 ### 前置条件 ``` sudo apt install -y qemu-kvm libvirt-daemon-system libvirt-clients \ virt-manager virtinst bridge-utils \ nmap hping3 jq ``` ### 部署 ``` # 创建虚拟网络 sudo bash scripts/01-setup-networks.sh # 部署 pfSense VM(需要位于 /var/lib/libvirt/images/pfsense.iso 的 ISO) sudo bash scripts/02-create-pfsense-vm.sh # 部署 victim VM(需要位于 /var/lib/libvirt/images/debian.iso 的 ISO) sudo bash scripts/03-create-victim-vm.sh # 按照 docs/lab-guide.md 进行 pfSense + Suricata 配置 ``` ### 红队测试 ``` chmod +x tests/*.sh sudo bash tests/01-recon-scan.sh # Nmap scans bash tests/02-sqli-test.sh # SQL injection bash tests/03-cmdinject-test.sh # Command injection sudo bash tests/04-dos-test.sh # Flood attacks bash tests/05-verify-drops.sh # View drop report ``` ## 检测结果 | 攻击 | 工具 | 预期结果 | Suricata 日志 | |---|---|---|---| | URL 中的 `UNION SELECT` | curl | 数据包 DROP | `IRONWALL SQLi UNION SELECT in URI` | | URL 中的 `;id` | curl | 数据包 DROP | `IRONWALL CMDi Semicolon Shell Command` | | SYN 泛洪 >100 pkt/s | hping3 | 数据包 DROP | `IRONWALL DoS SYN Flood` | | Nmap NULL 扫描 | nmap -sN | 记录 ALERT | `IRONWALL RECON TCP NULL Scan` | | ICMP 泛洪 | hping3 --icmp | 数据包 DROP | `IRONWALL DoS ICMP Flood` | ## 技术栈 | 组件 | 版本 | 角色 | |---|---|---| | pfSense CE | 2.8.1-RELEASE | NGFW、状态防火墙、路由 | | Suricata | 7.0.8 | Inline IPS(NFQ 模式) | | KVM/QEMU | 宿主机 | 类 Type-1 级别虚拟化 | | libvirt | 宿主机 | 虚拟网络管理 | | Emerging Threats Open | 最新版 | 40K+ 社区 IPS 特征签名 | | Parrot OS | 宿主机 | 攻击者 / 管理员工作站 | ## 关键概念 **为什么选择 pfSense?** 这是一个基于 FreeBSD 的开源防火墙,具备企业级功能:状态检测、VPN、流量整形,以及包含 Suricata 在内的插件生态系统。 **为什么选择 Suricata 而不是 Snort?** 多线程架构可同时利用所有的 CPU 核心。其规则语法与 Snort 相同,但提供了 EVE JSON 日志记录、协议检测(HTTP/TLS/DNS),并且吞吐量明显更高。 **为什么选择 Inline IPS 而不是被动 IDS?** IDS 只能发出警报——而攻击已经到达了受害者。Inline IPS 位于数据包传输路径上,能够在恶意数据包到达之前将其丢弃。 **为什么要禁用硬件 checksum Offload?** VirtIO 虚拟网卡会 offload checksum 计算——Suricata 在 checksum 计算之前看到数据包,并将其标记为已损坏。禁用此功能会强制客户机操作系统在软件中计算 checksum。 ## 许可证 MIT License — 可免费用于教育和实验目的。
标签:CISA项目, CTI, Cutter, KVM虚拟化, Metaprompt, 入侵防御系统, 威胁猎捕, 插件系统, 流量检测, 网络安全, 网络防御架构, 配置错误, 防火墙, 隐私保护