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
3001default, 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
- Cache — daha önce görülen fingerprint hash (sıfır network call)
- Pattern — recognition.ts'deki regex kuralları
- AI fallback — Claude API · vendor + device_type + adapter (sonsuza kadar cache)
- 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
| Connector | Transport |
|---|---|
| SyslogConnector | UDP 514 + 5514 |
| ActiveDirectoryConnector | WinRM 5985/86 |
| Microsoft365Connector | Graph API HTTPS |
| VSphereConnector | vSphere REST API |
| SqlServerConnector | TCP 1433 (TDS) |
| SnmpTrapConnector | UDP 162 |
| SnmpPollConnector | UDP 161 outbound |
| DeviceHealthConnector | TCP probe + ICMP |
| WebsiteSurfaceConnector | HTTPS + DNS |
| MailSurfaceConnector | DNS 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-pathIX_events_severity— severity ≥ medium queriesIX_events_device— per-device filteringIX_events_event_type— alert rule evaluator
| Bileşen | 100–500 cihaz |
|---|---|
| CPU | 4 vCPU |
| RAM | 8 GB |
| Disk (events 90 gün) | ~50 GB |
| SQL Server | Standard veya Express |
| OS | Windows Server 2019+ |
| Ajan host | +1 .NET runtime, ~150 MB RAM |
| EPS hedef | 500–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_SECRETset ve ≥ 32 karakterCREDENTIAL_KEYset (32-byte hex, AES-256-GCM)SQL_PASSWORDset ve dev şifresi olmamalıSHAMASHAI_CORS_ORIGINSlistele, wildcard yasakALLOW_UNAUTH_INGEST= falseSQL_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.
