Proteger servidor web Apache con Fail2ban en Ubuntu
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 = ^-.*"(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.
Referencia: http://www.ingdiaz.org/proteger-servidor-web-apache-con-fail2ban-en-ubuntu/