“¿Puedo identificar bots por IP?” es una de las preguntas más frecuentes que recibimos sobre el filtrado del lado del servidor. La respuesta sincera es: la IP por sí sola es un punto de partida, no un veredicto — pero combinada con unas pocas señales bien elegidas se convierte en uno fiable. sgcWebSockets 2026.6 añade un nuevo módulo de Detección de bots al componente TsgcWebSocketFirewall que hace exactamente eso, clasificando cada IP que se conecta mediante cuatro señales independientes.
La Detección de bots se sitúa junto a las funciones del firewall que ya conoces — lista negra / lista blanca, GeoIP, fuerza bruta, limitación de velocidad, puntuación de amenazas — y sigue el mismo diseño basado en propiedades de componente. Este artículo explica cómo funciona y cómo configurarlo.
Cuatro señales, una clasificación
El módulo evalúa cada IP frente a cuatro señales independientes y resuelve un único valor TsgcBotClassification:
- Rangos de IP de bots conocidos — compara la IP con los rangos publicados de rastreadores (Googlebot, Bingbot, GPTBot, ClaudeBot…) cargados desde un archivo CIDR. Una coincidencia significa un rastreador genuino y declarado.
- Detección de centros de datos / alojamiento — marca las IP que pertenecen a rangos de proveedores de nube y VPS (AWS, Hetzner, OVH…). Los usuarios reales rara vez se conectan desde ASN de centros de datos; el tráfico automatizado lo hace muy a menudo.
- Reverse DNS confirmado (FCrDNS) — realiza una consulta PTR sobre la IP y luego confirma hacia adelante que el nombre de host resultante vuelve a apuntar a la misma IP. Esta es la única forma fiable de distinguir un Googlebot real de cualquier cosa que simplemente afirme serlo en una cabecera.
- Reputación DNSBL — consulta listas de bloqueo DNS (Spamhaus y otras) en busca de IP con un historial conocido de abuso.
El resultado es uno de seis valores:
TsgcBotClassification = (bcUnknown, bcVerifiedCrawler, bcDatacenter,
bcSuspectedBot, bcBlocklisted, bcHuman);
La detección basada solo en IP tiene limitaciones reales — las direcciones se comparten detrás de CGNAT, rotan y los bots sofisticados se ocultan dentro de grupos de proxies residenciales. Por eso la Detección de bots está concebida para darte una buena puntuación de primera pasada, no una verdad absoluta. Y por eso mismo, por diseño, nunca bloquea una conexión por sí sola.
Activar la Detección de bots
Todo reside bajo la nueva propiedad BotDetection. Activa las señales que quieras y apunta las basadas en archivo a sus datos:
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;
Las dos señales basadas en archivo reutilizan el mismo motor CIDR rápido y con búsqueda binaria que impulsa la base de datos GeoIP del firewall, de modo que incluso las listas de rangos grandes se resuelven en microsegundos.
Reverse DNS y DNSBL nunca bloquean el hilo de aceptación
Reverse DNS y DNSBL son consultas DNS en vivo — ejecutarlas en línea en el hilo de aceptación de conexiones sería una denegación de servicio autoinfligida. En su lugar, la Detección de bots las resuelve en un hilo de trabajo en segundo plano y sirve cada clasificación desde una caché. En caso de fallo de caché, la IP se pone en cola para su resolución y la llamada actual devuelve bcUnknown de inmediato; cuando la consulta termina, la caché se actualiza y se dispara el evento OnBotDetected. La propiedad CacheDurationSec controla durante cuánto tiempo se reutiliza un veredicto antes de volver a comprobar la IP.
Solo clasificación: OnBotDetected
La Detección de bots es solo de clasificación. Nunca deniega una conexión por sí misma — dispara un evento, actualiza las estadísticas del firewall (un nuevo contador fvBot) y deja la decisión de política en tus manos. Así se evita que un rastreador verificado mal clasificado sea descartado silenciosamente.
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;
También puedes solicitar un veredicto en cualquier momento con GetBotClassification — útil para adaptar una respuesta en lugar de filtrar una conexión:
if oFirewall.GetBotClassification(vClientIP) = bcVerifiedCrawler then
// serve a lightweight, cache-friendly variant to the crawler
ServeStaticSnapshot
else
ServeFullApp;
Actuar sobre un veredicto: el motor de Reglas personalizadas
Cuando sí quieres bloquear, lo activas explícitamente a través del motor de Reglas personalizadas existente del firewall. Cada TsgcFirewallRuleItem incorpora una nueva propiedad BotType: configúrala y la regla coincidirá con las conexiones cuya clasificación sea igual a ese valor. Luego puedes denegarlas, vetarlas o registrarlas — reutilizando toda la maquinaria de reglas que ya tienes.
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;
Esta separación — clasificación pasiva en el módulo de Detección de bots, aplicación activa solo a través de una regla que tú escribes — significa que la función nunca puede sorprenderte bloqueando tráfico que querías conservar.
Aporta tu propio veredicto: OnResolveBot
Si ya ejecutas un servicio de inteligencia de amenazas, una caché de reputación interna o un feed comercial de mitigación de bots, asigna el evento OnResolveBot. Cuando está establecido, tu manejador proporciona el veredicto y los pasos del resolvedor integrado se hacen a un lado — el mismo patrón de sustitución que el firewall ya usa para el OnResolveCountry de 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
La demo Firewall en Demos\04.WebSocket_Other_Samples\13.Firewall tiene una nueva pestaña Bot Detection donde puedes activar cada señal, cargar los archivos de rangos de bots conocidos y de centros de datos, configurar las zonas DNSBL y usar un comprobador en vivo “Classify IP” para ver el veredicto de cualquier dirección — con cada clasificación transmitida al registro de eventos.
Disponibilidad
La Detección de bots se incluye en sgcWebSockets 2026.6 y es una incorporación lista para usar: la propiedad BotDetection está desactivada por defecto, de modo que los proyectos existentes no se ven afectados hasta que la actives. La función está disponible para Delphi (7 a 13), C++Builder y la edición .NET.
Los clientes con una suscripción activa pueden descargar la nueva compilación desde el área de clientes. Los usuarios de prueba pueden obtener el instalador actualizado en esegece.com/products/websockets/download.
¿Preguntas, comentarios o ayuda con la migración? Ponte en contacto — recibirás una respuesta de las personas que escribieron el código.
