sgcWebSockets 2026.6 — Botdetectie in de Firewall

· Componenten
sgcWebSockets 2026.6 — Botdetectie in de Firewall

“Kan ik bots identificeren aan de hand van het IP?” is een van de meest gestelde vragen die we krijgen over filtering aan de serverzijde. Het eerlijke antwoord is: het IP alleen is een startpunt, geen oordeel — maar gecombineerd met enkele goed gekozen signalen wordt het een betrouwbaar oordeel. sgcWebSockets 2026.6 voegt een nieuwe Botdetectie-module toe aan de TsgcWebSocketFirewall-component die precies dat doet, door elk verbindend IP te classificeren met behulp van vier onafhankelijke signalen.

Botdetectie staat naast de firewallfuncties die u al kent — blacklist / whitelist, GeoIP, brute-force, rate limiting, threat scoring — en volgt hetzelfde op componenteigenschappen gebaseerde ontwerp. Dit bericht beschrijft hoe het werkt en hoe u het instelt.

Vier signalen, één classificatie

De module evalueert elk IP aan de hand van vier onafhankelijke signalen en bepaalt één TsgcBotClassification-waarde:

Het resultaat is een van zes waarden:

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

Detectie uitsluitend op basis van IP heeft echte beperkingen — adressen worden gedeeld achter CGNAT, ze rouleren, en geavanceerde bots verbergen zich binnen residentiële proxypools. Daarom is Botdetectie gebouwd om u een goede eerste score te geven, geen absolute waarheid. Daarom blokkeert het, vanuit het ontwerp, nooit een verbinding op eigen houtje.

Botdetectie inschakelen

Alles bevindt zich onder de nieuwe BotDetection-eigenschap. Schakel de signalen in die u wenst en wijs de bestandsgebaseerde signalen naar hun gegevens:

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;

De twee bestandsgebaseerde signalen hergebruiken dezelfde snelle, binair doorzochte CIDR-engine die de GeoIP-database van de firewall aandrijft, zodat zelfs grote bereiklijsten in microseconden worden opgelost.

Reverse DNS en DNSBL blokkeren nooit de accept-thread

Reverse DNS en DNSBL zijn live DNS-bevragingen — deze inline uitvoeren op de connection-accept-thread zou een zelfopgelegde denial of service zijn. In plaats daarvan lost Botdetectie ze op op een achtergrond-workerthread en levert elke classificatie uit een cache. Bij een cache miss wordt het IP in de wachtrij geplaatst voor resolutie en geeft de huidige aanroep onmiddellijk bcUnknown terug; wanneer de opzoeking klaar is, wordt de cache bijgewerkt en wordt het OnBotDetected-event geactiveerd. De CacheDurationSec-eigenschap bepaalt hoe lang een oordeel wordt hergebruikt voordat het IP opnieuw wordt gecontroleerd.

Alleen classificeren: OnBotDetected

Botdetectie is alleen-classificeren. Het weigert nooit zelf een verbinding — het activeert een event, werkt de firewallstatistieken bij (een nieuwe fvBot-teller) en laat de beleidsbeslissing aan u over. Dat voorkomt dat een verkeerd geclassificeerde geverifieerde crawler stilzwijgend wordt verworpen.

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;

U kunt op elk moment ook om een oordeel vragen met GetBotClassification — handig om een reactie op maat te maken in plaats van een verbinding te filteren:

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

Handelen op een oordeel: de Custom Rules-engine

Wanneer u wel wilt blokkeren, kiest u daar expliciet voor via de bestaande Custom Rules-engine van de firewall. Elke TsgcFirewallRuleItem krijgt een nieuwe BotType-eigenschap: stel deze in, en de regel komt overeen met verbindingen waarvan de classificatie gelijk is aan die waarde. U kunt ze vervolgens weigeren, verbannen of loggen — waarbij u alle regelmachinerie hergebruikt die u al hebt.

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;

Deze scheiding — passieve classificatie in de Botdetectie-module, actieve handhaving alleen via een regel die u schrijft — betekent dat de functie u nooit kan verrassen door verkeer te blokkeren dat u wilde behouden.

Lever uw eigen oordeel: OnResolveBot

Als u al een threat-intelligence-dienst, een interne reputatiecache of een commerciële bot-mitigatiefeed gebruikt, wijs dan het OnResolveBot-event toe. Wanneer het is ingesteld, levert uw handler het oordeel en stappen de ingebouwde resolverstappen opzij — hetzelfde overschrijfpatroon dat de firewall al gebruikt voor de OnResolveCountry van GeoIP.

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

De Firewall-demo in Demos\04.WebSocket_Other_Samples\13.Firewall heeft een nieuw tabblad Bot Detection waar u elk signaal kunt inschakelen, de bekende-bot- en datacenterbereikbestanden kunt laden, DNSBL-zones kunt configureren en een live “Classify IP”-tester kunt gebruiken om het oordeel voor elk adres te zien — waarbij elke classificatie naar het event-logboek wordt gestreamd.

Beschikbaarheid

Botdetectie wordt geleverd in sgcWebSockets 2026.6 en is een drop-in-toevoeging: de BotDetection-eigenschap staat standaard uitgeschakeld, zodat bestaande projecten onaangetast blijven totdat u het inschakelt. De functie is beschikbaar voor Delphi (7 tot en met 13), C++Builder en de .NET-editie.

Klanten met een actief abonnement kunnen de nieuwe build downloaden uit het klantengedeelte. Proefgebruikers kunnen het bijgewerkte installatieprogramma ophalen op esegece.com/products/websockets/download.

Vragen, feedback of hulp bij migratie? Neem contact op — u krijgt een antwoord van de mensen die de code hebben geschreven.