“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:
- Bekende bot-IP-bereiken — vergelijk het IP met gepubliceerde crawlerbereiken (Googlebot, Bingbot, GPTBot, ClaudeBot…) geladen uit een CIDR-bestand. Een overeenkomst betekent een echte, gedeclareerde crawler.
- Datacenter- / hostingdetectie — markeer IP's die behoren tot bereiken van cloud- en VPS-aanbieders (AWS, Hetzner, OVH…). Echte gebruikers verbinden zelden vanuit datacenter-ASN's; geautomatiseerd verkeer doet dat zeer vaak wel.
- Forward-confirmed reverse DNS (FCrDNS) — voer een PTR-opzoeking uit op het IP en bevestig vervolgens de resulterende hostnaam terug naar hetzelfde IP. Dit is de enige betrouwbare manier om een echte Googlebot te onderscheiden van iets dat alleen maar in een header beweert er een te zijn.
- DNSBL-reputatie — bevraag DNS-blokkeerlijsten (Spamhaus en andere) voor IP's met een bekend misbruikverleden.
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.
