Firewall dla serwerów sgcWebSockets

· Komponenty

Bezpieczeństwo nie jest już opcjonalne. Każdy serwer WebSocket wystawiony na działanie internetu jest celem ataków brute force, prób wstrzykiwania, zalewania połączeniami i automatycznych nadużyć. Obrona przed tymi zagrożeniami zazwyczaj wymaga dodatkowego oprogramowania pośredniego, pisania niestandardowej logiki filtrowania lub wdrożenia osobnego reverse proxy — co wszystko zwiększa złożoność i spowalnia rozwój.

sgcWebSockets 2026.4.0 wprowadza TsgcWSFirewall — dedykowany komponent firewalla, który podłącza się bezpośrednio do twojego serwera WebSocket, teraz z 15 modułami ochrony, w tym filtrowaniem krajów GeoIP, adaptacyjnym scoringiem zagrożeń, progresywną eskalacją banów i silnikiem reguł niestandardowych. Upuść komponent, skonfiguruj potrzebne moduły ochrony, przypisz do serwera i twoja aplikacja jest chroniona. Bez zewnętrznych zależności. Bez oprogramowania pośredniego. Bez niestandardowego kodu dla typowych przypadków.

Ten artykuł omawia pełny zestaw funkcji i pokazuje, jak skonfigurować każdy moduł ochrony w Delphi.

Piętnaście modułów ochrony, jeden komponent

Firewall udostępnia piętnaście niezależnych modułów ochrony. Włączaj tylko to, czego potrzebujesz — każdy moduł działa samodzielnie lub w połączeniu z innymi.

Lista blokowanych IP
Blokuj konkretne adresy IP lub całe zakresy za pomocą notacji CIDR. Połączenia z zablokowanych IP są odrzucane przed dotarciem do kodu aplikacji.
Lista dozwolonych IP
Zdefiniuj listę zaufanych adresów IP. Po włączeniu adresy z białej listy omijają wszystkie inne kontrole bezpieczeństwa — idealne dla usług wewnętrznych i narzędzi monitorowania.
Ochrona przed atakami brute force
Śledź nieudane próby uwierzytelnienia na IP. Automatycznie banuj sprawców po przekroczeniu konfigurowalnego progu w przesuwnym oknie czasowym.
Wykrywanie SQL Injection
Skanuj przychodzące wiadomości w poszukiwaniu typowych wzorców SQL injection. Wbudowane wykrywanie wstrzykiwania boolowskiego, UNION SELECT, wstrzykiwania instrukcji i więcej.
Wykrywanie XSS
Wykrywaj ładunki cross-site scripting w wiadomościach. Wychwytuje tagi skryptów, handlery zdarzeń, URI protokołu JavaScript, wstrzykiwanie iframe i wyrażenia CSS.
Ograniczanie liczby połączeń
Ogranicz liczbę jednoczesnych połączeń na adres IP. Zapobiegaj wyczerpaniu zasobów serwera przez pojedynczego klienta.
Ochrona przed zalewaniem wiadomościami
Ogranicz liczbę wiadomości, które jeden adres IP może wysyłać na sekundę. Chroni przed zalewaniem wiadomościami i wzorcami ataku odmowy usługi.
Ograniczanie rozmiaru ładunku
Odrzucaj wiadomości przekraczające maksymalny próg rozmiaru. Zapobiega wyczerpaniu pamięci przez zbyt duże ładunki.
Wykrywanie path traversal
Wykrywaj sekwencje przemieszczania się po katalogach w wiadomościach. Blokuje próby dostępu do plików poza zamierzonym zakresem.
Wykrywanie wstrzykiwania poleceń
Wykrywaj wzorce wstrzykiwania poleceń systemu operacyjnego w wiadomościach. Blokuje metaznaki powłoki i typowe sekwencje poleceń.
Filtrowanie krajów GeoIP
Zezwalaj lub blokuj połączenia na podstawie geograficznego pochodzenia. Obsługuje tryby listy blokowania i listy dozwolonych z wyszukiwaniem w bazie CSV.
System scoringu zagrożeń
Kumuluj ważone wyniki na IP we wszystkich typach naruszeń. Automatyczny ban po osiągnięciu progu, z automatycznym zmniejszaniem z czasem.
Progresywna eskalacja banów
Zwiększaj czas trwania banu przy każdym kolejnym naruszeniu. Eskaluj od krótkich banów do stałych blokad dla powtarzających się sprawców.
Ochrona WebSocket
Weryfikuj origin WebSocket, egzekwuj limity rozmiaru ramek i filtruj subprotokołu. Ochrona na poziomie protokołu wykraczająca poza treść wiadomości.
Silnik reguł niestandardowych
Definiuj własne reguły firewalla z warunkami i akcjami. Twórz progi naruszeń, okna czasowe i automatyczne odpowiedzi.

Szybki start

Uruchomienie firewalla wymaga tylko trzech kroków: utwórz, skonfiguruj i przypisz.

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;

Po przypisaniu firewall integruje się automatycznie: połączenia są sprawdzane zanim dotrą do twoich handlerów zdarzeń, wiadomości są skanowane w czasie rzeczywistym, a rozłączeni klienci są wyrejestrowywani ze śledzenia — wszystko bez pisania ani jednej linii kodu obsługi zdarzeń.

Lista blokowanych i dozwolonych IP

Lista blokowanych odrzuca połączenia z określonych IP lub zakresów. Lista dozwolonych robi odwrotność — definiuje zaufany zestaw adresów, które omijają wszystkie inne kontrole, w tym filtrowanie wiadomości.

Obie obsługują dokładne adresy IP oraz notację CIDR dla filtrowania opartego na zakresach:

// 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

Priorytet. Gdy lista dozwolonych jest włączona, jest sprawdzana jako pierwsza. Jeśli IP pasuje, połączenie jest natychmiast dozwolone — lista blokowanych, bany, limity częstotliwości i filtry wiadomości są pomijane.

Ochrona przed atakami brute force

Moduł brute force śledzi nieudane próby uwierzytelnienia na IP przy użyciu przesuwnego okna czasowego. Gdy IP przekroczy maksymalną liczbę prób w oknie, zostaje automatycznie zbanowany na konfigurowalny czas.

Właściwość Domyślnie Opis
MaxAttempts 5 Nieudane próby przed banem
TimeWindowSec 60 Przesuwne okno w sekundach do zliczania prób
BanDurationSec 300 Czas banu w sekundach (0 = trwały)
// 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;

Firewall automatycznie zajmuje się resztą: zlicza próby, sprawdza okno czasowe i banuje IP po osiągnięciu progu. Zbanowane IP są odrzucane na poziomie połączenia przed dalszym przetwarzaniem.

Ręczne zarządzanie banami

Oprócz automatycznych banów możesz zarządzać banami programistycznie w dowolnym momencie:

// 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;

Wykrywanie SQL Injection

Moduł SQL injection skanuje każdą przychodzącą wiadomość tekstową w poszukiwaniu typowych wzorców ataków. Po wykryciu dopasowania konfigurowana akcja określa odpowiedź: zablokuj klienta, zaloguj zdarzenie lub zezwól na przejście.

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(');

Wbudowane wzorce

Detektor zawiera sprawdzenia bez rozróżniania wielkości liter dla najczęstszych technik SQL injection:

Wykrywanie XSS

Moduł XSS wykrywa ładunki cross-site scripting w wiadomościach WebSocket, zanim dotrą do logiki aplikacji lub zostaną przekazane innym klientom.

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

Wbudowane wykrywanie obejmuje:

Ograniczanie liczby połączeń

Ogranicz liczbę jednoczesnych połączeń, które może utrzymywać pojedynczy adres IP. Zapobiega wyczerpaniu zasobów przez klientów otwierających nadmierne połączenia — czy to złośliwe, czy źle skonfigurowane.

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

Śledzenie połączeń jest w pełni automatyczne: firewall zwiększa licznik przy połączeniu i zmniejsza przy rozłączeniu. Gdy nowe połączenie przekroczyłoby limit, jest odrzucane zanim wystąpi zdarzenie OnConnect serwera.

Ochrona przed zalewaniem wiadomościami

Ogranicz liczbę wiadomości, które jeden adres IP może wysyłać na sekundę. Chroni to przed wzorcami ataku odmowy usługi, gdzie klient szybko wysyła wiadomości, by przeciążyć serwer lub innych podłączonych klientów.

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

Ograniczanie rozmiaru ładunku

Egzekwuj maksymalny rozmiar wiadomości, aby zapobiec wysyłaniu przez klientów zbyt dużych ładunków, które mogłyby wyczerpać pamięć serwera. Wiadomości przekraczające próg są odrzucane przed przetworzeniem.

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

Wykrywanie path traversal

Moduł path traversal skanuje przychodzące wiadomości w poszukiwaniu sekwencji przemieszczania się po katalogach, które próbują uzyskać dostęp do plików poza zamierzonym zakresem. Jest to krytyczne dla aplikacji przetwarzających ścieżki plików lub identyfikatory zasobów z wiadomości klienckich.

Wbudowane wykrywanie obejmuje:

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

Wykrywanie wstrzykiwania poleceń

Moduł wstrzykiwania poleceń wykrywa wzorce wstrzykiwania poleceń systemu operacyjnego w wiadomościach. Wychwytuje metaznaki powłoki i typowe sekwencje poleceń używane do wykonywania dowolnych poleceń systemowych.

Wbudowane wykrywanie obejmuje:

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

Filtrowanie krajów GeoIP

Filtruj połączenia na podstawie ich geograficznego pochodzenia przy użyciu rozpoznawania IP-kraj. Moduł GeoIP obsługuje dwa tryby: BlockList (blokuj określone kraje, zezwalaj na wszystko inne) i AllowList (zezwalaj tylko na określone kraje, blokuj wszystko inne).

Właściwość Opis
Mode gmBlockList or gmAllowList
Countries Kody krajów ISO 3166-1 alpha-2 (np. US, GB, DE)
DatabaseFile Ścieżka do pliku CSV do rozpoznawania IP-kraj

Blokowanie określonych krajów

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

Zezwolenie tylko na określone kraje

// 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');

Bazy danych GeoIP. Darmowe bazy CSV IP-kraj są dostępne od dostawców takich jak DB-IP i IP2Location. Alternatywnie zaimplementuj zdarzenie OnResolveCountry, aby użyć własnej logiki rozpoznawania.

System scoringu zagrożeń

System scoringu zagrożeń przypisuje ważone punkty do każdego typu naruszenia i kumuluje wynik na adres IP. Gdy wynik przekroczy próg automatycznego banu, IP jest automatycznie banowane. Wyniki zmniejszają się z czasem, więc jednorazowe incydenty nie skutkują stałymi karami.

Właściwość Domyślnie Opis
AutoBanThreshold 100 Wynik, przy którym IP jest automatycznie banowane
DecayPerHour 10 Punkty odejmowane za każdą godzinę bezczynności
oFirewall.ThreatScore.Enabled := True;
oFirewall.ThreatScore.AutoBanThreshold := 80;
oFirewall.ThreatScore.DecayPerHour := 5;

Monitorowanie zmian wyników

Użyj zdarzenia OnThreatScoreChanged do monitorowania wyników w czasie rzeczywistym i podejmowania niestandardowych działań przed osiągnięciem progu automatycznego banu.

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;

Progresywna eskalacja banów

Zamiast stałego czasu trwania banu, moduł eskalacji zwiększa długość banu przy każdym kolejnym naruszeniu. Osoby naruszające przepisy po raz pierwszy otrzymują krótki ban; powtarzający się sprawcy są eskalowani aż do stałej blokady.

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

Wskazówka. Połącz progresywną eskalację z systemem scoringu zagrożeń dla maksymalnej skuteczności. Scoring zagrożeń identyfikuje złośliwych aktorów w wielu typach naruszeń, a eskalacja zapewnia, że powtarzający się sprawcy napotykają coraz poważniejsze konsekwencje.

Ochrona specyficzna dla WebSocket

Oprócz skanowania na poziomie wiadomości, firewall zapewnia ochrony na poziomie protokołu specyficzne dla połączeń WebSocket: walidację origin, egzekwowanie rozmiaru ramek i filtrowanie subprotokołów.

// 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');

Silnik reguł niestandardowych

Silnik reguł niestandardowych pozwala definiować własne reguły firewalla z warunkami i automatycznymi akcjami. Każda reguła określa próg naruszeń w oknie czasowym oraz akcję do wykonania po przekroczeniu progu.

Właściwość Opis
Name Opisowa nazwa reguły
MinViolations Liczba naruszeń wymagana do wyzwolenia reguły
TimeWindowSec Przesuwne okno w sekundach do zliczania naruszeń
ActionType Akcja do wykonania: raDeny, raAllow, raBan lub raLog
BanDurationSec Czas banu gdy ActionType to raBan

Typy akcji:

Akcja Zachowanie
raDeny Rozłącz klienta natychmiast
raAllow Brak akcji (reguła jest śledzona, ale nie egzekwowana)
raBan Banuj IP na określony czas
raLog Wyzwól tylko zdarzenie OnViolation
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;

Statystyki w czasie rzeczywistym

Firewall udostępnia obiekt Stats z licznikami w czasie rzeczywistym dla aktywnych połączeń, całkowitej liczby zablokowanych prób i liczby na typ naruszenia. Użyj go do budowania paneli monitorowania lub logowania okresowych podsumowań.

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

Trwałe bany

Domyślnie bany są przechowywane w pamięci i czyszczone po restarcie. Użyj SaveBansToFile i LoadBansFromFile, aby zachować bany po restartach serwera.

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

Tryby akcji

Moduły SQL injection, XSS i ochrony przed zalewaniem obsługują trzy konfigurowane akcje po wykryciu naruszenia:

Akcja Zachowanie Przypadek użycia
faDeny Zablokuj i rozłącz klienta Serwery produkcyjne
faLog Wyzwól zdarzenie OnViolation, ale zezwól na połączenie Monitorowanie, testowanie, stopniowe wdrożenie
faAllow Brak akcji Tymczasowe wyłączenie modułu bez usuwania konfiguracji

Wskazówka. Zacznij od faLog w produkcji, aby obserwować, jak firewall reaguje na rzeczywisty ruch, przed przejściem na faDeny. Pozwala to uniknąć blokowania prawdziwych użytkowników podczas początkowego wdrożenia.

Zdarzenia — logowanie i nadpisywanie

Zdarzenia dają ci pełny wgląd w decyzje firewalla oraz możliwość ich nadpisywania w razie potrzeby.

OnViolation — logowanie bezpieczeństwa

Wyzwalane przy każdym wykrytym naruszeniu. Użyj do zapisywania logów bezpieczeństwa, wysyłania alertów lub zasilania panelu monitorowania.

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;

Typy naruszeń obejmują:

Typ Wyzwalane gdy
fvBlacklist IP znajduje się na liście blokowanych
fvBruteForce Przekroczono próg nieudanych prób
fvRateLimit Przekroczono limit częstotliwości połączeń
fvFlood Wykryto zalewanie wiadomościami
fvSQLInjection Wykryto wzorzec SQL injection
fvXSS Wykryto wzorzec XSS
fvGeoIP Połączenie zablokowane przez filtr krajów
fvPathTraversal Wykryto wzorzec path traversal
fvCommandInjection Wykryto wzorzec wstrzykiwania poleceń
fvPayloadSize Wiadomość przekracza maksymalny rozmiar ładunku
fvOrigin Origin WebSocket nie ma na liście dozwolonych
fvFrameSize Ramka WebSocket przekracza maksymalny rozmiar
fvThreatScore Wynik zagrożenia przekroczył próg automatycznego banu
fvCustomRule Przekroczono próg reguły niestandardowej

OnFiltered — nadpisywanie decyzji

Wyzwalane gdy połączenie lub wiadomość ma zostać zablokowane. Parametr Allow pozwala nadpisać decyzję firewalla w czasie wykonywania.

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 — niestandardowe rozpoznawanie GeoIP

Wyzwalane gdy moduł GeoIP musi rozpoznać adres IP jako kod kraju. Użyj tego, aby zaimplementować własną logikę rozpoznawania zamiast (lub oprócz) wbudowanej bazy CSV.

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

OnThreatScoreChanged — monitorowanie wyników

Wyzwalane przy każdej zmianie wyniku zagrożenia IP. Użyj tego, aby zaimplementować niestandardowe progi, alerty lub stopniowane odpowiedzi przed osiągnięciem progu automatycznego banu.

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;

Integracja z serwerem

Firewall działa ze wszystkimi trzema komponentami serwera. Jedna instancja firewalla może być nawet współdzielona między wieloma serwerami.

Komponent Opis
TsgcWebSocketHTTPServer Serwer WebSocket + HTTP (oparty na Indy)
TsgcWebSocketServer Czysty serwer WebSocket (Indy TCP)
TsgcWebSocketServer_HTTPAPI Serwer WebSocket używający sterownika jądra HTTP.SYS

Integracja jest automatyczna po przypisaniu. Firewall przechwytuje w trzech punktach:

Kompletny przykład

W pełni skonfigurowany serwer WebSocket z podstawowymi modułami ochrony i włączonymi nowymi zaawansowanymi funkcjami.

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;

Bezpieczeństwo wątków

Komponent firewalla jest w pełni bezpieczny wątkowo. Wszystkie metody publiczne używają wewnętrznych sekcji krytycznych do ochrony współbieżnego dostępu do danych śledzenia. Został poddany testom obciążeniowym z 20 jednoczesnymi wątkami wykonującymi 100 000 operacji bez błędów i wycieków pamięci.

Komponent może być bezpiecznie współdzielony między wieloma instancjami serwera i dostępny z dowolnego wątku — handlery zdarzeń serwera, wątki timerów, procesy w tle — bez zewnętrznej synchronizacji.

Ważne uwagi