Tüm yazılar
·9 dk okuma·ShamashAi Ekibi

ShamashAi mimarisi: 3 bileşen, 1 veritabanı, 30 dakika kurulum

ShamashAi, klasik SIEM'lerin 30+ bileşen karmaşası yerine 3 servis + 1 SQL Server ile çalışır. Tek-host kurulum, air-gap desteği, IT yöneticisi tek başına yönetir. 4 vCPU + 8 GB RAM yeterli.

Cuma 14:32, üçüncü kez sistem çöktü

IT yöneticisi Mustafa, ekranında Zoom'da bekleyen satıcı temsilcisine bakarken, sunucu odasındaki üçüncü SIEM node'unun tekrar reboot olduğunu görüyor. Elasticsearch cluster'ı split-brain durumunda, Logstash pipeline'ları durdurulmuş, Kibana 502 veriyor. Telefonunda WhatsApp'tan danışman firmanın proje yöneticisi "Kafka broker'ları restart edelim mi?" diye soruyor. Şirketin SIEM kurulumu 8 aydır devam ediyor — 6 fiziksel sunucu, 18 sanal makine, 4 farklı yazılım stack'i, 2 danışman firma, 1 tane de Mustafa'nın sabrı kalmış.

Bu hikaye binlerce Türk firmasında yaşanıyor. SIEM projesi demek: yıllarca süren procurement süreci, karmaşık mimari tasarım, dedicated ekip, sürekli danışman ihtiyacı, ve sonunda "Biz sadece log topluyoruz" dediğiniz bir sistem demek. ShamashAi bu döngüyü kırmak için tasarlandı: 3 ana bileşen, 1 veritabanı, 30 dakika kurulum, IT yöneticisi tek başına yönetebilir.

Klasik SIEM mimarisi neden bu kadar şişkin?

Enterprise SIEM'ler on yıllık teknik borçla geliyor. Log ingestion için Logstash/Fluentd, depolama için Elasticsearch/Solr, arama motoru için ayrı cluster, korelasyon için CEP engine, reporting için BI tool, orchestration için Kafka... Her bileşen kendi cluster'ını istiyor, kendi HA mekanizmasını kuruyor, kendi yedekleme stratejisini gerektiriyor.

Sonuç: 100 cihazlı bir firma için bile minimum 8-12 sunucu, 3-4 farklı programlama dili bilgisi, dedicated DevOps kaynağı şart. Kurulum 6-12 ay sürüyor, danışman maliyeti SIEM lisans bedelini geçiyor. Ve en kötüsü: Sistem production'a alındıktan sonra Mustafa gibi IT yöneticileri "Ben bu sistemi yönetemiyorum" diyor, danışman firmayla yıllık bakım sözleşmesi imzalıyor.

ShamashAi bu kompleksliği reddediyor. Orta ölçekli Türk firmaları için gerçekten gerekli olan nedir sorusundan yola çıkıyoruz: log toplama, event korelasyon, anomali tespiti, otomatik müdahale, compliance raporlama. Bunları 3 servis + 1 SQL Server ile sağlıyoruz.

ShamashAi'nin 3 bileşeni

1. Backend (Node.js Fastify)

ShamashAi'nin kalbi Node.js 20 üzerinde koşan Fastify framework'ü ile yazılmış TypeScript servis. ~150 endpoint sunuyor, tüm business logic burada:

  • Event ingestion: Agent'lardan gelen logları alır, normalize eder, dbo.events tablosuna yazar. Zod schema validation ile veri kalitesi garanti.
  • Korelasyon motoru: Her yeni event için bellekte tutulan rule engine'i tetikler. Örneğin BRUTE_FORCE_DETECTED event_type'ı üretmek için son 5 dakikadaki AUTH_FAIL_USER olaylarını sayar.
  • Anomali tespiti: dbo.behavior_baselines tablosundaki normal davranış kalıplarıyla karşılaştırma. Örneğin "ahmet" kullanıcısı normalde 09:00-18:00 arası login olur, gece 03:00'te girerse BEHAVIORAL_ANOMALY fırlatır.
  • SOAR engine: POST /soar/block ve POST /soar/quarantine endpoint'leri ile otomatik müdahale. Örneğin KNOWN_BAD_IP event'i geldiğinde firewall'a bloke komutu gönderir.
  • Compliance API: GET /compliance/evidence endpoint'i ile KVKK Madde 12 veya ISO 27001:2022 Annex A.12.4.1 (log tutma) için kanıt paketi üretir. SQL Server'daki dbo.audit_log ve dbo.events tablolarından filtrelenmiş Excel/PDF export.
  • AI asistan: POST /ai/investigate-event endpoint'i ile GPT-4o mini entegrasyonu. Event context'ini alır, tehdit analizi yapar, önerilerde bulunur.
Fastify seçimi bilinçli: Express'e göre %50 daha hızlı, native TypeScript desteği, Zod entegrasyonu, minimal overhead. 4 vCPU'da saniyede ~800 event işleyebiliyor. Elasticsearch cluster'ı kurmadan, Kafka pipeline'ı tasarlamadan, basit Node.js process.

Örnek endpoint yapısı (backend tarafında):

javascript // Node.js Fastify endpoint - event ingestion fastify.post('/api/events/ingest', { schema: { body: z.object({ agent_id: z.string().uuid(), event_type: z.enum(['AUTH_FAIL_USER', 'BRUTE_FORCE_DETECTED', 'M365_RISKY_SIGNIN']), timestamp: z.string().datetime(), source_ip: z.string().ip(), details: z.record(z.any()) }) } }, async (request, reply) => { const { agent_id, event_type, timestamp, source_ip, details } = request.body; // SQL Server'a INSERT await sql.query` INSERT INTO dbo.events (agent_id, event_type, timestamp, source_ip, details_json) VALUES (${agent_id}, ${event_type}, ${timestamp}, ${source_ip}, ${JSON.stringify(details)}) `; // Korelasyon kontrolü if (event_type === 'AUTH_FAIL_USER') { const recentFails = await sql.query` SELECT COUNT(*) as fail_count FROM dbo.events WHERE event_type = 'AUTH_FAIL_USER' AND source_ip = ${source_ip} AND timestamp > DATEADD(MINUTE, -5, GETDATE()) `; if (recentFails.recordset[0].fail_count >= 10) { // BRUTE_FORCE_DETECTED event üret await triggerSoarAction('block_ip', { ip: source_ip }); } } reply.code(201).send({ status: 'ingested' }); });

2. Web (Next.js + React)

Next.js 16 + React 18 ile yazılmış web arayüzü, ~42 sayfa. Tailwind CSS ile modern tasarım, PWA (Progressive Web App) + Web Push desteği:

  • Dashboard: Son 24 saatte BRUTE_FORCE_DETECTED, BEHAVIORAL_ANOMALY, CERT_EXPIRING event'lerini gösteren kartlar. Grafana benzeri vizüalizasyon ama SQL Server'dan direkt çeker, Prometheus/InfluxDB yok.
  • Event Explorer: dbo.events tablosunu filtreleme arayüzü. "Son 7 gündeki M365_RISKY_SIGNIN event'leri bul" gibi sorgular.
  • Incident Management: dbo.incident_groups tablosundaki gruplandırılmış olaylar. Örneğin aynı source_ip'den gelen 15 AUTH_FAIL_USER event'i tek incident haline gelir.
  • SOAR Logs: dbo.soar_actions tablosundaki otomatik müdahale kayıtları. Hangi IP'ye ne zaman bloke gönderildi, sonucu ne oldu.
  • Compliance Reports: GET /reports/evidence-pack endpoint'ini çağıran sayfa. Tarih aralığı seç, hangi cihazlar, hangi event_type'lar, PDF indir.
  • Topology Map: dbo.sites ve dbo.devices tablolarından çekilen ağ haritası. Hangi agent hangi cihazlara bağlı, kaç event üretiyor.
Next.js 16'nın App Router yapısı sayesinde server-side rendering (SSR) ile ilk sayfa yüklemesi hızlı. PWA özelliği ile tarayıcıda "Uygulamayı yükle" seçeneği, Web Push ile kritik alert'ler anlık bildirim olarak geliyor. Ayrı mobile app yazmaya gerek yok.

Örnek sayfa komponenti:

javascript // Next.js page - SOAR action logs import { unstable_after as after } from 'next/server';

export default async function SoarLogsPage() { const response = await fetch('http://localhost:3001/api/soar/logs', { next: { revalidate: 30 } // 30 saniye cache }); const logs = await response.json(); return ( <div className="container mx-auto p-6"> <h1 className="text-2xl font-bold mb-4">SOAR Action Logs</h1> <table className="w-full border-collapse"> <thead> <tr className="bg-gray-100"> <th className="p-2 text-left">Timestamp</th> <th className="p-2 text-left">Action</th> <th className="p-2 text-left">Target</th> <th className="p-2 text-left">Status</th> </tr> </thead> <tbody> {logs.map(log => ( <tr key={log.id} className="border-b"> <td className="p-2">{new Date(log.timestamp).toLocaleString('tr-TR')}</td> <td className="p-2">{log.action_type}</td> <td className="p-2">{log.target_ip || log.target_user}</td> <td className="p-2"> <span className={px-2 py-1 rounded ${log.status === 'success' ? 'bg-green-200' : 'bg-red-200'}}> {log.status} </span> </td> </tr> ))} </tbody> </table> </div> ); }

3. Agent (.NET 8 Windows Service)

Windows Server'larda koşan .NET 8 Windows Service. Şirketin tüm cihazlarından log toplar, backend'e gönderir. 10 paralel connector ile eşzamanlı veri toplama:

  • Windows Event Log: Security, System, Application log'larını okur. Event ID 4625 (failed logon) → AUTH_FAIL_USER event_type'ına dönüştürür.
  • Active Directory: LDAP query ile user/group değişikliklerini izler. Yeni privileged user eklenirse alert.
  • Microsoft 365: Graph API ile mailbox access, risky sign-in, file share events. M365_RISKY_SIGNIN event_type'ı buradan üretilir.
  • Fortigate/Cisco: Syslog listener ile firewall log'ları. KNOWN_BAD_IP match'i için threat intelligence feed'leri kontrol eder.
  • SQL Server: Agent kendi cihazındaki SQL Server'ı da izler. Failed login, permission change, backup failure.
  • IIS: W3C log parse. Suspicious HTTP request pattern'leri (/admin/login 50 kez 5 dakikada).
Offline queue: Agent internet bağlantısı keserse LiteDB (embedded NoSQL) ile lokal queue tutar. Bağlantı dönünce backend'e gönderir. Hiçbir event kaybolmaz.

Air-gap destek: Agent, backend'in aynı sunucuda yüklü olduğu senaryolarda localhost üzerinden konuşur. DMZ'deki bir Windows Server'da hem agent hem backend koşabilir, dışarı internet bağlantısı gerekmez.

Örnek agent kodu:

csharp // .NET 8 Windows Service - Event Log okuma using System.Diagnostics.Eventing.Reader; using Microsoft.Extensions.Hosting;

public class EventLogCollector : BackgroundService { private readonly HttpClient _httpClient; private readonly string _backendUrl; public EventLogCollector(IConfiguration config) { _backendUrl = config["ShamashAi:BackendUrl"] ?? "http://localhost:3001"; _httpClient = new HttpClient(); } protected override async Task ExecuteAsync(CancellationToken stoppingToken) { var query = "*[System[(EventID=4625)]]"; // Failed logon var watcher = new EventLogWatcher(new EventLogQuery("Security", PathType.LogName, query)); watcher.EventRecordWritten += async (sender, args) => { if (args.EventRecord != null) { var eventData = new { agent_id = Environment.MachineName, event_type = "AUTH_FAIL_USER", timestamp = args.EventRecord.TimeCreated?.ToString("o"), source_ip = ExtractIpFromEvent(args.EventRecord), details = new { event_id = args.EventRecord.Id, user = args.EventRecord.Properties[5]?.Value?.ToString(), workstation = args.EventRecord.Properties[13]?.Value?.ToString() } }; try { await _httpClient.PostAsJsonAsync($"{_backendUrl}/api/events/ingest", eventData); } catch (HttpRequestException) { // Offline queue'ya at (LiteDB) await SaveToLocalQueue(eventData); } } }; watcher.Enabled = true; await Task.Delay(Timeout.Infinite, stoppingToken); } }

1 SQL Server, hepsi burada

ShamashAi'nin tüm verisi Microsoft SQL Server'da. Elasticsearch, MongoDB, Redis, Cassandra yok. Neden?

  • Türk firmalar SQL Server biliyor: DBA'lar MSSQL'e aşina. Yedekleme, restore, index optimizasyonu, backup strategy zaten mevcut.
  • HA built-in: SQL Server Always On ile high availability. Ayrı cluster yönetimi gerektirmeyen native özellik.
  • Transaction consistency: Event ingestion + korelasyon + SOAR action tek transaction'da. ACID garantisi.
  • Lisans: SQL Server Express 10 GB'a kadar ücretsiz. Standard edition zaten çoğu firmada var. Ayrı NoSQL lisansı almaya gerek yok.
Önemli tablolar:
  • dbo.events: Ham event kayıtları. Columnstore index ile 50 milyon satırda bile sub-second query.
  • dbo.incident_groups: Korelasyon motoru tarafından oluşturulan gruplandırılmış olaylar.
  • dbo.soar_actions: POST /soar/block, POST /soar/quarantine endpoint'lerinin log'u.
  • dbo.behavior_baselines: Anomali tespiti için normal davranış profilleri. Her kullanıcı + cihaz için login saatleri, erişilen kaynaklar.
  • dbo.audit_log: Compliance için tüm sistem değişikliklerinin immutable kaydı. Kim ne zaman hangi ayarı değiştirdi.
  • dbo.devices: Agent'ların kayıtlı olduğu cihazlar. Hostname, IP, OS version, son heartbeat.
  • dbo.sites: Çok lokasyonlu firmalar için site tanımları. İstanbul HQ, Ankara şube gibi.
Retention stratejisi: Default 90 gün. Daha eski event'ler otomatik archive ediliyor (SQL Server filestream'e taşınır veya silinir). 500 cihaz + 90 gün retention = ~50 GB disk. Log volume yüksekse 180 GB'a çıkabilir ama yine de tek SSD'ye sığar.

Tek-host kurulum senaryosu

ShamashAi'nin en radikal özelliği: 3 bileşen + SQL Server aynı Windows Server'da koşabilir. Minimum 4 vCPU + 8 GB RAM yeterli.

Örnek deployment:

1. Windows Server 2022 VM (4 vCPU, 8 GB RAM, 100 GB SSD) 2. SQL Server 2022 Express veya Standard kur 3. Node.js 20 runtime'ı yükle, backend'i C:\ShamashAi\Backend klasörüne deploy et, Windows Service olarak kaydet 4. IIS veya Node.js process manager ile Next.js web app'i host et (port 3000) 5. Agent'ı aynı sunucuya kur, BackendUrl=http://localhost:3001 config'i ver 6. Diğer Windows Server'lara sadece agent kur, BackendUrl=http://shamashai-server:3001 config'i ver

Kurulum süresi: 30 dakika. IT yöneticisi Mustafa tek başına yapabilir. Kafka cluster'ı yok, Elasticsearch node coordination yok, Kibana-Logstash versiyonlarını match'leme derdi yok.

Yüksek erişilebilirlik (HA): Üretim ortamında tek-host riski varsa:

  • SQL Server Always On Availability Group kur (2 node)
  • Backend + Web uygulamasını 2 ayrı Windows Server'a deploy et
  • Load balancer (ör. HAProxy) ile backend'leri dengele
  • Agent'lara load balancer IP'si ver
Yine de toplam 4 sunucu. Klasik SIEM'lerin 12-16 sunucu gereksiniminin çok altında.

Air-gap ve internet zorunluluğu yok

ShamashAi tamamen on-prem. Internet bağlantısı zorunlu değil. Sadece şu özellikler internete ihtiyaç duyar:

  • AI asistan: POST /ai/investigate-event endpoint'i OpenAI API'sini çağırır. Kapalı ortamda bu özellik devre dışı.
  • Threat intelligence feed: KNOWN_BAD_IP event_type'ı için AbusedIPDB gibi external API'ler. Air-gap'te bu kontrol atlanır, sadece internal blacklist kullanılır.
  • Web Push: PWA bildirimlerini Firebase Cloud Messaging üzerinden gönderir. Air-gap'te push notification yok, sadece in-app alert.
  • License check: ShamashAi lisansını 30 günde bir doğrular. Air-gap kurulumda "offline license key" mekanizması var (ShamashAi dokümantasyonu daha fazla bilgi vermiyor; pilot kapsamında detay paylaşılır).
Gerisi tamamen kapalı ağda çalışır. DMZ'de Windows Server, backend + agent kurulu, dışarıya hiçbir bağlantı yok. Bankalar, kamu kurumları, savunma sanayi için kritik özellik.

Sizing ve performans

Minimum gereksinimler (100 cihaz):

  • 4 vCPU
  • 8 GB RAM
  • 50 GB SSD (90 gün retention)
  • Windows Server 2019+
  • SQL Server 2019+ (Express veya Standard)
Önerilen gereksinimler (500 cihaz):
  • 8 vCPU
  • 16 GB RAM
  • 150 GB SSD
  • SQL Server Standard (Always On için)
Benchmark (internal test):
  • Event ingestion: 800 event/saniye (4 vCPU, Node.js single process)
  • Dashboard yükleme: 1.2 saniye (50 milyon event, SQL columnstore index)
  • SOAR action latency: 340 ms (firewall'a bloke komutu gönderme + SQL'e log yazma)
  • Anomali tespiti: 15 ms/event (behavior baseline karşılaştırması)
Gerçek üretim ortamında performans log volume'e bağlı. Örneğin 500 cihaz, her cihaz günde 10.000 event üretiyorsa → 5 milyon event/gün. SQL Server bunu 4 vCPU'da handle eder ama sorgu performansı için 8 vCPU önerilir.

Limitler ve dürüst notlar

ShamashAi'nin yapmadığı şeyler:

1. Full packet capture: Network trafiğini PCAP seviyesinde kaydetmez. Sadece log-based analiz. Wireshark benzeri deep inspection yok. 2. APT sandbox: Suspicious dosya geldiğinde sandbox'ta çalıştırma özelliği yok. VirusTotal entegrasyonu roadmap'te ama şu an manuel upload gerekiyor. 3. Elastic query dili: Kibana'nın Lucene query syntax'ı yok. SQL WHERE clause yazman gerekir. IT yöneticileri için sorun değil ama SOC analistleri Elasticsearch'e alışıksa öğrenme eğrisi var. 4. Multi-tenant SaaS: ShamashAi on-prem ürün. Cloud-hosted versiyonu yok, her firma kendi sunucusuna kurar. MSP'ler için multi-tenant mimari roadmap'te. 5. Unix/Linux agent: Şu an sadece Windows agent var. Linux sunucular için syslog forwarding ile log topluyoruz ama native agent yok. 2025 Q2'de Linux agent planlanıyor.


ShamashAi, "SIEM kurmak 1 yıllık proje" mitos'unu yıkıyor. 3 bileşen, 1 SQL Server, 30 dakika kurulum. Mustafa artık danışman firmaları aramıyor — kendisi yönetiyor. Pilot programı 30 gün ücretsiz: shamashai.com.tr/iletisim

Paylaş

Bu konuyu projenize uygulayalım

Pilot programı kapsamında ürünü gerçek altyapınızda 30 gün ücretsiz deneyin.