ShamashAi
Architecture

Mimari: 3 bileşen, 1 veritabanı, 4 katmanlı keşif.

ShamashAi mimarisi, IT yöneticisinin tek başına kurabileceği şekilde tasarlandı. Hiçbir bileşenin SaaS bağımlılığı yok. Air-gap kurulum desteklenir. Yeni vendor desteği için connector eklenir; çekirdek dokunulmaz.

┌─────────────────────────────────────────────────────────────────┐
│                    MÜŞTERİ ORTAMI                                │
│                                                                  │
│  Fortinet · Sophos · Cisco · Mikrotik · AD · vCenter · M365 ·    │
│  SQL · NAS · Web · Mail · SNMP cihazları                         │
│           │                                                      │
│           │ syslog/REST/SNMP/WinRM/Graph API                     │
│           ▼                                                      │
│  ┌──────────────────────────────────────────┐                    │
│  │  ShamashAi Agent (Windows Service)       │                    │
│  │  • 10 paralel connector                  │                    │
│  │  • LiteDB store-and-forward queue        │                    │
│  │  • 8 MB UDP buffer · 10K event channel   │                    │
│  └──────────────────────────────────────────┘                    │
└─────────────────────────────────────────────────────────────────┘
                       │
                       │ HTTPS · Bearer agent token
                       │ POST /ingest (kanonik JSON)
                       ▼
┌─────────────────────────────────────────────────────────────────┐
│                    SHAMASHAI MERKEZ                              │
│                                                                  │
│  Backend (Node.js Fastify · TS · ~150 endpoint)                  │
│   ├─ Risk engine (deterministik, multiplier'lar)                 │
│   ├─ Korelasyon motoru (5dk sliding window)                      │
│   ├─ Threat intel (Tor + FireHOL + Spamhaus)                     │
│   ├─ Behavioral baseline (24-bit hour bitmap)                    │
│   ├─ SOAR (Fortigate addrgrp manipülasyonu)                      │
│   ├─ Compliance (ISO 27001 + KVKK evidence)                      │
│   ├─ AI advisor (Claude · on-demand · credentials never sent)    │
│   └─ License (Ed25519 imzalı JWT, lokal validate)                │
│                                                                  │
│  Database: SQL Server (~25 tablo, 4 indeks events'te)            │
│   devices · events · sites · networks · device_edges ·           │
│   alert_rules · soar_actions · audit_log · baselines ·           │
│   users · sessions · agent_tokens · ...                          │
│                                                                  │
│  Web Pano (Next.js 16 · React · Tailwind · 25 sayfa)             │
│   Service Worker (push), PWA-ready                               │
└─────────────────────────────────────────────────────────────────┘

Backend — shamashai-api

  • Node.js 20 + Fastify + TypeScript + Zod (input validation)
  • ~5300 satır index.ts, ~150 REST endpoint
  • SQL Server (mssql driver) — ~25 tablo
  • Helmet + CORS hardened (production zorunluluk listesi)
  • Pino logger + pino-pretty
  • Port 3001 default, prod TLS reverse proxy

Web Pano — shamashai-web

  • Next.js 16 + React 18 + Tailwind CSS
  • 25 sayfa, 52 client component
  • Service Worker (Web Push), PWA hazır
  • Auto-refresh: events 30s, topology / agent-health 20s
  • Port 3000

Ajan — shamashai-agent

  • .NET 8 Windows Service
  • 10 paralel connector (DI registered in Program.cs)
  • LiteDB store-and-forward queue (queue.db, restart-safe)
  • Serilog rolling log (14 gün retention)
  • Bearer token auth (Backend:AgentToken)
  • Bellek: ~150 MB ortalama, disk: ~50 MB binary + queue

L1 — Survey (insan girişi)

Wizard 12 adımdan oluşur. Sites, kategoriler, anchor cihazlar, mail/web public surface.

L2 — Probe (vendor-agnostik fingerprint)

  • Port scan: 22, 80, 161, 443, 514, 5985, 8080, 8443
  • HTTP banner (Server header, page title, body snippet)
  • HTTPS banner (TLS-relaxed grab)
  • SSH banner
  • SNMP sysDescr (port 161 açıksa)
  • MAC OUI lookup (ARP varsa)

L3 — Recognition

  1. Cache — daha önce görülen fingerprint hash (sıfır network call)
  2. Pattern — recognition.ts'deki regex kuralları
  3. AI fallback — Claude API · vendor + device_type + adapter (sonsuza kadar cache)
  4. Manual — UI dialog'unda kullanıcıya sor

L4 — Adapter (vendor-spesifik plugin)

interface IDiscoveryAdapter {
  id: string;                 // 'fortinet-fortigate'
  vendors: string[];          // ['fortinet']
  device_types: string[];     // ['firewall', 'utm']
  category: string;           // 'edge'

  canHandle(device, recognition): boolean;
  discover(device): Promise<DiscoveryResult>;
}

interface DiscoveryResult {
  ok: boolean;
  duration_ms: number;
  errors: string[];

  own_external_ips?: string[];
  own_roles?: DeviceRole[];
  own_hostname?: string;
  own_interfaces?: Interface[];
  own_vlans?: Vlan[];

  discovered_devices?: DiscoveredDevice[];
  discovered_edges?: DiscoveredEdge[];
}
public interface IConnector
{
    string Name { get; }
    string Vendor { get; }
    string DeviceType { get; }

    Task<bool> TestConnectionAsync(CancellationToken ct);
    IAsyncEnumerable<CanonicalEvent> SubscribeAsync(CancellationToken ct);
}

public record CanonicalEvent(
    string EventType,
    string Severity,
    DateTimeOffset Timestamp,
    string Source,
    string Vendor,
    string DeviceType,
    string? SrcIp = null,
    string? DstIp = null,
    string? User = null,
    string? Action = null,
    string? Message = null,
    string? ExternalId = null
);

Yeni vendor desteği için ./Connectors-custom/MyVendor.cs klasörüne bir dosya düşer; çekirdeğe dokunulmaz. TestConnectionAsync ve SubscribeAsync implement edilir, DI'ya kaydedilir, ajan paralel akışa ekler.

Bugün hazır 10 connector

ConnectorTransport
SyslogConnectorUDP 514 + 5514
ActiveDirectoryConnectorWinRM 5985/86
Microsoft365ConnectorGraph API HTTPS
VSphereConnectorvSphere REST API
SqlServerConnectorTCP 1433 (TDS)
SnmpTrapConnectorUDP 162
SnmpPollConnectorUDP 161 outbound
DeviceHealthConnectorTCP probe + ICMP
WebsiteSurfaceConnectorHTTPS + DNS
MailSurfaceConnectorDNS MX/SPF/DKIM/DMARC

Backend kapalıysa veya internet yoksa olaylar kaybolmaz. Ajan, başarısız POST'ları LiteDB üzerinde diske yazar (data/queue.db). Bağlantı geri geldiğinde 50'lik batch'ler halinde drain edilir. Servis restart edilse bile kuyruk persistent kalır.

// AgentWorker.cs — paralel akış
foreach (var connector in connectors)
    Task.Run(() => RunConnectorAsync(c, ct));

Task.Run(() => DrainQueueAsync(ct));  // store-and-forward

// Backend kapalıysa
if (!await TrySendAsync(client, evt, ct)) {
    _queue.Enqueue(evt);    // LiteDB'ye yaz
}

// Drain başarılı olunca
_queue.Remove(qe.Id);
  • UDP receive buffer: 8 MB (syslog burst için)
  • Bounded channel: 10K event (memory cap; FullMode = DropOldest)
  • Batch size: 50
  • Drain backoff: backend kapalıysa 30s, açıkken 2s

Inventory + graph

  • devices (UNIQUE ip, AES-256-GCM credential)
  • sites · networks · device_edges
  • device_categories · recognition_cache
  • projects (retention_days, multi-project)

Olay + izleme

  • events (4 indeks)
  • reachability_logs (ayrı)
  • event_triage
  • alert_rules · alert_rule_hits
  • behavior_baselines

Yanıt + işlem

  • soar_actions (append-only)
  • maintenance_windows
  • change_calendar
  • remediation_tasks
  • audit_log (append-only, retention'sız)
  • push_subscriptions

Auth + lisans

  • users (scrypt + MFA secret)
  • sessions (jti revocable)
  • user_projects (RBAC per-project)
  • agent_tokens (SHA-256 hash)
  • system_config (KV: license_key)

Indexes (events tablosu)

  • IX_events_tenant_timestamp — list endpoint hot-path
  • IX_events_severity — severity ≥ medium queries
  • IX_events_device — per-device filtering
  • IX_events_event_type — alert rule evaluator
Bileşen100–500 cihaz
CPU4 vCPU
RAM8 GB
Disk (events 90 gün)~50 GB
SQL ServerStandard veya Express
OSWindows Server 2019+
Ajan host+1 .NET runtime, ~150 MB RAM
EPS hedef500–2000 (vendor karışımı)

Tek-host kurulum default. Ajan ayrı host'ta çalışabilir (DC veya yardımcı sunucu). 500+ cihaz için ek SQL Server tuning + retention ayarı önerilir; v2.0 yol haritasında multi-region HA planlı.

Boot sırasında validateRuntimeConfig() aşağıdaki kontrolleri yapar; uyumsuz prod konfigürasyonu kabul edilmez:

  • JWT_SECRET set ve ≥ 32 karakter
  • CREDENTIAL_KEY set (32-byte hex, AES-256-GCM)
  • SQL_PASSWORD set ve dev şifresi olmamalı
  • SHAMASHAI_CORS_ORIGINS listele, wildcard yasak
  • ALLOW_UNAUTH_INGEST = false
  • SQL_TRUST_SERVER_CERTIFICATE = true ise warning

Operations sayfası GET /operations/preflight tüm kontrolü tek ekranda gösterir — production'a açmadan tüm kalemler yeşil olmalı.

Daha derin teknik bilgi

Vendor matrix, port listeleri ve protokol detayları için Entegrasyonlar sayfasına geçin.