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
# 🛡️ NIDS 仪表盘 ### 由 Suricata 驱动的网络入侵检测系统 实时网络入侵检测 pipeline —— 捕获、分析、 可视化以及自动化威胁响应。 [![Python](https://img.shields.io/badge/Python-3.12-3776AB?logo=python&logoColor=white)](https://www.python.org/) [![Flask](https://img.shields.io/badge/Flask-Dashboard-000000?logo=flask&logoColor=white)](https://flask.palletsprojects.com/) [![Suricata](https://img.shields.io/badge/Suricata-7.0.3-CC0000)](https://suricata.io/) [![SQLite](https://img.shields.io/badge/SQLite-Storage-003B57?logo=sqlite&logoColor=white)](https://www.sqlite.org/) [![License](https://img.shields.io/badge/License-MIT-green)](#-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,活动图表。 Main Dashboard

### 实时告警 实时搜索,可组合的过滤器 (严重程度、类型、类别、日期),每条告警的完整 JSON 详情。 Alerts page

**高级统计** Top 端口、协议、类别、每日趋势。 Statistics page **已封禁 IP** 自动封禁历史和手动解封记录。 Blocked IPs page
## 🏗️ 架构 ``` ┌─────────────────────┐ │ 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 -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)。
⭐ 如果这个项目对您有用,请考虑在仓库中点个 Star。
标签:Flask, Metaprompt, Suricata, 安全运营, 扫描框架, 现代安全运营, 自动化响应, 逆向工具