Trigger-45/SUN_DMZ
GitHub: Trigger-45/SUN_DMZ
基于 Containerlab 的一键式企业网络安全实验环境,集成 DMZ 架构、多层防火墙、Suricata IDS、ModSecurity WAF 和 ELK SIEM 技术栈,支持攻击模拟与安全监控全流程演练。
Stars: 1 | Forks: 0
# 🛡️ SUN_DMZ – 企业网络安全实验环境
**完全容器化的企业网络环境,包含 DMZ 架构、多层防火墙、Suricata IDS 和 ELK SIEM 技术栈 — 由 Containerlab 自动化部署。**
[](https://www.linux.org/)
[](https://www.docker.com/)
[](https://containerlab.dev/)
[](https://www.gnu.org/software/bash/)
[](https://www.elastic.co/)
[](https://suricata.io/)
[](./LICENSE)
## 📋 目录
- [概述](#-overview)
- [架构](#-architecture)
- [功能](#-features)
- [前置条件](#-prerequisites)
- [快速开始](#-quick-start)
- [使用方法](#-usage)
- [网络拓扑](#-network-topology)
- [组件](#-components)
- [攻击场景](#-attack-scenarios)
- [测试](#-testing)
- [项目结构](#-project-structure)
- [许可证](#-license)
## 🎯 概述
**SUN_DMZ** 是一个一键式部署工具,利用 [Containerlab](https://containerlab.dev/) 创建完整的企业网络环境。它模拟了跨越四个网段的逼真企业基础设施:
| 网段 | 子网 | 描述 |
|---------|--------|-------------|
| **内部网络** | `192.168.10.0/24` | 包含客户端机器的企业局域网 |
| **DMZ** | `10.0.2.0/24` | 非军事化区,包含 Web 服务器、WAF 和数据库 |
| **SIEM** | `10.0.3.0/24` | 安全监控区,包含完整的 ELK 技术栈 |
| **互联网 / 边缘** | `200.168.1.0/24` | 模拟互联网,包含攻击者节点 |
非常适合:
- 🎓 安全培训与教育
- 🔍 渗透测试练习
- 📝 IDS/IPS 规则开发
- 📊 SIEM 日志分析与仪表板制作
- 🔬 网络取证
## 🏗️ 架构
```
┌─────────────┐
│ Attacker │
│ (Kali Linux)│
└──────┬──────┘
│ 200.168.1.0/24
┌──────┴──────┐
│ Router │
│ Internet │
└──────┬──────┘
│ 172.168.2.0/30
┌──────┴──────┐
│ Router │
│ Edge │
└──────┬──────┘
│ 172.168.3.0/30
┌──────────┴──────────┐
│ External FW │
│ (iptables + ulogd2) │
└───┬─────────┬───────┘
│ │
┌─────────────┴─┐ ┌─┴──────────────┐
│ DMZ Zone │ │ Internal Zone │
│ 10.0.2.0/24 │ │ 192.168.10.0/24 │
│ │ │ │
│ ┌───────────┐ │ │ ┌─────────────┐ │
│ │Proxy / WAF│ │ │ │Internal FW │ │
│ │(ModSec) │ │ │ │(iptables) │ │
│ └─────┬─────┘ │ │ └──────┬──────┘ │
│ ┌─────┴─────┐ │ │ ┌──────┴──────┐ │
│ │ Flask Web │ │ │ │ Switch │ │
│ └─────┬─────┘ │ │ │ (FRR Bridge)│ │
│ ┌─────┴─────┐ │ │ └──┬──────┬───┘ │
│ │ PostgreSQL│ │ │ │ │ │
│ └───────────┘ │ │ Client1 Client2 │
│ ┌───────────┐ │ │ ┌─────────────┐ │
│ │ DMZ IDS │ │ │ │Internal IDS │ │
│ │(Suricata) │ │ │ │(Suricata) │ │
│ └───────────┘ │ │ └─────────────┘ │
└───────────────┘ └─────────────────┘
│ │
┌───┴─────────┴───┐
│ SIEM FW │
│ 10.0.3.0/24 │
└───┬───┬───┬─────┘
│ │ │
┌─────────┘ │ └─────────┐
┌─────┴─────┐ ┌────┴────┐ ┌──────┴──────┐
│ Logstash │ │Elastic- │ │ Kibana │
│ :5044 │ │search │ │ :5601 │
│ │ │ :9200 │ │ │
└───────────┘ └─────────┘ └─────────────┘
```
## ✨ 功能
### 🔒 网络安全
- **多层防火墙架构** — 内部防火墙、外部防火墙、SIEM 防火墙 (iptables + NFLOG)
- **入侵检测** — Suricata IDS 部署在 DMZ 和内部网络(通过网桥进行流量镜像)
- **Web 应用防火墙** — OWASP ModSecurity CRS 配合 NGINX 反向代理
- **网络分段** — 互联网、DMZ、内部网络和 SIEM 区域之间严格隔离
### 🌐 应用技术栈
- **易受攻击的 Web 应用** — Flask + PostgreSQL,包含登录系统和基于角色的访问控制
- **反向代理**,支持 SSL/TLS 终止
- **数据库** — PostgreSQL 16,包含样本数据(用户、报告、访问控制)
### 📊 安全监控 (SIEM)
- **Elasticsearch 9.2.1** — 集中式日志存储与搜索
- **Logstash** — 日志采集,为防火墙和 IDS 日志提供独立管道
- **Kibana** — 可视化、仪表板和分析
- **Filebeat** — 从防火墙和 IDS 节点传送日志
- **ulogd2** — 通过 NFLOG 进行防火墙日志记录
### ⚙️ 自动化
- **一键式部署** — 单条命令即可部署整个环境
- **模块化设计** — 每个组件都有独立的脚本
- **自动清理** — 清除整个实验环境的脚本
- **预配置的攻击场景** — SQL 注入、DoS、XSS 和目录遍历
## 📦 前置条件
| 软件 | 版本 | 描述 |
|----------|---------|-------------|
| **Linux** | — | 在 Ubuntu / Debian 上测试 |
| **Docker** | 24.0+ | 容器运行时 |
| **Containerlab** | 0.48+ | 实验环境编排 |
| **sudo** | — | 网络操作所需的 Root 权限 |
### 安装依赖
```
bash install_dependencies.sh
```
## 🚀 快速开始
```
# 克隆 repository
git clone https://github.com/Trigger-45/SUN_DMZ.git
cd SUN_DMZ
# 安装 dependencies(一次性)
bash install_dependencies.sh
# 完整部署
sudo bash main.sh
```
部署完成后,可访问以下服务:
| 服务 | URL | 描述 |
|---------|-----|-------------|
| **Kibana** | `http://localhost:5601` | SIEM 仪表板 |
| **Elasticsearch** | `http://localhost:9200` | 搜索 API |
| **Web App (WAF)** | `http://localhost:8181` | 通过 ModSecurity 访问的 Web 应用 |
| **PostgreSQL** | `localhost:3636` | 数据库 |
## 🔧 使用方法
```
# 完整部署(默认)
sudo bash main.sh
# 仅部署 topology(无 configuration)
sudo bash main.sh --topology-only
# 部署(不进行事先 cleanup)
sudo bash main.sh --skip-cleanup
# 销毁 lab(停止 containers)
sudo bash main.sh --destroy
# 销毁 lab + 移除 Docker images
sudo bash main.sh --purge
```
### 查看拓扑
```
sudo containerlab inspect --topo topology/DMZ.yml
```
## 🗺️ 网络拓扑
### 子网
| 子网 | CIDR | 用途 |
|--------|------|---------|
| 内部网络 | `192.168.10.0/24` | 客户端,内部交换机 |
| 防火墙之间 | `192.168.20.0/24` | 内部防火墙 ↔ 外部防火墙 |
| DMZ | `10.0.2.0/24` | WAF, Web 服务器, 数据库, IDS |
| SIEM | `10.0.3.0/24` | ELK 技术栈, SIEM 防火墙, 管理员 PC |
| 边缘 1 | `172.168.2.0/30` | 互联网路由器 ↔ 边缘路由器 |
| 边缘 2 | `172.168.3.0/30` | 边缘路由器 ↔ 外部防火墙 |
| 互联网 | `200.168.1.0/24` | 攻击者 |
### 节点 (19 个容器)
| 节点 | 镜像 | 角色 |
|------|-------|------|
| `Internal_Client1` | Alpine | 内部客户端 |
| `Internal_Client2` | Alpine | 内部客户端 |
| `Internal_Switch` | FRR | 具有流量镜像功能的网桥 |
| `Internal_FW` | Ubuntu | 防火墙 (iptables + ulogd2 + Filebeat) |
| `Internal_IDS` | Suricata | 内部网络的 IDS |
| `DMZ_Switch` | FRR | 具有流量镜像功能的网桥 |
| `Proxy_WAF` | ModSecurity | OWASP WAF + NGINX 反向代理 |
| `Flask_Webserver` | NGINX | Flask Web 应用 |
| `Database` | PostgreSQL 16 | 数据库服务器 |
| `DMZ_IDS` | Suricata | DMZ 的 IDS |
| `External_FW` | Ubuntu | 外部防火墙 (NAT) |
| `SIEM_FW` | Ubuntu | SIEM 防火墙 (严格限制) |
| `logstash` | Elastic 9.2.1 | 日志管道 |
| `elasticsearch` | Elastic 9.2.1 | 日志存储与搜索 |
| `kibana` | Elastic 9.2.1 | 可视化 |
| `siem_pc` | Alpine | SIEM 管理员访问入口 |
| `router-edge` | FRR | 边缘路由器 |
| `router-internet` | FRR | 互联网路由器 |
| `Attacker` | Kali Linux | 攻击者节点 |
## 🧩 组件
### 防火墙
- **内部防火墙 (Internal FW)** — 允许内部流量访问 Web 服务器 (端口 80),阻止 DMZ → 内部网络,通过 NFLOG + ulogd2 + Filebeat 记录日志
- **外部防火墙 (External FW)** — 对传入的 Web 流量进行 DNAT,对传出流量进行 MASQUERADE,通过 NFLOG + ulogd2 + Filebeat 记录日志
- **SIEM 防火墙 (SIEM FW)** — 限制性规则:仅允许定义的连接(Filebeat → Logstash,管理员 → Kibana 等),其他一切均被 DROP
### IDS (Suricata)
- 规则涵盖:SQL 注入、SSH 暴力破解、端口扫描、ICMP 泛洪
- 日志路径:`/var/log/suricata/eve.json` → Filebeat → Logstash → Elasticsearch
- 每个 IDS 拥有独立的索引:`suricata-dmz-*`,`suricata-internal-*`
### SIEM (ELK Stack)
- **Logstash 管道**:`firewall.conf` (NFLOG 解析),`ids.conf` (Suricata eve.json)
- **Elasticsearch 索引**:`firewall-internal-*`,`firewall-external-*`,`suricata-dmz-*`,`suricata-internal-*`
- **Kibana**:访问地址 `http://localhost:5601`
### Web 应用程序
- Flask 应用,包含登录系统(管理员/用户角色)
- PostgreSQL 后端,包含样本数据(用户、报告、访问控制)
- 受 OWASP ModSecurity CRS (WAF) 和 NGINX 反向代理保护
## ⚔️ 攻击场景
`attacks/` 目录中的预配置脚本:
| 脚本 | 攻击类型 | 执行位置 |
|--------|-------------|---------------|
| `attack_sql.sh` | 针对登录表单的 SQL 注入 | 攻击者容器 |
| `attack_dos.sh` | DoS (ICMP 泛洪, SYN 泛洪, HTTP/S 泛洪) | 攻击者容器 |
| `attack_xss_path.sh` | XSS 和目录遍历 | Internal_Client2 |
### 示例:执行 SQL 注入
```
# 部署 attack script
bash attacks/attack_sql.sh
# 在 Attacker container 内执行
sudo docker exec -it clab-MaJuVi-Attacker bash /root/sql_attack_simple.sh
```
### 示例:执行 DoS 攻击
```
bash attacks/attack_dos.sh
sudo docker exec -it clab-MaJuVi-Attacker python3 /root/dos.py
```
所有攻击生成的日志都会通过 SIEM 管道被采集到 Elasticsearch 中,并可在 Kibana 中进行可视化。
## 🧪 测试
```
bash scripts/tests/test-connectivity.sh
```
测试套件验证:
- ✅ 所有网段之间的网络连通性
- ✅ 服务可用性 (Elasticsearch, Kibana, Logstash)
- ✅ 运行中的进程 (Filebeat, Suricata, ulogd2)
- ✅ 防火墙规则(默认 DROP 策略)
- ✅ WAF 功能 (ModSecurity 已激活)
## 📁 项目结构
```
SUN_DMZ/
├── main.sh # Main entry point
├── install_dependencies.sh # Dependency installer
├── attacks/ # Pre-configured attack scripts
│ ├── attack_sql.sh # SQL Injection
│ ├── attack_dos.sh # Denial of Service
│ └── attack_xss_path.sh # XSS & Directory Traversal
├── config/ # Configuration files
│ ├── variables.sh # Central variables (IPs, images, subnets)
│ ├── logstash/ # Logstash pipeline configurations
│ ├── suricata/ # Suricata rules & configuration
│ └── webserver-details/ # Flask app (app.py)
├── topology/ # Containerlab topology
│ └── topology-generator.sh # Generates the YAML topology
├── scripts/
│ ├── setup/ # Setup & deployment
│ │ ├── 01-cleanup.sh # Clean up previous environments
│ │ ├── 02-docker-prep.sh # Prepare Docker images
│ │ └── 03-deploy-topology.sh # Deploy Containerlab topology
│ ├── configure/ # Component configuration
│ │ ├── firewalls/ # Internal FW, External FW, SIEM FW
│ │ ├── dmz/ # Web server, Proxy/WAF, Database
│ │ ├── ids/ # Suricata IDS (DMZ + Internal)
│ │ ├── siem/ # ELK stack configuration
│ │ └── network/ # Routers, switches, clients
│ ├── tests/ # Connectivity & functional tests
│ └── lib/ # Helper libraries (logging)
├── docs/ # Documentation
│ └── diagramm.puml # PlantUML network diagram
└── LICENSE # MIT License
```
## 📄 许可证
本项目采用 [MIT 许可证](LICENSE) 授权。标签:Beacon Object File, CISA项目, Containerlab, DMZ架构, DNS 反向解析, Docker容器化, Elasticsearch, ELK Stack, HTTP工具, IPS, IP 地址批量处理, Linux运维, Metaprompt, OPA, PE 加载器, Suricata, WAF, 企业网络安全, 入侵检测系统, 内容过滤, 多层防火墙, 威胁检测与响应, 安全实验环境, 安全数据湖, 安全运营, 应用安全, 扫描框架, 插件系统, 流量监控, 测试用例, 渗透测试环境, 特权提升, 现代安全运营, 网络分段, 网络安全实验, 网络安全审计, 网络拓扑模拟, 自动化部署, 请求拦截, 负责任AI, 越狱测试, 靶场, 高校安全项目