BookinglyTech News
Ciberseguridad

Reportar en masa IPs abusivas a AbuseIPDB desde la línea de comandos

Un administrador convierte su access.log de Traefik en un CSV de reportes para AbuseIPDB con grep, awk, sort, jq y una llamada a la API. La receta es corta y reutilizable.

2 min de lecturaLobsters0 vistas

Una botnet lleva días rastreando una instancia local de Gitea pidiendo cada URL imaginable. No se conforma con la tabla: la pide ordenada ascendente, descendente, por la segunda columna en ambos sentidos y un largo etcétera. Cada petición llega desde una IP distinta repartida por medio mundo y con cadenas de User-Agent aleatorias, muchas de las cuales ni existen. El resultado es carga inútil en el servidor y tráfico desperdiciado en la línea.

Hace unos años eso se habría llamado DDoS. Aquí el problema no es tumbar el servicio, sino ensuciar los logs y consumir recursos sin parar. La respuesta del administrador afectado ha sido automatizar el reporte de esas direcciones a AbuseIPDB, un servicio en la órbita de spamcop.net pero orientado a direcciones IP en lugar de a correo basura.

Del access.log al CSV

El primer paso es filtrar el log. Con el formato clásico de Traefik basta encadenar grep para quedarse con las respuestas 302 y las peticiones que llevan el parámetro sort=, y luego awk para extraer la IP, la marca de tiempo y construir el comentario. La categoría que se asigna a cada reporte es la 19, que AbuseIPDB reserva para bots web maliciosos.

El truco para el campo temporal es limpiar los corchetes que Traefik añade en las marcas de tiempo, porque awk los arrastra y la cadena resultante no se parsea bien con strtotime(). Después, un sort con la coma como separador y la primera columna como clave única elimina las IPs duplicadas. El resultado es un CSV listo para subir a mano o para enviar a través de la API con una petición curl contra el endpoint de reporte masivo.

Quien haya migrado a los logs JSON de Traefik tiene una vía más cómoda. jq permite seleccionar las entradas con estado 302 cuyo RequestPath contenga sort= o blame, y volcar directamente las columnas con formato CSV. Ahí conviene limitar el volumen: AbuseIPDB impone un tope de 5.000 reportes diarios, así que el flujo descarta lo antiguo y se queda con las últimas 5.000 líneas antes de deduplicar.

Por qué esto importa a quien administra

El valor de la receta no está en la sintaxis concreta, sino en el patrón: logs de proxy, filtrado por firma de comportamiento y reporte automatizado. Cualquier despliegue con Gitea, Forgejo o un gestor de repositorios expuesto a internet recibe variantes de este scraping, y distinguir el ruido de un bot del tráfico legítimo es la parte que nunca sale gratis.

Automatizar el reporte tiene un efecto secundario útil: alimenta las listas que otros administradores consultan para bloquear. También conviene recordar que un 302 temporal en lugar de un 404 puede estar sirviendo de señuelo mientras el escaneo continúa, tal y como le ocurrió a este administrador durante tres días seguidos.