Cómo asegurar SSH con Fail2Ban

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.

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.

sudo service fail2ban stop
Stopping the fail2ban service

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.

sudo apt install sendmail iptables-persistent -y

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.

## Primera Regla - Acepta todo el tráfico generado por el servidor (interfaz lo) 
sudo iptables -A INPUT -i lo -j ACCEPT
## Segunda Regla - Acepta todo el tráfico que forma parte 
## de una conexión establecida o relacionada
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
## Tercera Regla - Permite el tráfico SSH en el puerto 22
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
## Cuarta Regla - Bloquea todo otro tráfico
sudo iptables -A INPUT -j DROP
Adding four rules to your firewall

4. Ejecuta el comando iptables a continuación para ver un resumen de lo que has configurado en tu firewall.

sudo iptables -S

A continuación, se resaltan las reglas que has agregado en tu firewall.

Checking your firewall rules

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.

sudo dpkg-reconfigure iptables-persistent
sudo service fail2ban start

6. Finalmente, vuelve a ejecutar el comando iptables a continuación para ver tus reglas de firewall.

sudo iptables -S

Como se muestra a continuación, en rojo se resaltan las nuevas reglas que Fail2Ban ha agregado a tu firewall.

Previewing your firewall rules

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 comando tee. Al hacerlo, se escribirá el contenido del archivo jail.conf en tu sistema de archivos local (/etc/fail2ban/jail.local).
awk '{ printf "# "; print; }' /etc/fail2ban/jail.conf | sudo tee /etc/fail2ban/jail.local
Creating the jail.local file

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.

ls /etc/fail2ban

Si ves el nuevo archivo jail.local, como se muestra a continuación, entonces tu archivo local se generó correctamente.

Checking the newly created local file (jail.local)

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.

Enabling the [ssh] section

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.

Uncommenting the [DEFAULT] option

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.

Setting a ban duration

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.

Setting a Window Time for an IP Address to Login Before Getting Banned

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.
Configuring destemail, sender, and mta options

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.

Enabling Logwatch Emails

9. Ahora ejecuta los comandos a continuación para reiniciar el servicio de fail2ban.

sudo service fail2ban stop
sudo service fail2ban start

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.

sudo service fail2ban status

Si el servicio Fail2Ban está funcionando, obtendrás una salida como la que se muestra a continuación.

Checking the Fail2Ban Service Status

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.

Testing if a server gets banned from Fail2Ban server after several failed logins

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.

Setting IP Addresses to Block from Fail2Ban Server

3. En tu servidor Fail2Ban (Ubuntu), vuelve a ejecutar el comando iptables a continuación para ver las reglas de tu firewall.

sudo iptables -S

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.

Checking additional firewall rules

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?

Source:
https://adamtheautomator.com/fail2ban-ssh/