Protege SSH con Fail2ban en Ubuntu 24.04: guía paso a paso

Cómo instalar y configurar Fail2ban en Ubuntu 24.04 para bloquear automáticamente ataques de fuerza bruta contra SSH: cárcel dedicada, pruebas de prohibición y desbloqueo de una IP.

Protege SSH con Fail2ban en Ubuntu 24.04: guía paso a paso

Cualquier persona que administra un servidor Linux que se puede acceder desde el Internet sabe: tan pronto como el puerto SSH está expuesto, los intentos de acceso automático de bot comienzan a llegar esa experiencia combinaciones de nombres de usuario y contraseñas de repetición. Es clásico.brute force attack. Una contraseña robusta o autenticación clave ya reduce el riesgo, pero no impide que los bots continúen golpeando, ocupando recursos y llenando registros. La solución más común para frenar el problema se llamaFail2ban, y en esta guía vemos cómo instalarlo y configurarlo paso a pasoUbuntu 24.04 LTS (Noble Numbat).

Qué es Fail2ban y cómo funciona

Fail2ban es un servicio (demonio) que analiza los archivos de registro del sistema en tiempo real — en nuestro caso aquellos relacionados con el acceso SSH— buscando patrones que indican intentos de registro fallidos. Cuando la misma dirección IP excede una serie de intentos fallidos a un intervalo de tiempo dado, Fail2ban interviene automáticamente creando una regla de cortafuegos que bloquea la IP para un período establecido. Este mecanismo de vigilancia y bloqueo se llama carcel(literalmente "prison"): cada cárcel está dedicada a un servicio específico (SSH, un servidor web, un servidor de correo, etc.) y tiene sus propias reglas.

En Ubuntu 24.04, Fail2ban está disponible como paquete oficial en el repositoriouniverso(versión 1.0.2 en el momento en que escribimos), por lo que no necesita añadir repositorios externos: mientras el repositorio del universo esté habilitado, lo que sucede por defecto en las instalaciones estándar de Ubuntu Server y Desktop.

Prerrequisitos

  • Un servidor Ubuntu 24.04con acceso SSH y un usuario con privilegiossudo.
  • Acceso a la línea de comandos, localmente o a través de SSH (tenga cuidado de no cerrar la sesión actual antes de verificar que las nuevas reglas no lo bloquean también: más tarde veremos cómo evitarlo).
  • Opcional pero recomendado: aFirewall activo(UFW es el incluido por defecto en Ubuntu), que Fail2ban utilizará como "arma armada" para aplicar los bloques.

1. Instalar Fail2ban

Actualizar la lista de paquetes e instalar Fail2ban con:

sudo apt update
sudo apt install fail2ban

Al final de la instalación, el servicio comienza ya activo con la configuración predeterminada, pero es bueno comprobar el estado inmediatamente:

sudo systemctl status fail2ban

Si el sistema no está habilitado, active con:

sudo systemctl enable fail2ban

2. Crear configuración personalizada (jail.local)

Fail2ban lee su configuración de diferentes archivos. El principal,/etc/fail2ban/jail.conf, está sobrescrito a cada actualización del paquete: por esta razónnunca debe ser cambiado directamente. Las personalizaciones deben escribirse en un archivo separado,jail.local, que Fail2ban lee después y que siempre precede a la configuración predeterminada. Crear el archivo copiando el archivo original como base:

sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local

Sección[DEFAULT], que se aplica a todas las cárceles a menos que se indique lo contrario, encontrar tres parámetros clave que es útil comprender antes de editarlos:

  • bans: cuánto tiempo queda bloqueada una IP una vez que se supere el umbral de intento (por ejemplo, por ejemplo.10mdurante diez minutos,1hpor una hora).
  • encontrar tiempo: la ventana de tiempo en la que se cuentan los intentos fallidos (por defecto 10 minutos).
  • Maxretry: el número de intentos fallidos permitidos antes del bloque (por defecto 5).

Para una cárcel SSH más agresiva hacia bots, sin arriesgar demasiados falsos positivos para un usuario humano que se equivoca contraseña una vez, valores comomaxretry = 4,findtime = 10mybantime = 1hSoy un buen punto de partida. Si su IP fija es conocida, también puede excluirlo de los controles añadiéndolo a la líneaignoreip(ya presente en la sección[DEFAULT]), separando de otros con un espacio: esto evita autoexcluirlo por error durante las pruebas.

3. Configurar la cárcel para SSH

Utilizando el archivo encontrarás la sección dedicada a SSH, que comienza con[sshd]. Asegúrate de que esto esté listo:

[sshd]
enabled = true
port = ssh
filter = sshd
logpath = %(sshd_log)s
backend = %(sshd_backend)s
maxretry = 4
findtime = 10m
bantime = 1h

El parámetroenabled = truees lo que activa la protección para SSH: en la configuración predeterminada muchas cárceles están presentes pero deshabilitadas, sólo para permitir que el administrador elija qué servicios proteger. Si usted ha movido SSH en un puerto diferente de 22 (una práctica común para reducir el ruido de fondo de los bots), recuerde indicarlo en el campoport.

Guarda el archivo y reinicia el servicio porque los cambios tienen efecto:

sudo systemctl restart fail2ban

4. Asegúrese de que la cárcel esté activa

El comando principal para dialogar con Fail2ban Esfail2ban-client. Para ver la lista de cárceles actualmente activas:

sudo fail2ban-client status

Para más detalles de la cárcel SSH en particular — cuántos intentos fallidos registró y cuáles IPs están actualmente bloqueados:

sudo fail2ban-client status sshd

También es útil mantener un ojo en el registro dedicado, especialmente en los primeros días después de la activación, para entender cómo la cárcel se comporta en la práctica:

sudo tail -f /var/log/fail2ban.log

5. Prueba el bloque

La forma más realista de probar la cárcel es tratar de conectarse a SSH desde otra máquina (o desde otra terminal) al entrar voluntariamente una contraseña incorrecta varias veces más abajo, hasta que pase el umbralmaxretryListo. Después del último intento fallido, la IP de la que vinieron los enlaces debe aparecer como bandido en la salida defail2ban-client status sshd, y otros intentos de conectarse de esa misma dirección caerán en el vacío hasta el final delbantime.

Alternativamente, si prefiere no arriesgarse a bloquear su sesión de trabajo por error, puede forzar manualmente una prohibición de prueba en una IP de prueba (como una dirección de su red local no utilizada):

sudo fail2ban-client set sshd banip 192.0.2.10

6. Desbloquear una IP

Puede suceder que una IP legítima se prohíba por error, por ejemplo después de algunos intentos fallidos de inicio de sesión por usted. Para quitar manualmente el bloque sin tener que esperar la expiración delbantime, utilizado:

sudo fail2ban-client set sshd unbanip 192.0.2.10

Por reemplazar, por supuesto, la dirección de ejemplo con la real para desbloquear. El comando tiene efecto inmediato: no necesita reiniciar el servicio.

Algunos avisos más

  • Nunca apague la sesión actual de SSHantes de verificar que las nuevas reglas funcionan: si es posible, prueba por un segundo terminal manteniendo una sesión autenticada abierta, para que pueda corregir cualquier error de configuración sin perder acceso al servidor.
  • Integración con UFW: Si utiliza UFW como cortafuegos, Fail2ban lo detecta automáticamente y se apoya en ella para aplicar los bloques, sin necesidad de configuraciones adicionales en la mayoría de los casos.
  • Autenticación con clave SSH: Fail2ban reduce el impacto de ataques automatizados, pero sigue siendo un nivel de defensa adicional. Desactivar el login con contraseña para las únicas teclas SSH, donde sea posible, sigue siendo la medida de seguridad más efectiva jamás.
  • Prohibiciones crecientes: Para aquellos que quieren un nivel más avanzado de protección, Fail2ban también admite unbansque aumenta progresivamente para recaídas IPs, a través de la opciónbantime.increment: una visión útil una vez confianza con la configuración básica.

Con estos pasos usted tiene protección básica pero efectiva contra los intentos de acceso automatizados en SSH, sin tener que intervenir manualmente cuando un bot golpea en la puerta del servidor.

Fuentes oficiales

Compartir

¿Cuál es tu reacción?

Me gusta Me gusta 0
No me gusta No me gusta 0
Me encanta Me encanta 0
Divertido Divertido 0
Enfadado Enfadado 0
Triste Triste 0
¡Vaya! ¡Vaya! 0