sgcWebSockets Sunucuları için Güvenlik Duvarı

· Bileşenler

Güvenlik artık isteğe bağlı değil. İnternete açık her WebSocket sunucusu; kaba kuvvet saldırıları, enjeksiyon girişimleri, bağlantı taşkını ve otomatik kötüye kullanım için bir hedeftir. Bu tehditlere karşı savunma genellikle harici ara yazılım eklemeyi, özel filtreleme mantığı yazmayı veya ayrı bir ters proxy dağıtmayı gerektirir. Bunların tümü karmaşıklık ekler ve geliştirmeyi yavaşlatır.

sgcWebSockets 2026.4.0, TsgcWSFirewall bileşenini sunar. Bu, doğrudan WebSocket sunucunuza takılan özel bir güvenlik duvarı bileşenidir ve artık GeoIP ülke filtreleme, uyarlamalı tehdit puanlama, kademeli yasak yükseltme ve özel bir kurallar motoru dahil olmak üzere 15 koruma modülüyle gelir. Bileşeni yerleştirin, ihtiyaç duyduğunuz koruma modüllerini yapılandırın, sunucuya atayın ve uygulamanız korunmuş olur. Harici bağımlılık yok. Ara yazılım yok. Yaygın durumlar için özel kod yok.

Bu makale, tüm özellik setini kapsar ve her koruma modülünün Delphi'de nasıl yapılandırılacağını gösterir.

On Beş Koruma Modülü, Tek Bileşen

Güvenlik duvarı, on beş bağımsız koruma modülü sağlar. Yalnızca ihtiyacınız olanları etkinleştirin. Her modül kendi başına veya diğerleriyle birlikte çalışır.

IP Kara Listesi
CIDR gösterimini kullanarak belirli IP adreslerini veya tüm aralıkları engelleyin. Kara listedeki IP'lerden gelen bağlantılar, uygulama kodunuza ulaşmadan önce reddedilir.
IP Beyaz Listesi
Güvenilir bir IP listesi tanımlayın. Etkinleştirildiğinde, beyaz listedeki adresler diğer tüm güvenlik kontrollerini atlar; dahili hizmetler ve izleme araçları için idealdir.
Kaba Kuvvet Koruması
IP başına başarısız kimlik doğrulama girişimlerini izleyin. Kayan bir zaman penceresi içinde yapılandırılabilir bir eşik aşıldıktan sonra ihlal edenleri otomatik olarak yasaklayın.
SQL Enjeksiyon Tespiti
Gelen mesajları yaygın SQL enjeksiyon kalıpları için tarayın. Boolean enjeksiyonu, UNION SELECT, deyim enjeksiyonu ve daha fazlası için yerleşik tespit.
XSS Tespiti
Mesajlardaki siteler arası komut dosyası çalıştırma (XSS) yüklerini tespit edin. Script etiketlerini, olay işleyicilerini, JavaScript protokolü URI'lerini, iframe enjeksiyonunu ve CSS ifadelerini yakalar.
Bağlantı Hız Sınırlaması
IP adresi başına eşzamanlı bağlantı sayısını sınırlayın. Tek bir istemcinin sunucu kaynaklarını tüketmesini önleyin.
Mesaj Taşkını Koruması
Tek bir IP'nin saniyede gönderebileceği mesaj sayısını kısıtlayın. Mesaj taşkını ve hizmet reddi (denial-of-service) kalıplarına karşı korur.
Yük Boyutu Sınırlaması
Maksimum boyut eşiğini aşan mesajları reddedin. Aşırı büyük yüklerden kaynaklanan bellek tükenmesini önler.
Yol Geçişi (Path Traversal) Tespiti
Mesajlardaki dizin geçişi dizilerini tespit edin. Amaçlanan kapsamın dışındaki dosyalara erişim girişimlerini engeller.
Komut Enjeksiyon Tespiti
Mesajlardaki işletim sistemi komut enjeksiyon kalıplarını tespit edin. Kabuk meta karakterlerini ve yaygın komut dizilerini engeller.
GeoIP Ülke Filtreleme
Coğrafi kökene göre bağlantılara izin verin veya engelleyin. CSV veritabanı araması ile engelleme listesi ve izin listesi modlarını destekler.
Tehdit Puanı Sistemi
Tüm ihlal türlerinde IP başına ağırlıklı puanlar biriktirin. Bir eşiğe ulaşıldığında otomatik yasaklama yapın; zamanla otomatik azalma ile.
Kademeli Yasak Yükseltme
Her tekrarlanan ihlalde yasak süresini artırın. Israrcı ihlal edenler için kısa yasaklardan kalıcı engellemelere kadar yükseltin.
WebSocket Koruması
WebSocket kaynaklarını (origin) doğrulayın, çerçeve boyutu sınırlarını uygulayın ve alt protokolleri filtreleyin. Mesaj içeriğinin ötesinde protokol düzeyinde koruma.
Özel Kurallar Motoru
Koşullar ve eylemlerle kendi güvenlik duvarı kurallarınızı tanımlayın. İhlal eşikleri, zaman pencereleri ve otomatik yanıtlar oluşturun.

Hızlı Başlangıç

Güvenlik duvarını çalışır hale getirmek yalnızca üç adım gerektirir: oluşturun, yapılandırın ve atayın.

var
  oFirewall: TsgcWSFirewall;
  oServer: TsgcWebSocketHTTPServer;
begin
  oFirewall := TsgcWSFirewall.Create(nil);
  oFirewall.Enabled := True;
  // Enable the modules you need
  oFirewall.Blacklist.Enabled := True;
  oFirewall.Blacklist.IPs.Add('10.0.0.0/8');
  oFirewall.RateLimit.Enabled := True;
  oFirewall.RateLimit.MaxConnectionsPerIP := 5;
  oFirewall.SQLInjection.Enabled := True;
  oFirewall.XSS.Enabled := True;
  // Assign to any server component
  oServer.Firewall := oFirewall;
  oServer.Active := True;
end;

Atandıktan sonra, güvenlik duvarı otomatik olarak entegre olur: bağlantılar olay işleyicilerinize ulaşmadan önce kontrol edilir, mesajlar gerçek zamanlı olarak taranır ve bağlantısı kesilen istemciler izlemeden kaydı silinir. Bunların tümü tek bir satır olay işleme kodu yazmadan gerçekleşir.

IP Kara Listesi & Beyaz Listesi

Kara liste, belirli IP'lerden veya aralıklardan gelen bağlantıları reddeder. Beyaz liste ise bunun tersini yapar; mesaj filtrelemesi dahil olmak üzere diğer tüm kontrolleri atlayan güvenilir bir adres kümesi tanımlar.

Her ikisi de aralık tabanlı filtreleme için tam IP adreslerini ve CIDR gösterimini destekler:

// Blacklist: block entire subnets and specific IPs
oFirewall.Blacklist.Enabled := True;
oFirewall.Blacklist.IPs.Add('10.0.0.0/8');        // All 10.x.x.x
oFirewall.Blacklist.IPs.Add('172.16.0.0/16');     // All 172.16.x.x
oFirewall.Blacklist.IPs.Add('192.168.1.100');     // Single IP
// Whitelist: trusted IPs bypass everything
oFirewall.Whitelist.Enabled := True;
oFirewall.Whitelist.IPs.Add('192.168.1.1');       // Admin machine
oFirewall.Whitelist.IPs.Add('192.168.1.0/24');    // Internal network

Öncelik. Beyaz liste etkinleştirildiğinde, önce o kontrol edilir. IP eşleşirse, bağlantıya hemen izin verilir; kara liste, yasaklar, hız sınırları ve mesaj filtrelerinin tümü atlanır.

Kaba Kuvvet Koruması

Kaba kuvvet modülü, kayan bir zaman penceresi kullanarak IP başına başarısız kimlik doğrulama girişimlerini izler. Bir IP, pencere içinde maksimum girişim sayısını aştığında, yapılandırılabilir bir süre boyunca otomatik olarak yasaklanır.

Özellik Varsayılan Açıklama
MaxAttempts 5 Yasaklamadan önceki başarısız girişimler
TimeWindowSec 60 Girişimleri saymak için saniye cinsinden kayan pencere
BanDurationSec 300 Saniye cinsinden yasak süresi (0 = kalıcı)
// Ban after 3 failed logins within 60 seconds, for 10 minutes
oFirewall.BruteForce.Enabled := True;
oFirewall.BruteForce.MaxAttempts := 3;
oFirewall.BruteForce.TimeWindowSec := 60;
oFirewall.BruteForce.BanDurationSec := 600;
// Register failed attempts from your authentication handler
procedure TForm1.ServerAuthentication(Connection: TsgcWSConnection;
  aUser, aPassword: String; var Authenticated: Boolean);
begin
  Authenticated := ValidateCredentials(aUser, aPassword);
  if not Authenticated then
    oFirewall.RegisterFailedAttempt(Connection.IP);
end;

Güvenlik duvarı gerisini otomatik olarak halleder: girişimleri sayar, zaman penceresini kontrol eder ve eşiğe ulaşıldığında IP'yi yasaklar. Yasaklanan IP'ler, herhangi bir ileri işlemden önce bağlantı düzeyinde reddedilir.

Manuel Yasak Yönetimi

Otomatik yasakların ötesinde, yasakları istediğiniz zaman programatik olarak yönetebilirsiniz:

// Ban an IP for 1 hour
oFirewall.BanIP('203.0.113.50', 3600);
// Permanent ban (duration = 0)
oFirewall.BanIP('198.51.100.10');
// Check ban status
if oFirewall.IsBanned('203.0.113.50') then
  WriteLn('IP is banned');
// Remove a specific ban
oFirewall.UnbanIP('203.0.113.50');
// Clear all bans
oFirewall.ClearBans;

SQL Enjeksiyon Tespiti

SQL enjeksiyon modülü, gelen her metin mesajını yaygın saldırı kalıpları için tarar. Bir eşleşme tespit edildiğinde, yapılandırılabilir eylem yanıtı belirler: istemciyi engellemek, olayı kaydetmek veya geçişine izin vermek.

oFirewall.SQLInjection.Enabled := True;
oFirewall.SQLInjection.Action := faDeny;  // faDeny, faLog, or faAllow
// Add custom patterns beyond the built-in set
oFirewall.SQLInjection.CustomPatterns.Add('WAITFOR DELAY');
oFirewall.SQLInjection.CustomPatterns.Add('BENCHMARK(');

Yerleşik Kalıplar

Tespit edici, en yaygın SQL enjeksiyon tekniklerine yönelik büyük/küçük harfe duyarlı olmayan kontroller içerir:

XSS Tespiti

XSS modülü, WebSocket mesajlarındaki siteler arası komut dosyası çalıştırma yüklerini, uygulama mantığınıza ulaşmadan veya diğer istemcilere aktarılmadan önce tespit eder.

oFirewall.XSS.Enabled := True;
oFirewall.XSS.Action := faDeny;

Yerleşik tespit şunları kapsar:

Bağlantı Hız Sınırlaması

Tek bir IP adresinin tutabileceği eşzamanlı bağlantı sayısını sınırlayın. Bu, kötü niyetli veya yanlış yapılandırılmış olsun, aşırı bağlantı açan istemcilerden kaynaklanan kaynak tükenmesini önler.

// Allow up to 5 concurrent connections per IP
oFirewall.RateLimit.Enabled := True;
oFirewall.RateLimit.MaxConnectionsPerIP := 5;
oFirewall.RateLimit.TimeWindowSec := 60;

Bağlantı izleme tamamen otomatiktir: güvenlik duvarı bağlantıda sayacı artırır ve bağlantı kesildiğinde azaltır. Yeni bir bağlantı sınırı aşacağında, sunucunun OnConnect olayı tetiklenmeden önce reddedilir.

Mesaj Taşkını Koruması

Tek bir IP'nin saniyede gönderebileceği mesaj sayısını kısıtlayın. Bu, bir istemcinin sunucuyu veya diğer bağlı istemcileri bunaltmak için hızlıca mesaj gönderdiği hizmet reddi kalıplarına karşı korur.

// Limit to 50 messages per second per IP
oFirewall.FloodProtection.Enabled := True;
oFirewall.FloodProtection.MaxMessagesPerSec := 50;
oFirewall.FloodProtection.Action := faDeny;  // Disconnect offender

Yük Boyutu Sınırlaması

İstemcilerin sunucu belleğini tüketebilecek aşırı büyük yükler göndermesini önlemek için maksimum bir mesaj boyutu uygulayın. Eşiği aşan mesajlar işlenmeden önce reddedilir.

oFirewall.PayloadLimit.Enabled := True;
oFirewall.PayloadLimit.MaxSizeBytes := 65536;  // 64 KB max
oFirewall.PayloadLimit.Action := faDeny;

Yol Geçişi (Path Traversal) Tespiti

Yol geçişi modülü, gelen mesajları, amaçlanan kapsamın dışındaki dosyalara erişmeye çalışan dizin geçişi dizileri için tarar. Bu, istemci mesajlarından dosya yollarını veya kaynak tanımlayıcılarını işleyen uygulamalar için kritik öneme sahiptir.

Yerleşik tespit şunları kapsar:

oFirewall.PathTraversal.Enabled := True;
oFirewall.PathTraversal.Action := faDeny;

Komut Enjeksiyon Tespiti

Komut enjeksiyon modülü, mesajlardaki işletim sistemi komut enjeksiyon kalıplarını tespit eder. Rastgele sistem komutlarını yürütmek için kullanılan kabuk meta karakterlerini ve yaygın komut dizilerini yakalar.

Yerleşik tespit şunları kapsar:

oFirewall.CommandInjection.Enabled := True;
oFirewall.CommandInjection.Action := faDeny;

GeoIP Ülke Filtreleme

IP'den ülkeye çözümleme kullanarak bağlantıları coğrafi kökenlerine göre filtreleyin. GeoIP modülü iki modu destekler: BlockList (belirli ülkeleri engelle, diğer her şeye izin ver) ve AllowList (yalnızca belirli ülkelere izin ver, diğer her şeyi engelle).

Özellik Açıklama
Mode gmBlockList or gmAllowList
Countries ISO 3166-1 alpha-2 ülke kodları (örneğin US, GB, DE)
DatabaseFile IP'den ülkeye çözümleme için CSV dosyasının yolu

Belirli Ülkeleri Engelleme

oFirewall.GeoIP.Enabled := True;
oFirewall.GeoIP.Mode := gmBlockList;
oFirewall.GeoIP.Countries.Add('CN');
oFirewall.GeoIP.Countries.Add('RU');
oFirewall.LoadGeoIPDatabase('geoip.csv');

Yalnızca Belirli Ülkelere İzin Verme

// Only allow connections from US, UK, and Germany
oFirewall.GeoIP.Enabled := True;
oFirewall.GeoIP.Mode := gmAllowList;
oFirewall.GeoIP.Countries.Add('US');
oFirewall.GeoIP.Countries.Add('GB');
oFirewall.GeoIP.Countries.Add('DE');
oFirewall.LoadGeoIPDatabase('geoip.csv');

GeoIP veritabanları. Ücretsiz IP'den ülkeye CSV veritabanları, DB-IP ve IP2Location gibi sağlayıcılardan edinilebilir. Alternatif olarak, kendi çözümleme mantığınızı kullanmak için OnResolveCountry olayını uygulayın.

Tehdit Puanı Sistemi

Tehdit puanı sistemi, her ihlal türüne ağırlıklı puanlar atar ve IP adresi başına bir puan biriktirir. Puan otomatik yasaklama eşiğini aştığında, IP otomatik olarak yasaklanır. Puanlar zamanla azalır; bu nedenle tek seferlik olaylar kalıcı cezalara yol açmaz.

Özellik Varsayılan Açıklama
AutoBanThreshold 100 IP'nin otomatik olarak yasaklandığı puan
DecayPerHour 10 Her hareketsizlik saati başına çıkarılan puanlar
oFirewall.ThreatScore.Enabled := True;
oFirewall.ThreatScore.AutoBanThreshold := 80;
oFirewall.ThreatScore.DecayPerHour := 5;

Puan Değişikliklerini İzleme

Puanları gerçek zamanlı olarak izlemek ve otomatik yasaklama eşiğine ulaşılmadan önce özel eylemde bulunmak için OnThreatScoreChanged olayını kullanın.

procedure TForm1.FirewallThreatScoreChanged(Sender: TObject;
  const aIP: string; const aOldScore, aNewScore: Integer);
begin
  if aNewScore >= 50 then
    LogToFile(Format('[%s] Threat score elevated: %d -> %d',
      [aIP, aOldScore, aNewScore]));
end;

Kademeli Yasak Yükseltme

Sabit bir yasak süresi yerine, yükseltme modülü her tekrarlanan ihlalde yasak uzunluğunu artırır. İlk kez ihlal edenler kısa bir yasak alır; ısrarcı ihlal edenler kalıcı bir engellemeye kadar yükseltilir.

oFirewall.BanEscalation.Enabled := True;
oFirewall.BanEscalation.Levels.Add('300');    // 5 minutes
oFirewall.BanEscalation.Levels.Add('1800');   // 30 minutes
oFirewall.BanEscalation.Levels.Add('7200');   // 2 hours
oFirewall.BanEscalation.Levels.Add('86400');  // 24 hours
oFirewall.BanEscalation.Levels.Add('0');      // permanent

İpucu. Maksimum etkinlik için kademeli yükseltmeyi tehdit puanı sistemiyle birleştirin. Tehdit puanı, birden fazla ihlal türünde kötü aktörleri tanımlar ve yükseltme, tekrar eden ihlal edenlerin giderek daha ağır sonuçlarla karşılaşmasını sağlar.

WebSocket'e Özgü Koruma

Mesaj düzeyinde taramanın ötesinde, güvenlik duvarı WebSocket bağlantılarına özgü protokol düzeyinde korumalar sağlar: kaynak (origin) doğrulaması, çerçeve boyutu uygulaması ve alt protokol filtreleme.

// Validate the Origin header to prevent cross-site hijacking
oFirewall.WebSocket.Enabled := True;
oFirewall.WebSocket.AllowedOrigins.Add('https://www.example.com');
oFirewall.WebSocket.AllowedOrigins.Add('https://app.example.com');
// Enforce maximum frame size (bytes)
oFirewall.WebSocket.MaxFrameSize := 131072;  // 128 KB
// Only allow specific subprotocols
oFirewall.WebSocket.AllowedSubProtocols.Add('graphql-ws');
oFirewall.WebSocket.AllowedSubProtocols.Add('mqtt');

Özel Kurallar Motoru

Özel kurallar motoru, koşullar ve otomatik eylemlerle kendi güvenlik duvarı kurallarınızı tanımlamanıza olanak tanır. Her kural, bir zaman penceresi içindeki bir ihlal eşiğini ve eşik aşıldığında yapılacak eylemi belirtir.

Özellik Açıklama
Name Kural için açıklayıcı ad
MinViolations Kuralı tetiklemek için gereken ihlal sayısı
TimeWindowSec İhlalleri saymak için saniye cinsinden kayan pencere
ActionType Yapılacak eylem: raDeny, raAllow, raBan veya raLog
BanDurationSec ActionType raBan olduğunda yasak süresi

Eylem türleri:

Eylem Davranış
raDeny İstemcinin bağlantısını hemen kes
raAllow Eylem yok (kural izlenir ancak uygulanmaz)
raBan IP'yi belirtilen süre boyunca yasakla
raLog Yalnızca OnViolation olayını tetikle
var
  vRule: TsgcFirewallRuleItem;
begin
  oFirewall.CustomRules.Enabled := True;
  vRule := TsgcFirewallRuleItem(oFirewall.CustomRules.Rules.Add);
  vRule.Name := 'Block high-risk IPs';
  vRule.MinViolations := 5;
  vRule.TimeWindowSec := 300;
  vRule.ActionType := raBan;
  vRule.BanDurationSec := 3600;
end;

Gerçek Zamanlı İstatistikler

Güvenlik duvarı, etkin bağlantılar, toplam engellenen girişimler ve ihlal türü başına sayımlar için gerçek zamanlı sayaçlar içeren bir Stats nesnesi sunar. İzleme gösterge panoları oluşturmak veya periyodik özetleri kaydetmek için kullanın.

WriteLn('Active: ', oFirewall.Stats.ActiveConnections);
WriteLn('Blocked: ', oFirewall.Stats.TotalBlocked);
WriteLn('SQL Injection: ', oFirewall.Stats.GetViolationCount(fvSQLInjection));

Kalıcı Yasaklar

Varsayılan olarak yasaklar bellekte saklanır ve yeniden başlatmada temizlenir. Sunucu yeniden başlatmaları boyunca yasakları kalıcı kılmak için SaveBansToFile ve LoadBansFromFile kullanın.

// Save bans before shutdown
oFirewall.SaveBansToFile('bans.dat');
// Restore bans on startup
oFirewall.LoadBansFromFile('bans.dat');

Eylem Modları

SQL enjeksiyonu, XSS ve taşkın koruması modülleri, bir ihlal tespit edildiğinde yapılandırılabilir üç eylemi destekler:

Eylem Davranış Kullanım Senaryosu
faDeny İstemciyi engelle ve bağlantısını kes Üretim sunucuları
faLog OnViolation olayını tetikle ancak bağlantıya izin ver İzleme, test etme, kademeli dağıtım
faAllow Eylem yok Yapılandırmayı kaldırmadan bir modülü geçici olarak devre dışı bırak

İpucu. faDeny'ye geçmeden önce güvenlik duvarının gerçek trafiğinize nasıl tepki verdiğini gözlemlemek için üretimde faLog ile başlayın. Bu, ilk dağıtım sırasında meşru kullanıcıların engellenmesini önler.

Olaylar, Günlük Kaydı & Geçersiz Kılmalar

Olaylar, güvenlik duvarı kararlarına tam görünürlük ve gerektiğinde bunları geçersiz kılma yeteneği sağlar.

OnViolation, Güvenlik Günlük Kaydı

Tespit edilen her ihlalde tetiklenir. Güvenlik günlükleri yazmak, uyarılar göndermek veya bir izleme gösterge panosunu beslemek için kullanın.

procedure TForm1.FirewallViolation(Sender: TObject;
  const aIP: string;
  const aViolationType: TsgcFirewallViolationType;
  const aDetails: string);
begin
  LogToFile(Format('[%s] Firewall: %s - %s',
    [aIP, ViolationTypeToStr(aViolationType), aDetails]));
end;

İhlal türleri şunları içerir:

Tür Ne Zaman Tetiklenir
fvBlacklist IP kara listede
fvBruteForce Başarısız girişim eşiği aşıldı
fvRateLimit Bağlantı hız sınırı aşıldı
fvFlood Mesaj taşkını tespit edildi
fvSQLInjection SQL enjeksiyon kalıbı tespit edildi
fvXSS XSS kalıbı tespit edildi
fvGeoIP Bağlantı ülke filtresi tarafından engellendi
fvPathTraversal Yol geçişi kalıbı tespit edildi
fvCommandInjection Komut enjeksiyon kalıbı tespit edildi
fvPayloadSize Mesaj maksimum yük boyutunu aşıyor
fvOrigin WebSocket kaynağı (origin) izin verilenler listesinde değil
fvFrameSize WebSocket çerçevesi maksimum boyutu aşıyor
fvThreatScore Tehdit puanı otomatik yasaklama eşiğini aştı
fvCustomRule Özel kural eşiği aşıldı

OnFiltered, Kararları Geçersiz Kılma

Bir bağlantı veya mesaj engellenmek üzereyken tetiklenir. Allow parametresi, güvenlik duvarının kararını çalışma zamanında geçersiz kılmanıza olanak tanır.

procedure TForm1.FirewallFiltered(Sender: TObject;
  const aIP: string; const aReason: string;
  var Allow: Boolean);
begin
  // Override: always allow the office IP even if rate-limited
  if aIP = '203.0.113.10' then
    Allow := True;
end;

OnResolveCountry, Özel GeoIP Çözümlemesi

GeoIP modülünün bir IP adresini bir ülke koduna çözümlemesi gerektiğinde tetiklenir. Yerleşik CSV veritabanı yerine (veya ona ek olarak) kendi çözümleme mantığınızı uygulamak için bunu kullanın.

procedure TForm1.FirewallResolveCountry(Sender: TObject;
  const aIP: string; var aCountryCode: string);
begin
  aCountryCode := MyGeoIPLookup(aIP);
end;

OnThreatScoreChanged, Puan İzleme

Bir IP'nin tehdit puanı her değiştiğinde tetiklenir. Otomatik yasaklama eşiğine ulaşılmadan önce özel eşikler, uyarılar veya kademeli yanıtlar uygulamak için bunu kullanın.

procedure TForm1.FirewallThreatScoreChanged(Sender: TObject;
  const aIP: string; const aOldScore, aNewScore: Integer);
begin
  if aNewScore >= 50 then
    SendAlert(Format('IP %s threat score: %d', [aIP, aNewScore]));
end;

Sunucu Entegrasyonu

Güvenlik duvarı, üç sunucu bileşeninin tümüyle çalışır. Tek bir güvenlik duvarı örneği, birden fazla sunucu arasında bile paylaşılabilir.

Bileşen Açıklama
TsgcWebSocketHTTPServer WebSocket + HTTP sunucusu (Indy tabanlı)
TsgcWebSocketServer Saf WebSocket sunucusu (Indy TCP)
TsgcWebSocketServer_HTTPAPI HTTP.SYS çekirdek sürücüsünü kullanan WebSocket sunucusu

Atandıktan sonra entegrasyon otomatiktir. Güvenlik duvarı üç noktada müdahale eder:

Tam Örnek

Temel koruma modülleri ve yeni gelişmiş özellikler etkinleştirilmiş, tam olarak yapılandırılmış bir WebSocket sunucusu.

uses
  sgcWebSocket_Server, sgcWebSocket_Server_Firewall;
var
  oFirewall: TsgcWSFirewall;
  oServer: TsgcWebSocketHTTPServer;
begin
  oFirewall := TsgcWSFirewall.Create(nil);
  oServer := TsgcWebSocketHTTPServer.Create(nil);
  Try
    // IP filtering
    oFirewall.Blacklist.Enabled := True;
    oFirewall.Blacklist.IPs.Add('10.0.0.0/8');
    oFirewall.Whitelist.Enabled := True;
    oFirewall.Whitelist.IPs.Add('192.168.1.0/24');
    // Brute force: ban after 3 failures in 60s, for 10 minutes
    oFirewall.BruteForce.Enabled := True;
    oFirewall.BruteForce.MaxAttempts := 3;
    oFirewall.BruteForce.BanDurationSec := 600;
    // Message security
    oFirewall.SQLInjection.Enabled := True;
    oFirewall.XSS.Enabled := True;
    // Rate limiting and flood protection
    oFirewall.RateLimit.Enabled := True;
    oFirewall.RateLimit.MaxConnectionsPerIP := 5;
    oFirewall.FloodProtection.Enabled := True;
    oFirewall.FloodProtection.MaxMessagesPerSec := 50;
    // Payload size limit
    oFirewall.PayloadLimit.Enabled := True;
    oFirewall.PayloadLimit.MaxSizeBytes := 65536;
    // GeoIP: block specific countries
    oFirewall.GeoIP.Enabled := True;
    oFirewall.GeoIP.Mode := gmBlockList;
    oFirewall.GeoIP.Countries.Add('CN');
    oFirewall.GeoIP.Countries.Add('RU');
    oFirewall.LoadGeoIPDatabase('geoip.csv');
    // Threat scoring with auto-ban
    oFirewall.ThreatScore.Enabled := True;
    oFirewall.ThreatScore.AutoBanThreshold := 80;
    oFirewall.ThreatScore.DecayPerHour := 5;
    // Progressive ban escalation
    oFirewall.BanEscalation.Enabled := True;
    oFirewall.BanEscalation.Levels.Add('300');
    oFirewall.BanEscalation.Levels.Add('3600');
    oFirewall.BanEscalation.Levels.Add('86400');
    oFirewall.BanEscalation.Levels.Add('0');
    // Restore persistent bans
    oFirewall.LoadBansFromFile('bans.dat');
    // Events
    oFirewall.OnViolation := FirewallViolation;
    oFirewall.OnFiltered := FirewallFiltered;
    oFirewall.OnThreatScoreChanged := FirewallThreatScoreChanged;
    // Assign to server and start
    oServer.Port := 443;
    oServer.Firewall := oFirewall;
    oServer.Active := True;
    WriteLn('Server running with firewall protection.');
    ReadLn;
    // Save bans before shutdown
    oFirewall.SaveBansToFile('bans.dat');
  Finally
    oServer.Active := False;
    oServer.Free;
    oFirewall.Free;
  End;
end;

İş Parçacığı Güvenliği

Güvenlik duvarı bileşeni tamamen iş parçacığı güvenlidir (thread-safe). Tüm genel metotlar, izleme verilerine eşzamanlı erişimi korumak için dahili kritik bölümler kullanır. 100.000 işlem gerçekleştiren 20 eşzamanlı iş parçacığıyla, sıfır hata ve sıfır bellek sızıntısıyla stres testinden geçirilmiştir.

Bileşen, harici senkronizasyon olmadan birden fazla sunucu örneği arasında güvenle paylaşılabilir ve herhangi bir iş parçacığından (sunucu olay işleyicileri, zamanlayıcı iş parçacıkları, arka plan çalışanları) erişilebilir.

Önemli Notlar