Búsqueda de sitios web

Cómo instalar y configurar Fail2Ban para proteger el servidor Linux


Esta guía detallada le enseña qué es Fail2Ban, cómo configurarlo y cómo usarlo para proporcionar una capa adicional de seguridad en su sistema Linux.

¿Qué es Fail2Ban?

Si ha habilitado SSH, verifique el historial de inicio de sesión de su servidor Linux. Te sorprenderá ver una gran cantidad de IP que intentan iniciar sesión en tu servidor a través de SSH.

Si no cuenta con ningún mecanismo para disuadir estos intentos de inicio de sesión, su sistema es susceptible a un ataque de fuerza bruta. Básicamente, un script/bot seguirá intentando conectar SSH a su sistema probando varias combinaciones de nombre de usuario y contraseñas.

Aquí es donde entra en escena una herramienta como Fail2Ban. Fail2Ban es un software gratuito y de código abierto que ayuda a proteger su servidor Linux contra inicios de sesión maliciosos. Fail2Ban prohibirá la IP (durante un tiempo determinado) si hay una cierta cantidad de intentos fallidos de inicio de sesión.

Fail2Ban funciona de inmediato con la configuración básica, pero también es extremadamente configurable. Puede modificarlo a su gusto y crear filtros y reglas según sus necesidades.

¿Suena interesante? ¿Por qué no probar Fail2Ban? Lea y siga el resto del artículo y pruebe Fail2Ban usted mismo.

Instalación de Fail2Ban en Linux

Puedes adivinar la popularidad de Fail2Ban por el hecho de que está disponible en los repositorios oficiales de las principales distribuciones de Linux. Esto hace que la instalación de Fail2Ban sea una tarea sencilla.

Instale Fail2Ban en CentOS y Red Hat

Debe ser usuario root o sudo para poder instalar nuevo software en su sistema.

Debe asegurarse de que su sistema esté actualizado y de tener instalado el repositorio EPEL.

sudo yum update && sudo yum install epel-release

Ahora puedes instalar Fail2Ban con el siguiente comando:

sudo yum install fail2ban

Instale Fail2Ban en Ubuntu y Debian

Primero, asegúrese de que su sistema esté actualizado:

sudo apt update && sudo apt upgrade -y

Ahora, instala Fail2Ban con este comando:

sudo apt install fail2ban

Comprender el archivo de configuración Fail2Ban

Hay dos archivos de configuración principales en Fail2Ban: /etc/fail2ban/fail2ban.conf y /etc/fail2ban/jail.conf. Déjame explicarte lo que hacen.

/etc/fail2ban/fail2ban.conf: este es el archivo de configuración para los ajustes operativos del demonio Fail2Ban. Aquí se definen configuraciones como nivel de registro, archivo de registro, socket y archivo pid.

/etc/fail2ban/jail.conf: aquí es donde ocurre toda la magia. Este es el archivo donde puede configurar cosas como el tiempo de prohibición predeterminado, el número de reintentos antes de prohibir una IP, incluir IP en la lista blanca, información de envío de correo, etc. Básicamente, usted controla el comportamiento de Fail2Ban desde este archivo.

Ahora, antes de cambiar estos archivos, Fail2Ban recomienda hacer una copia con el archivo .local para estos archivos de configuración. Esto se debe a que los archivos de configuración predeterminados se pueden sobrescribir en las actualizaciones y perderá todas sus configuraciones.

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

Ahora comprendamos el archivo jail.conf. Si usa el comando less para leer este archivo grande, puede parecer bastante confuso. El archivo conf intenta explicar todo con demasiados comentarios. Entonces, déjame simplificarte esto.

El archivo jail.conf se divide en servicios. Hay una sección [Predeterminada] y se aplica a todos los servicios. Y luego podrás ver varios servicios con sus respectivas configuraciones (si las hay). Todos estos servicios están entre paréntesis. Verás secciones como [sshd], [apache-auth], [squid], etc.

Si elimino los comentarios, la sección predeterminada se ve así:

[DEFAULT]
ignorecommand =
bantime = 10m
findtime = 10m
maxretry = 5
backend = auto
usedns = warn
logencoding = auto
enabled = false
mode = normal
filter = %(name)s[mode=%(mode)s]
destemail = root@localhost
sender = root@
mta = sendmail
protocol = tcp
chain =
port = 0:65535
fail2ban_agent = Fail2Ban/%(fail2ban_version)s
banaction = iptables-multiport
banaction_allports = iptables-allports
action_abuseipdb = abuseipdb
action = %(action_)s

Déjame decirte el significado de algunos de estos parámetros.

  • bantime: establece la duración de la prohibición. El valor predeterminado es 10 minutos.

  • findtime: La ventana en la que se realizará la acción sobre una IP. El valor predeterminado es 10 minutos. Supongamos que una determinada IP intentó un inicio de sesión incorrecto a las 10:30. Si la misma IP alcanza el número máximo de reintentos antes de las 10:40, será baneada. De lo contrario, el siguiente intento fallido después de las 10:40 se contará como primer intento fallido.

  • maxretry: el número de reintentos fallidos antes de que se realice una acción

  • usedns: la configuración "advertir" intenta utilizar DNS inverso para buscar el nombre de host y prohibirlo usando el nombre de host. Configurarlo en no prohibirá las IP, no el nombre de host.

  • destemail: La dirección de correo electrónico a la que se enviarán las alertas (es necesario configurarlo)

  • remitente: el nombre del remitente en el correo electrónico de notificación

  • mta: Agente de transferencia de correo utilizado para notificaciones por correo electrónico

  • banaction: este parámetro utiliza el archivo /etc/fail2ban/action.d/iptables-multiport.conf para configurar la acción después del máximo de reintentos fallidos.

  • protocolo: el tipo de tráfico que se eliminará después de la prohibición

Si desea realizar algún cambio en cualquier cárcel (o en todas las cárceles), como el número máximo de reintentos, el tiempo de prohibición, el tiempo de búsqueda, etc., debe editar el archivo jail.local.

Cómo utilizar Fail2Ban para proteger el servidor Linux

Permítame mostrarle algunas de las formas en que puede utilizar Fail2Ban para reforzar la seguridad de Linux.

Tenga en cuenta que debe ser usuario root o tener acceso sudo para ejecutar los comandos fail2ban.

Habilite Fail2Ban en su servidor y verifique todas las cárceles en ejecución

Puede utilizar los comandos systemd para iniciar y habilitar Fail2Ban en su servidor Linux:

systemctl start fail2ban
systemctl enable fail2ban

Una vez que Fail2Ban está habilitado, puedes ver el estado y las cárceles activas con el comando fail2ban-client:

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

En caso de que se lo pregunte, sshd jail está habilitado de forma predeterminada.

Ver el registro de Fail2Ban

El registro de Fail2Ban se encuentra en /var/log/fail2ban.log. Los archivos de registro tienen el siguiente formato:

2019-03-25 07:09:08,004 fail2ban.filter [25630]: INFO [sshd] Found 139.59.69.76 – 2019-03-25 07:09:07
2019-03-25 07:09:36,756 fail2ban.filter [25630]: INFO [sshd] Found 159.89.205.213 – 2019-03-25 07:09:36
2019-03-25 07:09:36,757 fail2ban.filter [25630]: INFO [sshd] Found 159.89.205.213 – 2019-03-25 07:09:36
2019-03-25 07:09:36,774 fail2ban.actions [25630]: NOTICE [sshd] Ban 159.89.205.213
2019-03-25 07:09:36,956 fail2ban.filter [25630]: INFO [sshd] Found 182.70.253.202 – 2019-03-25 07:09:36
2019-03-25 07:09:36,957 fail2ban.filter [25630]: INFO [sshd] Found 182.70.253.202 – 2019-03-25 07:09:36
2019-03-25 07:09:36,981 fail2ban.actions [25630]: NOTICE [sshd] Ban 182.70.253.202
2019-03-25 07:09:37,247 fail2ban.filter [25630]: INFO [sshd] Found 112.64.214.90 – 2019-03-25 07:09:37
2019-03-25 07:09:37,248 fail2ban.filter [25630]: INFO [sshd] Found 112.64.214.90 – 2019-03-25 07:09:37
2019-03-25 07:09:37,589 fail2ban.actions [25630]: NOTICE [sshd] Ban 112.64.214.90

Puede ver que identifica las IP y las prohíbe cuando cruzan el umbral de reintento máximo.

Ver IP prohibidas por Fail2Ban

Una forma es comprobar el estado de una determinada cárcel. Puede utilizar el cliente Fail2Ban para este propósito.

fail2ban-client status <jail_name>

Por ejemplo, si tiene que ver todos los inicios de sesión ssh incorrectos prohibidos por Fail2Ban, puede usarlo de la siguiente manera. El resultado mostraría el total de intentos fallidos y el total de IP prohibidas.

root@test-server:~# fail2ban-client status sshd
Status for the jail: sshd
|- Filter
| |- Currently failed: 14
| |- Total failed: 715
| `- File list: /var/log/auth.log
`- Actions
|- Currently banned: 7
|- Total banned: 17
`- Banned IP list: 177.47.115.67 118.130.133.110 68.183.62.73 202.65.154.110 106.12.102.114 61.184.247.3 218.92.1.150

El sistema que intenta iniciar sesión a través de SSH desde el inicio de sesión fallido debería recibir un error como este

ssh: connect to host 93.233.73.133 port 22: Connection refused

Cómo banear permanentemente una IP con Fail2Ban

A estas alturas ya sabes que la prohibición impuesta a una IP por Fail2Ban es temporal. De forma predeterminada, es por 10 minutos y el atacante puede intentar iniciar sesión nuevamente después de 10 minutos.

Esto plantea un riesgo de seguridad porque los atacantes podrían utilizar un script que intente iniciar sesión después de un intervalo de 10 minutos.

Entonces, ¿cómo se puede poner una prohibición permanente usando Fail2Ban? No hay una respuesta clara para eso.

A partir de la versión 0.11 de Fail2Ban, el tiempo de prohibición se calculará automáticamente y el tiempo de prohibición de las IP persistentes aumentará exponencialmente.

Pero si verifica su versión de Fail2Ban, probablemente esté ejecutando la versión 0.10.

fail2ban-server --version 
Fail2Ban v0.10.2
Copyright (c) 2004-2008 Cyril Jaquier, 2008- Fail2Ban Contributors
Copyright of modifications held by their respective authors.
Licensed under the GNU General Public License v2 (GPL).

En versiones anteriores, podías usar un bantime negativo (bantime=-1) y eso habría sido equivalente a un ban permanente, pero si intentas este método, probablemente verás un error como 'Iniciando fail2ban: ERROR NOK: (' La imagen del disco de la base de datos tiene un formato incorrecto',)'.

Una solución no tan clara sería aumentar el tiempo de descanso a algo así como 1 día, 1 semana, 1 mes o 1 año. Esto podría solucionar el problema hasta que la nueva versión esté disponible en su sistema.

Cómo desbanear la IP bloqueada por Fail2Ban

Primero verifique si la IP está bloqueada o no. Dado que Fail2Ban funciona en iptables, puede consultar iptable para ver las IP que su servidor prohíbe:

iptables -n -L

Es posible que tengas que usar el comando grep si hay demasiadas IP prohibidas.

Si encuentra la dirección IP especificada en el resultado, está prohibida:

Entonces, el siguiente paso es encontrar qué “cárcel” está prohibiendo dicha propiedad intelectual. Tendrás que usar el comando Grep con los registros de fail2ban aquí.

Como puede ver en el resultado a continuación, sshd jail está prohibiendo la IP.

root@test-server:~# grep -E ‘Ban.*61.184.247.3’ /var/log/fail2ban.log
2019-03-14 13:09:25,029 fail2ban.actions [25630]: NOTICE [sshd] Ban 61.184.247.3
2019-03-14 13:52:56,745 fail2ban.actions [25630]: NOTICE [sshd] Ban 61.184.247.3

Ahora que conoce el nombre de la cárcel que bloquea la IP, puede desbloquear la IP utilizando el cliente fail2ban:

fail2ban-client set <jail_name> unbanip <ip_address>

Cómo incluir IP en la lista blanca en Fail2Ban

No será bueno que te prohíbas, ¿verdad? Para ignorar que una dirección IP sea prohibida por la sesión actual de Fail2Ban, puede incluir la IP en la lista blanca usando un comando como este:

fail2ban-client set <JAIL_NAME> addignoreip <IP_Address>

Puede encontrar su dirección IP en Linux fácilmente. En mi caso fue

sudo fail2ban-client set sshd addignoreip 203.93.83.113
These IP addresses/networks are ignored:
`- 203.93.83.113

Si desea incluir permanentemente la IP en la lista blanca, debe editar el archivo de configuración de la cárcel. Vaya a dicha sección de cárcel y agregue la línea ignoreip como esta:

ignoreip = 127.0.0.1/8 <IP_TO_BE_WHITELISTED>

Si desea incluir una IP en la lista blanca de todas las cárceles de su sistema, sería una mejor idea editar el archivo /etc/fail2ban/jail.local y agregar una línea debajo de la sección DEFAULT como lo que vimos arriba.

Tendrás que reiniciar Fail2Ban para que este cambio entre en vigor.

Cómo ver la lista blanca de IP de una cárcel

Puedes ver todas las IP incluidas en la lista blanca de una cárcel usando este comando:

fail2ban-client get <JAIL_NAME> ignoreip

Debería mostrar todas las IP ignoradas por Fail2Ban para esa cárcel:

sudo fail2ban-client set sshd addignoreip 203.93.83.113
These IP addresses/networks are ignored:
|- 127.0.0.0/8
|- ::1
`- 203.93.83.113

Cómo eliminar una IP de la lista blanca de Fail2Ban

Si está eliminando la IP de la lista blanca de una cárcel determinada, puede usar este comando:

fail2ban-client set <JAIL_NAME> delignoreip <IP_Address>

Si desea eliminar permanentemente la IP, debe editar el archivo /etc/fail2ban/jail.local.

¿Qué más?

Puedes hacer muchas más cosas con Fail2Ban. Esta guía le brinda los conceptos básicos para comenzar con Fail2Ban. No he tocado temas como acciones, notificaciones por correo, filtros, etc.

Una vez que conozca los conceptos básicos de Fail2Ban, podrá comenzar a explorar más al respecto. Por el momento, simplemente juegue con él y agregue una capa adicional de seguridad a SSH en su servidor Linux.