Quickstart
Esta guía recorre la puesta en marcha de Abusive HTTP Watch sobre un access log real en un sistema OpenBSD. El mismo flujo funciona en FreeBSD y Linux con pequeños ajustes.
1. Instalar el script
Depositar el script en una ubicación del sistema y hacerlo ejecutable.
doas install -m 0755 abusive_http_watch.pl /usr/local/sbin/abusive_http_watchEl daemon no tiene dependencias Perl externas — solo la biblioteca
estándar (Fcntl, IO::Handle, Sys::Syslog, Socket). Si
perl está en el sistema, el script corre.
2. Crear el directorio de runtime
El daemon escribe la blocklist en un único fichero. Elige una ruta desde la que tu firewall pueda leer.
doas mkdir -p /var/www/run
doas chown _www:_www /var/www/runEl fichero blocklist (/var/www/run/abusive_http_hosts por
defecto) se crea en el primer arranque si no existe.
3. Probar contra un log reciente
Antes de cablear el daemon al sistema, lanzarlo directamente contra un access log para ver su comportamiento.
ABUSIVE_DEBUG=1 abusive_http_watch /var/www/logs/access.logLa salida debug ([dbg] ip=…, [dbg] token match ip=…,
[dbg] count ip=… N/3) deja observar el matcher en tiempo real.
Cuando una IP cruza el umbral de hits (3 por defecto), aparece
[added] <ip> -> /var/www/run/abusive_http_hosts.
Ctrl-C para parar. Inspeccionar la blocklist:
cat /var/www/run/abusive_http_hostsDebes ver una lista corta de IPs — los probers más ruidosos en la ventana observada.
4. Cablear el firewall a la blocklist
En OpenBSD, añadir una tabla <abusive> que carga desde el
fichero:
table <abusive> persist file "/var/www/run/abusive_http_hosts"
block in quick on egress from <abusive> label abusiveRecargar pf:
doas pfctl -f /etc/pf.confLa tabla bloquea ahora todo desde esas IPs en el firewall — sin gastar más CPU del servidor web.
Para recoger entradas nuevas automáticamente, recargar la tabla en un intervalo corto. Cron sencillo:
*/2 * * * * /sbin/pfctl -t abusive -T replace -f /var/www/run/abusive_http_hostsEn Linux, el equivalente es un set nftables o ipset recargado
desde el mismo fichero por un cron similar.
5. Ejecutar como daemon
Instalar el script rc.d (ver
Operación para
el script). Activar y arrancar:
doas rcctl enable abusive_http_watch
doas rcctl start abusive_http_watchEl daemon sigue ahora el log de forma continua y escribe la
blocklist. tail -f /var/log/daemon (o la facility syslog
configurada) muestra los eventos added en vivo.
6. Verificar
Esperar unos minutos, luego:
wc -l /var/www/run/abusive_http_hosts
doas pfctl -t abusive -T show | wc -lLas cifras deben coincidir. Si lo hacen, has terminado — el daemon corre, la blocklist crece, el firewall filtra.
Si el fichero blocklist sigue vacío tras una o dos horas en un servidor web público, tu access log está anormalmente limpio (enhorabuena) o el daemon no lee la ruta que crees. Ver Operación para troubleshooting.