Cómo proteger su servidor Linux con fail2ban

Contenidos

Una ventana de terminal estilizada que se ejecuta en una computadora portátil Linux al estilo de Ubuntu.

Con fail2ban, su computadora Linux bloquea automáticamente las direcciones IP que disponen demasiados fallos de conexión. ¡Es seguridad autorregulable! Te mostraremos cómo usarlo.

Seguridad Seguridad Seguridad

Duquesa de Windsor, Wallis Simpson, una vez dijo: «Nunca se puede ser demasiado rico o demasiado delgado». Hemos actualizado esto para nuestro mundo moderno e interconectado: nunca se puede ser demasiado cuidadoso o demasiado seguro.

Si su computadora acepta solicitudes de conexión entrantes, como Cubierta segura (SSH) conexiones, o actúa como un servidor web o de email, necesita protegerlo de ataques de fuerza bruta y adivinadores de contraseñas.

Para hacerlo, deberá monitorear las solicitudes de conexión que no ingresan a una cuenta. Si no logran autenticarse repetidamente en un período breve, se les debe prohibir realizar más intentos.

La única forma en que esto se puede lograr de manera práctica es automatizar todo el procedimiento. Con un poco de configuración simple, fail2ban gestionará el monitorear, prohibir y anular la prohibición para ti.

fail2ban se integra con el cortafuegos de Linux iptables. Hace cumplir las prohibiciones de las direcciones IP sospechosas agregando reglas al firewall. Para mantener esta explicación ordenada, estamos usando iptables con un conjunto de reglas vacío.

Desde luego, si le preocupa la seguridad, probablemente tenga un firewall configurado con un conjunto de reglas bien poblado. fail2ban solamente agrega y elimina sus propias reglas—Sus funciones regulares de firewall permanecerán intactas.

Podemos ver nuestro conjunto de reglas vacío usando este comando:

sudo iptables -L

RELACIONADO: La guía para principiantes de iptables, el cortafuegos de Linux

Instalación de fail2ban

Instalando fail2ban es simple en todas las distribuciones que usamos para investigar este post. En Ubuntu 20.04, el comando es el siguiente:

sudo apt-get install fail2ban

En Fedora 32, escriba:

sudo dnf install fail2ban

En Manjaro 20.0.1, usamos pacman:

sudo pacman -Sy fail2ban

Configuración de fail2ban

los fail2ban La instalación contiene un archivo de configuración predeterminado llamado jail.conf. Este archivo se sobrescribe cuando fail2ban se actualiza, por lo que perderemos los cambios si personalizamos este archivo.

En su lugar, copiaremos el archivo jail.conf a uno llamado jail.local. Al poner nuestros cambios de configuración en jail.local, persistirán en las actualizaciones. Ambos archivos son leídos automáticamente por fail2ban.

Así es como se copia el archivo:

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

Ahora abra el archivo en su editor favorito. Vamos a utilizar gedit:

sudo gedit /etc/fail2ban/jail.local

Buscaremos dos secciones en el archivo: [DEFAULT] y [sshd]. A pesar de esto, tenga cuidado de hallar las secciones reales. Esas etiquetas además aparecen cerca de la parte de arriba en una sección que las describe, pero eso no es lo que queremos.

/etc/fail2ban/jail.local se abrió en una ventana de gedit.

Encontrarás el [DEFAULT] sección en algún lugar alrededor de la línea 40. Es una sección larga con muchos comentarios y explicaciones.

/etc/fail2ban/jail.local se abrió en una ventana de gedit y se desplazó hasta la línea 89.

Desplácese hacia abajo hasta la línea 90 y encontrará las siguientes cuatro configuraciones que necesita conocer:

  • ignorarip: Una lista blanca de direcciones IP que nunca serán prohibidas. Disponen una tarjeta permanente para salir gratis de la cárcel. los dirección IP localhost (127.0.0.1) está en el listado de forma predeterminada, junto con su idéntico IPv6 (::1). Si hay otras direcciones IP que sabe que nunca deberían prohibirse, agréguelas a esta lista y deje un espacio entre cada una.
  • bantime: La duración durante la cual una dirección IP está prohibida (la «m» significa minutos). Si escribe un valor sin una «m» o «h» (para horas), se tratará como segundos. Un valor de -1 prohibirá permanentemente una dirección IP. Tenga mucho cuidado de no bloquearse permanentemente.
  • tiempo de búsqueda: La cantidad de tiempo dentro del cual demasiados intentos fallidos de conexión resultarán en la prohibición de una dirección IP.
  • maxretry: El valor de «demasiados intentos fallidos».

Si se realiza una conexión desde la misma dirección IP maxretry intentos fallidos de conexión dentro del findtime período, están prohibidos durante la duración del bantime. Las únicas excepciones son las direcciones IP en el ignoreip lista.

fail2ban pone las direcciones IP en la cárcel por un período de tiempo determinado. fail2ban admite muchas cárceles diferentes, y cada una de ellas representa que la configuración se aplica a un solo tipo de conexión. Esto le posibilita tener diferentes configuraciones para varios tipos de conexión. O puedes tener fail2ban supervisar solo un conjunto escogido de tipos de conexión.

Puede que lo hayas adivinado por el [DEFAULT] nombre de la sección, pero las configuraciones que hemos visto son las predeterminadas. Ahora, veamos la configuración de la cárcel SSH.

RELACIONADO: Cómo editar archivos de texto gráficamente en Linux con gedit

Configurar una cárcel

Las cárceles le posibilitan mover tipos de conexión dentro y fuera de fail2ban's vigilancia. Si la configuración predeterminada no coincide con la que desea que se aplique a la cárcel, puede determinar valores específicos para bantime, findtime, y maxretry.

Desplácese hacia abajo hasta la línea 280 y verá el [sshd] sección.

/etc/fail2ban/jail.local se abrió en una ventana de gedit y se desplazó hasta la línea 280.

Aquí es donde puede determinar valores para la jaula de conexión SSH. Para incluir esta cárcel en el monitoreo y prohibición, tenemos que escribir la próxima línea:

enabled = true

Además escribimos esta línea:

maxretry = 3

La configuración predeterminada era cinco, pero queremos ser más cautelosos con las conexiones SSH. Lo bajamos a tres, y después guardamos y cerramos el archivo.

Agregamos esta cárcel a fail2ban's monitoreo y anuló una de las configuraciones predeterminadas. Una cárcel puede usar una combinación de configuraciones predeterminadas y específicas de la cárcel.

Habilitando fail2ban

Hasta ahora, hemos instalado fail2ban y lo configuré. Ahora, tenemos que habilitarlo para que se ejecute como un servicio de inicio automático. Después, debemos probarlo para asegurarnos de que funciona como se esperaba.

Para permitir fail2ban como servicio, utilizamos el systemctl mando:

sudo systemctl enable fail2ban

Además lo usamos para iniciar el servicio:

sudo systemctl start fail2ban

Podemos chequear el estado del servicio usando systemctl, además:

sudo systemctl status fail2ban.service

Todo se ve bien, tenemos luz verde, por lo tanto todo está bien.

Veamos si fail2ban está de acuerdo:

sudo fail2ban-client status

Esto refleja lo que configuramos. Hemos habilitado una sola cárcel, llamada [sshd]. Si incluimos el nombre de la cárcel con nuestro comando anterior, podemos echarle un vistazo más profundo:

sudo fail2ban-client status sshd

Esto enumera el número de fallas y direcciones IP prohibidas. Desde luego, todas las estadísticas son cero en este momento.

Probando nuestra cárcel

En otra computadora, haremos una solicitud de conexión SSH a nuestra máquina de prueba y escribiremos mal la contraseña a propósito. Obtiene tres intentos para obtener la contraseña correcta en cada intento de conexión.

los maxretry El valor se activará después de tres intentos fallidos de conexión, no tres intentos fallidos de contraseña. Por eso, tenemos que escribir una contraseña incorrecta tres veces para fallar el intento de conexión.

Después haremos otro intento de conexión y escribiremos la contraseña incorrectamente otras tres veces. El primer intento de contraseña incorrecta de la tercera solicitud de conexión debería activarse fail2ban.

Después de la primera contraseña incorrecta en la tercera solicitud de conexión, no obtenemos una respuesta de la máquina remota. No obtenemos ninguna explicación; solo tenemos el hombro frío.

Debe presionar Ctrl + C para volver al símbolo del sistema. Si lo intentamos una vez más, obtendremos una respuesta distinto:

ssh [email protected]

Previamente, el mensaje de error era «Permiso denegado». Esta vez, la conexión se rechaza por completo. Somos persona non grata. Nos han prohibido.

Veamos los detalles del [sshd] cárcel de nuevo:

sudo fail2ban-client status sshd

Hubo tres fallas y una dirección IP (192.168.4.25) fue prohibida.

Como ya mencionamos previamente, fail2ban hace cumplir las prohibiciones agregando reglas al conjunto de reglas del firewall. Echemos otro vistazo al conjunto de reglas (antes estaba vacío):

sudo iptables -L

Se ha agregado una regla a la política INPUT, que envía tráfico SSH al f2b-sshd cadena. La regla en el f2b-sshd La cadena rechaza las conexiones SSH de 192.168.4.25. No modificamos la configuración predeterminada para bantime, por lo que, en 10 minutos, esa dirección IP se anulará y podrá realizar nuevas solicitudes de conexión.

Si establece una extensión de la prohibición más larga (como varias horas), pero desea permitir que una dirección IP realice otra solicitud de conexión antes, puede liberarla antes.

Escribimos lo siguiente para hacer esto:

sudo fail2ban-client set sshd unbanip 192.168.5.25

En nuestra computadora remota, si realizamos otra solicitud de conexión SSH y escribimos la contraseña correcta, lograremos conectarnos:

ssh [email protected]

Simple y eficaz

Lo más simple suele ser mejor y fail2ban es una elegante solución a un obstáculo complicado. Necesita muy poca configuración y apenas impone una sobrecarga operativa, ni para usted ni para su computadora.

Suscribite a nuestro Newsletter

No te enviaremos correo SPAM. Lo odiamos tanto como tú.