Instalación y configuración de módulo Mod_Evasive Servidor Web (Apache)

El presente instructivo tiene como finalidad dar a conocer el procedimiento para la instalación y configuración del módulo Mod-Evasive (minimizar ataques HTTP DoS) para Apache2 en la distribución GNU/Linux Debian version 8.0 ( “jessie”) stable.

Mod_evasive es un módulo de apache que básicamente lo que hace es mantener una tabla dinámica con las páginas (URIs) accedidas por las distintas direcciones IP de los clientes (navegadores) que acceden al site web (Apache), y permite ejecutar algunas acciones cuando una misma IP (atacante) solicita un mismo recurso (una misma URI o elementos de un mismo sitio) más de n veces en m segundos. La acción por default que ejecuta el mod_evasive es, una vez superado el máximo de requests por segundo permitidos, bloquear durante una cantidad de tiempo (segundos) a la IP del cliente (atacante) devolviendo un error 403 (Forbidden) a la petición HTTP, de igual forma permite ejecutar un comando de sistema al registrar un “intento de ataque”, lo que flexibiliza la configuración, de por ejemplo, reglas de iptables para bloquear la IP del cliente (atacante).

Requisitos:

  • Se debe contar con el funcionamiento de servicio Web apache2
  • Se debe contar con suficiente privilegios para la instalación de aplicativos

Plataforma:

  • La presente instalación es para equipos de arquitectura 64 bits.
  • El sistema operativo empleado es ‘GNU/Linux’ Debian versión 8.0, actualmente estable

Configuraciones Relacionados:

Aplicaciones:

  • Apache -> 2.4.10 (aunque es funcional para Apache 2.2)
  • libapache2-mod-evasive -> 1.10.1-3
  • Apache-utils -> 2.4.10-10+deb8u5 (para las pruebas con ApacheBench)

Instalación de Dependencias

operador@servidor:/$ sudo aptitude install libapache2-mod-evasive

Configuración de Módulo Mod_Evasive

1. Editar archivo de configuración:

 operador@servidor:/# nano /etc/apache2/mods-enabled/evasive.conf

2. Efectuar los siguientes cambios:

 
    DOSHashTableSize    2048
    DOSPageCount        5
    DOSSiteCount        100
    DOSPageInterval     1
    DOSSiteInterval     2
    DOSBlockingPeriod   10

    #DOSWhitelist
    #DOSEmailNotify      you@yourdomain.com
    #DOSSystemCommand    "su - someuser -c '/sbin/... %s ...'"
    DOSLogDir           "/var/log/mod_evasive"

Nota: es importante tomar en cuenta que los valores son referenciales y deben ser ajustados de acuerdo con la cantidad y el tipo de tráfico del (site) servidor web

Donde:
– DOSHashTableSize = Tamaño de la tabla hash utilizada para el seguimiento de la actividad en cada dirección IP. Al aumentar este número, será más rápido detectar los sitios que el cliente ha visitado en el pasado, pero puede afectar (consumo alto de memoria) el rendimiento global del servicio. Es recomendable aumentar este parámetro en los servidores web de carga pesada.

-DOSPageCount = Número máximo de peticiones posible de una misma IP a la misma página, en el tiempo (segundos) definido en “DOSPageInterval”. Una vez que se alcanza este número de peticiones, la IP será bloqueada.

– DOSSiteCount = Número máximo de peticiones posible de una misma IP a cualquier página del site, en el tiempo (segundos) definido en “DOSSiteInterval”. Una vez que se alcanza este número de peticiones, la IP será bloqueada.

– DOSPageInterval = Cantidad de tiempo (segundos) para el parámetro umbral DOSPageCount.

– DOSSiteInterval = Cantidad de tiempo (segundos) para el parámetro umbral DOSSiteCount.

– DOSBlockingPeriod = Cantidad de tiempo (en segundos) que el atacante (IP) será bloqueada. Durante este tiempo, todas las solicitudes posteriores del atacante (IP) se traducirá en un error 403 (Forbidden).

– DOSWhitelist = IP o rango de IP que no será excluido de las reglas de mod_evasive.

– DOSEmailNotify = Dirección de correo electrónico que recibirá información sobre el ataque.

– DOSSystemCommand = Comando o instrucción en bash que será ejecutada cuando el atacante (IP) sea bloqueada

– DOSLogDir = Ruta (path) para el almacenamiento de log’s

3. Mod_evasive no crea el directorio de las bitácoras (log’s) por ello hay que crearlo:

operador@servidor:/# mkdir -p /var/log/mod_evasive

4. Asignar dueño:

operador@servidor:/# chown -R www-data:root /var/log/mod_evasive

5. Reinciar el servicio de apache

operador@servidor:/# /etc/init.d/apache2 restart

6. Probar mod_evasive con el test incluido en mod_evasive:

operador@servidor:/# perl /usr/share/doc/libapache2-mod-evasive/examples/test.pl

7. Probar mod_evasive con ApacheBench:

operador@servidor:/# ab -n100 -c5 http://127.0.0.1/index.html:80
This is ApacheBench, Version 2.3 
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking 127.0.0.1 (be patient).....done

Server Software:        Apache/2.4.10
Server Hostname:        127.0.0.1
Server Port:            80

Document Path:          /index.html:80
Document Length:        287 bytes

Concurrency Level:      5
Time taken for tests:   0.039 seconds
Complete requests:      100
Failed requests:        94
   (Connect: 0, Receive: 0, Length: 94, Exceptions: 0)
Non-2xx responses:      100
Total transferred:      47734 bytes
HTML transferred:       29734 bytes
Requests per second:    2582.31 [#/sec] (mean)
Time per request:       1.936 [ms] (mean)
Time per request:       0.387 [ms] (mean, across all concurrent requests)
Transfer rate:          1203.75 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.2      0       1
Processing:     1    2   1.6      1      14
Waiting:        0    1   0.7      1       3
Total:          1    2   1.7      2      14

Percentage of the requests served within a certain time (ms)
  50%      2
  66%      2
  75%      2
  80%      2
  90%      3
  95%      4
  98%      9
  99%     14
 100%     14 (longest request)

Nota: se puede verificar que de 100 solicitudes (-n100) sólo fueron procesadas 4, fallaron 94 (Failed requests: 94)

8. Revisar bitacoras (log’s) de apache:

operador@servidor:/# tail -f /var/log/apache2/access.log
127.0.0.1 - - [07/Sep/2016:14:40:08 -0430] "GET /?91 HTTP/1.0" 403 490 "-" "-"
127.0.0.1 - - [07/Sep/2016:14:40:08 -0430] "GET /?92 HTTP/1.0" 403 490 "-" "-"
127.0.0.1 - - [07/Sep/2016:14:40:08 -0430] "GET /?93 HTTP/1.0" 403 490 "-" "-"
127.0.0.1 - - [07/Sep/2016:14:40:08 -0430] "GET /?94 HTTP/1.0" 403 490 "-" "-"
127.0.0.1 - - [07/Sep/2016:14:40:08 -0430] "GET /?95 HTTP/1.0" 403 490 "-" "-"
operador@servidor:/# tail -f /var/log/apache2/access.log
[Wed Sep 07 14:40:08.410764 2016] [evasive20:error] [pid 901:tid 139781413480192] [client 127.0.0.1:47475] client denied by server configuration: /var/www/html/
[Wed Sep 07 14:40:08.411417 2016] [evasive20:error] [pid 901:tid 139781405087488] [client 127.0.0.1:47476] client denied by server configuration: /var/www/html/
[Wed Sep 07 14:40:08.412011 2016] [evasive20:error] [pid 901:tid 139781396694784] [client 127.0.0.1:47477] client denied by server configuration: /var/www/html/
[Wed Sep 07 14:40:08.412573 2016] [evasive20:error] [pid 901:tid 139781388302080] [client 127.0.0.1:47478] client denied by server configuration: /var/www/html/
[Wed Sep 07 14:40:08.413136 2016] [evasive20:error] [pid 901:tid 139781379909376] [client 127.0.0.1:47479] client denied by server configuration: /var/www/html/

Importante:
Hay que tener cuidado a la hora de configurar los parámetros disponibles, ya que al realizarlos de una forma exageradamente restrictiva, nosotros mismos podemos generar una denegación de servicio. De igual manera existe la posibilidad de generar “falso positivo” si los clientes acceden al servidor utilizando la misma dirección IP. Esto sucede cuando todas las peticiones hacia la internet, tienen como salida un router o firewall que poseen un NAT configurado contra una única IP pública (algo muy común) o mediante un servidor proxy.

Leer: mod_limitipconn es un módulo DSO para el servidor Web Apache para limitar el número máximo de conexiones simultáneas por IP

Enlaces:

How To Protect Against DoS and DDoS with mod_evasive for Apache on CentOS 7
http://dplinux.net/guia-servidor-en-debian/#__RefHeading__716_1318656761
http://customerhelp.co.za/linux/apache-web-server/stop-dns-injection-attacks-on-apache-server-using-mod-spamhaus.html
http://www.hackthesec.co.in/2016/05/how-to-protect-apache-server-from-dos-attack.html
http://opensource.adnovum.ch/mod_qos/
http://www.tail-f.com.ar/servicios/httpd/apache-httpd-servicios/instalar-mod_evasive-en-apache-para-dificultar-ataques-dos.html

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s