132 lines
9.7 KiB
Markdown
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 |
|