eliesersb/iotdashboardids
GitHub: eliesersb/iotdashboardids
这是一个基于Snort IDS的IoT安全监控仪表板,通过容器化部署实时监控多种物联网协议的流量并检测攻击。
Stars: 0 | Forks: 0
# 基于Snort IDS的IoT安全监控仪表板
本项目是一个基于容器的物联网网络安全监控系统,集成了入侵检测系统(IDS)。系统用于监控多种物联网协议(MQTT、REST API、CoAP和gRPC)的正常流量和攻击流量。
最终仪表板使用 **Django + Chart.js** 作为主要可视化工具。应用流量数据通过 `protocol_metrics` 测量存储在InfluxDB中,而来自Snort IDS的告警数据则存储在 `snort_alerts` 测量中。
## 系统概述
该系统旨在实时辅助物联网网络安全监控过程。每个物联网协议都有各自的服务、正常客户端和攻击脚本。Snort IDS用于检测攻击模式,而Telegraf则将数据转发至InfluxDB,以便在Django仪表板上可视化。
```
Traffic Generator / Client
|
v
MQTT | REST API | CoAP | gRPC
|
v
Snort IDS + Telegraf
|
v
InfluxDB
|
v
Django + Chart.js Dashboard
```
## 核心组件
| 组件 | 功能 |
|---|---|
| Docker Compose | 在容器中运行所有服务 |
| Django | 系统主仪表板 |
| Chart.js | 实时图表可视化 |
| InfluxDB 1.8 | 用于流量和告警的时序数据库 |
| Telegraf | 数据收集器并连接至InfluxDB |
| Snort IDS | 网络攻击检测器 |
| MQTT | 模拟发布/订阅物联网协议 |
| REST API | 模拟基于HTTP的物联网协议 |
| CoAP | 模拟基于UDP的轻量级物联网协议 |
| gRPC | 模拟基于RPC的物联网协议 |
| hping3 | 网络层攻击测试工具 |
## 服务与端口
| 服务 | 端口 | 说明 |
|---|---:|---|
| Django 仪表板 | 8000 | 主仪表板 |
| InfluxDB | 8086 | 时序数据库 |
| Telegraf HTTP 监听器 | 8186 | 行协议数据监听器 |
| MQTT 代理 | 1883 | MQTT TCP |
| MQTT WebSocket | 9001 | MQTT WebSocket |
| REST API | 5000 | REST 端点 |
| CoAP 服务器 | 5683/UDP | CoAP 端点 |
| gRPC 服务器 | 50051 | gRPC 端点 |
## 项目结构
## 环境配置
从 `.env.example` 创建 `.env` 文件。
```
cp .env.example .env
```
然后在 `.env` 文件中调整以下值。
```
DJANGO_SECRET_KEY=change-this-secret-key
DJANGO_DEBUG=True
DJANGO_ALLOWED_HOSTS=localhost,127.0.0.1,0.0.0.0
INFLUXDB_HOST=influxdb
INFLUXDB_PORT=8086
INFLUXDB_DB=iot_data
INFLUXDB_USER=admin
INFLUXDB_PASSWORD=admin123
TELEGRAM_BOT_TOKEN=your-telegram-bot-token
TELEGRAM_CHAT_ID=your-telegram-chat-id
```
`.env` 文件包含真实凭据,不应上传至GitHub。只应上传 `.env.example` 文件。
## 运行系统
运行所有服务:
```
bash scripts/start_all.sh
```
或手动运行:
```
docker compose up -d --build --remove-orphans
```
检查容器状态:
```
docker compose ps
```
打开仪表板:
```
http://localhost:8000
```
## 停止系统
```
bash scripts/stop_all.sh
```
或手动停止:
```
docker compose down
```
该命令会停止容器但不删除数据卷。
如果要停止并删除数据卷:
```
docker compose down -v
```
仅当需要彻底删除容器数据时才使用 `down -v`。
## 重置测试数据
在开始新测试场景前清理测试数据:
```
bash reset_test_data.sh
```
重置数据是为了防止之前测试的流量和告警数据与新测试混淆。
## 运行正常流量
运行所有正常客户端:
```
bash scripts/run_all_clients.sh
```
停止所有正常客户端:
```
bash scripts/stop_all_clients.sh
```
逐个运行正常客户端:
```
python3 mqtt_client.py
python3 rest_client.py
python3 coap_client.py
python3 grpc_client.py
```
## 运行应用层攻击
按协议运行应用层攻击:
```
bash scripts/run_flood_mqtt.sh
bash scripts/run_flood_rest.sh
bash scripts/run_flood_coap.sh
bash scripts/run_flood_grpc.sh
```
应用层攻击用于测试系统检测应用层流量激增的能力。
## 运行 hping3
hping3 测试用于模拟网络层攻击。
```
bash scripts/hping3_mqtt.sh
bash scripts/hping3_rest.sh
bash scripts/hping3_coap.sh
bash scripts/hping3_grpc.sh
```
手动命令:
```
sudo timeout 20 hping3 -S --flood -p 1883 127.0.0.1
sudo timeout 20 hping3 -S --flood -p 5000 127.0.0.1
sudo timeout 20 hping3 --udp --flood -p 5683 127.0.0.1
sudo timeout 20 hping3 -S --flood -p 50051 127.0.0.1
```
目标端口:
| 协议 | hping3 类型 | 端口 |
|---|---|---:|
| MQTT | TCP SYN 洪水攻击 | 1883 |
| REST API | TCP SYN 洪水攻击 | 5000 |
| CoAP | UDP 洪水攻击 | 5683 |
| gRPC | TCP SYN 洪水攻击 | 50051 |
## 验证 InfluxDB 数据
进入 InfluxDB 容器:
```
docker exec -it influxdb influx
```
使用数据库:
```
USE iot_data
```
检查测量:
```
SHOW MEASUREMENTS
```
检查应用流量:
```
SELECT COUNT("request_count") FROM "protocol_metrics" WHERE time > now() - 15m GROUP BY "protocol", "traffic_type"
```
检查 IDS 告警:
```
SELECT COUNT("sid") FROM "snort_alerts" WHERE time > now() - 15m GROUP BY "protocol", "msg"
```
检查告警详情:
```
SELECT * FROM "snort_alerts" WHERE time > now() - 15m LIMIT 20
```
## 验证 Snort IDS 日志
从主机检查 Snort IDS 日志:
```
sudo tail -n 30 snort/log/alert_fast.txt
```
实时检查日志:
```
sudo tail -f snort/log/alert_fast.txt
```
检查 Snort IDS 容器日志:
```
docker logs -f snort_mqtt
docker logs -f snort_rest
docker logs -f snort_coap
docker logs -f snort_grpc
```
## 仪表板页面
| 页面 | 功能 |
|---|---|
| 首页 | 系统状态概览、总请求数、活跃告警、延迟/RTT 和吞吐量 |
| 监控 | 每个协议的实时流量、延迟/RTT 和吞吐量图表 |
| 告警 | 显示 IDS 告警、严重程度、时间线和攻击类型 |
| 节点 | 受监控物联网协议节点或服务的信息 |
| 汇总 | 监控和测试结果概览 |
| 维护 | 重置测试数据和清理日志 |
## 最终测试场景
最终测试顺序:
| 序号 | 场景 | 目的 |
|---:|---|---|
| 1 | MQTT 应用层攻击 | 测试 MQTT 应用层攻击检测 |
| 2 | REST API 应用层攻击 | 测试 REST API 应用层攻击检测 |
| 3 | CoAP 应用层攻击 | 测试 CoAP 应用层攻击检测 |
| 4 | gRPC 应用层攻击 | 测试 gRPC 应用层攻击检测 |
| 5 | MQTT hping3 | 测试 MQTT 上的 TCP SYN 洪水攻击检测 |
| 6 | REST API hping3 | 测试 REST API 上的 TCP SYN 洪水攻击检测 |
| 7 | CoAP hping3 | 测试 CoAP 上的 UDP 洪水攻击检测 |
| 8 | gRPC hping3 | 测试 gRPC 上的 TCP SYN 洪水攻击检测 |
## 测试结果记录
| 场景 | 记录 |
|---|---|
| MQTT 应用层攻击 | 有效,被识别为应用层攻击/DoS |
| REST API 应用层攻击 | 有效,由于 REST 基于 TCP 并建立大量连接,可被识别为 TCP SYN 洪水攻击 |
| CoAP 应用层攻击 | 有效,由于 CoAP 基于 UDP,可显示为 CoAP 应用层攻击和 CoAP UDP 洪水攻击 |
| gRPC 应用层攻击 | 有效,规则调整后被识别为应用层攻击/DoS |
| MQTT hping3 | 有效,被识别为 MQTT TCP SYN 洪水攻击 / hping3 |
| REST API hping3 | 有效,被识别为 REST TCP SYN 洪水攻击 / hping3 |
| CoAP hping3 | 有效,被识别为 CoAP UDP 洪水攻击 / hping3 |
| gRPC hping3 | 有效,可显示为 gRPC 应用层攻击和 gRPC TCP SYN 洪水攻击 / hping3 |
这些分类差异并非重大错误,而是 Snort IDS 根据流量模式、端口和协议进行检测的特性。
## 故障排除
### 容器未运行
```
docker compose ps
docker compose logs nama_service
```
### 数据未进入 InfluxDB
```
docker logs -f telegraf
docker exec -it influxdb influx
```
然后运行:
```
USE iot_data
SHOW MEASUREMENTS
```
### Snort IDS 告警未出现
```
sudo tail -f snort/log/alert_fast.txt
docker logs -f snort_mqtt
docker logs -f snort_rest
docker logs -f snort_coap
docker logs -f snort_grpc
```
### 无法打开仪表板
```
docker logs -f django_app
docker compose ps
```
确保端口 `8000` 处于活动状态且 `django_app` 容器正在运行。
## 在其他笔记本上部署
一般步骤:
```
git clone https://github.com/eliesersb/iotdashboardids.git
cd iotdashboardids
cp .env.example .env
nano .env
docker compose up -d --build --remove-orphans
docker compose ps
```
服务运行后,打开:
```
http://localhost:8000
```
## 云部署准备
云部署清单:
1. 使用 Ubuntu 服务器。
2. 安装 Docker 和 Docker Compose。
3. 克隆仓库。
4. 从 `.env.example` 创建 `.env` 文件。
5. 不要将 InfluxDB 在无保护的情况下公开暴露。
6. 根据需要暴露 Django 端口。
7. 使用防火墙。
8. 如果使用域名,请配置反向代理。
9. 仅将 Telegram 令牌存储在 `.env` 中。
10. 仅在合法且受控的环境中运行 hping3 测试。
## 项目状态
本项目已最终定稿,主仪表板基于 **Django + Chart.js** 作为最终仪表板。
## 许可证
本项目是为满足毕业设计以及基于容器的物联网网络安全监控系统测试需求而创建。
标签:Chart.js, CoAP, Django, Docker, gRPC, hping3, InfluxDB, NIDS, PFX证书, REST API, Telegraf, 仪表板, 协议分析, 安全警报, 安全防御评估, 实时可视化, 容器化, 攻击检测, 时间序列数据库, 权限提升, 物联网安全, 网络安全, 请求拦截, 隐私保护