sinyuan1022/NetDefender
GitHub: sinyuan1022/NetDefender
一个基于 SDN 架构的网络主动防御平台,通过集成入侵检测与容器化蜜罐实现可疑流量的自动识别与动态重定向。
Stars: 1 | Forks: 0
# NetDefender
## 📋 概述
**NetDefender** 是一个全面的网络防御和流量重定向平台,无缝集成了 **Software-Defined Networking (SDN)** 和 **Intrusion Detection Systems (IDS)**。
### 核心特性
- **核心控制器**: 基于 OSKen 控制器框架构建
- **数据包转发**: 利用 Open vSwitch (OVS) 进行智能数据包转发和策略执行
- **入侵检测**: 集成 Snort IDS 以进行实时威胁检测
- **动态流量重定向**: 自动将可疑流量重定向到容器化的蜜罐
- **容器编排**: 支持蜜罐服务的基本容器生命周期管理
- **可扩展策略**: 用于自定义防御策略的灵活策略框架
## 🖥️ 系统要求
### Ryu 服务器
- **操作系统**: Ubuntu 22.04
- **Python 版本**: Python 3.9
- **Docker 版本**: 20.10.12-0ubuntu4
### Snort 服务器
- **操作系统**: Ubuntu 22.04
- **Python 版本**: Python 3.9+
## ⚠️ 重要说明
## 🌐 网络架构
下图展示了 NetDefender 的网络拓扑结构:
## 🍯 蜜罐配置
NetDefender 使用基于 JSON 的配置文件来定义蜜罐容器。该配置支持多种蜜罐类型,并具有灵活的端口映射。
### 完整配置示例
```
{
"containers": [
{
"image_name": "cowrie/cowrie",
"name": "ssh",
"ports": [
{
"host_port": 22,
"container_port": 2222,
"protocol": "tcp"
}
],
"command": "",
"multi": "yes",
"max": 10,
"max_containers": 10,
"send_response": "yes"
},
{
"image_name": "dinotools/dionaea",
"name": "dionaea",
"ports": [
{"host_port": 21, "container_port": 21, "protocol": "tcp"},
{"host_port": 42, "container_port": 42, "protocol": "tcp"},
{"host_port": 69, "container_port": 69, "protocol": "udp"},
{"host_port": 80, "container_port": 80, "protocol": "tcp"},
{"host_port": 135, "container_port": 135, "protocol": "tcp"},
{"host_port": 443, "container_port": 443, "protocol": "tcp"},
{"host_port": 445, "container_port": 445, "protocol": "tcp"},
{"host_port": 1433, "container_port": 1433, "protocol": "tcp"},
{"host_port": 1723, "container_port": 1723, "protocol": "tcp"},
{"host_port": 1883, "container_port": 1883, "protocol": "tcp"},
{"host_port": 1900, "container_port": 1900, "protocol": "udp"},
{"host_port": 3306, "container_port": 3306, "protocol": "tcp"},
{"host_port": 5060, "container_port": 5060, "protocol": "tcp"},
{"host_port": 5060, "container_port": 5060, "protocol": "udp"},
{"host_port": 5061, "container_port": 5061, "protocol": "tcp"},
{"host_port": 11211, "container_port": 11211, "protocol": "tcp"}
],
"command": "",
"multi": "yes",
"max": 10,
"max_containers": 10,
"send_response": "yes"
}
]
}
```
## 📖 配置参数
### 容器级参数
| 参数 | 类型 | 是否必填 | 描述 |
|-----------|------|----------|-------------|
| `image_name` | String | 是 | 蜜罐容器的 Docker 镜像名称 |
| `name` | String | 是 | 容器实例的唯一标识符 |
| `ports` | Array | 是 | 定义网络访问的端口映射对象数组 |
| `command` | String | 否 | 附加的 Docker 命令行参数 (如不需要可删除此行) |
| `multi` | String | 否 | 启用多容器实例 (`yes`/`no`) (默认值: no)|
| `max` | Integer | 否 | 每个容器的最大并发连接数 (默认值: 10) |
| `max_containers` | Integer | 否 | 允许的最大容器实例总数 (不包括主实例) (默认值: 10)|
| `send_response` | String | 否 | 蜜罐是否应发送响应数据包 (`yes`/`no`) (默认值: no)|
### 端口映射参数
`ports` 数组中的每个对象必须包含以下字段:
| 参数 | 类型 | 是否必填 | 描述 |
|-----------|------|----------|-------------|
| `host_port` | Integer | 是 | 接收传入数据包的外部网络端口 |
| `container_port` | Integer | 是 | 用于流量重定向的内部容器端口 |
| `protocol` | String | 是 | 网络协议 (`tcp` 或 `udp`) |
## 🎯 蜜罐类型
### 1. SSH 蜜罐
**用途**: 模拟 SSH/Telnet 服务,以捕获暴力破解攻击和 shell 交互。
- **镜像**: `cowrie/cowrie`
- **监控端口**: 22 (SSH)
- **内部端口**: 2222
- **应用场景**: 捕获 SSH 登录尝试、命令和文件下载
### 2. 多服务蜜罐
**用途**: 一个同时模拟多个易受攻击服务的综合性蜜罐。
- **镜像**: `dinotools/dionaea`
- **监控服务**:
- **FTP** (21): 文件传输协议
- **WINS** (42): Windows 互联网名称服务
- **TFTP** (69, UDP): 简单文件传输协议
- **HTTP** (80): Web 流量
- **RPC** (135): 远程过程调用
- **HTTPS** (443): 安全 Web 流量
- **SMB** (445): 服务器消息块
- **MSSQL** (1433): Microsoft SQL Server
- **PPTP** (1723): 点对点隧道协议
- **MQTT** (1883): 消息队列遥测传输
- **UPnP** (1900, UDP): 通用即插即用
- **MySQL** (3306): MySQL 数据库
- **SIP** (5060, TCP/UDP & 5061): 会话初始协议
- **Memcached** (11211): 分布式内存缓存系统
## 🚀 安装指南
### VMware Workstation Pro 的前置条件
1. **以 root 用户运行**
2. 在虚拟网络接口上**启用混杂模式**:
chmod a+rw /dev/vmnet0
这是 NetDefender 在混杂模式下捕获网络流量所必需的。
请参考以下链接:[Promiscuous Mode for Linux Virtual Adapters](https://techdocs.broadcom.com/us/en/vmware-cis/desktop-hypervisors/workstation-pro/17-0/using-vmware-workstation-pro/configuring-network-connections/using-virtual-network-adapters-in-promiscuous-mode-on-linux-hosts.html)
### 1. Ryu 服务器安装
执行以下命令以安装 Ryu 控制器:
```
# 切换到 root 用户
sudo -s
# 安装 Git
apt install git -y
# 克隆 NetDefender 仓库
git clone https://github.com/sinyuan1022/NetDefender.git
# 导航至 Ryu 目录
cd ./NetDefender/ryu/
# 运行 Ryu 安装脚本
bash ./ryu_install.sh
```
### 2. Snort 服务器安装
**前置条件**: 请先完成 Ryu 服务器的安装。
执行以下命令以安装 Snort IDS:
```
# 切换到 root 用户
sudo -s
# 安装 Git
apt install git -y
# 克隆 NetDefender 仓库
git clone https://github.com/sinyuan1022/NetDefender.git
# 导航至 Snort 目录
cd ./NetDefender/snort/
# 运行 Snort 安装脚本
bash ./snort_install.sh
```
### 3. 单服务器部署 (可选)
```
# 切换到 root 用户
sudo -s
# 安装 Git
apt install git -y
# 克隆 NetDefender 仓库
git clone https://github.com/sinyuan1022/NetDefender.git
# 导航至 root 目录
cd ./NetDefender/
# 运行组合安装脚本
bash ./singel.sh
```
## 🔧 配置最佳实践
### 端口映射策略
**单端口蜜罐**: 在针对 SSH 或 Telnet 等特定服务时使用。
```
{
"image_name": "cowrie/cowrie",
"name": "ssh",
"ports": [
{"host_port": 22, "container_port": 2222, "protocol": "tcp"}
]
}
```
**多端口蜜罐**: 在模拟综合网络服务或易受攻击的服务器时使用。
```
{
"image_name": "dinotools/dionaea",
"name": "dionaea",
"ports": [
{"host_port": 80, "container_port": 80, "protocol": "tcp"},
{"host_port": 443, "container_port": 443, "protocol": "tcp"}
]
}
```
### 扩展配置
- **`multi: "yes"`**: 为高流量场景启用动态容器生成
- **`max: 10`**: 限制每个容器的并发连接数,以防止资源耗尽
- **`max_containers: 10`**: 设置容器实例总数的上限
### 响应行为
- **`send_response: "yes"`**: 蜜罐主动响应攻击者 (更真实)
- **`send_response: "no"`**: 静默监控模式 (适用于特定的检测场景)
## 📚 工作原理
### 流量走向
1. **流量监控**: Open vSwitch 将网络流量转发至 Ryu 控制器
2. **威胁检测**: Snort IDS 分析流量模式并生成警报
3. **策略评估**: 控制器根据配置的策略评估流量
4. **端口匹配**: 将传入流量与配置的 `host_port` 值进行匹配
5. **动态重定向**: 将可疑流量重定向至相应的蜜罐容器
6. **容器管理**: 系统根据负载自动生成和管理蜜罐实例
7. **响应生成**: 蜜罐与攻击者进行交互,同时记录所有活动
8. **数据收集**: 所有交互均被捕获,用于分析和威胁情报
## 🎓 应用场景
### 安全研究
创建受控环境,用于研究跨多种协议的攻击模式、恶意软件行为和漏洞利用技术。
### 威胁情报
收集并分析来自 SSH 暴力破解尝试、SMB 漏洞利用、SQL 注入攻击和 IoT 僵尸网络活动的恶意流量数据。
### 网络防御
通过将攻击者重定向至蜜罐并同时保护生产系统,实施主动防御机制。
## 🔗 资源
- **代码仓库**: [https://github.com/sinyuan1022/NetDefender](https://github.com/sinyuan1022/NetDefender)
- **OSKen/Ryu 文档**: 基于组件的 SDN 控制器框架
- **Open vSwitch**: 生产级多层虚拟交换机
- **Snort**: 开源网络入侵检测和防御系统
- **Cowrie**: 专为记录暴力破解攻击而设计的 SSH/Telnet 蜜罐
- **Dionaea**: 用于捕获恶意软件和漏洞利用的低交互蜜罐
*如有问题、疑问或想要贡献代码,请访问 [GitHub 仓库](https://github.com/sinyuan1022/NetDefender)。*
## 🍯 蜜罐配置
NetDefender 使用基于 JSON 的配置文件来定义蜜罐容器。该配置支持多种蜜罐类型,并具有灵活的端口映射。
### 完整配置示例
```
{
"containers": [
{
"image_name": "cowrie/cowrie",
"name": "ssh",
"ports": [
{
"host_port": 22,
"container_port": 2222,
"protocol": "tcp"
}
],
"command": "",
"multi": "yes",
"max": 10,
"max_containers": 10,
"send_response": "yes"
},
{
"image_name": "dinotools/dionaea",
"name": "dionaea",
"ports": [
{"host_port": 21, "container_port": 21, "protocol": "tcp"},
{"host_port": 42, "container_port": 42, "protocol": "tcp"},
{"host_port": 69, "container_port": 69, "protocol": "udp"},
{"host_port": 80, "container_port": 80, "protocol": "tcp"},
{"host_port": 135, "container_port": 135, "protocol": "tcp"},
{"host_port": 443, "container_port": 443, "protocol": "tcp"},
{"host_port": 445, "container_port": 445, "protocol": "tcp"},
{"host_port": 1433, "container_port": 1433, "protocol": "tcp"},
{"host_port": 1723, "container_port": 1723, "protocol": "tcp"},
{"host_port": 1883, "container_port": 1883, "protocol": "tcp"},
{"host_port": 1900, "container_port": 1900, "protocol": "udp"},
{"host_port": 3306, "container_port": 3306, "protocol": "tcp"},
{"host_port": 5060, "container_port": 5060, "protocol": "tcp"},
{"host_port": 5060, "container_port": 5060, "protocol": "udp"},
{"host_port": 5061, "container_port": 5061, "protocol": "tcp"},
{"host_port": 11211, "container_port": 11211, "protocol": "tcp"}
],
"command": "",
"multi": "yes",
"max": 10,
"max_containers": 10,
"send_response": "yes"
}
]
}
```
## 📖 配置参数
### 容器级参数
| 参数 | 类型 | 是否必填 | 描述 |
|-----------|------|----------|-------------|
| `image_name` | String | 是 | 蜜罐容器的 Docker 镜像名称 |
| `name` | String | 是 | 容器实例的唯一标识符 |
| `ports` | Array | 是 | 定义网络访问的端口映射对象数组 |
| `command` | String | 否 | 附加的 Docker 命令行参数 (如不需要可删除此行) |
| `multi` | String | 否 | 启用多容器实例 (`yes`/`no`) (默认值: no)|
| `max` | Integer | 否 | 每个容器的最大并发连接数 (默认值: 10) |
| `max_containers` | Integer | 否 | 允许的最大容器实例总数 (不包括主实例) (默认值: 10)|
| `send_response` | String | 否 | 蜜罐是否应发送响应数据包 (`yes`/`no`) (默认值: no)|
### 端口映射参数
`ports` 数组中的每个对象必须包含以下字段:
| 参数 | 类型 | 是否必填 | 描述 |
|-----------|------|----------|-------------|
| `host_port` | Integer | 是 | 接收传入数据包的外部网络端口 |
| `container_port` | Integer | 是 | 用于流量重定向的内部容器端口 |
| `protocol` | String | 是 | 网络协议 (`tcp` 或 `udp`) |
## 🎯 蜜罐类型
### 1. SSH 蜜罐
**用途**: 模拟 SSH/Telnet 服务,以捕获暴力破解攻击和 shell 交互。
- **镜像**: `cowrie/cowrie`
- **监控端口**: 22 (SSH)
- **内部端口**: 2222
- **应用场景**: 捕获 SSH 登录尝试、命令和文件下载
### 2. 多服务蜜罐
**用途**: 一个同时模拟多个易受攻击服务的综合性蜜罐。
- **镜像**: `dinotools/dionaea`
- **监控服务**:
- **FTP** (21): 文件传输协议
- **WINS** (42): Windows 互联网名称服务
- **TFTP** (69, UDP): 简单文件传输协议
- **HTTP** (80): Web 流量
- **RPC** (135): 远程过程调用
- **HTTPS** (443): 安全 Web 流量
- **SMB** (445): 服务器消息块
- **MSSQL** (1433): Microsoft SQL Server
- **PPTP** (1723): 点对点隧道协议
- **MQTT** (1883): 消息队列遥测传输
- **UPnP** (1900, UDP): 通用即插即用
- **MySQL** (3306): MySQL 数据库
- **SIP** (5060, TCP/UDP & 5061): 会话初始协议
- **Memcached** (11211): 分布式内存缓存系统
## 🚀 安装指南
### VMware Workstation Pro 的前置条件
1. **以 root 用户运行**
2. 在虚拟网络接口上**启用混杂模式**:
chmod a+rw /dev/vmnet0
这是 NetDefender 在混杂模式下捕获网络流量所必需的。
请参考以下链接:[Promiscuous Mode for Linux Virtual Adapters](https://techdocs.broadcom.com/us/en/vmware-cis/desktop-hypervisors/workstation-pro/17-0/using-vmware-workstation-pro/configuring-network-connections/using-virtual-network-adapters-in-promiscuous-mode-on-linux-hosts.html)
### 1. Ryu 服务器安装
执行以下命令以安装 Ryu 控制器:
```
# 切换到 root 用户
sudo -s
# 安装 Git
apt install git -y
# 克隆 NetDefender 仓库
git clone https://github.com/sinyuan1022/NetDefender.git
# 导航至 Ryu 目录
cd ./NetDefender/ryu/
# 运行 Ryu 安装脚本
bash ./ryu_install.sh
```
### 2. Snort 服务器安装
**前置条件**: 请先完成 Ryu 服务器的安装。
执行以下命令以安装 Snort IDS:
```
# 切换到 root 用户
sudo -s
# 安装 Git
apt install git -y
# 克隆 NetDefender 仓库
git clone https://github.com/sinyuan1022/NetDefender.git
# 导航至 Snort 目录
cd ./NetDefender/snort/
# 运行 Snort 安装脚本
bash ./snort_install.sh
```
### 3. 单服务器部署 (可选)
```
# 切换到 root 用户
sudo -s
# 安装 Git
apt install git -y
# 克隆 NetDefender 仓库
git clone https://github.com/sinyuan1022/NetDefender.git
# 导航至 root 目录
cd ./NetDefender/
# 运行组合安装脚本
bash ./singel.sh
```
## 🔧 配置最佳实践
### 端口映射策略
**单端口蜜罐**: 在针对 SSH 或 Telnet 等特定服务时使用。
```
{
"image_name": "cowrie/cowrie",
"name": "ssh",
"ports": [
{"host_port": 22, "container_port": 2222, "protocol": "tcp"}
]
}
```
**多端口蜜罐**: 在模拟综合网络服务或易受攻击的服务器时使用。
```
{
"image_name": "dinotools/dionaea",
"name": "dionaea",
"ports": [
{"host_port": 80, "container_port": 80, "protocol": "tcp"},
{"host_port": 443, "container_port": 443, "protocol": "tcp"}
]
}
```
### 扩展配置
- **`multi: "yes"`**: 为高流量场景启用动态容器生成
- **`max: 10`**: 限制每个容器的并发连接数,以防止资源耗尽
- **`max_containers: 10`**: 设置容器实例总数的上限
### 响应行为
- **`send_response: "yes"`**: 蜜罐主动响应攻击者 (更真实)
- **`send_response: "no"`**: 静默监控模式 (适用于特定的检测场景)
## 📚 工作原理
### 流量走向
1. **流量监控**: Open vSwitch 将网络流量转发至 Ryu 控制器
2. **威胁检测**: Snort IDS 分析流量模式并生成警报
3. **策略评估**: 控制器根据配置的策略评估流量
4. **端口匹配**: 将传入流量与配置的 `host_port` 值进行匹配
5. **动态重定向**: 将可疑流量重定向至相应的蜜罐容器
6. **容器管理**: 系统根据负载自动生成和管理蜜罐实例
7. **响应生成**: 蜜罐与攻击者进行交互,同时记录所有活动
8. **数据收集**: 所有交互均被捕获,用于分析和威胁情报
## 🎓 应用场景
### 安全研究
创建受控环境,用于研究跨多种协议的攻击模式、恶意软件行为和漏洞利用技术。
### 威胁情报
收集并分析来自 SSH 暴力破解尝试、SMB 漏洞利用、SQL 注入攻击和 IoT 僵尸网络活动的恶意流量数据。
### 网络防御
通过将攻击者重定向至蜜罐并同时保护生产系统,实施主动防御机制。
## 🔗 资源
- **代码仓库**: [https://github.com/sinyuan1022/NetDefender](https://github.com/sinyuan1022/NetDefender)
- **OSKen/Ryu 文档**: 基于组件的 SDN 控制器框架
- **Open vSwitch**: 生产级多层虚拟交换机
- **Snort**: 开源网络入侵检测和防御系统
- **Cowrie**: 专为记录暴力破解攻击而设计的 SSH/Telnet 蜜罐
- **Dionaea**: 用于捕获恶意软件和漏洞利用的低交互蜜罐
*如有问题、疑问或想要贡献代码,请访问 [GitHub 仓库](https://github.com/sinyuan1022/NetDefender)。*标签:AMSI绕过, CISA项目, Dionaea, Docker, FTP漏洞扫描, NIDS, Open vSwitch, OSKen控制器, OVS, Python, SDN, Shellcode执行, 入侵检测系统, 威胁检测, 安全数据湖, 安全策略, 安全编排, 安全防御评估, 容器化, 提示词设计, 插件系统, 无后门, 流量重定向, 网络安全, 网络架构, 自动化防御, 蜜罐, 证书利用, 请求拦截, 软件定义网络, 逆向工具, 隐私保护