Protegiendo con fail2ban los servicios http, https y ssh de los ataques DDOS

Hola, ¡buenos días! Hoy vengo a contaros que esta semana he puesto en marcha dos Ubuntu Server para dar soporte a unas apps web PHP. Comparto el tip de hardening que he aplicado para proteger las máquinas. ¡Funciona!

Recomendado a los que acabáis de lanzar un Ubuntu Server, utilizáis Apache en vuestras apps PHP, y queréis blindarlo de los ataques de los crackers.

Protegiendo con fail2ban los servicios http, https y ssh de los ataques DDOS

Vamos a instalar fail2ban, un programa escrito en Python que escanea los archivos de log de los servicios expuestos al mundo, tales como http, ftp o ssh, en búsqueda de ataques y patrones de comportamiento maliciosos: ataques por fuerza bruta, ataques DDOS, etc.

Por cierto, ya que hoy hablamos de hardening de servidores, echad un vistazo a este post donde explico cómo configurar el firewall ufw para un servidor web. También lo he aplicado en la puesta en marcha de mis Ubuntu.

Instalando fail2ban

Para instalar fail2ban:

Lo anterior crea el directorio /etc/fail2ban. Ahora hay que crear el archivo de configuración; para ello, copiamos la plantilla original jail.conf en un archivo local que llamamos jail.local:

El archivo de configuración se organiza en partes diferenciadas llamadas jaulas, jails en inglés, cada una de las cuales protege una cosa diferente. De forma predeterminada fail2ban viene con unas cuantas activadas, por ejemplo:

Como puedes observar, el servicio ssh viene activado por defecto. Fíjate que la jail [ssh] está activada porque la opción enabled vale true, opera en el servicio ssh (puerto 22 por defecto) y aplica las reglas definidas en el filtro sshd sobre el archivo /var/log/auth.log. Finalmente, cuando se producen 6 coincidencias entonces la IP del atacante queda bloqueada.

La IP del atacante queda bloqueada

El principio de funcionamiento de fail2ban es sencillo: aplicar filtros sobre archivos de log.

Por eso es muy importante que te asegures de que las configuraciones de tus jaulas apuntan efectivamente a los logs que especificas. En este ejemplo concreto, no cuesta nada echar un vistazo al archivo /var/log/auth.log y ver si existe.

Los filtros están en /etc/fail2ban/filter.d, para verlos escribe:

Activar la protección Apache

El servicio ssh es básico para el funcionamiento de cualquier máquina y por eso viene activado. Sin embargo, fail2ban no activa de forma predeterminada el servidor web Apache porque no asume que tú lo estés utilizando. Podrías tener instalado nginx, por ejemplo.

Para activar los filtros de seguridad de Apache ve a la sección que dice:

Y primero de todo activa la jail [apache]:

También activaremos estas jaulas:

Como decía antes, ¡recuerda comprobar que los archivos de log de tus jails realmente existen! Si el log de tu Apache es /var/log/apache2/error.log, entonces ya te sirve la expresión regular predeterminada /var/log/apache*/*error.log.

Protégete de los ataques DDOS

Ok, llegados a este punto, ssh, http y https están mínimamente protegidos, pero las jails anteriores no protegen de los ataques DDOS.

Para activar la protección DDOS en ssh:

Proteger Apache es más artesano porque fail2ban no viene con ninguna jaula de protección DDOS para Apache. Así pues, escribe esta jaula en tu sección de servidores HTTP:

Justo a continuación crea el filtro http-get-dos correspondiente:

Y escribe el contenido del archivo http-get-dos.conf, que no es más que una expresión regular:

Reiniciando fail2ban

Ya para terminar, no olvides reiniciar fail2ban:

¿Ha ido todo vien? Vamos a comprobarlo. Echa un vistazo al log de fail2ban y asegúrate de que tus jaulas están activas:

Tiene que salirte una lista como esta:

¡Ya lo tenemos! Lo explicado en este artículo añade una capa de seguridad a los servicios ssh, http y https que los protege de ataques de denegación de servicio DDOS. Como os comentaba al principio, mis Ubuntu Servers solo tienen abiertos los puertos 22, 80 y 443 porque dan soporte a unas apps web.

Espero que este post te ayude a asegurar tus servidores, si es así, ¡compártelo con tus amig@s! Muchas gracias.

0 comentarios

¿Me dejas un comentario? ¡Gracias!

Deja un comentario

Los campos obligatorios están marcados con *