Cómo proteger su servidor Linux con fail2ban

Publicado: 2022-01-29
Una ventana de terminal estilizada que se ejecuta en una computadora portátil Linux estilo Ubuntu.
Fatmawati Achmad Zaenuri/Shutterstock

Con fail2ban , su computadora Linux bloquea automáticamente las direcciones IP que tienen demasiadas fallas de conexión. ¡Es seguridad autorregulada! Le mostraremos cómo usarlo.

Seguridad Seguridad Seguridad

La duquesa de Windsor, Wallis Simpson, dijo una vez: "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 conexiones Secure Shell (SSH), o actúa como un servidor web o de correo electrónico, debe protegerla de ataques de fuerza bruta y adivinadores de contraseñas.

Para hacerlo, deberá monitorear las solicitudes de conexión que no logran ingresar a una cuenta. Si fallan repetidamente en la autenticación dentro de un período corto, se les debe prohibir realizar más intentos.

La única forma en que esto se puede lograr en la práctica es automatizar todo el proceso. Con un poco de configuración simple, fail2ban administrará el monitoreo, la prohibición y la cancelación por usted.

Anuncio publicitario

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

Por supuesto, si le preocupa la seguridad, probablemente tenga un firewall configurado con un conjunto de reglas completo. fail2ban solo 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 firewall de Linux

Instalando fail2ban

Instalar fail2ban es simple en todas las distribuciones que usamos para investigar este artículo. En Ubuntu 20.04, el comando es el siguiente:

 sudo apt-get install fail2ban 

En Fedora 32, escriba:

 sudo dnf instalar fail2ban 

En Manjaro 20.0.1, usamos pacman :

 sudo pacman -Sy fail2ban 

Configuración de fail2ban

La instalación de fail2ban contiene un archivo de configuración predeterminado llamado jail.conf. Este archivo se sobrescribe cuando se actualiza fail2ban , por lo que perderemos nuestros cambios si hacemos personalizaciones en 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 entre 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 usar gedit :

 sudo gedit /etc/fail2ban/jail.local
Anuncio publicitario

Buscaremos dos secciones en el archivo: [DEFAULT] y [sshd]. Sin embargo, tenga cuidado de encontrar las secciones reales. Esas etiquetas también aparecen cerca de la parte superior en una sección que las describe, pero eso no es lo que queremos.

/etc/fail2ban/jail.local abierto en una ventana de gedit.

Encontrará la sección [DEFAULT] 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 debe conocer:

  • ignoreip: una lista blanca de direcciones IP que nunca serán prohibidas. Tienen una tarjeta permanente para salir de la cárcel gratis. La dirección IP del host local ( 127.0.0.1 ) está en la lista de forma predeterminada, junto con su equivalente IPv6 ( ::1 ). Si hay otras direcciones IP que sabe que nunca deben prohibirse, agréguelas a esta lista y deje un espacio entre cada una.
  • bantime: La duración de la prohibición de una dirección IP (la "m" significa minutos). Si escribe un valor sin "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.
  • findtime: la cantidad de tiempo dentro del cual demasiados intentos de conexión fallidos resultarán en la prohibición de una dirección IP.
  • maxretry: el valor de "demasiados intentos fallidos".

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

fail2ban pone las direcciones IP en la cárcel por un período de tiempo determinado. fail2ban admite muchas jaulas diferentes, y cada una representa que la configuración se aplica a un solo tipo de conexión. Esto le permite tener diferentes configuraciones para varios tipos de conexión. O puede hacer que fail2ban monitoree solo un conjunto elegido de tipos de conexión.

Es posible que lo haya adivinado por el nombre de la sección [DEFAULT], pero las configuraciones que hemos visto son las predeterminadas. Ahora, echemos un vistazo a la configuración de la cárcel SSH.

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

Configuración de una cárcel

Las cárceles le permiten mover tipos de conexión dentro y fuera del monitoreo de fail2ban's . Si la configuración predeterminada no coincide con la que desea aplicar a la cárcel, puede establecer valores específicos para bantime , findtime y maxretry .

Anuncio publicitario

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

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

Aquí es donde puede establecer valores para la cárcel de conexión SSH. Para incluir este jail en el monitoreo y baneo, tenemos que escribir la siguiente línea:

 habilitado = verdadero

También escribimos esta línea:

 intento máximo = 3

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

Agregamos este jail al monitoreo fail2ban's y anulamos una de las configuraciones predeterminadas. Una cárcel puede usar una combinación de configuraciones predeterminadas y específicas de la cárcel.

Habilitación de fail2ban

Hasta ahora, instalamos fail2ban y lo configuramos. Ahora, tenemos que habilitarlo para que se ejecute como un servicio de inicio automático. Luego, debemos probarlo para asegurarnos de que funciona como se esperaba.

Anuncio publicitario

Para habilitar fail2ban como servicio, usamos el comando systemctl :

 sudo systemctl habilitar fail2ban

También lo usamos para iniciar el servicio:

 sudo systemctl start fail2ban 

También podemos verificar el estado del servicio usando systemctl :

 sudo systemctl estado fail2ban.servicio 

Todo se ve bien, tenemos luz verde, así que todo está bien.

A ver si fail2ban está de acuerdo:

 sudo fail2ban-estado del cliente 

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-estado del cliente sshd 

Esto enumera la cantidad de fallas y las direcciones IP prohibidas. Por supuesto, 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.

Anuncio publicitario

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

Luego 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 desencadenar fail2ban.

Después de la primera contraseña incorrecta en la tercera solicitud de conexión, no recibimos una respuesta de la máquina remota. No recibimos ninguna explicación; solo recibimos 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 diferente:

 ssh [email protected] 

Anteriormente, el mensaje de error era "Permiso denegado". Esta vez, la conexión es rechazada por completo. Somos persona non grata. Nos han prohibido.

Veamos los detalles de la cárcel [sshd] nuevamente:

 sudo fail2ban-estado del cliente sshd 

Anuncio publicitario

Hubo tres fallas y se prohibió una dirección IP (192.168.4.25).

Como mencionamos anteriormente, 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 agregó una regla a la política INPUT, enviando tráfico SSH a la cadena f2b-sshd . La regla en la cadena f2b-sshd rechaza las conexiones SSH de 192.168.4.25. No modificamos la configuración predeterminada para el tiempo de bantime , por lo que, en 10 minutos, esa dirección IP dejará de estar baneada y podrá realizar nuevas solicitudes de conexión.

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

Escribimos lo siguiente para hacer esto:

 sudo fail2ban-cliente conjunto sshd unbanip 192.168.5.25 

En nuestra computadora remota, si hacemos otra solicitud de conexión SSH y escribimos la contraseña correcta, se nos permitirá conectarnos:

 ssh [email protected] 

Simple y efectivo

Más simple suele ser mejor, y fail2ban es una solución elegante para un problema complicado. Requiere muy poca configuración y apenas impone una sobrecarga operativa, para usted o su computadora.

RELACIONADO: Las mejores computadoras portátiles Linux para desarrolladores y entusiastas