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 HTTPS Apache

Introducción

En este artículo vamos a trabajar en la seguridad HTTPS Apache. Utilizaremos las tecnologías actuales hasta el momento (09/03/2020) para dejar nuestro sitio web ágil, seguro y confiable.

El resumen de lo que haremos:

  • TLS 1.3
  • HSTS
  • Configuraciones SSL
  • Comprobaciones Online

¡Vamos a ello!


Seguridad HTTPS Apache

Para empezar a trabajar:

  • Ubuntu 18.04
  • Versión de Apache >= 2.4.37

La versión de Apache por defecto en Ubuntu 18.04 es 2.4.18, por lo tanto no nos vale por defecto. Pero que no cunda el pánico, para todo tenemos solución.

Instalando repositorios Ondrej

Estos repositorios son bastante conocidos en la comunidad de Debian ya que nos permite tener varias versiones de PHP y además una versión actualizada de Apache.

add-apt-repository ppa:ondrej/apache2
apt-get update && apt-get -y upgrade

Nota: Si aparece los paquetes en keepback podemos desinstalarlo o forzar la instalación de los paquetes especificando los mismos.

En nuestro caso aparecían las versiones de Apache que hemos tenido que forzar a los nuevos de este repositorio. Por lo tanto tras instalar estos ya tenemos la nueva versión de Apache.

Con esta nueva versión ya tenemos la posibilidad de poder usar TLS 1.3 (último protocolo y más seguro).


HSTS

HSTS (HTTP Strict Transport Security) es una capa extra de seguridad para nuestra navegación en HTTPS que evita ataques man in the middle y posibles secuestros de sesiones.

# Requisitos

a2enmod headers
service apache2 restart

La siguiente línea la podemos poner por defecto en el fichero de configuración «conf-enabled/security.conf». Pero lo dejaremos a nivel de VirtualHost para que se controle desde el propio sitio web.

Header always set Strict-Transport-Security "max-age=4838400; includeSubdomains;"

Configuraciones SSL

Aquí vamos a incluir políticas que dejaremos configuradas de manera genérica para todos los sitios webs. Este fichero se encuentra «mods-enabled/ssl.conf»

SSLCipherSuite

SSLCipherSuite ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256

Nota: Los cifrados afectan sobre todo a los clientes más antiguos. A más restrictivos más posibilidades existe de que no funcionen correctamente por HTTPS.

Este es uno genérico que nos hará pasar las auditorias. En el caso de que no sea así simplemente se debe ir eliminando los cifrados que no necesitemos.

SSLHonorCipherOrder

Este parámetro fuerza que se usen los CipherSuite que hemos establecido en el servidor web (Apache).

SSLHonorCipherOrder on

SSLProtocol

Vamos a dejar deshabilitado el protocolo SSLv3 ya que ha sido uno de los que mayores agujeros de seguridad ha tenido. El resto de los protocolos los permitimos.

SSLProtocol all -SSLv3

Habilitando HTTP2

Recordamos que tenemos creado un artículo que explica cómo habilitar HTTP2 (la mayoría de los pasos los tenemos hecho)

Ver Habilitando HTTP2


Comprobaciones Online

Existen distintas webs que nos permiten revisar la seguridad de nuestro certificado. Os dejo estas dos webs que al menos a mi me funcionan muy bien:

Nota: Marcad siempre la casilla de que nuestro resultado no salgo públicamente si queremos mantener nuestro anonimato.


Conclusión

Hemos aprendido a implementar nuevas configuraciones de seguridad para respirar un día más con nuestros clientes. Además de ello hemos ganado velocidad, estar en la última tecnología y estar listos para varios años más en el mercado.

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.

SSL Mutal – Como usar un certificado como validación

¡Hola a todos!

Se ha presentado un cliente con unas necesidades específicas de seguridad en una página web. Lo que quiere es que el acceso fuera restringido por aquellas personas que tuvieran un certificado válido X.

Para aquellos que no me hayan entendido lo que haremos en este caso es lo que hace la agencia tributaria de España.

Es decir, si quieres ver tus datos de hacienda/personales/etc … tienes que tener un certificado válido con la FNMT y tenerlo configurado en tu navegador (ya que te lo va a solicitar). Si es correcto te permite el acceso a tu área privada y sino fallará.

En realidad lo único que necesitas es tener un certificado y su CA para poder validar que el certificado con el que entras se le permite el acceso.

Os vamos a enseñar como realizar estas funciones con certificados autofirmados y luego os explicaremos como se realizaría si tuviéramos los certificados intermedios.

Leer más

Instalación NodeJS en Ubuntu 16.04/18.04

Introducción

Se nos ha solicitado la Instalación NodeJS en Ubuntu 16.04.

En un primer momento lo instalamos desde los propios paquetes del sistema pero este nos estaba dando una versión 4.x. Pero debido a las exigencias de la programación necesitaban una versión superior por ejemplo la 10.x. Por lo tanto haremos como se realiza la actualización de los paquetes oficiales.

Instalación NodeJS en Ubuntu 16.04

Nosotros vamos a proceder a la instalación de NodeJS versión 10.15.x ya que es la versión LTS. Existe la posibilidad (hasta hoy) de poder instalar las 12.2 pero nosotros preferimos tener algo más estable.

curl -sL https://deb.nodesource.com/setup_10.x | sudo -E bash -
apt-get install -y nodejs

Con estos pasos tan sencillos instalamos en nuestro sistema NodeJS, pero no queremos dejar la tarea sólo aquí ya que nos interesa instalar PM2.

Instalando PM2

PM2 es un programa que nos permite controlar los procesos NodeJS de una manera más friendly y práctica.

npm install pm2@latest -

Con esto dejamos instalada la aplicación PM2.

Algunos comandos PM2

# Arrancar una APP en NodeJS
pm2 start app.js

# Detener una APP en NodeJS
pm2 stop app.js

# También se puede usar restart y reload
pm2 restart app.js || pm2 reload app.js

# Ver las aplicaciones gestionadas por PM2
pm2 ls

# Ver los logs de la app o de todo
pm2 logs app.js | all

# Arrancar la aplicación node una por cada núcleo del procesador
pm2 start app.js -i max
pm2 reload all

# Ver la monitorización de los procesos PM2
pm2 monit

Conclusión

NodeJS es hoy en día uno de los lenguajes más usados del mercado de cara al servidor así que es recomendable tener herramientas para administrarlo.

PM2 es un servicio bastante bueno y potente que hará a los administradores de sistemas quitarse más de un dolor de cabeza.

Múltiples Versiones PHP

¡Hola!

Hoy me toca hacer un post super divertido en el cual tengo que instalar distintas versiones de PHP en los servidores.

Por defecto, dependiendo de la versión del sistema operativo, tenemos una versión de PHP establecida en los repositorios oficiales. Lo que vamos hacer es instalar otros que nos permitan tener hasta la 7.3 si es necesaria.

Otra cosa más a tener en cuenta es como queremos ejecutar esa versión de PHP si es por el SITE o en todo el sistema operativo (por defecto). Intentaremos cubrir todas las necesidades posibles.

Especificaciones/Requeriments

  • OS
    • Ubuntu 16.04 LTS (Versión de PHP paquetizada 7.0.x)
    • Ubuntu 18.04 LTS (Versión de PHP paquetizada 7.1.x)
  • Recordad los módulos de PHP instalados (dpkg -l | grep php)

Siempre hay que tener en cuenta lo que tenemos montado en el servidor. No podemos hacer estos cambios a lo loco ya que puede romper más de alguna web/cosa y por lo tanto dar muchos dolores de cabeza/trabajo.

Leer más

Instalar GitLab – Git Privado

¡Hola!

Estaba buscando una alternativa donde poder gestionar todo lo relacionado con GIT a través de una interfaz amigable (GUI) y me encontré con GITLAB en su versión Community.

Lo que vamos hacer será montar una instancia VPS para nuestro cometido y los primeros pasos de configuración + algo de seguridad según nos convenga.

Especificaciones/Requeriments

  • OS: Ubuntu 18.04 LTS
  • CPU: Mínimo 1 y admite hasta 100 usuarios.
  • Memoria: 2 GB es recomendado.

En el caso de no llegar a los 2 GB siempre se puede crear SWAP (ya que en VPS no suelen venir con dicha partición).

Requisitos Gitlab – Web Oficial

Leer más

Habilitando HTTP2

He estado leyendo aquí y allá sobre las diferencias entre el protocolo acutal HTTP/1.1 y HTTP2 y me decidí lanzarme a la aventura para ponerlo en producción.

Actualmente, según he leído, lo tenían en pruebas aunque ya lleva bastante tiempo y la gente lo está pidiendo. Es decir, que lo están poniendo en servicios en producción.

La principal razón de ello es por la velocidad de carga en las webs, lo cual para el SEO viene estupendamente.

Nosotros lo vamos a implantar en un entorno Ubuntu 16.04 + Webmin.

Leer más

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