Mod Evasive – Apache

Introducción

Hoy vamos a trabajar con el módulo de Apache Mod Evasive, el cual nos permitirá controlar el número de peticiones por IP.

Esto nos permite tener controlado si existe algún tipo de ataque de alta capacidad (DDOS y Brute Force) el cual nos puede saturar de conexiones los servidores Apache (frontales web).

Instalando Mod Evasive

Para empezar a trabajar:

  • Ubuntu 18.04
  • Apache instalado

Por lo tanto para todos los sistemas basados en Debian será compatible esta instalación.

 apt-get install libapache2-mod-evasive

Esto nos instalará el módulo en nuestro servidor Apache y además lo habilitará automáticamente.

Tened en cuenta, aunque lo haya habilitado, todas las configuraciones por defecto están comentadas.

Configurando Mod Evasive

Por defecto la configuración, una vez habilitado, se encuentra en el siguiente fichero:

/etc/apache2/mods-enabled/evasive.conf

La configuración por defecto:

<IfModule mod_evasive20.c>
 DOSHashTableSize 3097
 DOSPageCount     20
 DOSSiteCount     100
 DOSPageInterval  1
 DOSSiteInterval  1
 DOSBlockingPeriod   10
 
 DOSEmailNotify   xxx@ejemplo.com
 #DOSSystemCommand "su - someuser -c '/sbin/... %s ...'"
 DOSLogDir        "/var/log/mod_evasive"
</IfModule>

Explicación de los parámetros:

DOSHashTableSize: Si se baja la cantidad consume más recursos y revisa con mayor frecuencia. Sin embargo si tenemos el servidor muy sobrecargado se recomienda subir este parámetro para que no penalice la carga.

DOSPageCount: Cantidad de veces que ha accedido a la misma página esa IP en el intervalo definido por DOSPageInterval. Generalmente suele ser de 1 segundo.

DOSSiteCount: Numero de peticiones a la misma página web por IP por el intervalo definido por DOSSiteInterval.

DOSPageInterval: Es el intervalo en segundos que toma de referencia DOSPageCount. Por defecto es de 1 segundo.

DOSSiteInterval: Es el intervalo en segundos que toma de referencia DOSSiteCount. Por defecto es de 1 segundo.

DOSBlockingPeriod: La cantidad de tiempo en segundos en la que la persona será bloqueado. Por regla general es de 10 segundos. Este valor no hace falta aumentarlo tanto ya que cada vez que se recibe el ataque, si está bloqueado, el contador se reinicia a 0. Esto sigue el principio de que si es un ataque DDOS es evidente que el ataque suele ser continuado.

DOSEmailNotify: Se enviará un email por cada IP que ha sido bloqueada. Existe un mecanismo en /tmp que previene continuos envíos de email de la misma IP.

DOSSystemCommand: Esto es un comando que podemos ejecutar en el momento que la IP es incluida en una lista negra. Esto es bueno para cuando usamos un firewall externo o similar.

DOSLogDir: Directorio donde guardará los registros de la IP que bloquea.

DOSWhitelist: Si queremos meter en lista blanca, podemos poner una IP o Rango. Ejemplo:

DOSWhitelist 127.0.0.1
DOSWhitelist 127.0.0.*

Es decir no sigue la notificación CDIR.

Recordamos que después de aplicar la configuración debemos hacer un reload en Apache:

service apache2 reload

Probando Mod Evasive

En teoría existe un script que permite el testeo de esta configuración para que nos bloquee desde localhost. Pero cuando realizamos las pruebas directamente no nos funcionaba (nos daba BAD REQUEST).

La alternativa que hemos buscado es usar “ab” (Apache Benchmark) el cual nos permite realizar peticiones para ser bloqueados.

Por lo tanto para probar hemos ejecutado el siguiente comando:

 ab -n 300 -c 10 http://sitio-ejemplo.com/

-n: Indica la cantidad de peticiones.

-c: Cantidad de personas realizando las peticiones (concurrency).

Con este ejemplo nos bloqueará Mod Evasive enviándonos un correo si lo tenemos bien configurado en el servidor.

Conclusión

Ya sabéis que mientras mayor seguridad establezcamos en nuestro sistema mejor dormiremos por la noche.

Recordad que podéis visitar la categoría SEGURIDAD, para obtener otros artículos relacionados.

Si tenéis alguna duda, podéis comentar la entrada e intentaré resolverlas.

Seguridad en Apache

Introducción

La seguridad en Apache hoy en día es algo muy importante ya que es uno de los servidores web más conocidos y usados habitualmente.

Hemos querido realizar un conjunto de medidas que nos pueda ayudar a todos ser un poco menos vulnerable en el mundo de Internet.

Aparte de ello quería reunir las distintas prácticas que hace la gente y tenerlo centralizado para aquellos que quieran aprender.

Leer más

Apache validar por certificado

Introducción

Hace pocos días hubo un cliente que nos ha solicitado que parte de su web se pudiera acceder solicitando un certificado válido.

Para ello tenemos que configurar nuestro virtualhost para que pueda solicitar el certificado y si está permitido en el intermedio entonces le dejará pasar a la nueva sección.

Teniendo estas premisas vamos a trabajar en la configuración.

Apache validar por certificado

Antes de empezar a hablar podemos obtener la configuración a través de la documentación que nos ofrece Apache:

http://httpd.apache.org/docs/current/ssl/ssl_howto.html

Esta es la configuración que debemos realizar sobre nuestro virtualhost:

SSLVerifyClient none
SSLCACertificateFile /ruta-certificados-intermedios/certificados_buenos_fmnt.pem
SSLSessionCacheTimeout 600
SSLOptions +StdEnvVars

<Location /zona/web/1/>
SSLVerifyClient require
SSLVerifyDepth 5
</Location>

<Location /zona/web/2/>
SSLVerifyClient require
SSLVerifyDepth 5
</Location>

<Location /zona/web/3/>
SSLVerifyClient require
SSLVerifyDepth 5
</Location>

Vamos a explicar un poco la configuración:

SSLVerifyClient none: Tenemos que añadir esta directiva ya que no queremos que realice la validación antes.

SSLCACertificateFile ruta: Ruta donde se encuentran los intermedios, esto es lo que nos permitirá que los usuarios se puedan validad.

<Location /zona/web/1/>: Primera zona web donde solicitaremos el requisito de la validación del certificado.

Para ver otros parámetros existentes ver el enlace añadido y además este:

https://httpd.apache.org/docs/2.4/mod/mod_ssl.html#ssloptions

Un saludo

Suexec – Cambiar el directorio por defecto en CentOS

Introducción

El problema que nos encontramos es que hay proveedores que cambian el directorio por defecto donde se encuentra el Suexec. Por ejemplo al parecer en las CentOS suele ser /home y en el caso de que cambiemos el directorio de nuestras webs esto no funcionaría.

En versiones de Debian lo tenemos un poco más fácil ya que han establecido algo llamado «suexec-custom» el cual nos permite cambiar el directorio suexec de una manera más fácil.

Para CentOS, por desgracia, no se puede hacer de la misma manera y las soluciones que tenemos son:

  1. Mover y configurar todo el contenido en /home
  2. Cambiar el directorio por defecto donde está configurado el suexec.

En nuestro caso elegiremos la opción 2 la cual nos llevará a compilar.

Leer más

Configuración de seguridad en certificados Apache

Introducción

En este post vamos a tratar acerca de la configuración de seguridad en certificados Apache, un problema común para mantener nuestros servidores seguros ante cualquier tipo de ataque SSL.

Siempre nos preguntamos cual es la configuración idónea para hoy en día para cuando instalamos certificados en nuestros servidores Linux/Windows sobre Apache. Pues bien hoy vamos a desvelar parte del misterio que solemos usar en nuestros servidores.

Configuración de seguridad en certificados Apache

La configuración es completa para el VirtualHost que queramos cifrar o para ponerlo en el de por defecto.

SSLEngine on
SSLProtocol -All +TLSv1 +TLSv1.1 +TLSv1.2

SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:ECDHE-RSA-AES128-SHA:DHE-RSA-AES128-GCM-SHA256:AES256+EDH:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:!DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4
SSLHonorCipherOrder on

SSLCertificateFile RutaWeb/certificado.crt
SSLCertificateKeyFile RutaWeb/certificado.key
SSLCACertificateFile RutaWeb/certificado.ca

Entramos un poco en la explicación:

  • Activamos el SSL para el dominio (SSLEngine on)
  • Solo habilitamos los protocolos TLSv1, TLSv1.1 y TLSv1.2 (Quizás os aparezca el problema de la vulnerabilidad beast, pero esto ya se parchea a nivel de navegador).
  • Un cifrado fuerte, actualmente hemos puesto muchas líneas que son recomendadas. Esto viene dado por el parámetro SSLCipherSuite.
  • SSLHonorCipherOrder on, No permite que el cliente elija el método de negociación sino que fuerza a la que tenemos en el servidor.

 

Instalar Subversion y Autenticación por Apache

Introducción para Instalar Subversion y Autenticación por Apache

Uno de los clientes me ha solicitado la instalación de subversion y la autentificación se realice a través de Apache. Aparte de ello podemos ver un listado de nuestros ficheros a través de nuestro propio navegador.

A la vez añadiremos algunos clientes usados y comandos básicos desde Linux para poder hacer pruebas.

Lo que instalaremos será siempre desde los propios repositorios oficiales y en este caso vamos a trabajar en una distribución Debian 8.1.

Leer más