Identificar los intentos de abuso en Apache

Un servidor web que recibe peticiones de uso como proxy puede generar mucho tráfico. Aquí se presenta una solución que ignora a las peticiones abusivas.

Conectar a Internet una máquina que funciona como Proxy abierto (atendiendo a todos los clientes) creará muchos problemas. Pronto se detectará el nuevo Proxy y comenzarán a llegar peticiones. Peticiones que a medida que se sirven consumen ancho de banda en el router que conecta al Proxy con Internet. Cuando alguna web de Internet liste la IP de nuestro router como un proxy abierto, el número de peticiones aumentará y se provocará una denegación de servicio en la LAN.

diagrama_proxy-sololinux Identificar los intentos de abuso en Apache

El enrutador de la LAN, además del tráfico habitual, tendrá que trabajar con:

  • Todas las peticiones que envian los clientes del proxy desde Internet
  • Las diferentes conexiones del Proxy con los servidores web demandados por los clientes
  • La respuesta del Proxy hacia el cliente

Así pues, dejando de lado los problemas que para Internet supone un Proxy abierto (el servidor WWW verá que los contenidos los pide la IP del router en Internet, no el cliente real), para la organización que lo mantiene no aporta ninguna ventaja y sí muchos problemas:

  • Un tremendo consumo de ancho de banda que provocará una saturación del router, dejando con un acceso muy lento a Internet a los usuarios de la LAN y consiguiendo que desde Internet sea muy lento acceder a los servidores que se encuentran tras el router.
  • Posibles quejas por las fechorias que los clientes del Proxy han realizado a lo largo y ancho de Internet.

Así pues NO ES UNA BUENA IDEA dejar funcionando un Proxy abierto en una máquina que está conectada a Internet1. Además hay que advertir que los efectos negativos no cesarán por completo cuando el proxy deje de atender a los clientes, pues una vez que nuestra IP está listada en diferentes webs seguirán lloviendo peticiones a nuestro router haya o no un proxy abierto en nuestra LAN.

También hay que recordar que Apache puede actuar como Proxy y si no se tiene especial cuidado durante su configuración es posible que haga de proxy abierto.

Nos llueven las peticiones para que actuemos como Proxy, qué hacemos ?

Si ya se ha llegado a esta situación, porque la dirección IP de nuestro router ha sido listada en alguna web como proxy abierto, se imponen medidas drásticas.

Un centro educativo de la XEiLL sufrió esta situación. En el servidor de la XEiLL se ejecutaba Apache actuando como proxy para el servidor Zope que ejecutaba Plone para mantener la web del centro. Durante la configuración del servidor, y por tremendo error, Apache funcionó un tiempo como proxy abierto. El proxy fué detectado y la IP del router apareció en diferentes webs, y aún sigue aunque hace más de un año que no actúa como proxy abierto.

Si la IP de nuestro router aparece en Internet listada como Proxy habrá quien intente utilizarlo, y a nuestro servidor web le llegarán todas las peticiones.

Fragmento del fichero de registro de Apache (/var/log/httpd/access_log):

Se puede comprobar que el servidor web recibe un montón de peticiones que no corresponden a su dominio, y obtienen el código de error 404 (No encontrado). El problema es que para cada una de esas peticiones nuestro servidor web transmite la página web correspondiente a documento no encontrado y esto puede suponer un gran tráfico.

Solución: Ignorar las peticiones no deseadas

No tenemos ningún control sobre los paquetes que recibimos, pero sí sobre los que enviamos de manera que la única medida que podemos tomar es no contestar a ninguna de esas peticiones con ningún paquete, ni siquiera con la página de documento no encontrado.

Gracias a netfilter/iptables podremos instruir a nuestro máquina para que descarte los paquetes provenientes de IPs que intentan abusar de nuestro servidor, sin ninguna respuesta. El problema es que el conjunto de máquinas que intentan utilizarnos como proxy varía a lo largo del tiempo. De alguna forma deben incluirse en la lista de direcciones a ignorar a las nuevas máquinas que nos intenten utilizar como proxy y deberemos borrar de la lista a las que hace tiempo que no nos envian ningún paquete, porque debemos evitar que el número de IPs baneadas crezca sin fin.

 

La estrategia a seguir para proteger a nuestro servidor será programar en Cron una tarea periódica de forma que cada minuto:

  1. Se busquen en las últimas 1000 (parámetro ajustable) líneas del fichero de registro de Apache indicios de abuso. Detectaremos las líneas abusivas porque tienen el código de error 404 o porque en la petición se indica un puerto (por ejemplo, GET dominio.com:8081). Sólo aceptaremos líneas que comiencen con una IP y ése dato será el único que nos interese.

    Lo más destacable de la sentencia anterior es la expresión regular del primer grep, que debe concordar con todas las líneas de registro en las que aparece el código de error 404 o bien con aquellas que intentan realizar peticiones a determinado puerto (“CONNECT 65.54.244.72:25 HTTP/1.0”).
  2. Ordenaremos la lista de IPs obtenida en el paso anterior y después contaremos el número de veces que se repite cada una de ellas. Así sabremos el número de peticiones abusivas que se han recibido desde cada IP en las 1000 líneas exploradas. Aquellas IPs desde las que nos hayan llegado más de 4 (otro parámetro ajustable) intentos de abuso las incluiremos en la lista de direcciones a prohibir.
  3. Borraremos las reglas del cortafuegos (correspondientes al minuto anterior) e insertaremos reglas para bloquear las IPs prohibidas que se han obtenido en el punto 2.

De esta forma tan sencilla obtenemos un sistema que monitoriza las conexiones entrantes en busca de abusos, cuando alguien hace más de 4 peticiones incorrectas pasa a formar parte de la lista de IPs prohibidas, descartándose todos los paquetes que tengan por origen dicha IP. Y se mantendrá en dicha lista hasta que el abuso desaparezca de las últimas 1000 líneas del fichero de registro de Apache.

Después de poner en marcha el sistema se aprecia una gran mejora en el rendimiento de la LAN y en el desempeño del servidor web.

Si examinamos las reglas del cortafuegos:

Observamos la lista de IPs ignoradas y como en lo que llevamos de minuto se han recibido 108 paquetes (que se han descartado) desde 72.35.83.140.

Podemos hacer algo más ?

A nivel técnico lo más importante ya está hecho. Detectar quien abusa y protegerse de manera dinámica. Después es posible interesarse por las direcciones IPs que crean problemas. Por ejemplo, la dirección 72.35.83.140 intenta conectar con nuestro proxy unas 500 veces por minuto.

Si consultamos la base de datos Whois:

Encontramos que la IP pertenece a www.bocacom.net, una empresa de hosting. Procedemos a explicarles la situacion y si procede la correspondiente denuncia.

1 Con la posible excepción de que se esté montando un Honeypot.

 

facebook Identificar los intentos de abuso en Apachetwitter Identificar los intentos de abuso en Apachegoogle Identificar los intentos de abuso en Apachediggit Identificar los intentos de abuso en Apachepinterest Identificar los intentos de abuso en Apachelinkedin Identificar los intentos de abuso en Apacheprint Identificar los intentos de abuso en Apacheemail Identificar los intentos de abuso en ApacheSi te gusto, comparte el articulo.

Artículos Relacionados

Agregar comentario


*

Recibe nuestro newsletter

Suscribete a nuestro newsletter y mantente informado con nuestros últimos artículos, noticias y más. Todo completamente gratis.