Va para un mes ó más que desactivé los trackback de Cuaderno de Campo cansado de tener que borrar cada dia 30 ó 40 trackback de spam atrapados por Akismet. A continuación activé Disallow: /trackback/ en robots.txt. Pasado un tiempo prudencial empezar a banear cualquier IP que trate de enviar algo via trackback.

En los primeros tres dias se capturaron y banearon alrededor de 150 IPs, en los siguientes el número ha descendido considerablemente capturandose unas 5-10 diarias hasta las 216 que actualmente tienen el acceso prohibido al servidor. El método utilizado es el siguiente:

Un script lee cada 6 horas el registro log de Apache (el archivo log se renueva cada 24 horas), obtiene las IP que han realizado un POST a URL con /trackback y las añade a un archivo con el siguiente formato:SetEnvIfNoCase Remote_Addr 76.20.228.53 spambots

El script es bien sencillo:#!/bin/bash
logfile="/var/log/apache2/access_log"
banfile="/home/trebol-a/banbots.txt"
listaips=`cat $logfile|grep "/trackback/"|grep POST|awk '{print $1}'`
for ip in $listaips; do
echo -e "SetEnvIfNoCase Remote_Addr $ip spambots\n" >> $banfile
done
sort -u $banfile -o $banfile

El script lee el log de apache, obtiene las IPs que hicieron POST a trackback y las incorpora a la lista. A continuación sort las ordena, elimina los duplicados que pudiera haber y reconstruye el archivo.

A continuación solo queda insertar este archivo en la configuración de apache, añadiendo por ejemplo en (para openSuse) /etc/apache2/httpd.conf la linea Include /home/trebol-a/banbots.txt
Cuando Apache reciba una IP incluida en esa lista le asigna la variable ambiental “spambots”

Denegando en el acceso a aquellas visitas que contengan spambots, por ejemplo: Order allow,deny
Allow from all
Deny from env=spambots

Podeis ver/copiar la lista de IP baneadas aqui.
Para que la lista actualizada tome efecto podeis reiniciar el servidor con apache2ctl -k graceful. Esta orden relee la configuración y reincia los procesos hijos conforme ván terminando la solicitud en que se encuentren ocupados en ese momento.