Sabit istek kotaları veya basit kayan pencere sayaçları gibi geleneksel hız sınırlama yöntemleri, modern ve karmaşık Dağıtık Hizmet Reddi (DDoS) saldırıları ve bot trafiği karşısında giderek yetersiz kalmaktadır. Bu statik kurallar genellikle ya trafik artışları sırasında meşru kullanıcıları engelleyen aşırı yanlış pozitiflere, ya da saldırganların düşük ve yavaş saldırılarla sızmasına izin veren yanlış negatiflere yol açar. Bu yazıda, API geçitlerinde gerçek zamanlı anomali tespit etmek için makine öğrenimini kullanarak uyarlanabilir hız sınırlamanın nasıl uygulanacağı incelenecektir.
Statik Hız Sınırlamanın Sınırlamaları
Standart hız sınırlama, önceden tanımlanmış eşiklere dayanır. Örneğin, "dakikada IP başına 100 istek izin ver." Uygulaması basit olsa da, bu yaklaşım bağlam eksiktir. Gerçek bir flash satışın meşru trafiği tetiklediği ile koordineli bir botnet saldırısı arasındaki farkı ayırt edemez. Ayrıca, tepkiseldir; eşik aşıldıktan sonra trafiği engeller ve genellikle kaynak tükenmesini veya hizmet kalitesinin düşmesini önlemek için çok geç kalır.
Makine öğrenimi (ML) ile desteklenen uyarlanabilir hız sınırlama, dinamik bir alternatif sunar. Tarihsel trafik desenlerini, kullanıcı davranışlarını ve istek meta verilerini analiz ederek ML modelleri "normal" faaliyetin bir taban çizgisi oluşturabilir. Bu taban çizgisinden herhangi bir sapma, anomali olarak işaretlenir ve bu sayede geçit, hız kısıtlama politikalarını gerçek zamanlı olarak uyarlayabilir.
ML Destekli Bir Geçidin Temel Bileşenleri
Bu sistemi uygulamak, mevcut API geçit mimarinizle entegre olan bir boru hattı gerektirir. Temel bileşenler şunları içerir:
- Veri Alımı: IP adresi, kullanıcı aracısı, istek yolu, yük boyutu ve yanıt kodları gibi telemetri verilerinin toplanması.
- Özellik Mühendisliği: Ham verilerin, istek sıklığı, istekler arasındaki zaman aralıkları ve sorgu parametrelerinin entropisi gibi ML modellerine uygun özelliklere dönüştürülmesi.
- Anomali Tespit Modeli: Gelen isteklere puan vermek için İzole Ormanlar (Isolation Forests), Tek Sınıflı SVM veya Otokoekerler (Autoencoders) gibi algoritmaların kullanılması.
- Karar Motoru: Güven aralıklarına dayanarak ML puanlarını eylemlere (izin ver, hızını kısıtla veya engelle) dönüştürme.
Python ve Scikit-Learn ile Pratik Uygulama
Python kullanarak bir anomali tespit modelinin nasıl uygulanacağına dair basitleştirilmiş bir örneğe bakalım. Yüksek boyutlu verilerdeki aykırı değerleri belirlemek için etkili olan bir İzole Orman (Isolation Forest) kullanacağız.
İlk olarak, özellikleri tanımlıyoruz. Gerçek dünya senaryolarında bunlar API günlüklerinizden çıkarılacaktır.
import numpy as np
from sklearn.ensemble import IsolationForest
# Simüle edilmiş tarihsel trafik verisi
# Özellikler: [dakikada istek sayısı, ortalama yük boyutu_kb, hata oranı_oranı]
historical_data = np.array([
[10, 2.5, 0.01],
[12, 2.4, 0.01],
[11, 2.6, 0.02],
[100, 50.0, 0.15], # Potansiyel anomali örneği
[5, 2.5, 0.01]
])
# İzole Ormanı başlat ve eğit
# contamination=0.1, verilerin %10'unun aykırı değer olmasını beklediğimiz anlamına gelir
model = IsolationForest(contamination=0.1, random_state=42)
model.fit(historical_data)
# Yeni trafik için anomali puanını tahmin eden fonksiyon
def predict_anomaly(current_traffic):
# current_traffic, sklearn tarafından gereklidir ve 2 boyutlu bir dizi olmalıdır
prediction = model.predict([current_traffic])
score = model.decision_function([current_traffic])
if prediction[0] == -1:
return "Anomali Tespit Edildi - Hızını Kısıtla/Engelle"
else:
return "Normal Trafik - İzin Ver"
# Yeni bir istekle test et
new_request = np.array([[15, 2.5, 0.01]]) # Normal
print(f"Durum: {predict_anomaly(new_request)}")
şüpheli_istek = np.array([[500, 80.0, 0.5]]) # Olağanüstü yüksek hacim/yük
print(f"Durum: {predict_anomaly(şüpheli_istek)}")
API Geçitleriyle Entegrasyon
Bu sistemi üretim ortamına hazır hale getirmek için modelin düşük gecikmeli ortamlarda çalışması gerekir. Yaygın yaklaşımlar şunlardır:
- Sidecar (Yan Konteyner) Deseni: ML çıkarım motorunu, API geçidinizin yanına (örneğin Kubernetes'te) bir yan konteyner olarak dağıtın. Geçit, istek meta verilerini yan konteynere iletir ve yan konteyner milisaniyeler içinde bir karar döndürür.
- Kenar Bilişim (Edge Computing): Düşük gecikmeyi ve ağ atlama sayısını azaltmak için kenarda hafif ML modellerini çalıştırmak üzere sunucusuz işlevleri (AWS Lambda veya Cloudflare Workers gibi) kullanın.
- Gerçek Zamanlı Akış İşleme: Apache Kafka ve Flink kullanarak istek günlükleri akışlarını işleyin ve mevcut tehdit puanlarıyla dağıtılmış bir önbelleği (Redis gibi) güncelleyin; geçit bu puanları kontrol eder.
Sonuç
Statik hız sınırlamadan uyarlanabilir hız sınırlamaya geçiş, modern uygulama güvenliği için kritik bir adımdır. Makine öğreniminden yararlanarak kuruluşlar, kullanıcı deneyimini etkileyen yanlış pozitifleri en aza indirirken API'lerini gelişen tehditlere karşı koruyabilirler. İlk uygulama karmaşıklığı geleneksel yöntemlerden daha yüksek olsa da, güvenlik direnci ve operasyonel verimlilikteki uzun vadeli faydalar büyüktür. Zengin meta veri günlüğü tutarak başlayın, denetimli olmayan öğrenme modelleriyle deney yapın ve bu içgörüleri kademeli olarak geçidinizin karar verme sürecine entegre edin.