Files
dip-ids/docs/architecture.md
T
2026-04-12 22:26:26 +04:00

132 lines
9.7 KiB
Markdown

# Архитектура системы DIP-IDS
## 1. Общая схема
```
┌─────────────────────────────────────────────────────────────────────┐
│ Пользователь │
│ браузер → localhost:3000 │
└───────────────────────────┬─────────────────────────────────────────┘
│ HTTP
┌───────────────────────────▼─────────────────────────────────────────┐
│ Nuxt 3 Frontend │
│ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────────────┐ │
│ │Dashboard │ │ Alerts │ │ Capture │ │ Stats │ │
│ └──────────┘ └──────────┘ └──────────┘ └──────────────────┘ │
│ Nuxt UI · vue-chartjs · Chart.js │
└───────────────────────────┬─────────────────────────────────────────┘
│ REST API (proxy /api/*)
┌───────────────────────────▼─────────────────────────────────────────┐
│ Go Backend (:8080) │
│ │
│ ┌──────────────────────────────────────────────────────────────┐ │
│ │ Gin HTTP Router │ │
│ │ /api/alerts /api/stats /api/capture /api/reports │ │
│ └──────────────────────────┬───────────────────────────────────┘ │
│ │ │
│ ┌──────────────────────────▼───────────────────────────────────┐ │
│ │ Analyzer Engine │ │
│ │ │ │
│ │ ┌────────────┐ ┌────────────┐ ┌────────────┐ │ │
│ │ │PortScan │ │BruteForce │ │ DoS │ │ │
│ │ │Detector │ │Detector │ │ Detector │ │ │
│ │ └────────────┘ └────────────┘ └────────────┘ │ │
│ │ ┌────────────┐ ┌────────────┐ │ │
│ │ │ARPSpoof │ │DNS Anomaly │ │ │
│ │ │Detector │ │Detector │ │ │
│ │ └────────────┘ └────────────┘ │ │
│ └──────────────────────────────────────────────────────────────┘ │
│ │
│ ┌──────────────┐ ┌─────────────┐ ┌─────────────────┐ │
│ │ Capture │ │ Storage │ │ PDF Report │ │
│ │ (gopacket) │ │ (SQLite) │ │ (maroto v2) │ │
│ │ live / pcap │ │ GORM │ │ │ │
│ └──────────────┘ └─────────────┘ └─────────────────┘ │
└─────────────────────────────────────────────────────────────────────┘
┌─────────────┴──────────────┐
│ │
┌────────▼────────┐ ┌─────────▼────────┐
│ Сетевой │ │ PCAP файлы │
│ интерфейс │ │ (.pcap/.pcapng)│
│ (eth0, wlan0) │ │ │
└─────────────────┘ └──────────────────┘
```
## 2. Поток данных
```
Сетевой интерфейс / PCAP файл
pcap.Handle (gopacket)
│ chan gopacket.Packet (буфер 1024)
Analyzer Engine.Run()
│ fan-out: каждый пакет → все детекторы
├──▶ PortScanDetector.Analyze(pkt)
├──▶ BruteForceDetector.Analyze(pkt)
├──▶ DoSDetector.Analyze(pkt)
├──▶ ARPSpoofDetector.Analyze(pkt)
└──▶ DNSAnomalyDetector.Analyze(pkt)
│ []storage.Alert
storage.DB.CreateAlert()
SQLite (nids.db)
┌─────┴──────┐
▼ ▼
REST API PDF Report
(Gin) (maroto v2)
Nuxt Frontend
```
## 3. Компоненты и их ответственность
| Компонент | Пакет | Ответственность |
|---|---|---|
| `Capturer` | `internal/capture` | Открывает pcap handle (live или файл), читает пакеты в канал |
| `Engine` | `internal/analyzer` | Принимает пакеты из канала, фанаутит детекторам, сохраняет алерты |
| `Detector` (интерфейс) | `internal/analyzer` | Контракт: `Analyze(pkt) []Alert`, `Reset()` |
| `DB` | `internal/storage` | CRUD алертов, статистики, сессий через GORM + SQLite |
| `Server` | `internal/api` | Gin HTTP сервер, CORS, маршрутизация |
| `handlers/*` | `internal/api/handlers` | Обработчики REST эндпоинтов |
| `report.Generate` | `internal/report` | Генерация структурированного PDF через maroto v2 |
## 4. Модель конкурентности
```
main goroutine
├── srv.Run() ← HTTP сервер (Gin, внутренние goroutines)
└── при старте захвата:
├── capture goroutine ← читает пакеты → chan
└── engine goroutine ← engine.Run(ctx, pkts)
└── обрабатывает пакеты синхронно (детекторы потокобезопасны через sync.Mutex)
```
Остановка захвата — через отмену `context.Context` (cancel функция хранится в `CaptureState`).
## 5. Выбор технологий
| Технология | Обоснование |
|---|---|
| **Go** | Системный язык, оптимален для сетевых инструментов; компилируется в один бинарник |
| **gopacket** | Стандарт де-факто для захвата пакетов в Go; оборачивает libpcap |
| **Gin** | Минималистичный HTTP фреймворк с высокой производительностью |
| **GORM + SQLite** | Не требует отдельного сервера БД; достаточно для демо и небольших сетей |
| **maroto v2** | Grid-based PDF генератор; создаёт структурированные деловые отчёты |
| **Nuxt 3** | SSR/SPA фреймворк на Vue 3; удобная файловая маршрутизация |
| **Nuxt UI** | Официальная UI библиотека Nuxt; Tailwind CSS, тёмная тема из коробки |
| **Chart.js + vue-chartjs** | Зрелая библиотека графиков; хорошая интеграция с Vue 3 |
| **Bun** | Быстрый JavaScript runtime и пакетный менеджер; замена npm/yarn |