Proteger tu servidor contra ataques de fuerza bruta es imprescindible. La pregunta es, ¿cómo exactamente? Afortunadamente para ti, Fail2Ban está a la vuelta de la esquina para proteger tu servidor, pero la configuración predeterminada de Fail2Ban necesita algunos ajustes para lograr una seguridad óptima. No te preocupes, este tutorial tiene todo cubierto.
En este tutorial, aprenderás cómo configurar Fail2Ban y repeler los ataques de fuerza bruta asegurando tu servidor SSH.
¿Listo? ¡Continúa leyendo para optimizar la seguridad de tu servidor SSH!
Prerrequisitos
Este tutorial consta de instrucciones paso a paso. Si deseas seguirlo, asegúrate de tener lo siguiente en su lugar:
- Un servidor Ubuntu y Debian: Este tutorial utiliza un servidor con Ubuntu 18.04 LTS para configurar Fail2Ban y un servidor Debian 10 para probar las configuraciones de prohibición de Fail2Ban.
- Acceso de root o privilegios de sudo en el servidor para ejecutar comandos como superusuario.
- Fail2Ban instalado en un servidor Ubuntu o Debian.
Configuración de un firewall base
Fail2Ban protege su servidor monitoreando los registros y prohibiendo direcciones IP que realizan demasiados intentos de inicio de sesión dentro de un cierto período de tiempo. Pero primero, configurará un firewall base donde pueda agregar reglas para bloquear acciones maliciosas en su servidor.
1. En primer lugar, ejecute el comando service
a continuación para detener Fail2Ban (fail2ban stop
) de ejecutarse. Detenga Fail2Ban cuando realice cambios en sus archivos de configuración para poder probar los cambios y asegurarse de que funcionen como se espera.

2. Ejecute el comando apt install
para instalar Sendmail
y IPTables-persistent
. Sendmail es un programa que Fail2Ban utiliza para notificarle cuando prohíbe una dirección IP. Mientras que IPTables-persistent es un programa que guarda sus configuraciones de cambio en el archivo /etc/sysconfig/iptables.
Tener estos programas instalados mantiene intactos tus ajustes de firewall incluso si ocurre algo inesperado, como un corte de energía.
Ahora ejecuta cada comando iptables
a continuación para configurar tu firewall. Estos comandos no generarán ninguna salida, pero agregarán cuatro reglas a tu firewall. Estas reglas permiten o bloquean conexiones a tu servidor.

4. Ejecuta el comando iptables
a continuación para ver un resumen de lo que has configurado en tu firewall.
A continuación, se resaltan las reglas que has agregado en tu firewall.

5. Luego, ejecuta los siguientes comandos para guardar tus reglas en el archivo /etc/sysconfig/iptables-config y comenzar el servicio Fail2Ban. El archivo iptables-config contiene todas tus reglas permanentes de firewall.
Fail2Ban agregará automáticamente algunas reglas a tu firewall para proteger tu servidor.
6. Finalmente, vuelve a ejecutar el comando iptables
a continuación para ver tus reglas de firewall.
Como se muestra a continuación, en rojo se resaltan las nuevas reglas que Fail2Ban ha agregado a tu firewall.

Ajustar tu Configuración Local de Fail2Ban
Ahora que tienes un firewall básico en funcionamiento, es hora de ajustar el archivo de configuración local de Fail2Ban para agregar más control para asegurar tu servidor. Este tutorial utiliza el archivo de configuración /etc/fail2ban/jail.conf ya que contiene todas las opciones necesarias para configurar ajustes globales para la aplicación Fail2Ban.
Tal vez quieras crear reglas personalizadas para tu servidor SSH. Si es así, crearás un nuevo archivo jail.local (basado en el archivo jail.conf) y pondrás las reglas específicas de SSH en el archivo jail.local. Haciendo esto te permite anular la configuración en el archivo jail.conf para tu servidor.
1. Ejecuta el comando awk
a continuación para realizar lo siguiente:
- Imprime el contenido (
'{ printf "# "; print; }'
) del archivo/etc/fail2ban/jail.conf
. - Crea un archivo llamado jail.local (basado en el archivo jail.conf), que puedes usar para anular la configuración predeterminada en el archivo jail.conf.
- Dirige el contenido del archivo
/etc/fail2ban/jail.conf
al comandotee
. Al hacerlo, se escribirá el contenido del archivojail.conf
en tu sistema de archivos local (/etc/fail2ban/jail.local
).

2. Una vez que hayas creado el archivo jail.local, ejecuta el comando ls
a continuación. El comando lista el contenido del directorio Fail2Ban de tu servidor (/etc/fail2ban
) para verificar que tu archivo jail.local se haya generado correctamente.
Si ves el nuevo archivo jail.local, como se muestra a continuación, entonces tu archivo local se generó correctamente.

3. Abre el archivo /etc/fail2ban/jail.local en tu editor de texto preferido y navega hasta la sección [ssh].
Descomenta las opciones [sshd] y enabled eliminando el símbolo # delante de las opciones, como se muestra a continuación para habilitar SSH.
Desde este punto hasta el final del tutorial, elimina el símbolo # delante de secciones u opciones para habilitarlas.

4. Desplázate hacia abajo y descomenta la sección [DEFAULT] que se muestra a continuación. Esta sección es donde configuras la configuración predeterminada para Fail2Ban. Cualquier configuración en esta sección se aplicará a todos los jails que Fail2Ban gestiona.

5. A continuación, desplázate hasta la sección bantime y establece un bantime de 60 minutos. La opción bantime establece la cantidad de tiempo, en minutos, que una dirección IP está prohibida después de un intento de inicio de sesión fallido.
La configuración predeterminada de bantime es de 600 segundos (10 minutos). Puedes ajustar esta configuración a tu gusto, pero es importante tener en cuenta que cuanto menor sea la configuración de bantime, mayor carga experimentará tu servidor.

6. Navega hasta las opciones de findtime y maxretry. Mantén el findtime tal como está (10m) y reduce el maxretry a 3.
La opción findtime establece la cantidad de tiempo, en minutos, que una dirección IP puede fallar al iniciar sesión antes de ser bloqueada. Mientras que la opción maxretry establece el número de intentos de inicio de sesión fallidos antes de que una dirección IP sea bloqueada.
La configuración predeterminada de findtime es de 10 minutos, y maxretry es de 5 minutos. Como resultado, una dirección IP que falle al iniciar sesión 5 veces dentro de un período de 10 minutos será bloqueada.

7. Desplázate hacia abajo, descomenta y configura las opciones de destemail, sender y mta:
- destemail – Ingresa una dirección de correo electrónico donde Fail2Ban envíe notificaciones.
- sender – Establece el campo “De” en el correo electrónico que Fail2Ban envía a destemail.
- mta – Mantén el valor predeterminado (sendmail) tal como está. La opción mta establece el agente de entrega de correo electrónico que Fail2Ban utiliza para enviar notificaciones.

8. Navega hasta las opciones de acción, como se muestra a continuación, y descomenta la opción action_mwl. Al hacerlo, Fail2Ban enviará correos electrónicos de logwatch a tu dirección. Puedes revisar estos correos electrónicos para investigar más a fondo posibles problemas de seguridad en tu servidor.
Guarda los cambios y sal del editor de texto.

9. Ahora ejecuta los comandos a continuación para reiniciar el servicio de fail2ban
.
10. Finalmente, ejecuta el siguiente comando para verificar el estado
de tu servicio fail2ban
. sudo service fail2ban status
. Si el servicio Fail2Ban está funcionando, obtendrás una salida como la que se muestra a continuación.
Si el servicio Fail2Ban está funcionando, obtendrás una salida como la que se muestra a continuación.

Probando tus Configuraciones de Bloqueo
Acabas de configurar Fail2Ban, así que es el momento de probar si las configuraciones de bloqueo funcionan realmente. Intenta realizar múltiples intentos fallidos de inicio de sesión SSH en tu servidor Fail2Ban desde un servidor secundario y verifica si ese servidor secundario queda bloqueado.
1. Inicia sesión en tu servidor secundario (Debian) y ejecuta el siguiente comando para conectarte por SSH a tu servidor Fail2Ban.
Esta demostración utiliza un servidor Debian 10 con la IP 134.122.20.103 para hacer ssh
al servidor fail2ban
que tiene la IP 69.28.83.134
.
2. Ingresa una contraseña aleatoria cuando se te solicite y presiona Enter.
En el primer intento, el servidor Fail2Ban detendrá el intento de inicio de sesión SSH e imprimirá el mensaje Permission denied, como se muestra a continuación. Repite el intento de inicio de sesión SSH aproximadamente dos o tres veces más, y eventualmente el servidor Fail2Ban dejará de responder a tu intento de inicio de sesión SSH.
En este punto, ya no recibirás un mensaje Permission denied, sino una pantalla en blanco. Obtener una pantalla en blanco indica que tu segundo servidor (Debian) ha sido bloqueado por el servidor Fail2Ban.

Pero quizás ya tengas una lista de direcciones IP para bloquear desde tu servidor Fail2Ban. Si es así, abre el archivo jail.local y ve a la sección [DEFAULT]. Descomenta la opción ignoreip y establece las direcciones IP a bloquear, como se muestra a continuación.
La dirección puede ser varias entradas separadas de IPv4 o IPv6, o separadas por comas.

3. En tu servidor Fail2Ban (Ubuntu), vuelve a ejecutar el comando iptables
a continuación para ver las reglas de tu firewall.
Observa que hay una nueva regla que rechaza los intentos de inicio de sesión SSH desde la dirección IP 134.122.20.103.
También recibirás un correo electrónico de Fail2Ban, al tener una prohibición exitosa, con un archivo de registro adjunto si tienes sendmail configurado en tu servidor Fail2Ban. La notificación por correo electrónico indica que Fail2Ban ha detenido con éxito un ataque de fuerza bruta y ha salvado tu servidor de posibles daños.

Conclusión
A lo largo de este tutorial, has aprendido cómo configurar Fail2Ban en un servidor Ubuntu. En este punto, deberías estar bien equipado con el conocimiento necesario para proteger tu servidor SSH contra ataques de fuerza bruta.
Ahora, ¿por qué no llevar este nuevo conocimiento a un nivel superior? Quizás puedes empezar por bloquear IPs en todos los puertos con Fail2Ban en un host de Docker?