Como instalar mod_spamhaus en Apache

Funny-T-shirt-Designs-6A modo personal les hago de su conocimiento que tengo varios sitios web y por lo tanto cuento con un servidor dedicado en el cual están alojados. Aquellos que tienen o administran un servidor dedicado saben lo complicado que es poder distinguir entre tráfico de rastreadores o personas.

Desde hace meses empece a tener un incremento de «Bots» no deseados en mis sitios que se dedican a copiar mi contenido y publicarlo en algún lugar recóndito y perdido como Tristan da Cunha, por ello decidí hacer algo al respecto.

  • Lo primero que intenté fue crear un archivo robots.txt bloqueando el acceso a todos esos Bots y dándole permiso solo a los buscadores más confiables, pero esto fue en vano esos Bots dijeron algo como «Es mi primer día» y siguieron entrando a mis sitios, por lo cual lo descarté.
  • Lo segundó que intenté fue configurar mi CSF (ConfigServer Security & Firewall) asignando valores más estrictos al CONNLIMIT y CT_INTERVAL, pensé en instalar mod_evasive, pero con el CSF es suficiente para mí por lo que no lo hice y esta acción funcionó, pero el firewall también empezó a bloquear a rastreadores permitidos como los de Google por ejemplo, ya que su frecuencia de rastreo es demasiado alta (cerca de 400mil páginas al día) por lo que tuve que agregar a mi «WhiteList» las redes de los buscadores permitidos, pero al final de todo tuve que regresar a mi CSF el valor original ya que NO todos los bloques de IPs son consecutivos para los buscadores.
  • Lo tercero que intenté me funcionó durante muchos meses y fue por un fragmento de código en PHP que desarrollé el cual consiste en la utilización de Servicios DNS based Block List (DNSBL). Estos servicios como su nombre lo indica, son listas que contienen una base de datos de direcciones IP que se encuentran a disposición de las personas que lo requieran y son listas de Spammers o Botnets al cual se obtienen o se consultan por medio de una verificación DNS. Estas listas son actualizadas de manera constante y con información en tiempo real.

Hay muchas organizaciones que ofrecen el servicio de DNSBL de manera gratuita por lo que puse manos a la obra y nació lo siguiente:


function checktheip_bl ( $direc_ip_black, $whitelist, $blacklist )
{
if (in_array($direc_ip_black, $whitelist)){ return true; }
if (in_array($direc_ip_black, $blacklist)){ return false; }
$blacklists = array('b.barracudacentral.org','dnsbl-1.uceprotect.net','dul.dnsbl.sorbs.net','dnsbl.sorbs.net','psbl.surriel.com','cbl.abuseat.org','xbl.spamhaus.org','spam.dnsbl.sorbs.net','http.dnsbl.sorbs.net','new.dnsbl.sorbs.net','web.dnsbl.sorbs.net','dnsbl-2.uceprotect.net','dnsbl-3.uceprotect.net');
$parts = explode('.', $direc_ip_black);
$ip = implode('.', array_reverse($parts)) . '.';
foreach($blacklists as $bl) {
$check = $ip . $bl;
if ($check != gethostbyname($check)) {
$txtx = @fopen("blacklist.txt","a+");
@fwrite($txtx, "$direc_ip_black \n");
@fclose($txtx);
return false;
}
}
return true;
}

$direc_ip_black = $_SERVER['REMOTE_ADDR'];
if (checktheip_bl($direc_ip_black, $whitelist, $blacklist)==false){
die('Se ha denegado su acceso');
}

Como podrán observar utilicé muchos servicios como: Sorbs, Barracuda, Spamhaus entre otros, y esto me funcionó por mucho tiempo sin embargo había un problema: LENTITUD, el utilizar el DNSBL provoca que las páginas donde se implemente tarden de 2 a 5 segundos más en cargar, por lo que al final también tuve que desecharlo.

Sabía que los DNSBL eran la solución, pero el problema es que hay que pasar por las librerías de red hasta la función gethostbyname de PHP.

¿Como podía solucionarlo?

La respuesta es sencilla pero no fácil, usando los servicios DNSBL a nivel de red y no de procesamiento. ¿Qué quiero decir? que debía encontrar la forma de poder integrar el servicio DNSBL con Apache ya que este es el que proporciona en primera instancia la conectividad. Y fue entonces que encontré «mod_spamhaus».

Mod_SpamHaus es un módulo gratuito para el servidor Apache, desarrollado por Luca Ercoli en 2008 y sirve en primera instancia, para proteger a tu servidor contra Spammers o Botnets utilizando el servicio DNSBL de spamhaus.org, por fin una solución que promete ser la definitiva y sorpresa, poca documentación.

En fin, decidí probar y aventurarme hasta poder instalarlo y ahora les paso el tip; he aquí los pasos para instalar el «mod_spamhaus» en un servidor Linux.

Paso 1:
Descarga el «mod_spamhaus» desde tu servidor, si tienes interfaz gráfica bájalo desde http://sourceforge.net/projects/mod-spamhaus/
si no por línea de comandos:

wget http://www.puchunguis.com/blog/mod-spamhaus-0.7.tar.gz

Paso 2:
En tu consola, dirígete a la carpeta donde almacenaste el archivo y descomprime el contenido del paquete:

tar zxvf mod_evasive_1.10.1.tar.gz

Paso 3:
Ingresa a la carpeta descomprimida:

cd /mod-spamhaus/src/

Paso 4:
Edita el archivo mod_spamhaus.c mediante nano o vim, lo que tu desees:

nano mod_spamhaus.c

Paso 5:
En la línea 97 encontrarás lo siguiente:
dnshost=»sbl-xbl.spamhaus.org»;

Deberás reemplazarlo por:
dnshost=»zen.spamhaus.org»;

Esto debido a que ZEN a venido a reemplazar a SBL-XBL y el archivo por ser del año 2008 no trae por default esta configuración.

En fin guarda los cambios (si usaste nano con CTRL+X).

Paso 6:
Instalaremos el módulo como extensión de apache usando apxs (APache eXtenSion) con el siguiente comando:

/usr/sbin/apxs -i -a -c mod_spamhaus.c

Paso 7:
Generamos un archivo de configuración para nuestro nuevo módulo mediante nano, vim o el editor que gustes, cabe mencionar que deberás crear este archivo en el folder correspondiente a los archivos de configuración de tus módulos, en mi caso es el siguiente:

nano /etc/httpd/conf/extra/httpd-spamhaus.conf

Paso 8:
Escribimos los parámetros de configuración de nuestro nuevo módulo y guardamos:


<IfModule mod_spamhaus.c>
MS_METHODS POST,PUT,OPTIONS,CONNECT
MS_WhiteList /etc/httpd/mod_spamhaus.wl
MS_CacheSize 256
</IfModule>

Paso 9:
Edita el archivo de configuración de Apache para agregar el nuevo módulo y este arranque con el servicio en mi caso mi archivo de configuración está aquí:

nano /etc/httpd/conf/httpd.conf

Dirígete al final del archivo e ingresa lo siguiente:

Include conf/extra/httpd-evasive.conf

No omito mencionarte que en tu caso pudieras tener la carpeta de configuración de tus módulos en otra ubicación, por lo que si este es tu caso deberás usar la dirección donde creaste el archivo (Paso 7).

Paso 10:
Para finalizar solo deberás reiniciar tu servicio de Apache:
service httpd restart

Conclusiones

He empezado a usar este módulo desde hace una semana y la velocidad es mucho menor que mi método mediante PHP y hace su trabajo al revisar los logs de Apache noté registros como los siguientes:

[Thu May 23 02:35:43 2013] [crit] [client 121.205.241.61] mod_spamhaus: address 61.241.205.121.zen.spamhaus.org is blacklisted. Deny connection to www.****.com/******/index.php

Por lo que si te molestan los BOTS y SPAMMERs del Internet, esto pudiera ayudarte.

Si te interesa la seguridad, también puedes instalar mod_security y mod_evade, y puedes protegerte de los ataques DDOS con Cloudflare

Saludos a todos.

Leave a Reply

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.