9.7 KiB
9.7 KiB
Архитектура системы 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 |