Laboratorio
Básico
cableando
Frena a los bots con Fail2Ban

Frena a los bots con Fail2Ban

Básico

Los pasos marcados en azul cambian según tu sistema.

Abre el registro de SSH de cualquier servidor con IP pública y lo verás: intentos de entrada a todas horas, con usuarios como admin, test u oracle y contraseñas de diccionario. Nadie te está atacando a ti en particular; son programas que recorren internet entera, y lo seguirán haciendo.

Si entras solo con claves (SSH a fondo explica cómo), no tienen nada que adivinar. Pero siguen ahí: llenan los registros, gastan recursos y esperan a que un día algo quede mal configurado. Fail2Ban les cierra el paso. Lee los registros, cuenta los fallos de cada dirección y, cuando una pasa de la raya, la bloquea en el cortafuegos durante un tiempo. Sin que tengas que hacer nada.

La defensa más fuerte es no exponer SSH. Si te lo puedes permitir, deja el puerto cerrado al público y entra a través de una VPN como WireGuard. Fail2Ban no sustituye eso, pero es mucho más sencillo y protege igual cualquier otro servicio con contraseña.

Lo que necesitas

Un servidor con un usuario con sudo y un cortafuegos en marcha; si aún no, sigue los primeros pasos de un servidor Linux. Para la prueba final viene bien una segunda máquina con otra IP (un móvil con datos y una app de terminal también vale): la idea es que la bloqueada sea ella y no tú.

Paso 1: instalar

Ubuntu

sudo apt update
sudo apt install fail2ban

Debian

Además de Fail2Ban, instala python3-systemd: Debian 12 ya no escribe los accesos en /var/log/auth.log, sino en el diario de systemd, y este módulo es el que permite a Fail2Ban leerlo.

sudo apt update
sudo apt install fail2ban python3-systemd

AlmaLinux / Rocky

Fail2Ban vive en EPEL, el repositorio de paquetes extra para la familia Red Hat. Actívalo e instala también la integración con firewalld:

sudo dnf install epel-release
sudo dnf install fail2ban fail2ban-firewalld

No lo pongas en marcha todavía: antes, tu configuración.

Paso 2: tu configuración

Fail2Ban guarda todo en /etc/fail2ban. Ahí verás un jail.conf enorme con todas las opciones y sus valores por defecto. Léelo si te pica la curiosidad, pero no lo edites: cada actualización del paquete lo reemplaza. Tus cambios van en jail.local, que se lee después y tiene la última palabra. Solo necesita lo que quieras cambiar:

sudo nano /etc/fail2ban/jail.local

/etc/fail2ban/jail.local

[DEFAULT]
# Nunca bloquear el propio servidor ni tu IP de casa u oficina
ignoreip = 127.0.0.1/8 ::1 203.0.113.4

# Cinco fallos en diez minutos: una hora fuera
maxretry = 5
findtime = 10m
bantime = 1h

# Cada reincidencia, un bloqueo más largo
bantime.increment = true

[sshd]
enabled = true

Debian

En Debian 12, indica en la sección [sshd] que lea el diario de systemd:

/etc/fail2ban/jail.local

[sshd]
enabled = true
backend = systemd

Las piezas:

  • ignoreip es tu lista blanca. Si tienes IP fija, ponla: así un día de dedos torpes no acabarás bloqueado en tu propio servidor.
  • maxretry y findtime definen qué es pasarse de la raya: tantos fallos dentro de ese margen de tiempo.
  • bantime es lo que dura el castigo. El valor de fábrica, diez minutos, apenas molesta a un bot; una hora ya es otra cosa.
  • bantime.increment hace que el bloqueo crezca con cada reincidencia. Los bots tozudos acaban fuera durante días.

Si SSH escucha en otro puerto, añade port = 4444 (o el tuyo) a la sección [sshd]; si no, Fail2Ban bloquearía el 22 y dejaría abierto el que usas.

Cárceles para otros servicios

Cada sección como [sshd] es una cárcel: la vigilancia de un servicio. Detrás de cada una hay un filtro en /etc/fail2ban/filter.d con los patrones que delatan un intento fallido en sus registros. Echa un vistazo a todos los que trae:

ls /etc/fail2ban/filter.d

Casi todos tienen ya su cárcel preparada (y apagada) en jail.conf. Para encender una, basta con nombrarla en tu jail.local. Por ejemplo, si proteges una zona de tu web con contraseña en Nginx:

/etc/fail2ban/jail.local

[nginx-http-auth]
enabled = true

Paso 3: ponerlo en marcha

sudo systemctl enable --now fail2ban

Comprueba que está vivo y qué cárceles vigila:

sudo fail2ban-client status
Status
|- Number of jail:	1
`- Jail list:	sshd

Si no arranca, el motivo suele ser un error de escritura en jail.local o un registro que no encuentra. Míralo con sudo journalctl -u fail2ban -n 50.

Paso 4: comprobar que funciona

Desde la segunda máquina, intenta entrar varias veces con un usuario inventado y contraseñas al azar:

ssh nadie@203.0.113.10

Al cabo de unos cuantos intentos, el servidor dejará de contestar a esa máquina: la conexión se quedará colgada o será rechazada de inmediato. En el servidor, pregunta a Fail2Ban:

sudo fail2ban-client status sshd
Status for the jail: sshd
|- Filter
|  |- Currently failed:	0
|  `- Total failed:	5
`- Actions
   |- Currently banned:	1
   |- Total banned:	1
   `- Banned IP list:	198.51.100.7

Ahí está tu segunda máquina. Para liberarla sin esperar:

sudo fail2ban-client set sshd unbanip 198.51.100.7

Guárdate este último comando: es el que necesitarás el día que alguien de tu equipo se bloquee a sí mismo.

Listo

Tu servidor se defiende solo: quien falla demasiado se queda fuera, y quien insiste, cada vez más tiempo. Con unas líneas más en jail.local puedes extender esa protección a tu web, tu correo o cualquier servicio que pida contraseña.

Fail2Ban es una capa más, no la única. Entrar solo con claves (SSH a fondo) y abrir solo lo imprescindible (el cortafuegos con UFW) siguen siendo la base.

X LinkedIn
¿Te ha resultado útil?

Sigue leyendo

Tu servidor web con Nginx

Tutorial / Sistemas

Tu servidor web con Nginx

Publica tu web desde tu propio servidor: instala Nginx, abre el cortafuegos, crea tu primer sitio con dominio y úsalo de puerta a tus apps.

/7 min

HTTPS gratis con Let’s Encrypt

Tutorial / Sistemas

HTTPS gratis con Let’s Encrypt

Cifra tu web en cinco minutos y olvídate: certificado gratuito de Let's Encrypt con Certbot y Nginx, que se renueva solo cada 90 días.

/5 min

Primeros pasos con un servidor Linux

Tutorial / Sistemas

Primeros pasos con un servidor Linux

Diez minutos que te ahorran disgustos: actualizar, crear tu usuario, activar el cortafuegos y preparar SSH en Ubuntu, Debian o AlmaLinux.

/7 min