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:
- ' OR ', ' AND ', Boolean enjeksiyonu
- UNION SELECT, Union tabanlı enjeksiyon
- '; DROP, '; DELETE, '; INSERT, '; UPDATE, Deyim enjeksiyonu
- EXEC(, EXECUTE(, Komut yürütme
- xp_cmdshell, Genişletilmiş saklı yordamlar
- CAST(, CONVERT(, Tür dönüşümü kötüye kullanımı
- 1=1, 1'='1, Totoloji enjeksiyonu
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:
- , <strong style="color:#2c2c2c;">javascript:, Komut dosyası enjeksiyonu
- onerror=, onload=, onclick=, onmouseover=, Olay işleyici enjeksiyonu
- eval(, document.cookie, JavaScript değerlendirmesi ve çerez hırsızlığı
- , Öğe enjeksiyonu
- , expression(, SVG ve CSS ifade saldırıları
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:
- ../, ..\, Göreceli yol geçişi
- %2e%2e, %252e, URL kodlu geçiş
- /etc/passwd, /etc/shadow, Unix sistem dosyası erişimi
- cmd.exe, boot.ini, Windows sistem dosyası erişimi
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:
- ; |, &&, ||, Kabuk komutu zincirleme
- $(command), `command`, Komut ikamesi
- wget, curl, nc, netcat, Ağ yardımcı programı çağırma
- /bin/sh, /bin/bash, cmd /c, Kabuk başlatma
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:
- Yeni bağlantıda: Kara listeyi, beyaz listeyi, yasakları, GeoIP'yi, hız sınırlarını ve WebSocket kaynağını (origin) kontrol eder. Engellenirse OnConnect olayından önce reddeder.
- Mesaj alındığında: SQL enjeksiyonunu, XSS'i, komut enjeksiyonunu, yol geçişini, yük boyutunu ve taşkın sınırlarını kontrol eder. İhlal durumunda istemcinin bağlantısını keser.
- Bağlantı kesildiğinde: Bağlantının kaydını dahili izleme sayaçlarından siler.
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
- Yalnızca metin mesajları. SQL enjeksiyonu ve XSS tespiti metin mesajlarını tarar. İkili (binary) mesajlar taranmaz.
- Kalıcı yasaklar. Sunucu yeniden başlatmaları boyunca yasakları kalıcı kılmak için
SaveBansToFileveLoadBansFromFilekullanın. Bu çağrılar olmadan, yasaklar yalnızca bellekte saklanır ve yeniden başlatmada temizlenir. - Beyaz liste önceliği. Beyaz listedeki IP'ler, mesaj düzeyinde filtreleme dahil tüm kontrolleri atlar. Bunu dikkatli kullanın.
- RegisterFailedAttempt. Kaba kuvvet modülü, kimlik doğrulama işleyicinizden
RegisterFailedAttemptçağırmanızı gerektirir. Diğer her şey otomatiktir. - GeoIP veritabanı. Ülke çözümlemesi için
LoadGeoIPDatabaseile bir CSV veritabanı yükleyin veya özel arama mantığı içinOnResolveCountryolayını uygulayın. - Tehdit puanı azalması. Puanlar zamanla otomatik olarak azalır.
DecayPerHourdeğerini trafik kalıplarınıza uyacak şekilde ayarlayın; yüksek trafikli sunucular, yanlış pozitifleri önlemek için daha hızlı azalmadan yararlanabilir. - Sürüm kullanılabilirliği. Güvenlik duvarı bileşeni, sgcWebSockets'in Professional, Enterprise ve All-Access sürümlerinde mevcuttur.
