GNU/Linux >> Tutoriales Linux >  >> Linux

Proteja su servidor Linux con Fail2Ban [Guía para principiantes]

¿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 direcciones IP que intentan iniciar sesión en tu servidor a través de SSH.

Si no tiene un 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 (por un tiempo determinado) si hay una cierta cantidad de intentos de inicio de sesión fallidos.

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.

Instalando Fail2Ban en Linux

Puede 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.

Instalar Fail2Ban en CentOS y Red Hat

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

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

sudo yum update && sudo yum install epel-release

Ahora puedes instalar Fail2Ban con el siguiente comando:

sudo yum install fail2ban

Instalar 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

Comprensión del archivo de configuración de 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 la configuración operativa del demonio Fail2Ban. Las configuraciones como nivel de registro, archivo de registro, socket y archivo pid se definen aquí.

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

Ahora, antes de ir y cambiar estos archivos, Fail2Ban recomienda hacer una copia con un archivo .local para estos archivos conf. Es porque 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 puede ver varios servicios con sus respectivas configuraciones (si corresponde). 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 = [email protected]
sender = [email protected]
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:Establezca 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 cierta IP intentó un mal inicio de sesión 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 próximo intento fallido después de las 10:40 se contará como primer intento fallido.
  • maxretry:el número de reintentos fallidos antes de realizar una acción
  • usedns:la configuración de "advertencia" intenta usar DNS inverso para buscar el nombre de host y prohibirlo usando el nombre de host. Establecerlo en no prohibirá las direcciones IP, no el nombre de host.
  • destemail:La dirección de correo electrónico a la que se enviarán las alertas (debe configurarse)
  • remitente:el nombre del remitente en el correo electrónico de notificación
  • mta:Agente de transferencia de correo utilizado para el correo electrónico de notificación
  • banaction:este parámetro usa el archivo /etc/fail2ban/action.d/iptables-multiport.conf para establecer 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 cambios para cualquier cárcel (o para todas las cárceles), como el número máximo de reintentos, el tiempo de bloqueo, el tiempo de búsqueda, etc., debe editar el archivo jail.local.

Cómo usar Fail2Ban para proteger el servidor Linux

Déjame mostrarte algunas de las formas en que puedes usar Fail2Ban para fortalecer 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 usar los comandos systemd para iniciar y habilitar Fail2Ban en su servidor Linux:

systemctl start fail2ban
systemctl enable fail2ban

Una vez que Fail2Ban está habilitado, puede 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, la cárcel sshd está habilitada de manera predeterminada.

Ver 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 bloquea cuando cruzan el umbral de reintento máximo.

Ver IPs prohibidas por Fail2Ban

Una forma es verificar el estado de una determinada cárcel. Puede usar 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 direcciones IP prohibidas.

[email protected]:~# 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 prohibir 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 representa un riesgo para la seguridad porque los atacantes podrían usar un script que intente iniciar sesión después de un intervalo de 10 minutos.

Entonces, ¿cómo pones 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 bloqueo se calculará automáticamente y las IP persistentes verán incrementado su tiempo de bloqueo exponencialmente.

Pero si revisa 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ía usar un tiempo de bloqueo negativo (tiempo de bloqueo =-1) y eso hubiera sido equivalente a un bloqueo permanente, pero si prueba este método, probablemente verá 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 limpia sería aumentar el tiempo de baneo a algo así como 1 día, 1 semana, 1 mes o 1 año. Esto podría evitar el problema hasta que la nueva versión esté disponible en su sistema.

Cómo desbanear una IP bloqueada por Fail2Ban

Primero verifique si la IP está siendo bloqueada o no. Dado que Fail2Ban funciona en las iptables, puede consultar la iptable para ver las direcciones IP prohibidas por su servidor:

iptables -n -L

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

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

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

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

[email protected]:~# 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 desbanear la IP usando 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 banees a ti mismo, ¿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 en la lista blanca una IP 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 PREDETERMINADA como la que vimos anteriormente.

Deberá reiniciar Fail2Ban para que este cambio entre en vigor.

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

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

fail2ban-client get <JAIL_NAME> ignoreip

Debería mostrar todas las direcciones 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 determinada cárcel, puede usar este comando:

fail2ban-client set <JAIL_NAME> delignoreip <IP_Address>

Si desea eliminar la IP de forma permanente, 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 de correo, filtros, etc.

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


Linux
  1. Vea las conexiones de red de su servidor Linux con netstat

  2. Asegure sus contenedores con SELinux

  3. Cómo proteger sus servicios de correo electrónico de Linux con SSL/TLS

  4. 6 herramientas de código abierto imprescindibles para proteger su servidor Linux

  5. Cómo proteger su servidor Ubuntu con CSF Firewall

Asegure su privacidad en línea con estas distribuciones de Linux

Asegure su red Linux con firewall-cmd

ReaR:Respalde y recupere su servidor Linux con confianza

Cómo asegurar servidores Linux con SE Linux

10 consejos prácticos de fortalecimiento de SSH para proteger su servidor Linux

Cómo proteger SSH con Fail2Ban