Tabla de contenidos
Con fail2ban
, su computadora Linux bloquea automáticamente las direcciones IP que tienen demasiados fallos de conexión. ¡Es seguridad autorreguladora! Te mostraremos cómo usarlo.
Seguridad Seguridad Seguridad
La duquesa de Windsor, Wallis Simpson, dijo una vez: «Nunca puedes 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 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 automatizando todo el proceso. Con un poco de configuración simple, fail2ban
administrará el monitoreo, la prohibición y la anulación de la prohibición por usted.
fail2ban
se integra con el firewall de Linux iptables
. Hace cumplir las prohibiciones de las direcciones IP sospechosas agregando reglas al firewall. Para mantener esta explicación ordenada, usamos 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 bien poblado. 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
Instalación de fail2ban
La instalación 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 fail2ban
instalación contiene un archivo de configuración predeterminado llamado jail.conf. Este archivo se sobrescribe cuando fail2ban
se actualiza, por lo que perderemos nuestros cambios si personalizamos este archivo.
En su lugar, copiaremos el archivo jail.conf en 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 copiar 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]. 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.
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.
Desplácese hacia abajo hasta la línea 90 y encontrará las siguientes cuatro configuraciones que necesita conocer:
- ignoreip: una lista blanca de direcciones IP que nunca serán prohibidas. Tienen una tarjeta permanente para salir gratis de la cárcel. 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 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.
- findtime: 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 una conexión desde la misma dirección IP realiza maxretry
intentos de conexión fallidos dentro del findtime
período, se prohíbe mientras dure el bantime
. Las únicas excepciones son las direcciones IP de la 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 permite tener diferentes configuraciones para varios tipos de conexión. O puede hacer que fail2ban
supervise 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, veamos la configuración de la cárcel SSH.
Configurar una cárcel
Las cárceles le permiten mover tipos de conexión dentro y fuera del fail2ban's
monitoreo. Si la configuración predeterminada no coinciden con los que desea que se aplique a la cárcel, se puede establecer valores específicos para bantime
, findtime
y maxretry
.
Desplácese hacia abajo hasta la línea 280 y verá la sección [sshd].
Aquí es donde puede establecer valores para la conexión SSH. Para incluir esta cárcel en el monitoreo y prohibición, tenemos que escribir la siguiente línea:
habilitado = verdadero
También escribimos esta línea:
maxretry = 3
La configuración predeterminada era cinco, pero queremos ser más cautelosos con las conexiones SSH. Lo reducimos a tres, y luego guardamos y cerramos el archivo.
Agregamos esta cárcel al fail2ban's
monitoreo 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.
Habilitando fail2ban
Hasta ahora, lo hemos instalado fail2ban
y configurado. Ahora, tenemos que habilitarlo para que se ejecute como un servicio de inicio automático. Luego, debemos probarlo para asegurarnos de que funcione como se espera.
Para habilitarlo fail2ban
como servicio, usamos el systemctl
comando :
sudo systemctl habilitar fail2ban
También lo usamos para iniciar el servicio:
sudo systemctl start fail2ban
También podemos comprobar el estado del servicio utilizando systemctl
:
sudo systemctl status fail2ban.service
Todo se ve bien, tenemos luz verde, así que todo está bien.
Veamos si fail2ban
está de acuerdo:
sudo fail2ban-estado del cliente
Esto refleja lo que configuramos. Hemos habilitado una única 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 el número de fallas y 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.
El maxretry
valor se activará después de tres intentos fallidos de conexión, no tres intentos fallidos de contraseña. Entonces, tenemos que escribir una contraseña incorrecta tres veces para fallar el 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 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 diferente:
ssh [email protected]
Anteriormente, 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 de la cárcel [sshd] nuevamente:
sudo fail2ban-estado del cliente sshd
Hubo tres fallas y una dirección IP (192.168.4.25) fue prohibida.
Como mencionamos anteriormente, fail2ban
refuerza 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 a la f2b-sshd
cadena. La regla de la f2b-sshd
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 eliminará y podrá realizar nuevas solicitudes de conexión.
Si establece una duración de la prohibición más prolongada (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 establece sshd unbanip 192.168.5.25
En nuestra computadora remota, si realizamos otra solicitud de conexión SSH y escribimos la contraseña correcta, podremos conectarnos:
ssh [email protected]
Simple y eficaz
Lo más simple suele ser mejor y fail2ban
es una solución elegante a un problema delicado. Requiere muy poca configuración y apenas impone una sobrecarga operativa, ni para usted ni para su computadora.