The-Bugger/Net-Guard

GitHub: The-Bugger/Net-Guard

NetGuard 是一个完全离线运行的实时可解释入侵检测与防御系统,通过捕获网络流量自动检测多类攻击、生成纯文本告警并通过 iptables 自动封禁。

Stars: 3 | Forks: 0

# NetGuard — 可解释的入侵检测与防御系统 [![Python 3.11+](https://img.shields.io/badge/python-3.11+-blue.svg)](https://python.org) [![Tests](https://img.shields.io/badge/tests-678%20passing-brightgreen.svg)](#testing) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE) [![Flask](https://img.shields.io/badge/flask-3.0.3-lightgrey.svg)](https://flask.palletsprojects.com) [![SQLAlchemy](https://img.shields.io/badge/SQLAlchemy-2.0-orange.svg)](https://sqlalchemy.org) [![GitHub](https://img.shields.io/badge/github-The--Bugger-181717.svg?logo=github)](https://github.com/The-Bugger) NetGuard 是一个实时的、可解释的入侵检测与防御系统 (IDPS),它 捕获实时的网络流量,检测八大类攻击,为每个警报生成通俗易懂的纯文本 说明,并通过 iptables 自动封禁攻击者 —— 所有这些都可以通过 实时的 SOC 风格仪表盘进行查看。 由 **[The Bugger](https://github.com/The-Bugger)** 为 2026 年 MVIC Build Nepal 黑客松构建。 完全离线运行在单台 Linux 机器上。无需云服务、专有硬件或代理。 ## 目录 1. [功能](#features) 2. [快速开始](#quick-start) 3. [架构](#architecture) 4. [目录结构](#directory-structure) 5. [前置条件](#prerequisites) 6. [安装说明](#installation) 7. [配置](#configuration) 8. [环境变量](#environment-variables) 9. [运行 NetGuard](#running-netguard) 10. [API 参考](#api-reference) 11. [检测规则](#detection-rules) 12. [服务层](#service-layer) 13. [数据库 Schema](#database-schema) 14. [测试](#testing) 15. [演示攻击脚本](#demo-attack-scripts) 16. [技术栈](#technology-stack) 17. [评委模式](#judges-mode) ## 功能 | 功能 | 详情 | |---------|--------| | 实时数据包捕获 | 基于 Scapy;支持任何操作系统接口上的 TCP、UDP、ICMP、ARP | | 8 项检测规则 | SYN Flood、端口扫描、SQL 注入、暴力破解、ARP 欺骗、ICMP Flood、慢速 HTTP、DNS 隧道 | | 可解释警报 | 通俗易懂的纯文本说明、严重性、0–100 的置信度、可操作的建议 | | 自动封禁 | 检测到后几秒内应用 iptables DROP 规则 | | 自动过期 | 后台线程每 5 秒移除过期的封禁 | | 白名单 | 受信任的 IP 免受封禁;内存集合查找复杂度为 O(1) | | API key 认证 | 在所有进行修改操作的 endpoint 上强制执行 `X-API-Key` header 校验;采用常数时间比较 | | 速率限制 | 每个客户端 IP 每 60 秒 120 次请求,带有 `Retry-After` header | | 安全 header | CSP、HSTS、X-Frame-Options、X-Content-Type-Options、Referrer-Policy | | REST API | 28+ 个 endpoint —— 监控、检测、封禁、白名单、统计、日志、分析、导出、AI 助手 | | 实时仪表盘 | WebSocket KPI、流量图表、严重性图表、威胁时间轴、分析、AI 聊天 | | SQLite 持久化 | 通过 SQLAlchemy ORM 记录事件、封禁、白名单、设置和日志 | | 678 项测试 | 单元测试 + 基于属性的测试 + 集成测试 | | 轮转日志文件 | system.log、detections.log、errors.log —— 每个最大 10 MB,5 个备份 | | 导出 | 支持 JSON、CSV、Markdown 和 PDF(可选)的检测导出 | | 分析 | 包含攻击细分的每小时 / 每天 / 每周检测图表 | | AI 助手 | 针对每个事件的 Markdown 报告和聊天面板(stub / Gemini / OpenAI) | | 演示模式 | 使用 RFC 5737 TEST-NET IP 持续生成合成攻击 | ## 快速开始 ``` pip install -r requirements.txt python -c "from database.init_db import initialize_db; initialize_db()" sudo python backend/main.py ``` 打开 **http://localhost:5000**。添加 `?judges=1` 可进入演示模式。 ## 架构 ### 系统概述 ``` graph TB NIC["Network Interface (eth0 / wlan0)"] CE["CaptureEngine\nsniffer.py\nPacket_Capture_Thread"] PD["PacketDecoder\npacket_decoder.py"] PQ["packet_queue\nqueue.Queue maxsize=10000"] DE["DetectionEngine\ndetection_service.py\nDetection_Thread"] R1["SynFloodRule"] R2["PortScanRule"] R3["SqlInjectionRule"] R4["BruteForceRule"] R5["ArpSpoofRule"] R6["IcmpFloodRule"] R7["SlowHttpRule"] R8["DnsTunnelRule"] EE["ExplainabilityEngine\nexplain_service.py"] PE["PreventionEngine\nprevention_service.py"] LE["LoggingEngine\nlog_service.py\nLogging_Thread"] ET["ExpiryThread\nexpiry_service.py"] DB[(SQLite\nnetguard.db)] API["Flask REST API\n+ Flask-SocketIO"] DASH["Frontend Dashboard\nVanilla JS + Chart.js"] NIC -->|raw packets| CE CE -->|decode| PD PD -->|Packet objects| PQ PQ -->|consume| DE DE --> R1 & R2 & R3 & R4 & R5 & R6 & R7 & R8 DE -->|ThreatEvent| EE EE -->|Explanation| PE EE -->|Explanation| LE PE -->|iptables -I| NIC LE -->|INSERT| DB ET -->|poll 5s| DB ET -->|iptables -D| NIC DE -->|SocketIO emit| API PE -->|SocketIO emit| API API <-->|HTTP + WS| DASH DB <-->|SQLAlchemy| API ``` ### 线程模型 | 线程 | 模块 | 角色 | |--------|--------|------| | `Packet_Capture_Thread` | `detection/capture/sniffer.py` | Scapy `sniff()` → 解码数据包 → 放入 `packet_queue` | | `Detection_Thread` | `backend/services/detection_service.py` | 消费 `packet_queue` → 运行全部 8 项规则 → 通过回调触发 `ThreatEvent` | | `Logging_Thread` | `backend/services/log_service.py` | 消费 `event_queue` → 持久化到 SQLite 和日志文件 | | `Expiry_Thread` | `backend/services/expiry_service.py` | 每 5 秒轮询数据库 → 移除过期的 iptables 规则 | | `API_Thread` | Flask + eventlet | 提供 HTTP REST + WebSocket 服务 | ## 目录结构 ``` NetGuard/ ├── backend/ │ ├── api/ │ │ ├── __init__.py # Flask app factory + SocketIO init │ │ └── dependencies.py # Service registry (populated by main.py) │ ├── middleware/ │ │ ├── auth.py # X-API-Key authentication hook │ │ ├── rate_limiter.py # Sliding-window rate limiter │ │ └── security_headers.py # CSP / HSTS / Permissions-Policy headers │ ├── repositories/ │ │ ├── event_repository.py │ │ ├── block_repository.py │ │ ├── whitelist_repository.py │ │ ├── log_repository.py │ │ └── settings_repository.py │ ├── routes/ │ │ ├── health_routes.py # GET /health, GET /status │ │ ├── monitor_routes.py # POST /monitor/start|stop, GET /interfaces │ │ ├── detection_routes.py # GET /detections, GET /detections/{id}, POST /detect │ │ ├── block_routes.py # POST /block|/unblock, GET /blocked │ │ ├── whitelist_routes.py # GET|POST /whitelist, DELETE /whitelist/{ip} │ │ ├── dashboard_routes.py # GET /dashboard, GET /dashboard/live │ │ ├── stats_routes.py # GET /statistics, GET /statistics/rules │ │ ├── evidence_routes.py # GET /evidence/{id} │ │ ├── logs_routes.py # GET /logs │ │ ├── settings_routes.py # GET|PUT /settings │ │ ├── analytics_routes.py # GET /analytics │ │ ├── export_routes.py # GET /export │ │ ├── timeline_routes.py # GET /timeline/{event_id} │ │ ├── ai_assistant_routes.py # POST /ai-assistant │ │ ├── advisor_routes.py # GET /advisor │ │ ├── lan_devices_routes.py # GET /lan-devices, POST /lan-devices/refresh │ │ └── reset_routes.py # POST /reset (dev only) │ ├── services/ │ │ ├── config_service.py # ConfigurationManager — loads/validates config.yaml │ │ ├── detection_service.py # DetectionEngine — packet→rule→event pipeline │ │ ├── explain_service.py # ExplainabilityEngine — ThreatEvent→Explanation │ │ ├── ai_explain_service.py # AIExplainService — Gemini/OpenAI/stub enrichment │ │ ├── prevention_service.py # PreventionEngine — iptables block/unblock │ │ ├── expiry_service.py # ExpiryThread — auto-removes expired blocks │ │ ├── whitelist_service.py # WhitelistManager — O(1) in-memory lookup │ │ ├── monitor_service.py # MonitorService — start/stop/interface management │ │ ├── log_service.py # LoggingEngine — async DB + file logging │ │ ├── stats_service.py # StatsService — aggregation for dashboard │ │ ├── lan_scan_service.py # LanScanService — ARP-based LAN device discovery │ │ └── security_advisor.py # SecurityAdvisor — health score and advice │ ├── utils/ │ │ ├── validators.py # IP + numeric range validation │ │ └── response.py # Standard JSON envelope helpers │ └── main.py # Application entry point + startup sequence ├── database/ │ ├── schema.py # SQLAlchemy ORM models (6 tables) │ └── init_db.py # initialize_db() — creates tables + seeds defaults ├── detection/ │ ├── capture/ │ │ └── sniffer.py # CaptureEngine — Scapy sniff() wrapper │ ├── parsers/ │ │ └── packet_decoder.py # PacketDecoder — raw Scapy → normalized Packet │ └── rules/ │ ├── base_rule.py # BaseRule ABC + ThreatEvent + Explanation dataclasses │ ├── syn_flood.py # SynFloodRule (SYN_FLOOD_001) │ ├── port_scan.py # PortScanRule (PORT_SCAN_001) │ ├── sql_injection.py # SqlInjectionRule (SQL_INJECT_001) │ ├── brute_force.py # BruteForceRule (BRUTE_FORCE_001) │ ├── arp_spoof.py # ArpSpoofRule (ARP_SPOOF_001) │ ├── icmp_flood.py # IcmpFloodRule (ICMP_FLOOD_001) │ ├── slow_http.py # SlowHttpRule (SLOW_HTTP_001) │ └── dns_tunnel.py # DnsTunnelRule (DNS_TUNNEL_001) ├── frontend/ │ ├── css/dark-theme.css │ ├── js/ # socket.js, api.js, dashboard.js, charts.js, shell.js, … │ ├── index.html # Main dashboard (KPIs, charts, threat timeline) │ ├── blocked.html # Active blocks management │ ├── whitelist.html # Whitelist management │ ├── threats.html # Full threat list with filters │ ├── logs.html # Log viewer │ ├── rules.html # Detection rule configuration │ ├── settings.html # System settings form │ ├── analytics.html # Charts and attack distribution │ ├── timeline.html # Per-event incident timeline │ ├── about.html / architecture.html │ └── 404.html / 500.html ├── config/ │ └── config.yaml # Runtime configuration (thresholds, interface, etc.) ├── demo/ │ ├── attack_syn.sh # hping3 SYN flood demo │ ├── attack_scan.sh # nmap port scan demo │ ├── attack_sql.sh # curl SQL injection demo │ ├── attack_bruteforce.sh # hydra brute force demo │ └── attack_arp.sh # arpspoof ARP spoofing demo ├── docs/ │ ├── API.md # Full REST API reference │ ├── ARCHITECTURE.md # Detailed architecture with Mermaid diagrams │ ├── DATABASE.md # Database schema reference │ ├── DEPLOYMENT.md # Production deployment guide │ ├── TROUBLESHOOTING.md # Common problems and solutions │ └── ROADMAP.md # Feature roadmap ├── logs/ # Rotating log files (auto-created) ├── scripts/ │ └── setup.sh # One-shot setup script ├── tests/ # 678+ unit + property-based + integration tests ├── .env # Environment variables (not committed) ├── .env.example # Environment variable documentation ├── requirements.txt # Pinned Python dependencies ├── CHANGELOG.md # Version history ├── CONTRIBUTING.md # Contributor guide ├── SECURITY.md # Security policy and threat model ├── INSTALL.md # Installation guide └── DEPLOYMENT.md # Proxy trust model and deployment notes ``` ## 前置条件 - **Python 3.11+**(已在 3.11、3.12、3.14 上测试) - **Linux**(基于 iptables 的封禁所必需;检测和 API 在 Windows/macOS 上以 mock 模式工作) - **Root / sudo**(Scapy 原始套接字捕获和 iptables 所必需) - **iptables**(大多数 Linux 发行版上已预装) ### 可选工具(仅限演示脚本) | 工具 | 脚本 | 安装 | |------|--------|---------| | `hping3` | `demo/attack_syn.sh` | `sudo apt install hping3` | | `nmap` | `demo/attack_scan.sh` | `sudo apt install nmap` | | `hydra` | `demo/attack_bruteforce.sh` | `sudo apt install hydra` | | `arpspoof` | `demo/attack_arp.sh` | `sudo apt install dsniff` | | `curl` | `demo/attack_sql.sh` | 通常已预装 | ## 安装说明 ``` # 克隆 repository git clone https://github.com/The-Bugger/Net-Guard.git cd Net-Guard # 创建 virtual environment python -m venv .venv source .venv/bin/activate # Linux/macOS # .venv\Scripts\activate # Windows # 自动化设置(Linux,需要 sudo) sudo bash scripts/setup.sh # ── 或者手动安装 ──────────────────────────────────────────────────── pip install -r requirements.txt python -c "from database.init_db import initialize_db; initialize_db()" # 复制并编辑环境变量 cp .env.example .env # 编辑 .env — 至少设置 SECRET_KEY,可选设置 NETGUARD_API_KEY ``` 有关针对特定平台的完整安装说明,请参阅 [INSTALL.md](INSTALL.md)。 ## 配置 所有运行时设置都位于 **`config/config.yaml`** 中。编辑此文件即可调整 阈值,而无需改动源代码。通过 `PUT /api/v1/settings` 提交的更改将立即生效,无需重启。 ``` # config/config.yaml network_interface: "" # Interface to capture on (e.g. eth0, wlan0) syn_flood_threshold: 150 # SYN packets per source IP to trigger detection syn_flood_window: 3 # Sliding window in seconds port_scan_threshold: 20 # Unique ports per source IP to trigger detection port_scan_window: 10 brute_force_threshold: 10 # Auth failures per source IP to trigger detection brute_force_window: 60 icmp_flood_threshold: 100 # ICMP echo requests per source IP to trigger detection icmp_flood_window: 3 slow_http_threshold: 10 # Concurrent slow connections to trigger detection slow_http_window: 10 block_duration: 120 # Auto-block duration in seconds dashboard_refresh_interval: 1 # Dashboard polling interval in seconds rules_enabled: syn_flood: true port_scan: true sql_injection: true brute_force: true arp_spoof: true icmp_flood: true slow_http: true dns_tunnel: true debug: false ``` ## 环境变量 有关每个变量的完整文档,请参阅 [`.env.example`](.env.example)。 | 变量 | 默认值 | 描述 | |----------|---------|-------------| | `SECRET_KEY` | `change-me-before-production` | Flask session 密钥 —— **在生产环境中必须设置**,否则应用拒绝启动 | | `DATABASE_URL` | `sqlite:///database/netguard.db` | SQLAlchemy 数据库 URL | | `LOG_LEVEL` | `INFO` | Python 日志级别 (`DEBUG`、`INFO`、`WARNING`、`ERROR`) | | `FLASK_HOST` | `0.0.0.0` | 绑定地址;在反向代理后使用 `127.0.0.1` | | `FLASK_PORT` | `5000` | 监听端口 | | `FLASK_ENV` | `development` | Flask 环境;生产环境请设置为 `production` | | `ALLOWED_ORIGINS` | `*` | 逗号分隔的 CORS 源;在生产环境中应进行限制 | | `NETGUARD_API_KEY` | _(未设置)_ | 修改操作的 endpoint 的 `X-API-Key` header 中所需的共享 API key;未设置时,应用以无认证的开发模式运行 | | `TRUST_PROXY_HEADERS` | `false` | 为 `true` 时,速率限制器从 `X-Forwarded-For` 读取客户端 IP;仅在受信任的反向代理后启用 | | `REQUIRE_AUTH_FOR_READS` | `false` | 为 `true` 时,也会在 `GET` endpoint 上强制校验 `X-API-Key`;SocketIO 路径始终豁免 | | `AI_PROVIDER` | `stub` | AI 说明提供者:`stub`、`gemini` 或 `openai` | | `GEMINI_API_KEY` | _(未设置)_ | 当 `AI_PROVIDER=gemini` 时必需 | | `OPENAI_API_KEY` | _(未设置)_ | 当 `AI_PROVIDER=openai` 时必需 | | `SOCKETIO_ASYNC_MODE` | _(auto)_ | 在 Python 3.14+ 上强制使用 `threading`(自动设置) | ## 运行 NetGuard ``` # packet capture + iptables 需要 root 权限 sudo python backend/main.py # Dashboard: http://localhost:5000 # API base: http://localhost:5000/api/v1 ``` ### 启动序列 (`backend/main.py`) 1. Eventlet monkey-patch(必须是第一个导入项) 2. 通过 `ConfigurationManager` 加载 `config/config.yaml` 3. 通过 `setup_logging()` 配置轮转日志 handler 4. 初始化 SQLite 数据库 (`initialize_db()`) 5. 构建 repository(EventRepository、BlockRepository 等) 6. 构建服务(LoggingEngine、WhitelistManager、PreventionEngine 等) 7. 验证 iptables 权限 (`PreventionEngine.verify_privileges()`) 8. 在依赖容器中注册所有服务 9. 创建 Flask 应用 + 注册所有路由 blueprint 10. 启动 `LoggingEngine` 线程 11. 启动 `ExpiryThread` 12. 启动 `DetectionEngine` 线程 13. 启动实时统计 SocketIO 后台任务 14. `socketio.run()` —— 在配置的 host:port 上提供 HTTP + WebSocket 服务 ## API 参考 所有 endpoint 均位于 `http://localhost:5000/api/v1` 下。 **响应包装** (每个响应): ``` { "success": true, "message": "OK", "data": { ... } } { "success": false, "error": "Description", "error_code": "VALIDATION_ERROR" } ``` **认证:** 当设置了 `NETGUARD_API_KEY` 时,所有的 `POST`、`PUT`、`DELETE` 和 `PATCH` 请求必须包含 `X-API-Key: ` header。默认情况下 `GET` 请求是开放的 (设置 `REQUIRE_AUTH_FOR_READS=true` 可对其进行保护)。SocketIO 路径始终豁免。 ### 核心 Endpoint | 方法 | 路径 | 描述 | |--------|------|-------------| | `GET` | `/health` | 存活检查 | | `GET` | `/status` | 监控状态、线程状态、数据包/封禁计数 | | `POST` | `/monitor/start` | 开始捕获:`{"interface":"eth0"}` | | `POST` | `/monitor/stop` | 停止捕获 | | `GET` | `/monitor/interfaces` | 列出可用网络接口 | | `GET` | `/dashboard` | 完整快照:KPI + 近期事件 + 活动封禁 | | `GET` | `/dashboard/live` | 轻量级:`packets_per_second`、`active_threats`、`alerts_today` | | `GET` | `/detections` | 分页列表;按 `severity`、`attack_type`、`source_ip`、`date` 过滤 | | `GET` | `/detections/` | 通过 UUID 查询单个检测 | | `POST` | `/detect` | 手动提交检测事件 | | `GET` | `/evidence/` | 获取某次检测的完整 `Explanation` 对象 | | `POST` | `/block` | 封禁 IP:`{"ip":"10.0.0.1","reason":"manual","duration":120}` | | `POST` | `/unblock` | 解封:`{"ip":"10.0.0.1"}` | | `GET` | `/blocked` | 包含 `expires_in` 倒计时的所有活动封禁 | | `GET` | `/whitelist` | 列出所有受信任的 IP | | `POST` | `/whitelist` | 添加受信任的 IP:`{"ip":"192.168.1.1","description":"gateway"}` | | `DELETE` | `/whitelist/` | 从白名单中移除 IP | | `GET` | `/statistics` | 按攻击类型和严重性聚合统计 | | `GET` | `/statistics/rules` | 各规则检测统计(所有 8 项规则) | | `GET` | `/logs` | 分页系统日志;按 `severity`、`date`、`module` 过滤 | | `GET` | `/settings` | 返回当前配置 | | `PUT` | `/settings` | 更新阈值;超出范围 → 422 VALIDATION_ERROR | | `GET` | `/timeline/` | 逐步显示的事件时间轴 | | `GET` | `/analytics` | 小时//周图表数据,严重性和攻击分布 | | `GET` | `/export` | 导出事件:`?format=json\|csv\|markdown\|pdf` | | `GET` | `/lan-devices` | 最近一次 ARP 扫描发现的局域网设备 | | `POST` | `/lan-devices/refresh` | 触发新的 ARP 扫描 | | `GET` | `/advisor` | 安全建议和健康评分 | | `POST` | `/ai-assistant` | 与 AI 安全助手聊天:`{"question":"..."}` | ### 演示 Endpoint | 方法 | 路径 | 描述 | |--------|------|-------------| | `POST` | `/demo/start` | 开始持续生成合成攻击 | | `POST` | `/demo/stop` | 停止演示发射循环 | | `POST` | `/demo/trigger` | 触发一次合成事件:`{"attack_type":"SQL Injection"}` | | `GET` | `/demo/status` | 当前演示 session 状态 | 包含请求/响应 schema 的完整 API 文档:[`docs/API.md`](docs/API.md) ### Socket.IO 事件 | 事件 | Payload | 描述 | |-------|---------|-------------| | `new_threat` | `{event_id, attack_type, source_ip, severity, confidence, timestamp, blocked}` | 检测到新威胁 | | `ip_blocked` | `{ip, reason, expires_at}` | IP 被封禁 | | `ip_unblocked` | `{ip}` | IP 被解封(手动或过期) | | `live_stats` | `{packets_per_second, active_threats, alerts_today}` | 监控期间每秒发射 | | `monitoring_status` | `{active: bool, interface: string}` | 监控已开始或停止 | ## 检测规则 | 规则 | 规则 ID | 攻击类型 | 阶段 | |------|---------|-------------|-------| | `SynFloodRule` | `SYN_FLOOD_001` | TCP SYN Flood | 基准 | | `PortScanRule` | `PORT_SCAN_001` | 端口侦察 | 基准 | | `SqlInjectionRule` | `SQL_INJECT_001` | SQL 注入 (HTTP) | 基准 | | `BruteForceRule` | `BRUTE_FORCE_001` | 暴力破解登录 | 基准 | | `ArpSpoofRule` | `ARP_SPOOF_001` | ARP 欺骗 / 中间人攻击 | 基准 | | `IcmpFloodRule` | `ICMP_FLOOD_001` | ICMP Flood / Smurf 攻击 | v1.1 | | `SlowHttpRule` | `SLOW_HTTP_001` | 慢速 HTTP / Slowloris | v1.1 | | `DnsTunnelRule` | `DNS_TUNNEL_001` | DNS 隧道(启发式) | v1.1 | 所有规则均实现了 `BaseRule` 接口:`initialize / process_packet / evaluate / explain / cleanup`。 每条规则通过针对每个 `(source_ip, rule_name)` 的 10 秒冷却期触发,以防止警报风暴。 发生未捕获异常时,故障规则将在当前 session 中被禁用(而非全局禁用),并可通过 `reload_rules()` 恢复。 有关完整的 pipeline 详情,请参阅 [`docs/ARCHITECTURE.md`](docs/ARCHITECTURE.md)。 ## 服务层 | 服务 | 模块 | 职责 | |---------|--------|----------------| | `DetectionEngine` | `detection_service.py` | 多规则 pipeline;冷却控制;单规则异常隔离 | | `ExplainabilityEngine` | `explain_service.py` | `ThreatEvent → Explanation`;攻击类型模板;<50 毫秒 | | `AIExplainService` | `ai_explain_service.py` | 结合 MITRE ATT&CK 上下文的 Gemini/OpenAI/stub 丰富化 | | `PreventionEngine` | `prevention_service.py` | iptables 封禁/解封;私有 IP 防护;权限检查 | | `ExpiryThread` | `expiry_service.py` | 每 5 秒自动移除过期的封禁 | | `WhitelistManager` | `whitelist_service.py` | 由 SQLite 支持的 O(1) 内存集合;线程安全的 RLock | | `LoggingEngine` | `log_service.py` | 异步日志线程;三个轮转文件;敏感 key 脱敏 | | `ConfigurationManager` | `config_service.py` | 带有内置默认值的 YAML 配置;范围验证;线程安全 | | `MonitorService` | `monitor_service.py` | 通过 psutil 进行接口验证;启动/停止协调 | | `StatsService` | `stats_service.py` | 滚动 PPS 计数器;仪表盘统计聚合;健康评分 | | `LanScanService` | `lan_scan_service.py` | 带有缓存的基于 ARP 的局域网设备发现 | | `SecurityAdvisor` | `security_advisor.py` | 基于健康评分和攻击类型的上下文建议 | ## 数据库 Schema `database/schema.py` 中的六个 SQLAlchemy ORM 表: | 表 | 用途 | |-------|---------| | `events` | 包含证据、说明和建议的每个被检测到的威胁事件 | | `blocked_ips` | 具有过期时间戳的活动及历史防火墙封禁 | | `whitelist` | 免受自动封禁的受信任 IP | | `detection_rules` | 带有阈值和启用状态的可配置规则 | | `settings` | 键值对配置存储(映射 `config.yaml`) | | `system_logs` | 用于仪表盘日志查看器的操作日志条目 | 有关完整的列级文档,请参阅 [`docs/DATABASE.md`](docs/DATABASE.md)。 ## 测试 ``` # 运行全部 678 个带有 coverage 的测试 pytest --cov=backend --cov=detection --cov=database --cov-report=term-missing # 仅 Unit tests(快速,无网络) pytest tests/ -k "not integration" # 仅 Property-based tests pytest tests/ -k "hypothesis" ``` 测试套件包括单元、基于属性的 以及完整的 API 集成测试。 所有路由 blueprint 均已通过 mock 服务进行了覆盖测试。 ## 演示攻击脚本 在 NetGuard 运行期间,从第二个终端运行: ``` sudo bash demo/attack_syn.sh # SYN flood (requires hping3) bash demo/attack_scan.sh # Port scan (requires nmap) bash demo/attack_sql.sh # SQL inject (requires curl) bash demo/attack_bruteforce.sh # Brute force (requires hydra) sudo bash demo/attack_arp.sh # ARP spoof (requires dsniff) ``` ## 技术栈 | 组件 | 技术 | 版本 | |-----------|------------|---------| | REST API | Flask | 3.0.3 | | WebSocket | Flask-SocketIO + eventlet | 5.3.6 + 0.36.1 | | 数据包捕获 | Scapy | 2.5.0 | | 数据库 ORM | SQLAlchemy | 2.0.51 | | 数据库 | SQLite | (标准库) | | 配置 | PyYAML | 6.0.2 | | 环境 | python-dotenv | 1.0.1 | | 系统信息 | psutil | 6.1.0 | | 测试 | pytest + Hypothesis | 8.3.3 + 6.115.6 | | 前端 | 原生 JS ES6 + Chart.js + Socket.IO 客户端 | — | ## 评委模式 将 **`?judges=1`** 添加到任何 URL 即可激活演示模式: - 仪表盘顶部会出现一个紫色/青色的横幅。 - 演示模式自动启动,生成实时的合成攻击流量。 - **"Next Feature →"** 按钮可循环切换演示脚本:演示模式 → AI 说明 → 分析 → 导出 → 时间轴。 ## 许可证 MIT 许可证 —— 详见 [LICENSE](LICENSE) © 2026 [The Bugger](https://github.com/The-Bugger) ## 贡献 有关开发环境设置、编码规范和 PR 流程,请参阅 [CONTRIBUTING.md](CONTRIBUTING.md)。 ## 安全 有关威胁模型和漏洞报告政策,请参阅 [SECURITY.md](SECURITY.md)。
标签:CISA项目, Flask, iptables, Scapy, 入侵检测与防御系统, 安全运营中心, 插件系统, 网络映射, 网络流量分析, 网络测绘, 逆向工具, 配置错误