sgcWebSockets 2026.6 — Güvenlik Duvarında Bot Algılama

· Bileşenler

“Botları IP'ye göre tanımlayabilir miyim?” sunucu tarafı filtreleme hakkında aldığımız en yaygın sorulardan biridir. Dürüst yanıt şu: IP tek başına bir başlangıç noktasıdır, bir karar değil. Ancak iyi seçilmiş birkaç sinyalle birleştirildiğinde güvenilir bir karar olur. sgcWebSockets 2026.6, TsgcWebSocketFirewall bileşenine tam olarak bunu yapan, bağlanan her IP'yi dört bağımsız sinyal kullanarak sınıflandıran yeni bir Bot Algılama modülü ekler.

Bot Algılama, zaten bildiğiniz güvenlik duvarı özelliklerinin (kara liste / beyaz liste, GeoIP, kaba kuvvet, hız sınırlama, tehdit puanlama) yanında yer alır ve aynı bileşen-özellik tasarımını izler. Bu yazı, bunun nasıl çalıştığını ve nasıl bağlanacağını adım adım anlatır.

Dört sinyal, bir sınıflandırma

Modül, her IP'yi dört bağımsız sinyale karşı değerlendirir ve tek bir TsgcBotClassification değeri çözer:

Sonuç altı değerden biridir:

TsgcBotClassification = (bcUnknown, bcVerifiedCrawler, bcDatacenter,
  bcSuspectedBot, bcBlocklisted, bcHuman);

Yalnızca-IP algılamanın gerçek sınırları vardır. Adresler CGNAT arkasında paylaşılır, dönüşümlüdür ve gelişmiş botlar konut (residential) proxy havuzlarının içine gizlenir. Bu nedenle Bot Algılama, mutlak bir gerçek değil, iyi bir ilk-geçiş puanı vermek üzere inşa edilmiştir. Bu yüzden, tasarım gereği, bir bağlantıyı asla tek başına engellemez.

Bot Algılamayı Etkinleştirme

Her şey yeni BotDetection özelliğinin altında yer alır. İstediğiniz sinyalleri açın ve dosya tabanlı olanları verilerine yönlendirin:

uses
  sgcWebSocket_Server_Firewall;

var
  oFirewall: TsgcWebSocketFirewall;
begin
  oFirewall := TsgcWebSocketFirewall.Create(nil);

  oFirewall.BotDetection.Enabled := True;

  // 1. Verified crawler IP ranges  (file lines: CIDR,botname)
  oFirewall.BotDetection.KnownBotsFile := 'C:\firewall\known-bots.csv';

  // 2. Datacenter / hosting ranges  (file lines: CIDR,asn-name)
  oFirewall.BotDetection.Datacenter.Enabled := True;
  oFirewall.BotDetection.Datacenter.ASNFile := 'C:\firewall\datacenter-ranges.csv';

  // 3. Forward-confirmed reverse DNS verification
  oFirewall.BotDetection.ReverseDNS.Enabled := True;

  // 4. DNSBL reputation lookups
  oFirewall.BotDetection.DNSBL.Enabled := True;
  oFirewall.BotDetection.DNSBL.Zones.Add('zen.spamhaus.org');

  // Resolution tuning
  oFirewall.BotDetection.CacheDurationSec := 3600;   // cache a verdict for 1h
  oFirewall.BotDetection.DNSTimeoutMS     := 2000;

  oServer.Firewall := oFirewall;
end;

İki dosya tabanlı sinyal, güvenlik duvarının GeoIP veritabanını güçlendiren aynı hızlı, ikili-aranmış CIDR motorunu yeniden kullanır, böylece büyük aralık listeleri bile mikrosaniyeler içinde çözülür.

Ters DNS ve DNSBL kabul iş parçacığını asla bloke etmez

Ters DNS ve DNSBL, canlı DNS sorgularıdır. Bunları bağlantı-kabul iş parçacığında satır içi çalıştırmak, kendi kendine yol açılan bir hizmet reddi olurdu. Bunun yerine, Bot Algılama bunları bir arka plan çalışan iş parçacığında çözer ve her sınıflandırmayı bir önbellekten sunar. Bir önbellek ıskalamasında IP çözüm için kuyruğa alınır ve mevcut çağrı hemen bcUnknown döndürür; arama bittiğinde önbellek güncellenir ve OnBotDetected olayı tetiklenir. CacheDurationSec özelliği, IP yeniden kontrol edilmeden önce bir kararın ne kadar süre yeniden kullanılacağını denetler.

Yalnızca-sınıflandır: OnBotDetected

Bot Algılama yalnızca-sınıflandırır. Bir bağlantıyı asla kendi başına reddetmez. Bir olay tetikler, güvenlik duvarı istatistiklerini günceller (yeni bir fvBot sayacı) ve politika kararını size bırakır. Bu, yanlış sınıflandırılmış, doğrulanmış bir tarayıcının sessizce düşürülmesini önler.

procedure TForm1.FirewallBotDetected(Sender: TObject; const aIP: string;
  aClassification: TsgcBotClassification; const aBotName: string);
begin
  case aClassification of
    bcVerifiedCrawler:
      DoLog(aIP + ' is a verified crawler: ' + aBotName);
    bcDatacenter:
      DoLog(aIP + ' originates from a datacenter / hosting range');
    bcBlocklisted:
      DoLog(aIP + ' is listed on a DNSBL');
  end;
end;

Ayrıca herhangi bir zamanda GetBotClassification ile bir karar isteyebilirsiniz. Bir bağlantıyı filtrelemek yerine bir yanıtı uyarlamak için kullanışlıdır:

if oFirewall.GetBotClassification(vClientIP) = bcVerifiedCrawler then
  // serve a lightweight, cache-friendly variant to the crawler
  ServeStaticSnapshot
else
  ServeFullApp;

Bir karara göre hareket etmek: Custom Rules motoru

Engellemek istediğinizde, güvenlik duvarının mevcut Custom Rules motoru aracılığıyla açıkça katılırsınız. Her TsgcFirewallRuleItem, yeni bir BotType özelliği kazanır: onu ayarlayın, ve kural, sınıflandırması o değere eşit olan bağlantılarla eşleşir. Ardından, sahip olduğunuz tüm kural mekanizmasını yeniden kullanarak onları reddedebilir, yasaklayabilir veya günlüğe kaydedebilirsiniz.

var
  oRule: TsgcFirewallRuleItem;
begin
  oFirewall.CustomRules.Enabled := True;

  // Ban any IP listed on a DNSBL for one hour
  oRule := oFirewall.CustomRules.Rules.Add as TsgcFirewallRuleItem;
  oRule.Name           := 'ban-blocklisted-bots';
  oRule.BotType        := bcBlocklisted;
  oRule.ActionType     := raBan;
  oRule.BanDurationSec := 3600;
end;

Bu ayrım (Bot Algılama modülünde pasif sınıflandırma, yalnızca yazdığınız bir kural aracılığıyla aktif zorlama) özelliğin, korumak istediğiniz trafiği engelleyerek sizi asla şaşırtamayacağı anlamına gelir.

Kendi kararınızı getirin: OnResolveBot

Zaten bir tehdit-istihbaratı hizmeti, dahili bir itibar önbelleği veya ticari bir bot-azaltma beslemesi çalıştırıyorsanız, OnResolveBot olayını atayın. Ayarlandığında, işleyiciniz kararı sağlar ve yerleşik çözümleyici kenara çekilir; güvenlik duvarının GeoIP'nin OnResolveCountry'si için zaten kullandığı aynı geçersiz kılma deseni.

procedure TForm1.FirewallResolveBot(Sender: TObject; const aIP: string;
  var aClassification: TsgcBotClassification; var aBotName: string);
begin
  // Consult your own threat feed instead of the built-in resolver
  if MyThreatFeed.IsMaliciousBot(aIP) then
  begin
    aClassification := bcBlocklisted;
    aBotName        := 'internal-threat-feed';
  end;
end;

Demo

Demos\04.WebSocket_Other_Samples\13.Firewall içindeki Güvenlik Duvarı demosunun, her sinyali açabileceğiniz, bilinen-bot ve veri merkezi aralık dosyalarını yükleyebileceğiniz, DNSBL bölgelerini yapılandırabileceğiniz ve herhangi bir adresin kararını görmek için canlı bir “Classify IP” test aracını kullanabileceğiniz yeni bir Bot Detection sekmesi vardır; her sınıflandırma olay günlüğüne akıtılır.

Kullanılabilirlik

Bot Algılama, sgcWebSockets 2026.6'da gelir ve tak çalıştır bir eklemedir: BotDetection özelliği varsayılan olarak devre dışıdır, dolayısıyla siz onu açana kadar mevcut projeler etkilenmez. Özellik Delphi (7'den 13'e kadar), C++Builder ve .NET sürümü için mevcuttur.

Aktif aboneliği olan müşteriler yeni derlemeyi müşteri alanından indirebilir. Deneme kullanıcıları güncellenmiş yükleyiciyi şu adresten edinebilir: esegece.com/products/websockets/download.

Sorular, geri bildirim veya geçiş yardımı mı? Bize ulaşın — kodu yazan kişilerden bir yanıt alacaksınız.