Bloquear ataques DoS con fail2ban en Linux

Por | 2016-12-11T01:37:57+00:00 30/10/2015|Sysadmin|2 Comentarios

¿Cuántos de los que os dedicáis al mundo de la administración de servidores no estáis hartos de sufrir ataques DoS o de denegación de servicio? Sobre todo ocurre contra nuestras webs, una o varias IP realizando peticiones a destajo contra ellas, lo que dependiendo de cómo lo tengamos montado nos puede provocar un pico de consumo de recursos y un bonito error 500 de nuestro servidor, sobre todo si no contamos con herramientas de caché correctamente configuradas como os explica mi compañero Álvaro en numerosos artículos.

fail2ban

 

¿Qué es fail2ban y cómo se configura?

Veamos cómo configurar fail2ban para prevenir ataques DoS contra los servicios de nuestro servidor evitando así la caída de los mismos o posibles hackeos de contraseñas obtenidas por fuerza bruta.
Fail2ban es un software encargado de la monitorización y el escaneo de ficheros de log de nuestro servidor, siendo capaz de reaccionar al detectar determinados patrones en los mismos. Se puede configurar con las expresiones regulares más complejas que podamos imaginar para que detecte los comportamientos más inesperados en los logs del servidor, pero una de las funcionalidades básicas y que ya trae configurada por defecto es el control sobre los intentos de autenticación o de login contra los servicios más comunes, bloqueando la IP tras un número determinado de intentos en un determinado intervalo de tiempo.
¿Y cómo hace esto fail2ban? Para entender cómo trabaja vamos a definir primero una serie de conceptos clave:

  • Filter: define la expresión regular que encaja con los logs correspondientes a un fallo de autenticación o cualquier otra expresión que definamos.
  • Action: no son más que una serie de comandos que se ejecutan en determinadas situaciones.
  • Jail: combinación de un filter y una o más actions.

La configuración de fail2ban la podemos encontrar en /etc/fail2ban y consta de los siguientes directorios y ficheros:

Todos los ficheros .conf pueden ser sobreescritos por los ficheros .local ya que lo primero que lee fail2ban son los .conf y posteriormente los .local con lo que si hay alguna configuración en el .local que ya esté implementada en el .conf la válida será la del .local.
¿Y por qué no editamos directamente los .conf? Pues porque cuando haya una actualización del fail2ban perderíamos la configuración en los .conf mientras que los .local quedarían intactos.

 

Configuración general de fail2ban

El fichero de configuración fail2ban.conf  contiene todos los datos referentes a la propia configuración de este software y donde podremos realizar ajustes como el nivel de logging, de dónde leer los logs, etc…

 

Jails

En el archivo jail.conf es donde definiremos nuestras jails o dicho de otra manera las condiciones o filters que se deben cumplir para ejecutar las actions que tengamos definidas. Veamos por ejemplo una de las jails por defecto que trae fail2ban, la que controla los intentos de login por SSH a nuestro servidor:

Vemos que esta jail está activa y que cuando se dan las condiciones que se definen en el filter sshd 5 veces consecutivas ejecutará la action iptables y la action sendmail-whois. Veremos más adelante el contenido del filter, pero lo que contendrá será una expresión regular que busque en /var/log/secure logs de intento fallido al servicio de SSH. Los filter están definidos en el directorio filter.d y en este caso el filtro procesado es sshd.conf. Las actions están implementadas en el directorio actions.d y en este caso se están aplicando iptables.conf y sendmail-whois.conf.

Las opciones configurables de cada jail son las siguientes:

  • filter : Nombre del filtro que debe usar la jail para detectar patrones en los logs.
  • logpath : Por defecto es /var/log/messages. Aquí debemos decirle a fail2ban qué archivos de logs queremos analizar en dicha jail.
  • maxretry : Número de detecciones del patrón establecido en el filter para ejecutar las actions definidas. Por defecto son 3 hits.
  • findtime : Este contador se pone a cero si no se realizan detecciones en los findtime segundos. Por defecto son 600 segundos.
  • bantime : Duración del baneo de IP. Si establecemos un número negativo el bloqueo será permanente. 600 segundos de tiempo predeterminado.

 

Filters

El directorio filter.d contiene básicamente las expresiones regulares usadas para la detección de patrones de determinados ataques. Continuando con el ejemplo anterior, vamos a ver la expresión regular que filtra los intentos de login en el servicio SSH:

Como se puede observar lo que hace es escanear los fichero de log del servicio SSH y buscar todos los registros de error posibles que el SSH pudiese arrojar.

 

Actions

En el directorio actions.d están todos los scripts que definen las acciones que se ejecutarán en caso de una detección. Continuando con el ejemplo del SSH veamos la acción que se define en iptables.conf:

Lo que hace por detrás fail2ban cuando detecta una ocurrencia es lanzar comandos de nuestro firewall para bloquear la IP de la que proviene la detección, en este caso iptables aunque es fácilmente configurable con otros firewall.

 

Bloquear ataques a WordPress con fail2ban

Una vez vista y comprendida la teoría del funcionamiento y configuración de fail2ban, vamos a usar nuestros nuevos conocimientos para configurar esta joya para que nos prevenga de los dos ataques más típicos de WordPress, ataques al WP-LOGIN y ataques XML-RPC, estos últimos los más míticos y sobre los que tanto se ha hablado ya en este articulo sobre los ataques XMLRPC.PHP a WordPress.

Lo primero será editar el archivo /etc/fail2ban/jail.conf para añadir una jail para cada uno de los 2 ataques contra WordPress.

Como se puede apreciar las acciones que usamos en este caso ya están definidas previamente y es la acción que realiza el bloqueo de la IP en cuestión en nuestro firewall iptables. Lo siguiente es crear ambos filtros con las expresiones regulares para filtrar los logs y encontrar sólo los que nos interesan, que en este caso serían peticiones a nuestros WordPress donde la URL sea o bien invocando al archivo wp-login.php o bien al xmlrpc.php. Para nuestro ejemplo vamos a crear un filtro para cada tipo de ataque en /etc/fail2ban/filter.d/xmlrpc.conf y /etc/fail2ban/filter.d/wplogin.conf

  • XML-RPC
  • WP-LOGIN

     

Por último y para que los cambios tengan efecto debemos reiniciar el servicio fail2ban.

 

Posteriormente si queremos desbloquear alguna dirección IP bloqueada por este método, la metodología a seguir sería consultar el firewall en busca de la regla de bloqueo de dicha IP, por ejemplo en nuestro iptables:

Si por ejemplo queremos desbloquear la IP 195.62.53.175 que vemos que ha sido bloqueada por la regla fail2ban-xmlrpc el comando que debemos usar para habilitar de nuevo dicha IP sería:

 

Si no eres administrador de sistemas y no tienes los conocimientos adecuados para parar un ataque a tu servidor puedes contactar con nosotros sin compromiso y te informaremos de nuestras tarifas y disponibilidad, estamos especializados en servidores Linux y seguridad en servidores Linux.

[Total: 6 Promedio: 4.3]

About the autor:

Mi nombre es Noé Núñez, ingeniero informático por la UDC, SysAdmin en Raiola Networks y amante de los sistemas y las redes en general. Surfeando la red desde que tengo uso de razón.

Utilizamos cookies propias y de terceros para obtener información estadística, mostrar publicidad personalizada a través del análisis de tu navegación, así como para interactuar en redes sociales. Si continúas navegando, consideramos que aceptas nuestra Política de cookies. ACEPTAR

Aviso de cookies