Proteger servidor web Apache con Fail2ban en Ubuntu

Hola a todos. En una entrada anterior traté el tema de la protección básica de conexiones SSH mediante Fail2ban, y ahora les traigo una forma de proteger un servidor de web Apache contra ataques DDoS y fuerza bruta. Realmente, con Fail2ban se puede proteger una gran cantidad de servicios de red; de hecho, ya cuenta con varios filtros predefinidos para poder usarse. Igual, hay muchas formas de hacer lo mismo (como todo en la vida…), y en éste ocasión, les traigo una de ellas.

Básicamente, Fail2ban es un sistema para prevención de intrusos del lado del servidor, el cual utiliza los log’s de las aplicaciones para detectar y reaccionar ante algún evento en tiempo real (digamos, intentos fallidos de inicio de sesión, errores específicos, etc.); La reacción es, en resumen, un bloqueo que hace a la conexión (IP), por un tiempo x.

Primero, instalamos Fail2ban:

sudo apt install fail2ban

Ya instalado, vamos a crear un archivo de configuración para el servicio apache:

nano /etc/fail2ban/jail.d/apache.conf

Y agregamos…

[apache]
 enabled = true
 port = http,https
 filter = apache-auth
 logpath = /var/log/apache2/*error*.log
 maxretry = 6
 bantime = 700

[apache-overflows]
 enabled = true
 port = http,https
 filter = apache-overflows
 logpath = /var/log/apache2/*error*.log
 maxretry = 6
 bantime = 700

[apache-noscript]
 enabled = true
 port = http,https
 filter = apache-noscript
 logpath = /var/log/apache2/*error*.log
 maxretry = 6
 bantime = 700

[apache-badbots]
 enabled = true
 port = http,https
 filter = apache-badbots
 logpath = /var/log/apache2/*error*.log
 maxretry = 6
 bantime = 700

[http-get-dos]
 enabled = true
 port = http,https
 filter = http-get-dos
 logpath = /var/log/apache2/*access*.log
 maxretry = 1000
 findtime = 600
 bantime = 700
 action = iptables[name=HTTP, port=http, protocol=tcp]

Ahora, tomar en cuenta que los valores pueden variar dependiendo de su servicio… por ejemplo, si se trata de un servicio el cual será visitado muy frecuentemente por muchas computadoras que salen por una sola IP pública (llámese un colegio, universidad, un cómputo, o algo así…), lo ideal es modificar los valores o agregar dichas IP’s públicas en excepciones (ignorar). Para hacer esto último, editamos el archivo de configuración jail.conf

sudo nano /etc/fail2ban/jail.conf

Buscamos el parámetro ignoreip y colocamos todas las IP’s públicas o redes que vamos a dejar fuera de Fail2ban; el separador de campos es el espacio (de barra). Ejemplo:

ignoreip = 127.0.0.1/8 xxx.xxx.xxx.xxx yyy.yyy.yyy.yyy

Se explicará ahora un poco las secciones del archivo apache.conf

  • [apache]
    • Bloquea la IP cuando hay más de 6 intentos erróneos de inicio de sesión.
  • [apache-overflows]
    • Bloquea la IP cuando hay solicitudes de URL’s sospechosas al sitio web.
  • [apache-noscript]
    • Bloquea la IP cuando detecta que hay intentos de búsqueda de scripts para ejecutar en el sitio web.
  • [apache-badbots]
    • Bloquea las IP que traten de solicitar bots maliciosos.
  • [http-get-dos]
    • Bloquea la IP al detectar, por medio de la concurrencia en un tiempo específico, ataques DoS.

Ésta última sección implica crear el filtro respectivo, por cuanto deberemos de crear el archivo http-get-dos.conf

sudo nano /etc/fail2ban/filter.d/http-get-dos.conf

Y agregaremos en él la siguiente información:

[Definition]
failregex = ^<HOST> -.*"(GET|POST).*
ignoreregex =

Ahora solo tenemos que reiniciar el servicio de Fail2ban y revisar que todo este bien.

sudo service fail2ban restart
sudo service fail2ban status

Revisamos los servicios que se están protegiendo:

sudo fail2ban-client -i

Debería salir algo así:

También, podemos ver un resumen de cada servicio ingresando el siguiente comando:

fail2ban-client status [servicio]

Donde [servicio] equivale al nombre exacto del Jail List (apache, apache-badbots, etc.). A continuación, un ejemplo:

También, podemos ver (por si hay falsos positivos) en el log de Fail2ban las IP’s bloqueadas, y por medio de qué Jail (servicio) sucedio:

sudo cat /var/log/fail2ban.log | grep "Ban"

Si investigas en Internet mediante whois o, simplemente, pones la IP en Google, puedes encontrar información de interés (ubicación, reputación, etc.); por ejemplo, en latinoamerica, sería bien raro que hubieran conexiones de China; en cambio, si se alguna IP de tu país, posiblemente se trate de un falso positivo… habría que verificar los archivos de logs de Apache (access, error, etc.) y filtrar por la IP para ver qué más se encuetra.

y eso sería todo. Si hay dudas referente algunos parámetros, los remito a la entrada anterior sobre fail2ban, dado que ahí se vio un poco más éste detalle.

Saludos!

Comentarios por Facebook

comentarios

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*