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

Fortinet SOAR + ShamashAi: dakikada 1000 saldırgan IP nasıl bloklanır

Address group manipülasyonu vs policy edit, retry policy, request pacing, lockout önleme — Fortigate REST API üzerinden ölçekli IP blocking'in pratik mimarisi.

Bir DDoS bypass denemesi başladığında saldırgan saniyede 50-200 farklı IP'den gelir. Klasik IDS/IPS pasiftir — alarm verir, durdurmaz. Fortigate'in kendi DoS sensörü çalışır ama yeni geliştirilmiş tactics'i tanımayabilir. Bu noktada aktif yanıt (active response / SOAR) devreye girer: tespit edilen saldırgan IP'leri firewall'da gerçekten bloklayalım.

Bu yazı, ShamashAi'ın Fortinet entegrasyonunun teknik mimarisini açıklıyor. Hangi API endpoint, hangi rate limit, hangi failure mode — sahadan notlar.

Neden sadece address group manipülasyonu?

Saldırgan tespit edildi, IP'yi bloklamamız lazım. İki yol:

Yol A — policy edit: Bir firewall policy yarat, source = saldırgan IP, action = deny.

Yol B — address group manipülasyonu: Müşteri önceden bir address group hazırlamış (örn. Shamashai-Blocked). Üzerinde bir DENY policy var. Bizim işimiz sadece o group'a IP eklemek.

ShamashAi yol B'yi seçer. Sebep:

| Yol A (policy edit) | Yol B (addrgrp) | |---|---| | Her IP için yeni policy = policy sayısı patlar | Sadece member listesi büyür | | Policy sıralaması bozulabilir | Mevcut policy değişmez | | Yanlış API call → policy yapısı çöker | Yanlış API call → group'a yanlış IP, kolayca geri alınır | | Müşteri firewall'ında "kim ekledi bunu?" sorusu | "Shamashai-Blocked" grubu = bizim | | Blast radius: tüm firewall | Blast radius: tek group, tek policy |

Bu mimari kararı pilot müşterilerde aylar boyu test edildi. Yol B'nin geri-dönülebilirliği ve kontrol edilebilirliği, yol A'dan üstün.

Customer-side hazırlık

# 1. API user oluştur — admin password kullanma (lockout sebebi)
config system api-user
  edit "shamashai"
    set api-key <BYPASS_AUTOGENERATED>
    set accprofile "super_admin"
    config trusthost
      edit 1
        set ipv4-trusthost <SHAMASHAI_IP> 255.255.255.255
    next
  next
end

# 2. Boş placeholder address — Fortinet boş group reddeder config firewall address edit "shamashai-soar-placeholder" set subnet 240.0.0.1 255.255.255.255 # IANA reserved, gerçek trafik yok next end

# 3. Address group config firewall addrgrp edit "Shamashai-Blocked" set member "shamashai-soar-placeholder" next end

# 4. TRANSIT DENY policy (en üste taşı) config firewall policy edit 0 set srcintf "wan1" set dstintf "internal" set srcaddr "Shamashai-Blocked" set dstaddr "all" set action deny set status enable next end

# 5. LOCAL-IN DENY policy — KRİTİK! admin web UI brute-force için config firewall local-in-policy edit 0 set intf "wan1" set srcaddr "Shamashai-Blocked" set dstaddr "all" set action deny next end

Local-in policy unutulmaması gereken adımdır. Transit policy sadece LAN'a trafiği keser; admin web UI'a gelen brute-force'u durdurmaz. Local-in olmazsa saldırgan firewall'ı bizzat hedef alabilir.

ShamashAi tarafı — request flow

1. Composite event geldi (BRUTE_FORCE_DETECTED, src_ip = 185.220.x.x)
2. SOAR queue'sine "auto:rule" trigger yazıldı
3. Worker queue'yu poll'ladı, action başlattı

POST /api/v2/cmdb/firewall/address name: "shamashai-block-185.220.x.x" type: "ipmask" subnet: ["185.220.x.x", "255.255.255.255"] comment: "auto-blocked by shamashai at <timestamp>, rule=brute_force"

4. Yeni address yaratıldı (201 Created)

PUT /api/v2/cmdb/firewall/addrgrp/Shamashai-Blocked member: [...existing, "shamashai-block-185.220.x.x"]

5. Group güncellendi (200 OK)

6. soar_actions tablosuna append-only kayıt: id: uuid · target: 185.220.x.x · expires_at: now + 60 min

Tüm zincir ortalama 800-1400 ms sürer. Fortigate API'nin kendisi 200-500 ms arasında cevap verir; üstüne TCP + TLS handshake + bizim retry buffer.

Request pacing — neden kritik?

Fortigate API rate-limited değildir; ama yoğun istek sırası firewall'ın "management plane" CPU'sunu yorabilir. Üretim trafiği zarar görür.

ShamashAi pacing kuralları:

PER_FIREWALL_QUEUE   = 1 in-flight request   (concurrency cap)
MIN_REQUEST_INTERVAL = 1.1 saniye             (queue başına)
KEEP_ALIVE_AGENT     = HTTPS keep-alive       (TCP overhead az)
MAX_SOCKETS          = 1                       (FortiOS bunu sever)

Saniyede 1 IP bloklamak yetiyor mu? Test edelim:

  • DDoS bypass tactic: 200 IP/dk
  • ShamashAi capacity: 60 IP/dk (1/sn rate)
Yetmez. Bu yüzden bulk add desteklendi: 50 IP'yi tek PUT ile gönder. Burada hız 60 IP/dk yerine 3,000 IP/dk'ya çıkar.
batch_size: 50 IP / 1 PUT request
rate:       1 PUT / sec
effective:  3000 IP / minute (saldırı pattern'i bilinene kadar)

Retry policy

Fortigate occasionally 429 (rate limit) veya 503 (service unavailable) atar. ShamashAi backoff:

attempt 1: hemen
attempt 2: 2 sn sonra
attempt 3: 4 sn sonra
attempt 4: 8 sn sonra
attempt 5: 16 sn sonra
fail:      audit log + remediation task üretilir

Total budget: 30 sn. Bu süre içinde başarısız olursa, IT yöneticisinin manuel müdahalesi gerekiyor → remediation queue'sine düşer.

Auto-expire loop

Bloklanan IP sonsuza kadar kalmaz. 60 dk default sonra cleanup loop:

// Her 60 saniyede çalışır
async function expireSoarActionsLoop() {
  const expired = await db.query(
    `SELECT * FROM soar_actions
     WHERE applied_at IS NOT NULL
       AND reverted_at IS NULL
       AND expires_at < NOW()`
  );

for (const action of expired) { await fortigateRemoveAddrFromGroup(action.target); await deleteFortigateAddressObject(action.target); await markReverted(action.id); await writeAudit({ action: 'soar.auto_expire', target: action.target, }); } }

Müşteri kalıcı blok istiyorsa? Shamashai-Blocked grubundan IP'yi Permanent-Blocked adlı kendi grubuna manuel taşır. ShamashAi o gruba dokunmaz.

Lockout önleme — operasyon kuralları

1. Whitelist mecburiyet: kendi public IP'leri, MPLS WAN endpoint'leri, bilinen partner IP'leri ShamashAi'da "soar_protected" listesinde olmalı 2. Private/loopback/CGNAT yasak: 10.x, 172.16.x, 192.168.x, 169.254.x — bunlar perimeter'da bloklanmaz; iç quarantine için ayrı endpoint var 3. Dual-channel yedek: SOAR connector down olursa otomatik kapanır; ShamashAi pasif mode'a düşer (alarm verir ama action almaz) 4. Manual override: Operatör SOAR action history'sinden anında unblock yapabilir

Limitler (dürüst)

  • Bu yazı sadece Fortinet FortiGate entegrasyonu için. Palo Alto, Sophos,
Cisco ASA — v1.5 / v2.0 roadmap'inde
  • IPv6 desteği: address objesi support var, ama group'ta member sıralaması
test ediliyor — production'da v1.4'te
  • Cluster: HA pair'de primary'ye yazıyoruz, secondary sync ediyor — split-brain
durumunda eski yazılar drop edilebilir
  • Cloud FortiGate (FortiCloud) — REST API farklı; ayrı connector v2.0'da

Üst seviye özet: SOAR sihir değil; iyi tasarlanmış bir API integration. Sınırlı blast radius, geri-dönülebilirlik, audit zinciri olmadan SOAR production'a çıkmamalı. ShamashAi pilot programı bu kuralları sıkı uygular — 30 günlük ücretsiz deneme süresince ilk hafta observation, sonra controlled SOAR aktivasyonu.

Paylaş

Bu konuyu projenize uygulayalım

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