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, 入侵防御系统, 威胁猎捕, 插件系统, 流量检测, 网络安全, 网络防御架构, 配置错误, 防火墙, 隐私保护