CyberTechSali/CodeAlpha--Network-Intrusion-Detection-System
GitHub: CyberTechSali/CodeAlpha--Network-Intrusion-Detection-System
一套基于 Suricata 与 Flask 构建的网络入侵检测系统,提供实时告警可视化仪表盘与基于阈值的自动化 IP 封禁响应能力。
Stars: 0 | Forks: 0
# CodeAlpha--Network-Intrusion-Detection-System
-v
# Terminal 2 — Parser (eve.json → SQLite)
python3 parser.py
# Terminal 3 — Response Engine (监控 + 自动响应)
python3 response_engine.py
# Terminal 4 — Flask Dashboard (Web 界面)
python3 app.py
```
Dashboard 访问地址:**`http://:5000`**
## 🎯 自定义 Suricata 规则
文件:[`suricata/local.rules`](suricata/local.rules)
| SID | 描述 | 目标工具 |
|---|---|---|
| 1000001 | Nikto User-Agent 检测 | Nikto |
| 1000002 | Nmap NSE 脚本检测 | Nmap |
| 1000003 | Nmap SYN 扫描 | Nmap |
| 1000004 | Nmap NULL 扫描 | Nmap |
| 1000005 | Nmap XMAS 扫描 | Nmap |
| 1000006 | Nmap FIN 扫描 | Nmap |
| 1000007 | SSH 暴力破解 (Hydra) | Hydra |
| 1000008 | FTP 暴力破解 (Hydra) | Hydra |
| 1000009 | 低 TTL 构造数据包 (hping3) | hping3 |
| 1000010 | SYN Flood (hping3) | hping3 |
## 🗄️ 数据库 Schema
```
alerts -- Each parsed Suricata alert (timestamp, signature, IP,
-- ports, severity, attack type, raw JSON...)
sid_mapping -- Link between signature_id → attack_type (Nmap, Hydra, Nikto...)
blocked_ips -- History of IPs blocked by the Response Engine
response_log -- Full log of every Response Engine decision
-- (including simulation mode)
```
详情请参见 [`schema.sql`](./schema.sql)。
## 🚧 已知局限 / 未来工作
- [ ] 通过 `iptables` 进行真实封禁 (非模拟模式) 尚未在
真实环境下验证通过 — Response Engine 默认运行在
**dry-run 模式**下
- [ ] 基于文件的日志记录 (`parser.log`, `response.log`, `flask.log`) 尚未
实现;目前日志只能在终端中查看
- [ ] 实时通知和活动时间线功能尚未实现
- [ ] 浅色/深色模式以及响应式设计仍需完善
- [ ] 一些通用的 ET Open 规则尚未在 `sid_mapping` 中完成映射
(被归类为 "Unknown")
## 👤 作者
**Salma Ouchahed**
本项目构建于 2026 年,是网络安全实验室的一部分 — 使用
Suricata 进行网络入侵检测。
## 📄 许可证
学术/教育项目 — 可免费用于学习目的。
详情请参阅 [`LICENSE`](LICENSE)。
# 🛡️ NIDS 仪表盘
### 由 Suricata 驱动的网络入侵检测系统
实时网络入侵检测 pipeline —— 捕获、分析、
可视化以及自动化威胁响应。
[](https://www.python.org/)
[](https://flask.palletsprojects.com/)
[](https://suricata.io/)
[](https://www.sqlite.org/)
[](#-license)
[概述](#-overview) •
[截图](#-screenshots) •
[架构](#️-architecture) •
[安装](#️-installation) •
[用法](#️-usage)
## 📌 目录
- [概述](#-overview)
- [截图](#-screenshots)
- [架构](#️-architecture)
- [实验拓扑](#-lab-topology)
- [功能](#-features)
- [技术栈](#-tech-stack)
- [仓库结构](#-repository-structure)
- [安装](#️-installation)
- [用法](#️-usage)
- [自定义 Suricata 规则](#-custom-suricata-rules)
- [数据库 Schema](#-database-schema)
- [已知局限 / 未来工作](#-known-limitations--future-work)
- [作者](#-author)
- [许可证](#-license)
## 🔍 概述
本项目实现了一个完整的网络入侵检测与响应
pipeline:
1. **Suricata** 实时捕获网络流量,并基于标准规则集 (ET Open) 以及
针对常见攻击工具 (Nmap, Hydra, Nikto, hping3) 的自定义规则
生成结构化的告警 (`eve.json`)。
2. **Python Parser** 持续读取此数据流,并将其输入到 **SQLite**
数据库中。
3. **Flask Dashboard** 查询此数据库以提供实时
可视化 (KPI, Chart.js 图表,搜索,过滤)。
4. **Response Engine** 完全独立于 Dashboard,负责监控
数据库,并在超过告警阈值时触发
自动响应 (IP 封禁,日志记录)。
## 📸 截图
### 主 Dashboard
实时概览:组件状态,KPI,活动图表。
### 实时告警 实时搜索,可组合的过滤器 (严重程度、类型、类别、日期),每条告警的完整 JSON 详情。
## 🏗️ 架构
```
┌─────────────────────┐
│ Suricata (IDS) │
│ → eve.json │
└──────────┬──────────┘
│
▼
┌─────────────────────┐
│ Python Parser │
│ (streaming reader) │
└──────────┬──────────┘
│
▼
┌─────────────────────┐
│ SQLite (alerts.db) │
└──────────┬──────────┘
│
┌──────────────┴──────────────┐
▼ ▼
┌─────────────────────┐ ┌─────────────────────┐
│ Flask Dashboard │ │ Response Engine │
│ (read-only) │ │ (read + action) │
│ Chart.js / REST API │ │ iptables / logs │
└─────────────────────┘ └─────────────────────┘
```
**核心原则**:Dashboard 和 Response Engine 是两个独立的
进程,它们仅共享对同一个 SQLite 数据库的读取访问权限。这种
分离可以防止显示错误触发安全操作,
并允许每个组件独立重启,互不影响。
## 🖧 实验拓扑
```
Windows Host
│
VMware Workstation
│
VMnet (Host-Only)
│
┌─────────────────────┼─────────────────────┐
▼ ▼ ▼
Kali Linux Ubuntu Server Ubuntu Server
(Attacker) (Victim) (IDS)
192.168.10.12 192.168.10.11 192.168.10.10
Tools: Services: Tools:
- Nmap - Apache2 - Suricata 7.0.3
- Hydra - OpenSSH - Python Parser
- Nikto - vsftpd - Flask Dashboard
- hping3 - Test website - Response Engine
- curl - EveBox (optional)
```
## ✨ 功能
### 🎯 检测 (Suricata)
- 标准 ET Open 规则 + 10 条针对 Nmap
(SYN/NULL/FIN/XMAS 扫描)、Hydra (SSH/FTP 暴力破解)、Nikto、hping3
(低 TTL, SYN flood) 的自定义规则
- 在专用网络接口上进行实时捕获
### ⚙️ 处理 (Python Parser)
- `eve.json` 的流式读取器 (持久化 offset,无需全量重新读取)
- 通过 SID → 工具映射表自动解析攻击类型
- 保留原始 JSON 以供全面审计/查看详情
### 📊 可视化 (Flask Dashboard)
| 页面 | 描述 |
|---|---|
| **Dashboard** | 系统组件状态,KPI,实时图表 |
| **Alerts** | 实时搜索,可组合的过滤器,分页,JSON 详情 |
| **Responses** | Response Engine 自动操作的历史记录 |
| **Blocked IPs** | 已封禁 IP 列表,支持手动解封 |
| **Statistics** | Top 端口、协议、类别、每日趋势 |
| **System** | 详细的组件状态,系统日志 |
| **About** | 项目和架构概览 |
支持配置自动刷新 (5s / 10s / 30s)。
### 🚨 自动响应 (Response Engine)
- 持续监控每个源 IP 的告警阈值
- **默认开启 Dry-run 模式** (模拟运行而不执行真实封禁,并保留完整的
日志记录) — 这是一种防止在测试期间自我封锁的防护措施
- 受保护 IP 的白名单 (例如 IDS 本身)
- 通过 `iptables` 进行真实封禁,可通过配置开启
- 完整的决策历史记录保存在 `response_log` 中
## 🛠️ 技术栈
| 组件 | 技术 |
|---|---|
| IDS 引擎 | Suricata 7.0.3 |
| 处理 / 解析 | Python 3.12 |
| Dashboard 后端 | Flask |
| 数据库 | SQLite |
| 可视化 | Chart.js, 原生 HTML/CSS/JS |
| 自动响应 | Python + iptables |
| 实验环境 | VMware Workstation (Kali Linux, Ubuntu Server ×2) |
## 📁 仓库结构
```
nids-dashboard/
├── app.py # Flask backend (API routes + pages)
├── parser.py # eve.json → SQLite parser
├── response_engine.py # Automated response engine
├── schema.sql # Database schema creation script
├── requirements.txt # Python dependencies
├── suricata/
│ └── local.rules # Custom Suricata rules
├── static/
│ ├── css/
│ │ └── style.css # Shared styles (dark theme)
│ └── js/
│ └── common.js # Clock, auto-refresh, system status
├── templates/
│ ├── base.html # Shared layout (header, nav, footer)
│ ├── index.html # Dashboard page
│ ├── alerts.html # Alerts page
│ ├── responses.html # Responses page
│ ├── blocked_ips.html # Blocked IPs page
│ ├── statistics.html # Statistics page
│ ├── system.html # System page
│ └── about.html # About page
├── docs/
│ └── screenshots/ # Screenshots used in this README
└── README.md
```
## ⚙️ 安装
### 前置条件
- 已安装并配置好 Suricata (参见 [自定义 Suricata 规则](#-custom-suricata-rules))
- Python 3.10+
- 拥有对 `/var/log/suricata/eve.json` 的读取权限
### 步骤
```
# 1. 克隆仓库
git clone https://github.com/CyberTechSali/CodeAlpha--Network-Intrusion-Detection-System.git
cd nids-dashboard
# 2. 创建虚拟环境
python3 -m venv venv
source venv/bin/activate
# 3. 安装依赖
pip install -r requirements.txt
# 4. 初始化数据库
sqlite3 alerts.db < schema.sql
# 5. 将自定义规则复制到 Suricata
sudo cp suricata/local.rules /var/lib/suricata/rules/local.rules
sudo suricata -T -c /etc/suricata/suricata.yaml -v # validate syntax
sudo systemctl restart suricata
```
### `requirements.txt`
```
flask
```
## ▶️ 用法
该系统需要**同时运行 4 个进程** (使用 4 个终端,或者
在生产环境中使用 `systemd`/`tmux` 服务管理器):
```
# Terminal 1 — Suricata (实时网络捕获)
sudo suricata -c /etc/suricata/suricata.yaml -i
### 实时告警 实时搜索,可组合的过滤器 (严重程度、类型、类别、日期),每条告警的完整 JSON 详情。
**高级统计**
Top 端口、协议、类别、每日趋势。
|
**已封禁 IP**
自动封禁历史和手动解封记录。
|
⭐ 如果这个项目对您有用,请考虑在仓库中点个 Star。
标签:Flask, Metaprompt, Suricata, 安全运营, 扫描框架, 现代安全运营, 自动化响应, 逆向工具