# declaramos las variables mas utilizadas
IPTABLES="/sbin/iptables"
SPAM_URL_spamhaus="http://www.spamhaus.org/drop/drop.lasso"
SPAM_FILE_TMP="/home/backup/scripts/spamhaus.ips"
SPAM_TABLE_spamhaus="Spamhaus"
SPAM_IPS=$(cat $SPAM_FILE_TMP | grep -iE "^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}" | awk -F\; '{ print $1 }')

# borramos el fichero de ips anterior si existe.
# rm -f $SPAM_FILE_TMP
# descargamos la ultima actualización realizada por spamhaus.org.
# -q no muestra ningún log | -c para continuar la descarga si se cortó.
wget -qc $SPAM_URL_spamhaus -O $SPAM_FILE_TMP

# creamos las lista de ips.
$IPTABLES -n -L INPUT | grep -q "$SPAM_TABLE_spamhaus"

if [ $? -eq 0 ] ; then
   # borramos todas las reglas que contiene la cadena spamhaus.
   $IPTABLES -F $SPAM_TABLE_spamhaus
else
   # crea una nueva cadena llamada spamhaus si no existe.
   $IPTABLES -N $SPAM_TABLE_spamhaus
   # añade la regla spamhaus para todo el tráfico entrante.
   $IPTABLES -A INPUT -j $SPAM_TABLE_spamhaus
fi
   # con RETURN salta el objetivo si existe.
   $IPTABLES -A $SPAM_TABLE_spamhaus -j RETURN

# recorremos la lista de IPs para ir incluyendolas una por una a iptables.
for IP in $SPAM_IPS 
do
    # inserta una nueva regla a la cadena con la opciones especificadas.
    # -p all (bloquea el trafico recibido a través de los protocolos icmp, tcp, udp) 
    # -s ip (ip origen del paquete) 
    # -j DROP (elimina el paquete recibido)
    $IPTABLES -I $SPAM_TABLE_spamhaus -p all -s $IP -j DROP
done

